Ë
    ¤ehn ã                  ó¤  — U d 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	Z	ddl
Z
ddlZddlmZmZmZmZmZmZ ddlZddl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  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA er$ddlBmCZCmDZD ddlEmFZF ddlmGZG ddlHmIZImJZJmKZKmLZLmMZMmNZN dZOdZPdZQdZRd ZSd!ZTd"eP› d#eQ› d#eR› d#eS› d#e?d$   d%z  › d#e?d&   › d'eT› d(�ZUd)eP› d#eQ› d*�ZVd+eP› d#eQ› d#eR› d#e?d$   › d#e?d&   › d,eT› d#�ZWg d-¢ZX ed.d/d/«      ZYd0eZd1<   dad2„Z[dad3„Z\d4Z]d0eZd5<   d6Z^d0eZd7<   d8Z_d0eZd9<   d:Z`d0eZd;<   d<Zad0eZd=<   dbd>„Zb G d?„ d@«      Zc G dA„ dBec«      Zd G dC„ dD«      Ze G dE„ dF«      Zf G dG„ dHefejÎ                  «      Zh e"eU«      dIdIddJdIddIddJdKddLœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dcdM„«       ZidddN„ZjdedO„ZkdfdP„ZldgdQ„ZmdhdR„Zn	 di	 	 	 	 	 	 	 djdS„Zo e#e?d&   e?dT   dUz  ¬V«       G dW„ dXef«      «       ZpdkdY„ZqdldZ„Zr G d[„ d\«      Zs G d]„ d^ep«      Zt G d_„ d`et«      Zuy)ma°  
Module contains tools for processing Stata files into DataFrames

The StataReader below was originally written by Joe Presbrey as part of PyDTA.
It has been extended and improved by Skipper Seabold from the Statsmodels
project who also developed the StataWriter and was finally added to pandas in
a once again improved version.

You can find more information on http://presbrey.mit.edu/PyDTA and
https://www.statsmodels.org/devel/
é    )Úannotations)Úabc)ÚdatetimeÚ	timedelta)ÚBytesION)ÚIOÚTYPE_CHECKINGÚAnyStrÚCallableÚFinalÚcast)Úlib)Úinfer_dtype)Úmax_len_string_array)ÚCategoricalConversionWarningÚInvalidColumnNameÚPossiblePrecisionLossÚValueLabelTypeMismatch)ÚAppenderÚdoc)Úfind_stack_level)ÚExtensionDtype)Úensure_objectÚis_numeric_dtypeÚis_string_dtype)ÚCategoricalDtype)ÚCategoricalÚDatetimeIndexÚNaTÚ	TimestampÚisnaÚto_datetimeÚto_timedelta)Ú	DataFrame)ÚIndex)Ú
RangeIndex)ÚSeries)Ú_shared_docs)Ú
get_handle)ÚHashableÚSequence)ÚTracebackType)ÚLiteral)ÚCompressionOptionsÚFilePathÚ
ReadBufferÚSelfÚStorageOptionsÚWriteBufferzîVersion of given Stata file is {version}. pandas supports importing versions 105, 108, 111 (Stata 7SE), 113 (Stata 8/9), 114 (Stata 10/11), 115 (Stata 12), 117 (Stata 13), 118 (Stata 14/15/16),and 119 (Stata 15/16, over 32,767 variables).zÌconvert_dates : bool, default True
    Convert date variables to DataFrame time values.
convert_categoricals : bool, default True
    Read value labels and convert columns to Categorical/Factor variables.a  index_col : str, optional
    Column to set as index.
convert_missing : bool, default False
    Flag indicating whether to convert missing values to their Stata
    representations.  If False, missing values are replaced with nan.
    If True, columns containing missing values are returned with
    object data types and missing values are represented by
    StataMissingValue objects.
preserve_dtypes : bool, default True
    Preserve Stata datatypes. If False, numeric data are upcast to pandas
    default types for foreign data (float64 or int64).
columns : list or None
    Columns to retain.  Columns will be returned in the given order.  None
    returns all columns.
order_categoricals : bool, default True
    Flag indicating whether converted categorical data are ordered.zzchunksize : int, default None
    Return StataReader object for iterations, returns chunks with
    given number of lines.z=iterator : bool, default False
    Return StataReader object.zúNotes
-----
Categorical variables read through an iterator may not have the same
categories and dtype. This occurs when  a variable stored in a DTA
file is associated to an incomplete set of value labels that only
label a strict subset of the values.a>  
Read Stata file into DataFrame.

Parameters
----------
filepath_or_buffer : str, path object or file-like object
    Any valid string path is acceptable. The string could be a URL. Valid
    URL schemes include http, ftp, s3, and file. For file URLs, a host is
    expected. A local file could be: ``file://localhost/path/to/table.dta``.

    If you want to pass in a path object, pandas accepts any ``os.PathLike``.

    By file-like object, we refer to objects with a ``read()`` method,
    such as a file handle (e.g. via builtin ``open`` function)
    or ``StringIO``.
ú
Údecompression_optionsÚfilepath_or_bufferÚstorage_optionsz¼

Returns
-------
DataFrame or pandas.api.typing.StataReader

See Also
--------
io.stata.StataReader : Low-level reader for Stata data files.
DataFrame.to_stata: Export Stata data files.

a  

Examples
--------

Creating a dummy stata for this example

>>> df = pd.DataFrame({'animal': ['falcon', 'parrot', 'falcon', 'parrot'],
...                     'speed': [350, 18, 361, 15]})  # doctest: +SKIP
>>> df.to_stata('animals.dta')  # doctest: +SKIP

Read a Stata dta file:

>>> df = pd.read_stata('animals.dta')  # doctest: +SKIP

Read a Stata dta file in 10,000 line chunks:

>>> values = np.random.randint(0, 10, size=(20_000, 1), dtype="uint8")  # doctest: +SKIP
>>> df = pd.DataFrame(values, columns=["i"])  # doctest: +SKIP
>>> df.to_stata('filename.dta')  # doctest: +SKIP

>>> with pd.read_stata('filename.dta', chunksize=10000) as itr: # doctest: +SKIP
>>>     for chunk in itr:
...         # Operate on a single chunk, e.g., chunk.mean()
...         pass  # doctest: +SKIP
z­Reads observations from Stata file, converting them into a dataframe

Parameters
----------
nrows : int
    Number of lines to read from data file, if None read whole file.
z

Returns
-------
DataFrame
zæClass for reading Stata dta files.

Parameters
----------
path_or_buf : path (string), buffer or path object
    string, path object (pathlib.Path or py._path.local.LocalPath) or object
    implementing a binary read() functions.
z

)	ú%tcú%tCú%tdú%dú%twú%tmú%tqú%thú%tyé¨  é   r   Ústata_epochc                óÀ  ‡‡‡‡‡‡— t         j                  j                  t         j                  j                  cŠŠt         j                  t	        ddd«      z
  j
                  Št         j                  t	        ddd«      z
  j
                  Š‰dz  dz  dz  Š‰dz  dz  dz  Šd"ˆˆfd„}d"ˆˆfd„}d"ˆˆˆˆfd„}t        j                  | «      }d	}|j                  «       rd
}d| j                  |<   | j                  t        j                  «      } |j                  d«      rt        }| } |||d«      }	�nž|j                  d«      r=t        j                  dt!        «       ¬«       t#        | t$        ¬«      }	|r	t&        |	|<   |	S |j                  d«      rt        }| }
 |||
d«      }	�n+|j                  d«      r(t        j                  | dz  z   }| dz  dz  }
 |||
«      }	nò|j                  d«      r(t        j                  | dz  z   }| dz  dz   } |||«      }	n¹|j                  d«      r+t        j                  | dz  z   }| dz  dz  dz   } |||«      }	n}|j                  d«      r+t        j                  | dz  z   }| dz  dz  dz   } |||«      }	nA|j                  d«      r!| }t        j(                  | «      } |||«      }	nt+        d |› d!�«      ‚|r	t&        |	|<   |	S )#a  
    Convert from SIF to datetime. https://www.stata.com/help.cgi?datetime

    Parameters
    ----------
    dates : Series
        The Stata Internal Format date to convert to datetime according to fmt
    fmt : str
        The format to convert to. Can be, tc, td, tw, tm, tq, th, ty
        Returns

    Returns
    -------
    converted : Series
        The converted dates

    Examples
    --------
    >>> dates = pd.Series([52])
    >>> _stata_elapsed_date_to_datetime_vec(dates , "%tw")
    0   1961-01-01
    dtype: datetime64[ns]

    Notes
    -----
    datetime/c - tc
        milliseconds since 01jan1960 00:00:00.000, assuming 86,400 s/day
    datetime/C - tC - NOT IMPLEMENTED
        milliseconds since 01jan1960 00:00:00.000, adjusted for leap seconds
    date - td
        days since 01jan1960 (01jan1960 = 0)
    weekly date - tw
        weeks since 1960w1
        This assumes 52 weeks in a year, then adds 7 * remainder of the weeks.
        The datetime value is the start of the week in terms of days in the
        year, not ISO calendar weeks.
    monthly date - tm
        months since 1960m1
    quarterly date - tq
        quarters since 1960q1
    half-yearly date - th
        half-years since 1960h1 yearly
    date - ty
        years since 0000
    rA   rB   é   i  éè  c                ó  •— | j                  «       ‰k  r&| j                  «       ‰kD  rt        d| z  |z   d¬«      S t        | dd«      }t	        t        | |«      D ��cg c]  \  }}t        ||d«      ‘Œ c}}|¬«      S c c}}w )zú
        Convert year and month to datetimes, using pandas vectorized versions
        when the date range falls within the range supported by pandas.
        Otherwise it falls back to a slower but more robust method
        using datetime.
        éd   z%Y%m©ÚformatÚindexNrB   ©rK   )ÚmaxÚminr"   Úgetattrr'   Úzipr   )ÚyearÚmonthrK   ÚyÚmÚMAX_YEARÚMIN_YEARs        €€úM/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/io/stata.pyÚconvert_year_month_safezD_stata_elapsed_date_to_datetime_vec.<locals>.convert_year_month_safe!  st   ø€ ð �8‰8‹:˜Ò  T§X¡X£Z°(Ò%:Ü˜s T™z¨EÑ1¸&ÔAÐAä˜D '¨4Ó0ˆEÜ¼¸TÀ5Ó9I×J±°°Aœ8 A q¨!Õ,ÓJÐRWÔXÐXùÓJs   ÁA=
c           
     óJ  •— | j                  «       ‰dz
  k  r.| j                  «       ‰kD  rt        | d¬«      t        |d¬«      z   S t	        | dd«      }t        | |«      D ��cg c](  \  }}t        |dd«      t        t        |«      ¬«      z   ‘Œ* }}}t        ||¬	«      S c c}}w )
z{
        Converts year (e.g. 1999) and days since the start of the year to a
        datetime or datetime64 Series
        rB   ú%YrI   Úd©ÚunitrK   N©ÚdaysrL   )
rM   rN   r"   r#   rO   rP   r   r   Úintr'   )rQ   r_   rK   rS   r[   ÚvaluerU   rV   s         €€rW   Úconvert_year_days_safezC_stata_elapsed_date_to_datetime_vec.<locals>.convert_year_days_safe.  s›   ø€ ð
 �8‰8‹:˜ A™Ò&¨4¯8©8«:¸Ò+@Ü˜t¨DÔ1´LÀÈCÔ4PÑPÐPä˜D '¨4Ó0ˆEäGJÈ4ÐQUÃ÷Ù?C¸qÀ!”˜˜A˜qÓ!¤I´3°q³6Ô$:Ó:ðˆEñ ô ˜% uÔ-Ð-ùós   Á"-Bc           	     óü  •— t        |dd«      }|dk(  rX|j                  «       ‰kD  s|j                  «       ‰k  r�|D �cg c]  }| t        t	        |«      ¬«      z   ‘Œ }}t        ||¬«      S |dk(  r[|j                  «       ‰kD  s|j                  «       ‰	k  r@|D �cg c]  }| t        t	        |«      dz  ¬«      z   ‘Œ }}t        ||¬«      S t        d	«      ‚t        | «      } t        ||¬
«      }| |z   S c c}w c c}w )z¾
        Convert base dates and deltas to datetimes, using pandas vectorized
        versions if the deltas satisfy restrictions required to be expressed
        as dates in pandas.
        rK   Nr[   r^   rL   ÚmsrF   )Úmicrosecondszformat not understoodr\   )	rO   rM   rN   r   r`   r'   Ú
ValueErrorr"   r#   )
ÚbaseÚdeltasr]   rK   r[   ÚvaluesÚMAX_DAY_DELTAÚMAX_MS_DELTAÚMIN_DAY_DELTAÚMIN_MS_DELTAs
         €€€€rW   Úconvert_delta_safez?_stata_elapsed_date_to_datetime_vec.<locals>.convert_delta_safe<  s÷   ø€ ô ˜ ¨Ó.ˆØ�3Š;Ø�z‰z‹|˜mÒ+¨v¯z©z«|¸mÒ/KØAGÖH¸A˜$¤´°A³Ô!7Ó7ÐH�ÐHÜ˜f¨EÔ2Ð2Ø�TŠ\Ø�z‰z‹|˜lÒ*¨f¯j©j«l¸\Ò.IàLRöØGH�Dœ9´3°q³6¸D±=ÔBÓBð�ð ô ˜f¨EÔ2Ð2äÐ4Ó5Ð5Ü˜4Ó ˆÜ˜f¨4Ô0ˆØ�f‰}Ðùò Iùòs   ¾C4Â"C9FTg      ð?©r8   Útcrd   ©r9   ÚtCz9Encountered %tC format. Leaving in Stata Internal Format.©Ú
stacklevel©Údtype)r:   Útdr;   r[   r[   ©r<   Útwé4   é   ©r=   Útmé   ©r>   Útqé   é   ©r?   Úthé   é   ©r@   Útyz	Date fmt ú not understood)Úreturnr'   )r    rN   rQ   rM   r   r_   ÚnpÚisnanÚanyÚ_valuesÚastypeÚint64Ú
startswithrC   ÚwarningsÚwarnr   r'   Úobjectr   Ú	ones_likerf   )ÚdatesÚfmtrX   rb   rn   Úbad_locsÚhas_bad_valuesrg   rd   Ú
conv_datesr_   rQ   rR   Úquarter_monthÚfirst_monthrj   rk   rU   rl   rm   rV   s                  @@@@@@rW   Ú#_stata_elapsed_date_to_datetime_vecr�   í   s®  ý€ ô\ #Ÿ™×+Ñ+¬Y¯]©]×-?Ñ-?Ð€HˆhÜ—]‘]¤X¨d°A°qÓ%9Ñ9×?Ñ?€MÜ—]‘]¤X¨d°A°qÓ%9Ñ9×?Ñ?€MØ  2Ñ%¨Ñ,¨tÑ3€LØ  2Ñ%¨Ñ,¨tÑ3€LöYö.÷ð ô2 �x‰x˜‹€HØ€NØ‡|�|„~ØˆØ"%ˆ�‰�hÑØ�L‰LœŸ™Ó"€Eà
‡~�~�mÔ$ÜˆØˆÙ'¨¨b°$Ó7Š
Ø	�‰˜Ô	&Ü�‰ØGÜ'Ó)õ	
ô ˜E¬Ô0ˆ
ÙÜ#&ˆJ�xÑ ØÐà	�‰Ð0Ô	1ÜˆØˆÙ'¨¨d°CÓ8Š
ð 
�‰˜Ô	&Ü×Ñ %¨2¡+Ñ-ˆØ˜‘
˜aÑˆÙ+¨D°$Ó7‰
Ø	�‰˜Ô	&Ü×Ñ %¨2¡+Ñ-ˆØ˜‘˜qÑ ˆÙ,¨T°5Ó9‰
Ø	�‰˜Ô	&Ü×Ñ %¨1¡*Ñ,ˆØ ™ a™¨!Ñ+ˆÙ,¨T°=ÓA‰
Ø	�‰˜Ô	&Ü×Ñ %¨1¡*Ñ,ˆØ˜‘˜a‘ !Ñ#ˆÙ,¨T°5Ó9‰
Ø	�‰˜Ô	&ØˆÜ—l‘l 5Ó)ˆÙ,¨T°;Ó?‰
ä˜9 S E¨Ð9Ó:Ð:áÜ"ˆ
�8ÑàÐó    c                ó  ‡‡‡	— | j                   Š	dŠ‰dz  Š	 d#	 	 	 	 	 	 	 d$ˆˆˆ	fd„}t        | «      }| j                   Š	|j                  «       rPt        j                  | j
                  d«      rt        t        «      | j                  |<   nt        | j                  |<   |dv r || d¬«      }|j                  dz  }�nƒ|d	v r#t        j                  d
t        «       ¬«       | }�n\|dv r || d¬«      }|j                  ‰z  }�n=|dv r< || dd¬«      }d|j                  t        j                  z
  z  |j                  dz  z   }ný|dv r; || d¬«      }d|j                  t        j                  z
  z  |j                  z   dz
  }n¾|dv r> || d¬«      }d|j                  t        j                  z
  z  |j                  dz
  dz  z   }n||dv rN || d¬«      }d|j                  t        j                  z
  z  |j                  dkD  j!                  t"        «      z   }n*|dv r || d¬«      }|j                  }nt%        d|› d�«      ‚t'        |t(        j*                  d¬«      }t-        j.                  dd «      d!   }|||<   t'        |‰	d¬"«      S )%aO  
    Convert from datetime to SIF. https://www.stata.com/help.cgi?datetime

    Parameters
    ----------
    dates : Series
        Series or array containing datetime or datetime64[ns] to
        convert to the Stata Internal Format given by fmt
    fmt : str
        The format to convert to. Can be, tc, td, tw, tm, tq, th, ty
    l     ž"R: rF   Fc                óÚ  •— i }t        j                  | j                  d«      �r |rP| t        t        «      j                  d«      z
  }|j                  j                  t        j                  «      dz  |d<   |s|r=t        | «      }|j                  j                  |d<   |j                  j                  |d<   |�r%| j                  j                  t        j                  «      t        |d   d¬«      j                  j                  t        j                  «      z
  }|‰z  |d	<   n»t        | d
¬«      dk(  r |r9| j                  t        z
  }dˆfd„}t        j                   |«      }	 |	|«      |d<   |r<| j#                  d„ «      }
|
j                  dz  |d<   |
j                  |d   dz  z
  |d<   |r0dd„}t        j                   |«      }	 |	| «      |d	<   nt%        d«      ‚t'        |‰¬«      S )NÚMÚnsrF   ÚdeltarQ   rR   rZ   rI   r_   F©Úskipnar   c                ó\   •— ‰| j                   z  d| j                  z  z   | j                  z   S )Ni@B )r_   Úsecondsre   )ÚxÚ
US_PER_DAYs    €rW   ÚfzC_datetime_to_stata_elapsed_vec.<locals>.parse_dates_safe.<locals>.f³  s)   ø€ Ø%¨¯©Ñ.°¸1¿9¹9Ñ1DÑDÀqÇ~Á~ÑUÐUrž   c                ó:   — d| j                   z  | j                  z   S )NrH   )rQ   rR   ©r¨   s    rW   ú<lambda>zJ_datetime_to_stata_elapsed_vec.<locals>.parse_dates_safe.<locals>.<lambda>¹  s   € °3¸¿¹±<À!Ç'Á'Ñ3I€ rž   rH   c                óJ   — | t        | j                  dd«      z
  j                  S )NrB   )r   rQ   r_   r¬   s    rW   ÚgzC_datetime_to_stata_elapsed_vec.<locals>.parse_dates_safe.<locals>.g¾  s    € Ø¤¨¯©°°AÓ 6Ñ6×<Ñ<Ð<rž   zQColumns containing dates must contain either datetime64, datetime or null values.rL   )r¨   r   rŠ   Úfloat)r¨   r   rŠ   r`   )r   Úis_np_dtyperv   r    rC   Úas_unitrŽ   Úviewr‹   r�   r   Ú_datarQ   rR   r"   r   Ú	vectorizeÚapplyrf   r$   )r–   r£   rQ   r_   r[   Ú
time_deltaÚ
date_indexÚ
days_in_nsrª   ÚvÚ
year_monthr¯   Ú
NS_PER_DAYr©   rK   s               €€€rW   Úparse_dates_safez8_datetime_to_stata_elapsed_vec.<locals>.parse_dates_safe�  s¯  ø€ ð ˆÜ�?‰?˜5Ÿ;™;¨Õ,ÙØ"¤Y¬{Ó%;×%CÑ%CÀDÓ%IÑI�
Ø'×/Ñ/×4Ñ4´R·X±XÓ>À$ÑF��'‘
Ù‘tÜ*¨5Ó1�
Ø&×,Ñ,×1Ñ1��&‘	Ø'×-Ñ-×3Ñ3��'‘
ÚØ"Ÿ]™]×/Ñ/´·±Ó9¼KØ�f‘I dô=ç‘'Ÿ$™$œrŸx™x›.ñ)�
ð '¨*Ñ4��&’	ä˜ uÔ-°Ò;ÙØŸ™¬Ñ3�õVô —L‘L “O�Ù˜u›X��'‘
ÙØ"Ÿ[™[Ñ)IÓJ�
Ø&×.Ñ.°#Ñ5��&‘	Ø'×/Ñ/°!°F±)¸c±/ÑA��'‘
Ùó=ô —L‘L “O�Ù˜e›H��&’	äð7óð ô
 ˜ %Ô(Ð(rž   r¡   ro   T)r£   rq   z'Stata Internal Format tC not supported.rs   )r:   rw   rx   )rQ   r_   rz   r{   r|   )rQ   r~   rB   r   r�   r‚   rƒ   r…   r†   r‡   úFormat z! is not a known Stata date format)rv   Úcopyú<dó         àr   ©rK   r¿   )FFF)r–   r'   r£   ÚboolrQ   rÃ   r_   rÃ   )rK   r!   r�   r   r±   rv   r"   rC   rŽ   r£   r’   r“   r   rQ   r_   rR   r�   r`   rf   r'   r‹   Úfloat64ÚstructÚunpack)
r–   r—   r½   Úbad_locr[   rš   Úmissing_valuer¼   r©   rK   s
          @@@rW   Ú_datetime_to_stata_elapsed_vecrÉ   �  so  ú€ ð �K‰K€EØ/€JØ˜dÑ"€Jð NSð,)Øð,)Ø"ð,)Ø26ð,)ØFJ÷,)ô\ �5‹k€GØ�K‰K€EØ‡{�{„}Ü�?‰?˜5Ÿ;™;¨Ô,Ü%0´Ó%=ˆE�M‰M˜'Ò"ä%0ˆE�M‰M˜'Ñ"à
ˆmÑÙ˜U¨$Ô/ˆØ—W‘W˜t‘^Š
Ø	�Ñ	Ü�‰Ø5Ü'Ó)õ	
ð Š
Ø	�Ñ	Ù˜U¨$Ô/ˆØ—W‘W 
Ñ*Š
Ø	�Ñ	Ù˜U¨°DÔ9ˆØ˜1Ÿ6™6¤K×$4Ñ$4Ñ4Ñ5¸¿¹À!¹ÑC‰
Ø	�Ñ	Ù˜U¨Ô.ˆØ˜1Ÿ6™6¤K×$4Ñ$4Ñ4Ñ5¸¿¹Ñ?À!ÑC‰
Ø	�Ñ	Ù˜U¨Ô.ˆØ˜!Ÿ&™&¤;×#3Ñ#3Ñ3Ñ4¸¿¹À!¹ÈÑ7IÑI‰
Ø	�Ñ	Ù˜U¨Ô.ˆØ˜!Ÿ&™&¤;×#3Ñ#3Ñ3Ñ4¸¿¹À!¹×7KÑ7KÌCÓ7PÑP‰
Ø	�Ñ	Ù˜U¨Ô.ˆØ—V‘V‰
ä˜7 3 %Ð'HÐIÓJÐJä˜
¬"¯*©*¸5ÔA€JÜ—M‘M $Ð(KÓLÈQÑO€MØ'€JˆwÑä�* E°Ô6Ð6rž   zÔ
Fixed width strings in Stata .dta files are limited to 244 (or fewer)
characters.  Column '{0}' does not satisfy this restriction. Use the
'version=117' parameter to write the newer (Stata 13 and later) format.
Úexcessive_string_length_errorz™
Column converted from {0} to {1}, and some data are outside of the lossless
conversion range. This may result in a loss of precision in the saved data.
Úprecision_loss_doczä
Stata value labels (pandas categories) must be strings. Column {0} contains
non-string labels which will be converted to strings.  Please check that the
Stata data file created has not lost information due to duplicate labels.
Úvalue_label_mismatch_doca;  
Not all pandas column names were valid Stata variable names.
The following replacements have been made:

    {0}

If this is not what you expect, please make sure you have Stata-compliant
column names in your DataFrame (strings only, max 32 characters, only
alphanumerics and underscores, no Stata reserved words)
Úinvalid_name_docaï  
One or more series with value labels are not fully labeled. Reading this
dataset with an iterator results in categorical variable with different
categories. This occurs since it is not possible to know all possible values
until the entire dataset has been read. To avoid this warning, you can either
read dataset without an iterator, or manually convert categorical data by
``convert_categoricals`` to False and then accessing the variable labels
through the value_labels method of the reader.
Úcategorical_conversion_warningc           
     óH  — d}t         j                  t         j                  t         j                  ft         j                  t         j                  t         j                  ft         j
                  t         j                  t         j                  ft         j                  t         j                  t         j                  ft         j                  t         j                  t         j                  ff}t        j                  dd«      d   }t        j                  dd«      d   }| D �]Ù  }t        | |   j                  t        «      xr | |   j                  j                   dv }| |   j#                  «       }|r]| |   j                  j                   dv rdnd	}| |   j%                  |«      j'                  | |   j                  j(                  «      | |<   n•t        | |   j                  t        «      rxt+        | |   j                  d
d«      �/| |   j'                  | |   j                  j(                  «      | |<   n/t-        | |   j                  «      r| |   j'                  d«      | |<   | |   j                  }	| j.                  d   dk(  }
|D ]§  }|	|d   k(  sŒ|
s6| |   j1                  «       t        j2                  |d   «      j0                  k  r|d   }	n|d   }	|d   t         j                  k(  r,| |   j1                  «       dk\  rt4        j7                  dd«      }| |   j'                  |	«      | |<   Œ© |	t         j                  k(  rV|
sT| |   j1                  «       dkD  s| |   j9                  «       dk  �r5| |   j'                  t         j                  «      | |<   �n|	t         j                  k(  rV|
sT| |   j1                  «       dkD  s| |   j9                  «       dk  �rÌ| |   j'                  t         j                  «      | |<   �n¥|	t         j                  k(  r½|
s,| |   j1                  «       dk  r=| |   j9                  «       dk\  r'| |   j'                  t         j                  «      | |<   �n=| |   j'                  t         j                  «      | |<   | |   j1                  «       dk\  s| |   j9                  «       dk  rìt4        j7                  dd«      }nÕ|	t         j:                  t         j                  fv r³t        j<                  | |   «      j?                  «       rtA        d|› d�«      ‚| |   j1                  «       }|	t         j:                  k(  r+||kD  r&| |   j'                  t         j                  «      | |<   n-|	t         j                  k(  r||kD  rtA        d|› d|› d|› d�«      ‚|s�Œ�|j?                  «       s�ŒŸtB        jD                  | |   j                  jF                     }|| jH                  ||f<   �ŒÜ |r$tK        jL                  |tN        tQ        «       ¬«       | S ) a-  
    Checks the dtypes of the columns of a pandas DataFrame for
    compatibility with the data types and ranges supported by Stata, and
    converts if necessary.

    Parameters
    ----------
    data : DataFrame
        The DataFrame to check and convert

    Notes
    -----
    Numeric columns in Stata must be one of int8, int16, int32, float32 or
    float64, with some additional value restrictions.  int8 and int16 columns
    are checked for violations of the value restrictions and upcast if needed.
    int64 data is not usable in Stata, and so it is downcast to int32 whenever
    the value are in the int32 range, and sidecast to float64 when larger than
    this range.  If the int64 values are outside of the range of those
    perfectly representable as float64 values, a warning is raised.

    bool columns are cast to int8.  uint columns are converted to int of the
    same size if there is no loss in precision, otherwise are upcast to a
    larger type.  uint64 is currently not supported since it is concerted to
    object in a DataFrame.
    Ú ú<fó   ÿÿÿ~r   rÀ   ó   ÿÿÿÿÿÿßÚiubÚiuFÚnumpy_dtypeNr”   rB   r…   l          Úuint64rÄ   rH   é�ÿÿÿéä  é€ÿÿéäÿÿé  €lüÿÿÿ       r�   zColumn zM contains infinity or -infinitywhich is outside the range supported by Stata.z has a maximum value (z() outside the range supported by Stata (ú)rs   ))r‹   Úbool_Úint8Úuint8Úint16Úuint16Úint32Úuint32r�   r×   rÄ   rÅ   rÆ   Ú
isinstancerv   r   Úkindr!   Úfillnar�   rÖ   rO   r   ÚshaperM   ÚiinforË   rJ   rN   Úfloat32Úisinfr�   rf   ÚStataMissingValueÚBASE_MISSING_VALUESÚnameÚlocr’   r“   r   r   )ÚdataÚwsÚconversion_dataÚfloat32_maxÚfloat64_maxÚcolÚis_nullable_intÚorig_missingÚfvrv   Úempty_dfÚc_datara   Úsentinels                 rW   Ú_cast_to_stata_typesrü   #  s   € ð4 
€Bô 
�‰”2—7‘7œBŸG™GÐ$Ü	�‰”2—7‘7œBŸH™HÐ%Ü	�‰”B—H‘HœbŸh™hÐ'Ü	�‰”B—H‘HœbŸh™hÐ'Ü	�‰”B—H‘HœbŸj™jÐ)ð	ð ô —-‘- Ð&9Ó:¸1Ñ=€KÜ—-‘- Ð&IÓJÈ1ÑM€Kàó D7ˆô �t˜C‘y—‘¬Ó7ò .Ø�S‘	—‘×$Ñ$¨Ð-ð 	ð
 ˜C‘y—~‘~Ó'ˆÙØ˜3‘i—o‘o×*Ñ*¨dÑ2‘¸ˆBà˜S™	×(Ñ(¨Ó,×3Ñ3°D¸±I·O±O×4OÑ4OÓPˆD�ŠIÜ˜˜S™	Ÿ™¬Ô8Ü�t˜C‘y—‘¨°tÓ<ÐHØ  ™I×,Ñ,¨T°#©Y¯_©_×-HÑ-HÓI��S’	Ü   c¡§¡Ô1Ø  ™I×,Ñ,¨XÓ6��S‘	à�S‘	—‘ˆØ—:‘:˜a‘= AÑ%ˆØ%ò 
	4ˆFØ˜˜q™	Ó!Ù˜t C™yŸ}™}›´"·(±(¸6À!¹9Ó2E×2IÑ2IÒIØ" 1™I‘Eà" 1™I�EØ˜!‘9¤§¡Ò(Ø˜C‘y—}‘}“¨%Ò/Ü/×6Ñ6°xÀÓK˜à  ™I×,Ñ,¨UÓ3��S’	ð
	4ð ”B—G‘GÒ¡HØ�C‰y�}‰}‹ Ò$¨¨S©	¯©«¸$Ó(>Ø  ™I×,Ñ,¬R¯X©XÓ6��S“	Ø”b—h‘hÒ¡xØ�C‰y�}‰}‹ Ò&¨$¨s©)¯-©-«/¸FÓ*BØ  ™I×,Ñ,¬R¯X©XÓ6��S“	Ø”b—h‘hÒÙØ�S‘	—‘“ :Ò-°$°s±)·-±-³/À[Ò2Pà  ™I×,Ñ,¬R¯X©XÓ6��S“	à  ™I×,Ñ,¬R¯Z©ZÓ8��S‘	Ø˜‘9—=‘=“? eÒ+¨t°C©y¯}©}«À(Ò/JÜ+×2Ñ2°7¸IÓF‘BØ”r—z‘z¤2§:¡:Ð.Ñ.Ü�x‰x˜˜S™	Ó"×&Ñ&Ô(Ü Ø˜c˜Uð #Eð Eóð ð ˜‘I—M‘M“OˆEØœŸ
™
Ò" u¨{Ò':Ø  ™I×,Ñ,¬R¯Z©ZÓ8��S’	Øœ"Ÿ*™*Ò$Ø˜;Ò&Ü$Ø! # Ð&<¸U¸Gð D/Ø/:¨m¸1ð>óð ó Ø×ÑÖ!ä,×@Ñ@ÀÀcÁÇÁ×AUÑAUÑV�Ø.6�—‘˜ sÐ*Ó+ðID7ñJ 
Ü�‰ØÜ!Ü'Ó)õ	
ð €Krž   c                  ó6   — e Zd ZdZ	 d	 	 	 	 	 dd„Zdd„Zd	d„Zy)
ÚStataValueLabelzé
    Parse a categorical column and prepare formatted output

    Parameters
    ----------
    catarray : Series
        Categorical Series to encode
    encoding : {"latin-1", "utf-8"}
        Encoding to use for value labels.
    c                ó¾   — |dvrt        d«      ‚|j                  | _        || _        |j                  j
                  }t        |«      | _        | j                  «        y )N©úlatin-1úutf-8ú%Only latin-1 and utf-8 are supported.)	rf   rî   ÚlabnameÚ	_encodingÚcatÚ
categoriesÚ	enumerateÚvalue_labelsÚ_prepare_value_labels)ÚselfÚcatarrayÚencodingr  s       rW   Ú__init__zStataValueLabel.__init__«  sS   € ð Ð/Ñ/ÜÐDÓEÐEØ—}‘}ˆŒØ!ˆŒØ—\‘\×,Ñ,ˆ
Ü% jÓ1ˆÔà×"Ñ"Õ$rž   c                óL  — d| _         g | _        d| _        t        j                  g t        j
                  ¬«      | _        t        j                  g t        j
                  ¬«      | _        d| _        g }g }| j                  D ]ÿ  }|d   }t        |t        «      sLt        |«      }t        j                  t        j                  | j                   «      t"        t%        «       ¬«       |j'                  | j(                  «      }|j+                  | j                   «       | xj                   t        |«      dz   z  c_         |j+                  |d   «       | j                  j+                  |«       | xj                  dz  c_        �Œ | j                   dkD  rt-        d«      ‚t        j                  |t        j
                  ¬«      | _        t        j                  |t        j
                  ¬«      | _        dd| j                  z  z   d| j                  z  z   | j                   z   | _        y	)
zEncode value labels.r   ru   rB   rs   i }  zaStata value labels for a single variable must have a combined length less than 32,000 characters.é   r�   N)Útext_lenÚtxtÚnr‹   Úarrayrã   ÚoffÚvalÚlenr	  rå   Ústrr’   r“   rÌ   rJ   r  r   r   Úencoder  Úappendrf   )r  Úoffsetsri   ÚvlÚcategorys        rW   r
  z%StataValueLabel._prepare_value_labels·  s“  € ð ˆŒØ "ˆŒØˆŒä—8‘8˜B¤b§h¡hÔ/ˆŒä—8‘8˜B¤b§h¡hÔ/ˆŒØˆŒð  ˆØ ˆØ×#Ñ#ò 	ˆBØ$& q¡EˆHÜ˜h¬Ô,Ü˜x›=�Ü—‘Ü,×3Ñ3°D·L±LÓAÜ*Ü/Ó1õð
  —‘ t§~¡~Ó6ˆHØ�N‰N˜4Ÿ=™=Ô)Ø�MŠMœS ›]¨QÑ.Ñ.�MØ�M‰M˜"˜Q™%Ô Ø�H‰H�O‰O˜HÔ%Ø�FŠF�a‰K�Fð	ð  �=‰=˜5Ò ÜðFóð ô —8‘8˜G¬2¯8©8Ô4ˆŒÜ—8‘8˜F¬"¯(©(Ô3ˆŒð ˜1˜tŸv™v™:Ñ%¨¨D¯F©F©
Ñ2°T·]±]ÑBˆ�rž   c                ó´  — | j                   }t        «       }d}|j                  t        j                  |dz   | j
                  «      «       t        | j                  «      dd j                  |«      }|dvrdnd}t        ||dz   «      }|j                  |«       t        d«      D ]'  }|j                  t        j                  d	|«      «       Œ) |j                  t        j                  |dz   | j                  «      «       |j                  t        j                  |dz   | j                  «      «       | j                  D ]*  }|j                  t        j                  |dz   |«      «       Œ, | j                  D ]*  }	|j                  t        j                  |dz   |	«      «       Œ, | j                  D ]  }
|j                  |
|z   «       Œ |j!                  «       S )
a!  
        Generate the binary representation of the value labels.

        Parameters
        ----------
        byteorder : str
            Byte order of the output

        Returns
        -------
        value_label : bytes
            Bytes containing the formatted value label
        ó    ÚiNé    )r  Úutf8é€   rB   r‚   Úc)r  r   ÚwriterÅ   Úpackr  r  r  r  Ú
_pad_bytesÚranger  r  r  r  r  Úgetvalue)r  Ú	byteorderr  ÚbioÚ	null_byter  Úlab_lenr   Úoffsetra   Útexts              rW   Úgenerate_value_labelz$StataValueLabel.generate_value_labelã  s‰  € ð —>‘>ˆÜ‹iˆØˆ	ð 	�	‰	”&—+‘+˜i¨#™o¨t¯x©xÓ8Ô9ô �d—l‘lÓ# C RÐ(×/Ñ/°Ó9ˆØ Ð(9Ñ9‘"¸sˆÜ˜W g°¡kÓ2ˆØ�	‰	�'Ôô �q“ò 	3ˆAØ�I‰I”f—k‘k # yÓ1Õ2ð	3ð
 	�	‰	”&—+‘+˜i¨#™o¨t¯v©vÓ6Ô7ð 	�	‰	”&—+‘+˜i¨#™o¨t¯}©}Ó=Ô>ð —h‘hò 	<ˆFØ�I‰I”f—k‘k )¨c¡/°6Ó:Õ;ð	<ð —X‘Xò 	;ˆEØ�I‰I”f—k‘k )¨c¡/°5Ó9Õ:ð	;ð —H‘Hò 	(ˆDØ�I‰I�d˜YÑ&Õ'ð	(ð �|‰|‹~Ðrž   N©r  )r  r'   r  úLiteral['latin-1', 'utf-8']rŠ   ÚNone©rŠ   r3  )r*  r  rŠ   Úbytes)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r  r
  r0  © rž   rW   rþ   rþ   Ÿ  s7   „ ñ	ð IRð
%Øð
%Ø*Eð
%à	ó
%ó*CôX2rž   rþ   c                  ó*   — e Zd ZdZ	 d	 	 	 	 	 	 	 dd„Zy)ÚStataNonCatValueLabela  
    Prepare formatted version of value labels

    Parameters
    ----------
    labname : str
        Value label name
    value_labels: Dictionary
        Mapping of values to labels
    encoding : {"latin-1", "utf-8"}
        Encoding to use for value labels.
    c                ó    — |dvrt        d«      ‚|| _        || _        t        |j	                  «       d„ ¬«      | _        | j                  «        y )Nr   r  c                ó   — | d   S )Nr   r:  r¬   s    rW   r­   z0StataNonCatValueLabel.__init__.<locals>.<lambda>2  s
   € °°!±€ rž   )Úkey)rf   r  r  ÚsortedÚitemsr	  r
  )r  r  r	  r  s       rW   r  zStataNonCatValueLabel.__init__&  sP   € ð Ð/Ñ/ÜÐDÓEÐEàˆŒØ!ˆŒÜ"Ø×ÑÓ ¡nô
ˆÔð 	×"Ñ"Õ$rž   Nr1  )r  r  r	  údict[float, str]r  r2  rŠ   r3  )r6  r7  r8  r9  r  r:  rž   rW   r<  r<    s7   „ ñð" 1:ð	%àð%ð 'ð%ð .ð	%ð
 
ô%rž   r<  c                  óÈ  — e Zd ZU dZi Zded<   dZded<   eD ])  Zdee<    edd	«      D ]  Z	d e
d
e	z   «      z   ee	ez   <   Œ Œ+ dZded<    ej                  dd«      d   Zded<    ed	«      D ]u  Z	 ej                  de«      d   Zdee<   e	dkD  reexx    e
d
e	z   «      z  cc<    ej                  d ej                   de«      «      d   ez   Z ej                   de«      ZŒw dZded<    ej                  dd«      d   Z ed	«      D ]u  Z	 ej                  de«      d   Zdee<   e	dkD  reexx    e
d
e	z   «      z  cc<    ej                  d ej                   de«      «      d   ez   Z ej                   de«      ZŒw ddd ej                  de«      d    ej                  de«      d   dœZded<   d&d„Zed'd„«       Zed(d „«       Zd'd!„Zd'd"„Zd)d#„Zed*d$„«       Zy%)+rì   a”  
    An observation's missing value.

    Parameters
    ----------
    value : {int, float}
        The Stata missing value code

    Notes
    -----
    More information: <https://www.stata.com/help.cgi?missing>

    Integer missing values make the code '.', '.a', ..., '.z' to the ranges
    101 ... 127 (for int8), 32741 ... 32767  (for int16) and 2147483621 ...
    2147483647 (for int32).  Missing values for floating point data types are
    more complex but the pattern is simple to discern from the following table.

    np.float32 missing values (float in Stata)
    0000007f    .
    0008007f    .a
    0010007f    .b
    ...
    00c0007f    .x
    00c8007f    .y
    00d0007f    .z

    np.float64 missing values (double in Stata)
    000000000000e07f    .
    000000000001e07f    .a
    000000000002e07f    .b
    ...
    000000000018e07f    .x
    000000000019e07f    .y
    00000000001ae07f    .z
    rB  ÚMISSING_VALUES)ée   éå  éåÿÿr   Úbasesú.rB   é   é`   ó      r5  Úfloat32_basez<is      r   r`   Úincrement_32rÑ   rÁ   Úfloat64_baseÚqs          rÀ   rE  rF  rG  )rß   rá   rã   rê   rÄ   rí   c                óp   — || _         |dk  rt        |«      n
t        |«      }| j                  |   | _        y )Nl        )Ú_valuer`   r°   rD  Ú_str©r  ra   s     rW   r  zStataMissingValue.__init__�  s1   € ØˆŒà# jÒ0”�E”
´e¸E³lˆØ×'Ñ'¨Ñ.ˆ�	rž   c                ó   — | j                   S )z²
        The Stata representation of the missing value: '.', '.a'..'.z'

        Returns
        -------
        str
            The representation of the missing value.
        )rS  ©r  s    rW   ÚstringzStataMissingValue.string‡  s   € ð �y‰yÐrž   c                ó   — | j                   S )z³
        The binary representation of the missing value.

        Returns
        -------
        {int, float}
            The binary representation of the missing value.
        )rR  rV  s    rW   ra   zStataMissingValue.value“  s   € ð �{‰{Ðrž   c                ó   — | j                   S ©N)rW  rV  s    rW   Ú__str__zStataMissingValue.__str__Ÿ  s   € Ø�{‰{Ðrž   c                ó$   — t        | «      › d| › d�S )Nú(rÝ   )ÚtyperV  s    rW   Ú__repr__zStataMissingValue.__repr__¢  s   € Ü�t“*�˜Q˜t˜f AÐ&Ð&rž   c                ó˜   — t        |t        | «      «      xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rZ  )rå   r^  rW  ra   )r  Úothers     rW   Ú__eq__zStataMissingValue.__eq__¥  s?   € ä�uœd 4›jÓ)ò *Ø—‘˜uŸ|™|Ñ+ò*à—
‘
˜eŸk™kÑ)ð	
rž   c                óÚ  — |j                   t        j                  u r| j                  d   }|S |j                   t        j                  u r| j                  d   }|S |j                   t        j
                  u r| j                  d   }|S |j                   t        j                  u r| j                  d   }|S |j                   t        j                  u r| j                  d   }|S t        d«      ‚)Nrß   rá   rã   rê   rÄ   zUnsupported dtype)	r^  r‹   rß   rí   rá   rã   rê   rÄ   rf   )Úclsrv   ra   s      rW   Úget_base_missing_valuez(StataMissingValue.get_base_missing_value¬  sÛ   € à�:‰:œŸ™Ñ Ø×+Ñ+¨FÑ3ˆEð ˆð �Z‰Zœ2Ÿ8™8Ñ#Ø×+Ñ+¨GÑ4ˆEð ˆð �Z‰Zœ2Ÿ8™8Ñ#Ø×+Ñ+¨GÑ4ˆEð ˆð �Z‰Zœ2Ÿ:™:Ñ%Ø×+Ñ+¨IÑ6ˆEð
 ˆð	 �Z‰Zœ2Ÿ:™:Ñ%Ø×+Ñ+¨IÑ6ˆEð ˆô Ð0Ó1Ð1rž   N)ra   r°   rŠ   r3  ©rŠ   r  )rŠ   r°   )ra  r”   rŠ   rÃ   )rv   únp.dtyperŠ   r°   )r6  r7  r8  r9  rD  Ú__annotations__rH  Úbr(  r   ÚchrrM  rÅ   rÆ   rN  r?  r&  Ú	int_valuerO  Úincrement_64rí   r  ÚpropertyrW  ra   r[  r_  rb  Úclassmethodre  r:  rž   rW   rì   rì   7  se  … ñ"ðJ (*€NÐ$Ó)Ø+€Eˆ5Ó+Øò 6ˆàˆ�qÑÙ�q˜"“ò 	6ˆAØ$'©#¨b°1©f«+Ñ$5ˆN˜1˜q™5Ò!ñ	6ð6ð .€L�%Ó-Ø%˜Ÿ™ dÐ,?Ó@ÀÑC€L�#ÓCÙ�2‹Yò 4ˆØˆf�m‰m˜D ,Ó/°Ñ2ˆØ!ˆ�sÑØˆqŠ5Ø˜3Ó¡3 r¨A¡v£;Ñ.ÓØ!�F—M‘M $¨¨¯©°D¸#Ó(>Ó?ÀÑBÀ\ÑQˆ	Ø"�v—{‘{ 4¨Ó3‰ð4ð >€L�%Ó=Ø �6—=‘= Ð&IÓJÈ1ÑM€LÙ�2‹Yò 3ˆØˆf�m‰m˜D ,Ó/°Ñ2ˆØ!ˆ�sÑØˆqŠ5Ø˜3Ó¡3 r¨A¡v£;Ñ.ÓØ!�F—M‘M # { v§{¡{°4¸Ó'=Ó>¸qÑAÀLÑPˆ	Ø"�v—{‘{ 3¨	Ó2‰ð3ð ØØØ �6—=‘=  |Ó4°QÑ7Ø �6—=‘=  |Ó4°QÑ7ñ"Ð˜ó ó/ð ò	ó ð	ð ò	ó ð	óó'ó
ð òó ñrž   rì   c                  ó   — e Zd Zdd„Zy)ÚStataParserc                ó¨  — t        t        dd«      D �cg c]  }|t        j                  d|› �«      f‘Œ c}dt        j                  t        j                  «      fdt        j                  t        j
                  «      fdt        j                  t        j                  «      fdt        j                  t        j                  «      fdt        j                  t        j                  «      fgz   «      | _	        t        j                  t        j                  «      t        j                  t        j                  «      t        j                  t        j                  «      t        j                  t        j                  «      t        j                  t        j
                  «      t        j                  t        j                  «      d	œ| _        t        t        t        d«      «      t        d
«      z   «      | _        ddddddd	œ| _        d}d}d}d}dddt        j                  t!        j"                  d|«      d   «      t        j                  t!        j"                  d|«      d   «      ft        j                  t!        j"                  d|«      d   «      t        j                  t!        j"                  d|«      d   «      fdœ| _        ddddddœ| _        dddt        j                  t!        j"                  dd «      d   «      t        j                  t!        j"                  dd!«      d   «      dœ| _        d"d#d$d%d&d'd(œ| _        h d)£| _        y c c}w )*NrB   éõ   ÚSéû   éü   éý   éþ   éÿ   )é €  éöÿ  é÷ÿ  éøÿ  éùÿ  éúÿ  ÚbhlfdÚQr[   rª   ÚlÚhri  s   ÿÿÿþrÒ   s   ÿÿÿÿÿÿïÿrÓ   )rØ   rH   )rÚ   rÙ   )rÜ   rÛ   rÑ   r   rÀ   )ri  r‚  r�  rª   r[   )éb   éi   él   éf   rH   rE  rF  rG  rL  rÁ   Úi1Úi2Úi4Úf4Úf8Úu8)ri  r‚  r�  rª   r[   r€  ><   ústr#Ú_NÚ_bÚ_nÚdoÚifÚinÚ_piÚ_rcÚ_seÚendÚforr`   ÚNULLÚ_allÚbyteÚcaseÚelseÚenumÚgotoÚlongÚquadÚstrLÚwithÚ_coefÚ_consÚ_predÚ_skipr  ÚbreakÚcatchÚclassÚconstr°   ÚlocalÚshortÚusingÚdeleteÚdoubleÚexportÚfriendÚglobalÚinlineÚpragmaÚbooleanÚcomplexÚdefaultÚtypedefÚvirtualÚcontinueÚdelegateÚexplicitÚexternalÚfunctionÚtypenameÚ	aggregateÚ	colvectorÚ	eltypedefÚ	protectedÚ	rowvector)Údictr(  r‹   rv   rß   rá   rã   rê   rÄ   Ú	DTYPE_MAPrà   ÚDTYPE_MAP_XMLÚlistÚtupleÚTYPE_MAPÚTYPE_MAP_XMLrÅ   rÆ   ÚVALID_RANGEÚOLD_TYPE_MAPPINGrD  ÚNUMPY_TYPE_MAPÚRESERVED_WORDS)r  r   Úfloat32_minró   Úfloat64_minrô   s         rW   r  zStataParser.__init__¾  s•  € ô  Ü-2°1°c«]Ö;¨ˆa”—‘˜A˜a˜S˜'Ó"Ò#Ò;à”b—h‘hœrŸw™wÓ'Ð(Ø”b—h‘hœrŸx™xÓ(Ð)Ø”b—h‘hœrŸx™xÓ(Ð)Ø”b—h‘hœrŸz™zÓ*Ð+Ø”b—h‘hœrŸz™zÓ*Ð+ðñó	
ˆŒô —8‘8œBŸH™HÓ%Ü—8‘8œBŸJ™JÓ'Ü—8‘8œBŸJ™JÓ'Ü—8‘8œBŸH™HÓ%Ü—8‘8œBŸH™HÓ%Ü—8‘8œBŸG™GÓ$ñ3
ˆÔô œU¤5¨£:Ó.´°w³Ñ?Ó@ˆŒð ØØØØØñ
ˆÔð *ˆØ)ˆØ9ˆØ9ˆàØ Ø*ä—
‘
œ6Ÿ=™=¨¨{Ó;¸AÑ>Ó?Ü—
‘
œ6Ÿ=™=¨¨{Ó;¸AÑ>Ó?ðô
 —
‘
œ6Ÿ=™=¨¨{Ó;¸AÑ>Ó?Ü—
‘
œ6Ÿ=™=¨¨{Ó;¸AÑ>Ó?ðñ
ˆÔð ØØØØñ!
ˆÔð ØØÜ—‘œFŸM™M¨$Ð0CÓDÀQÑGÓHÜ—‘Ü—‘˜dÐ$GÓHÈÑKóñ
ˆÔð ØØØØØñ
ˆÔò=
ˆÕùò[ <s   ”!MNr4  )r6  r7  r8  r  r:  rž   rW   rp  rp  ½  s   „ ô[
rž   rp  c                  óX  ‡ — e Zd ZU eZded<   	 	 	 	 	 	 	 	 	 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0ˆ fd„Zd1d„Zd1d„Zd2d„Z		 	 	 	 	 	 	 	 d3d„Z
d1d„Zd1d	„Zd4d
„Zd4d„Zd4d„Zd4d„Zd4d„Zd4d„Zd4d„Zd4d„Zd5d„Zd6d„Zd1d„Zd1d„Z	 	 	 	 d7d„Zd8d„Zd8d„Zd8d„Zd8d„Zd4d„Zd9d„Zd9d„Z d4d„Z!d:d„Z"d;d „Z#d<d!„Z$d1d"„Z%d1d#„Z&d=d$„Z'd>d?d%„Z( e)e*«      	 	 	 	 	 	 	 	 d@	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAd&„«       Z+dBd'„Z,dCd(„Z-dDd)„Z.	 	 	 	 	 	 	 	 	 	 dEd*„Z/e0d9d+„«       Z1e0d9d,„«       Z2dFd-„Z3dGd.„Z4ˆ xZ5S )HÚStataReaderz	IO[bytes]Ú_path_or_bufc                óú  •— t         ‰| �  «        || _        || _        || _        || _        || _        || _        || _        || _	        |
| _
        || _        d| _        |	| _        d| _        d| _        | j                  €d| _        n t!        |	t"        «      r|	dk  rt%        d«      ‚d | _        d| _        d| _        d| _        d| _        d| _        d | _        d| _        t7        t8        j:                  «      | _        y )NrÐ   FrB   r   z.chunksize must be a positive integer when set.)Úsuperr  Ú_convert_datesÚ_convert_categoricalsÚ
_index_colÚ_convert_missingÚ_preserve_dtypesÚ_columnsÚ_order_categoricalsÚ_original_path_or_bufÚ_compressionÚ_storage_optionsr  Ú
_chunksizeÚ_using_iteratorÚ_enteredrå   r`   rf   Ú_close_fileÚ_missing_valuesÚ_can_read_value_labelsÚ_column_selector_setÚ_value_labels_readÚ
_data_readÚ_dtypeÚ_lines_readÚ_set_endiannessÚsysr*  Ú_native_byteorder)r  Úpath_or_bufÚconvert_datesÚconvert_categoricalsÚ	index_colÚconvert_missingÚpreserve_dtypesÚcolumnsÚorder_categoricalsÚ	chunksizeÚcompressionr7   Ú	__class__s               €rW   r  zStataReader.__init__a  sû   ø€ ô 	‰ÑÔð ,ˆÔØ%9ˆÔ"Ø#ˆŒØ /ˆÔØ /ˆÔØˆŒØ#5ˆÔ Ø%0ˆÔ"Ø'ˆÔØ /ˆÔØˆŒØ#ˆŒØ$ˆÔØˆŒØ�?‰?Ð"ØˆD�OÜ˜I¤sÔ+¨y¸Aª~ÜÐMÓNÐNð 7;ˆÔØ$ˆÔØ&+ˆÔ#Ø$)ˆÔ!Ø"'ˆÔØˆŒØ'+ˆŒØˆÔä!0´·±Ó!?ˆÕrž   c                ó>   — t        | d«      s| j                  «        yy)zK
        Ensure the file has been opened and its header data read.
        rÕ  N)ÚhasattrÚ
_open_filerV  s    rW   Ú_ensure_openzStataReader._ensure_open’  s   € ô �t˜^Ô,Ø�O‰OÕð -rž   c                óZ  — | j                   s$t        j                  dt        t	        «       ¬«       t        | j                  d| j                  d| j                  ¬«      }t        |j                  d«      r=|j                  j                  «       r#|j                  | _        |j                  | _        nN|5  t        |j                  j!                  «       «      | _        ddd«       | j                  j                  | _        | j#                  «        | j%                  «        y# 1 sw Y   ŒExY w)z^
        Open the file (with compression options, etc.), and read header information.
        zStataReader is being used without using a context manager. Using StataReader as a context manager is the only supported method.rs   ÚrbF)r7   Úis_textrù  ÚseekableN)rä  r’   r“   ÚResourceWarningr   r)   rß  rá  rà  rü  Úhandler  rÕ  Úcloserå  r   ÚreadÚ_read_headerÚ_setup_dtype)r  Úhandless     rW   rý  zStataReader._open_file™  sî   € ð �}Š}Ü�M‰MðWäÜ+Ó-õ	ô Ø×&Ñ&ØØ ×1Ñ1ØØ×)Ñ)ô
ˆô �7—>‘> :Ô.°7·>±>×3JÑ3JÔ3Là '§¡ˆDÔØ&Ÿ}™}ˆDÕð ñ CÜ$+¨G¯N©N×,?Ñ,?Ó,AÓ$B�Ô!÷Cà#×0Ñ0×6Ñ6ˆDÔà×ÑÔØ×ÑÕ÷Cð Cús   Â4)D!Ä!D*c                ó   — d| _         | S )zenter context managerT)rä  rV  s    rW   Ú	__enter__zStataReader.__enter__¸  s   € àˆŒØˆrž   c                ó>   — | j                   r| j                  «        y y rZ  )rå  )r  Úexc_typeÚ	exc_valueÚ	tracebacks       rW   Ú__exit__zStataReader.__exit__½  s   € ð ×ÒØ×ÑÕð rž   c                ó†   — t        j                  dt        t        «       ¬«       | j                  r| j	                  «        yy)zØClose the handle if its open.

        .. deprecated: 2.0.0

           The close method is not part of the public API.
           The only supported way to use StataReader is to use it as a context manager.
        z¹The StataReader.close() method is not part of the public API and will be removed in a future version without notice. Using StataReader as a context manager is the only supported method.rs   N)r’   r“   ÚFutureWarningr   rå  rV  s    rW   r  zStataReader.closeÆ  s=   € ô 	�‰ðSô Ü'Ó)õ	
ð ×ÒØ×ÑÕð rž   c                ó@   — | j                   dk  rd| _        yd| _        y)zC
        Set string encoding which depends on file version
        év   r  r  N)Ú_format_versionr  rV  s    rW   Ú_set_encodingzStataReader._set_encodingØ  s    € ð ×Ñ #Ò%Ø&ˆD�Nà$ˆD�Nrž   c                óf   — t        j                  d| j                  j                  d«      «      d   S )Nri  rB   r   ©rÅ   rÆ   rÕ  r  rV  s    rW   Ú
_read_int8zStataReader._read_int8á  ó)   € Ü�}‰}˜S $×"3Ñ"3×"8Ñ"8¸Ó";Ó<¸QÑ?Ð?rž   c                óf   — t        j                  d| j                  j                  d«      «      d   S )NÚBrB   r   r  rV  s    rW   Ú_read_uint8zStataReader._read_uint8ä  r  rž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )NÚHr…   r   ©rÅ   rÆ   Ú
_byteorderrÕ  r  rV  s    rW   Ú_read_uint16zStataReader._read_uint16ç  ó5   € Ü�}‰} §¡Ð0°Ð2°D×4EÑ4E×4JÑ4JÈ1Ó4MÓNÈqÑQÐQrž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )NÚIr�   r   r   rV  s    rW   Ú_read_uint32zStataReader._read_uint32ê  r#  rž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )Nr€  r  r   r   rV  s    rW   Ú_read_uint64zStataReader._read_uint64í  r#  rž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )Nr‚  r…   r   r   rV  s    rW   Ú_read_int16zStataReader._read_int16ð  r#  rž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )Nr   r�   r   r   rV  s    rW   Ú_read_int32zStataReader._read_int32ó  r#  rž   c                ó€   — t        j                  | j                  › d�| j                  j	                  d«      «      d   S )NrP  r  r   r   rV  s    rW   Ú_read_int64zStataReader._read_int64ö  r#  rž   c                óf   — t        j                  d| j                  j                  d«      «      d   S )Nr$  rB   r   r  rV  s    rW   Ú_read_char8zStataReader._read_char8ù  r  rž   c                óˆ   — t        j                  | j                  › d|z  › �| j                  j	                  d|z  «      «      S )Nr‚  r…   r   )r  Úcounts     rW   Ú_read_int16_countzStataReader._read_int16_countü  s@   € Ü�}‰}Ø�‰Ð  e¡˜}Ð-Ø×Ñ×"Ñ" 1 u¡9Ó-ó
ð 	
rž   c                ór   — | j                  «       }|dk(  r| j                  «        y | j                  |«       y )Nó   <)r0  Ú_read_new_headerÚ_read_old_header)r  Ú
first_chars     rW   r  zStataReader._read_header  s2   € Ø×%Ñ%Ó'ˆ
Ø˜ÒØ×!Ñ!Õ#à×!Ñ! *Õ-rž   c                ó”  — | j                   j                  d«       t        | j                   j                  d«      «      | _        | j                  dvr)t	        t
        j                  | j                  ¬«      «      ‚| j                  «        | j                   j                  d«       | j                   j                  d«      dk(  rdnd| _        | j                   j                  d	«       | j                  d
k  r| j                  «       n| j                  «       | _        | j                   j                  d«       | j                  «       | _        | j                   j                  d«       | j                  «       | _        | j                   j                  d«       | j!                  «       | _        | j                   j                  d«       | j                   j                  d«       | j                   j                  d«       | j%                  «       dz   | _        | j%                  «       dz   | _        | j%                  «       dz   | _        | j%                  «       dz   | _        | j%                  «       dz   | _        | j1                  «       | _        | j                   j                  d«       | j%                  «       dz   | _        | j%                  «       dz   | _        | j%                  «       dz   | _        | j;                  | j&                  «      \  | _        | _        | j                   jA                  | j(                  «       | jC                  «       | _"        | j                   jA                  | j*                  «       | jG                  | j                  dz   «      d d | _$        | j                   jA                  | j,                  «       | jK                  «       | _&        | j                   jA                  | j.                  «       | jO                  «       | _(        | j                   jA                  | j2                  «       | jS                  «       | _*        y )NrJ  r‚   ©éu   r  éw   ©Úversioné   s   MSFú>ú<é   r  r{   é   é   é   r  é   é
   é	   r†   é   rB   éÿÿÿÿ)+rÕ  r  r`   r  rf   Ú_version_errorrJ   r  r!  r"  r&  Ú_nvarÚ	_get_nobsÚ_nobsÚ_get_data_labelÚ_data_labelÚ_get_time_stampÚ_time_stampr.  Ú_seek_vartypesÚ_seek_varnamesÚ_seek_sortlistÚ_seek_formatsÚ_seek_value_label_namesÚ_get_seek_variable_labelsÚ_seek_variable_labelsÚ_data_locationÚ_seek_strlsÚ_seek_value_labelsÚ_get_dtypesÚ_typlistÚ	_dtyplistÚseekÚ_get_varlistÚ_varlistr3  Ú_srtlistÚ_get_fmtlistÚ_fmtlistÚ_get_lbllistÚ_lbllistÚ_get_variable_labelsÚ_variable_labelsrV  s    rW   r6  zStataReader._read_new_header	  se  € à×Ñ×Ñ˜rÔ"Ü" 4×#4Ñ#4×#9Ñ#9¸!Ó#<Ó=ˆÔØ×Ñ Ñ6Üœ^×2Ñ2¸4×;OÑ;OÐ2ÓPÓQÐQØ×ÑÔØ×Ñ×Ñ˜rÔ"Ø!%×!2Ñ!2×!7Ñ!7¸Ó!:¸fÒ!D™#È#ˆŒØ×Ñ×Ñ˜rÔ"à#'×#7Ñ#7¸3Ò#>ˆD×ÑÔÀD×DUÑDUÓDWð 	Œ
ð 	×Ñ×Ñ˜qÔ!à—^‘^Ó%ˆŒ
Ø×Ñ×Ñ˜rÔ"Ø×/Ñ/Ó1ˆÔØ×Ñ×Ñ˜rÔ"Ø×/Ñ/Ó1ˆÔØ×Ñ×Ñ˜rÔ"Ø×Ñ×Ñ˜qÔ!Ø×Ñ×Ñ˜qÔ!à"×.Ñ.Ó0°2Ñ5ˆÔØ"×.Ñ.Ó0°2Ñ5ˆÔØ"×.Ñ.Ó0°2Ñ5ˆÔØ!×-Ñ-Ó/°!Ñ3ˆÔØ'+×'7Ñ'7Ó'9¸BÑ'>ˆÔ$ð &*×%CÑ%CÓ%EˆÔ"à×Ñ×Ñ˜qÔ!Ø"×.Ñ.Ó0°1Ñ4ˆÔØ×+Ñ+Ó-°Ñ1ˆÔØ"&×"2Ñ"2Ó"4°rÑ"9ˆÔà(,×(8Ñ(8¸×9LÑ9LÓ(MÑ%ˆŒ�t”~à×Ñ×Ñ˜t×2Ñ2Ô3Ø×)Ñ)Ó+ˆŒà×Ñ×Ñ˜t×2Ñ2Ô3Ø×.Ñ.¨t¯z©z¸A©~Ó>¸sÀÐCˆŒà×Ñ×Ñ˜t×1Ñ1Ô2Ø×)Ñ)Ó+ˆŒà×Ñ×Ñ˜t×;Ñ;Ô<Ø×)Ñ)Ó+ˆŒà×Ñ×Ñ˜t×9Ñ9Ô:Ø $× 9Ñ 9Ó ;ˆÕrž   c                óº  — | j                   j                  |«       g }g }t        | j                  «      D ]€  }| j	                  «       }|dk  r,|j                  |«       |j                  t        |«      «       ŒD	 |j                  | j                  |   «       |j                  | j                  |   «       Œ‚ ||fS # t        $ r}t        d|› d�«      |‚d }~ww xY w)Néý  úcannot convert stata types [ú])rÕ  r`  r(  rL  r"  r  r  rÌ  rÈ  ÚKeyErrorrf   )r  Úseek_vartypesÚtyplistÚdtyplistÚ_ÚtypÚerrs          rW   r]  zStataReader._get_dtypesA  sÚ   € ð 	×Ñ×Ñ˜}Ô-ØˆØˆÜ�t—z‘zÓ"ò 
	UˆAØ×#Ñ#Ó%ˆCØ�dŠ{Ø—‘˜sÔ#Ø—‘¤ C£Õ)ðUØ—N‘N 4×#4Ñ#4°SÑ#9Ô:Ø—O‘O D×$6Ñ$6°sÑ$;Õ<ð
	Uð ˜Ð Ð øô  ò UÜ$Ð'CÀCÀ5ÈÐ%JÓKÐQTÐTûðUús   Á:<B<Â<	CÃCÃCc                óÈ   — | j                   dk  rdnd}t        | j                  «      D �cg c],  }| j                  | j                  j                  |«      «      ‘Œ. c}S c c}w )Nr  é!   é�   ©r  r(  rL  Ú_decoderÕ  r  ©r  ri  rr  s      rW   ra  zStataReader._get_varlistU  sM   € à×&Ñ&¨Ò,‰B°#ˆÜAFÀtÇzÁzÓARÖS¸A�—‘˜T×.Ñ.×3Ñ3°AÓ6Õ7ÒSÐSùÒSs   «1Ac                ó  — | j                   dk\  rd}n&| j                   dkD  rd}n| j                   dkD  rd}nd}t        | j                  «      D �cg c],  }| j                  | j                  j                  |«      «      ‘Œ. c}S c c}w )Nr  é9   éq   é1   éh   r~   r{   rx  rz  s      rW   rd  zStataReader._get_fmtlist[  sw   € Ø×Ñ 3Ò&Ø‰AØ×!Ñ! CÒ'Ø‰AØ×!Ñ! CÒ'Ø‰AàˆAäAFÀtÇzÁzÓARÖS¸A�—‘˜T×.Ñ.×3Ñ3°AÓ6Õ7ÒSÐSùÒSs   Á1Bc                óî   — | j                   dk\  rd}n| j                   dkD  rd}nd}t        | j                  «      D �cg c],  }| j                  | j                  j                  |«      «      ‘Œ. c}S c c}w )Nr  rw  r…  rv  rH  rx  rz  s      rW   rf  zStataReader._get_lbllisth  sd   € Ø×Ñ 3Ò&Ø‰AØ×!Ñ! CÒ'Ø‰AàˆAÜAFÀtÇzÁzÓARÖS¸A�—‘˜T×.Ñ.×3Ñ3°AÓ6Õ7ÒSÐSùÒSs   ¾1A2c                ó$  — | j                   dk\  rLt        | j                  «      D �cg c],  }| j                  | j                  j                  d«      «      ‘Œ. }}|S | j                   dkD  rLt        | j                  «      D �cg c],  }| j                  | j                  j                  d«      «      ‘Œ. }}|S t        | j                  «      D �cg c],  }| j                  | j                  j                  d«      «      ‘Œ. }}|S c c}w c c}w c c}w )Nr  iA  r„  éQ   r!  rx  )r  rr  Úvlblists      rW   rh  z StataReader._get_variable_labelsq  sÿ   € Ø×Ñ 3Ò&äCHÈÏÉÓCTöØ>?�—‘˜T×.Ñ.×3Ñ3°CÓ8Õ9ðˆGð ð ˆð ×!Ñ! CÒ'äBGÈÏ
É
ÓBSöØ=>�—‘˜T×.Ñ.×3Ñ3°BÓ7Õ8ðˆGð ð ˆô CHÈÏ
É
ÓBSöØ=>�—‘˜T×.Ñ.×3Ñ3°BÓ7Õ8ðˆGð ð ˆùòùòùòs   §1DÂ1DÃ1Dc                ó`   — | j                   dk\  r| j                  «       S | j                  «       S )Nr  )r  r(  r&  rV  s    rW   rM  zStataReader._get_nobs€  s.   € Ø×Ñ 3Ò&Ø×$Ñ$Ó&Ð&à×$Ñ$Ó&Ð&rž   c                óì  — | j                   dk\  r:| j                  «       }| j                  | j                  j	                  |«      «      S | j                   dk(  r:| j                  «       }| j                  | j                  j	                  |«      «      S | j                   dkD  r*| j                  | j                  j	                  d«      «      S | j                  | j                  j	                  d«      «      S )Nr  r;  r„  r‚  r!  )r  r"  ry  rÕ  r  r  ©r  Ústrlens     rW   rO  zStataReader._get_data_label†  sÆ   € Ø×Ñ 3Ò&Ø×&Ñ&Ó(ˆFØ—<‘< × 1Ñ 1× 6Ñ 6°vÓ >Ó?Ð?Ø×!Ñ! SÒ(Ø—_‘_Ó&ˆFØ—<‘< × 1Ñ 1× 6Ñ 6°vÓ >Ó?Ð?Ø×!Ñ! CÒ'Ø—<‘< × 1Ñ 1× 6Ñ 6°rÓ :Ó;Ð;à—<‘< × 1Ñ 1× 6Ñ 6°rÓ :Ó;Ð;rž   c                ó¬  — | j                   dk\  r:| j                  «       }| j                  j                  |«      j	                  d«      S | j                   dk(  r:| j                  «       }| j                  | j                  j                  |«      «      S | j                   dkD  r*| j                  | j                  j                  d«      «      S t        «       ‚)Nr  r  r;  r  é   )r  r  rÕ  r  Údecodery  rf   r†  s     rW   rQ  zStataReader._get_time_stamp’  s®   € Ø×Ñ 3Ò&Ø—_‘_Ó&ˆFØ×$Ñ$×)Ñ)¨&Ó1×8Ñ8¸ÓAÐAØ×!Ñ! SÒ(Ø—_‘_Ó&ˆFØ—<‘< × 1Ñ 1× 6Ñ 6°vÓ >Ó?Ð?Ø×!Ñ! CÒ'Ø—<‘< × 1Ñ 1× 6Ñ 6°rÓ :Ó;Ð;ä“,Ðrž   c                óò   — | j                   dk(  r=| j                  j                  d«       | j                  d| j                  z  z   dz   dz   S | j                   dk\  r| j                  «       dz   S t        «       ‚)Nr;  r  rv  é   é   r  )r  rÕ  r  rW  rL  r.  rf   rV  s    rW   rX  z%StataReader._get_seek_variable_labelsž  ss   € Ø×Ñ 3Ò&Ø×Ñ×"Ñ" 1Ô%ð ×/Ñ/°2¸¿
¹
±?ÑCÀbÑHÈ2ÑMÐMØ×!Ñ! SÒ(Ø×#Ñ#Ó%¨Ñ*Ð*ä“,Ðrž   c           	     óü  — t        |d   «      | _        | j                  dvr)t        t        j	                  | j                  ¬«      «      ‚| j                  «        | j                  «       dk(  rdnd| _        | j                  «       | _        | j                  j                  d«       | j                  «       | _        | j                  «       | _        | j                  «       | _        | j#                  «       | _        | j                  dkD  r<| j                  j                  | j                  «      D �cg c]  }t        |«      ‘Œ }}n”| j                  j                  | j                  «      }t'        j(                  |t&        j*                  ¬«      }g }|D ]C  }|| j,                  v r|j/                  | j,                  |   «       Œ0|j/                  |d	z
  «       ŒE 	 |D �cg c]  }| j0                  |   ‘Œ c}| _        	 |D �cg c]  }| j8                  |   ‘Œ c}| _        | j                  dkD  rQt=        | j                  «      D �cg c],  }| j?                  | j                  j                  d«      «      ‘Œ. c}| _         nPt=        | j                  «      D �cg c],  }| j?                  | j                  j                  d«      «      ‘Œ. c}| _         | jC                  | j                  dz   «      d d | _"        | jG                  «       | _$        | jK                  «       | _&        | jO                  «       | _(        | j                  dkD  rc	 | j                  «       }| j                  dkD  r| jS                  «       }n| jU                  «       }|dk(  rn| j                  j                  |«       Œb| j                  jW                  «       | _,        y c c}w c c}w # t        $ rC}d
j5                  |D �	cg c]  }	t7        |	«      ‘Œ nc c}	w c}	«      }
t        d|
› d�«      |‚d }~ww xY wc c}w # t        $ rC}d
j5                  |D �	cg c]  }	t7        |	«      ‘Œ nc c}	w c}	«      }t        d|› d�«      |‚d }~ww xY wc c}w c c}w )Nr   )r  r„  r…  éo   r}  ér   és   r=  rB   r@  rA  r…  ru   é   ú,rl  rm  zcannot convert stata dtypes [rv  rH  rJ  r  )-r`   r  rf   rK  rJ   r  r  r!  Ú	_filetyperÕ  r  r"  rL  rM  rN  rO  rP  rQ  rR  r‹   Ú
frombufferrà   rÎ  r  rË  r^  Újoinr  rÇ  r_  r(  ry  rb  r3  rc  rd  re  rf  rg  rh  ri  r,  r*  ÚtellrZ  )r  r8  r$  rp  ÚbufÚtyplistbÚtprs  rt  r¨   Úinvalid_typesÚinvalid_dtypesrr  Ú	data_typeÚdata_lens                  rW   r7  zStataReader._read_old_headerª  sÌ  € Ü" :¨a¡=Ó1ˆÔØ×ÑÐ'JÑJÜœ^×2Ñ2¸4×;OÑ;OÐ2ÓPÓQÐQØ×ÑÔØ!%§¡Ó!2°cÒ!9™#¸sˆŒØŸ™Ó*ˆŒØ×Ñ×Ñ˜qÔ!à×&Ñ&Ó(ˆŒ
Ø—^‘^Ó%ˆŒ
à×/Ñ/Ó1ˆÔà×/Ñ/Ó1ˆÔð ×Ñ #Ò%Ø'+×'8Ñ'8×'=Ñ'=¸d¿j¹jÓ'IÖJ !”s˜1•vÐJˆGÑJà×#Ñ#×(Ñ(¨¯©Ó4ˆCÜ—}‘} S´·±Ô9ˆHØˆGØò -�Ø˜×.Ñ.Ñ.Ø—N‘N 4×#8Ñ#8¸Ñ#<Õ=à—N‘N 2¨¡8Õ,ð	-ð	WØ;BÖC°C˜TŸ]™]¨3Ó/ÒCˆDŒMð	YØ=DÖE°c˜dŸn™n¨SÓ1ÒEˆDŒNð
 ×Ñ #Ò%äBGÈÏ
É
ÓBSöØ=>�—‘˜T×.Ñ.×3Ñ3°BÓ7Õ8òˆD�Mô
 BGÀtÇzÁzÓARöØ<=�—‘˜T×.Ñ.×3Ñ3°AÓ6Õ7òˆDŒMð ×.Ñ.¨t¯z©z¸A©~Ó>¸sÀÐCˆŒà×)Ñ)Ó+ˆŒà×)Ñ)Ó+ˆŒà $× 9Ñ 9Ó ;ˆÔð ×Ñ #Ò%ØØ ŸO™OÓ-�	Ø×'Ñ'¨#Ò-Ø#×/Ñ/Ó1‘Hà#×/Ñ/Ó1�HØ ’>ØØ×!Ñ!×&Ñ& xÔ0ð ð #×/Ñ/×4Ñ4Ó6ˆÕùòo Kùò DøÜò 	WØŸH™H°gÖ%>°¤c¨!¥fÑ%>ùÔ%>Ó?ˆMÜÐ;¸M¸?È!ÐLÓMÐSVÐVûð	Wüò FøÜò 	YØ ŸX™X°wÖ&?°!¤s¨1¥vÑ&?ùÔ&?Ó@ˆNÜÐ<¸^Ð<LÈAÐNÓOÐUXÐXûð	Yüò
ùòs~   Ä1OÇO ÇOÇ5O Ç>P% ÈP ÈP% É1Q4Ê1Q9ÏO Ï	PÏPÏ)O<
Ï;PÐPÐ P% Ð%	Q1Ð.Q,Ð=Q
ÑQ,Ñ,Q1c                óŽ  — | j                   �| j                   S g }t        | j                  «      D ]n  \  }}|| j                  v rBt	        t
        |«      }|j                  d|› �| j                  › | j                  |   › �f«       ŒV|j                  d|› �d|› �f«       Œp t        j                  |«      | _         | j                   S )z"Map between numpy and state dtypesÚsrs  )
rë  r  r^  rÏ  r   r  r  r!  r‹   rv   )r  Údtypesr   rs  s       rW   r  zStataReader._setup_dtypeõ  s»   € à�;‰;Ð"Ø—;‘;ÐàˆÜ §¡Ó.ò 	4‰FˆAˆsØ�d×)Ñ)Ñ)Üœ3 “n�Ø—‘  1 #˜w¨4¯?©?Ð*;¸D×<OÑ<OÐPSÑ<TÐ;UÐ(VÐWÕXà—‘  1 #˜w¨!¨C¨5¨	Ð2Õ3ð	4ô —h‘h˜vÓ&ˆŒà�{‰{Ðrž   c                ó  — |j                  d«      d   }	 |j                  | j                  «      S # t        $ rJ | j                  }d|› d�}t	        j
                  |t        t        «       ¬«       |j                  d«      cY S w xY w)Nr  r   z@
One or more strings in the dta file could not be decoded using zÍ, 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.rs   r  )Ú	partitionrŠ  r  ÚUnicodeDecodeErrorr’   r“   ÚUnicodeWarningr   )r  r   r  Úmsgs       rW   ry  zStataReader._decode  sŠ   € à�K‰K˜Ó˜qÑ!ˆð	'Ø—8‘8˜DŸN™NÓ+Ð+øÜ!ò 	'ð —~‘~ˆHð@Ø@H¸zð J(ð+ˆCô
 �M‰MØÜÜ+Ó-õð
 —8‘8˜IÓ&Ò&ð	'ús   –1 ±ABÂBc                ó.  — | j                  «        | j                  ry | j                  dk  rd| _        i | _        y | j                  dk\  r&| j                  j                  | j                  «       nY| j                  €J ‚| j                  | j                  j                  z  }| j                  j                  | j                  |z   «       d| _        i | _        	 | j                  dk\  r'| j                  j                  d«      dk(  r		 d| _        y | j                  j                  d«      }|s		 d| _        y | j                  dk  r+| j                  | j                  j                  d«      «      }n*| j                  | j                  j                  d«      «      }| j                  j                  d	«       | j                  «       }| j                  «       }t        j                  | j                  j                  d|z  «      | j                   › d
�|¬«      }t        j                  | j                  j                  d|z  «      | j                   › d
�|¬«      }t        j"                  |«      }||   }||   }| j                  j                  |«      }	i | j                  |<   t%        |«      D ]>  }
|
|dz
  k  r||
dz      n|}| j                  |	||
   | «      | j                  |   ||
   <   Œ@ | j                  dk\  r| j                  j                  d«       �Œ>)Nr…  Tr;  é   s   </valr�   rv  rw  r‚   r‰  ©rv   r2  rB   r†   )rþ  ré  r  Ú_value_label_dictrÕ  r`  r\  rë  rN  ÚitemsizerZ  r  ry  r&  r‹   r•  r!  Úargsortr(  )r  r.  Úslengthr  r  Útxtlenr  r  Úiir  r   r—  s               rW   Ú_read_value_labelszStataReader._read_value_labels  sÔ  € Ø×ÑÔØ×"Ò"àØ×Ñ 3Ò&à&*ˆDÔ#ØBDˆDÔ"Øà×Ñ 3Ò&Ø×Ñ×"Ñ" 4×#:Ñ#:Õ;à—;‘;Ð*Ð*Ð*Ø—Z‘Z $§+¡+×"6Ñ"6Ñ6ˆFØ×Ñ×"Ñ" 4×#6Ñ#6¸Ñ#?Ô@à"&ˆÔØ!#ˆÔàØ×#Ñ# sÒ*Ø×$Ñ$×)Ñ)¨!Ó,°Ò8Øð> #'ˆÕð; ×'Ñ'×,Ñ,¨QÓ/ˆGÙØð6 #'ˆÕð5 ×#Ñ# sÒ*ØŸ,™, t×'8Ñ'8×'=Ñ'=¸bÓ'AÓB‘àŸ,™, t×'8Ñ'8×'=Ñ'=¸cÓ'BÓC�Ø×Ñ×"Ñ" 1Ô%à×!Ñ!Ó#ˆAØ×&Ñ&Ó(ˆFÜ—-‘-Ø×!Ñ!×&Ñ& q¨1¡uÓ-¸¿¹Ð7HÈÐ5KÐSTôˆCô —-‘-Ø×!Ñ!×&Ñ& q¨1¡uÓ-¸¿¹Ð7HÈÐ5KÐSTôˆCô —‘˜C“ˆBØ�b‘'ˆCØ�b‘'ˆCØ×#Ñ#×(Ñ(¨Ó0ˆCØ.0ˆD×"Ñ" 7Ñ+Ü˜1“Xò �Ø$%¨¨A©¢I�c˜!˜a™%’j°6�Ø:>¿,¹,Ø˜˜A™ Ð%ó;�×&Ñ& wÑ/°°A±Ò7ðð
 ×#Ñ# sÒ*Ø×!Ñ!×&Ñ& qÔ)ñC rž   c                óÌ  — | j                   j                  | j                  «       ddi| _        	 | j                   j	                  d«      dk7  ry | j
                  dk(  r| j                  «       }ns| j                   j	                  d«      }| j
                  dk(  rdnd}| j                  d	k(  r|d
| |dd|z
   z   }n|d
| |d|z   d  z   }t        j                  d|«      d
   }| j                  «       }| j                  «       }| j                   j	                  |«      }|dk(  r|d
d j                  | j                  «      }nt        |«      }|| j                  t        |«      <   �Œ6)NÚ0rÐ   r‚   s   GSOr;  r~   r  r…   rA  r   r�   r€  é‚   rJ  )rÕ  r`  r[  ÚGSOr  r  r(  r!  rÅ   rÆ   r  r&  rŠ  r  r  )r  Úv_or˜  Úv_sizers  ÚlengthÚvaÚ
decoded_vas           rW   Ú_read_strlszStataReader._read_strlsS  sX  € Ø×Ñ×Ñ˜t×/Ñ/Ô0à˜�9ˆŒØØ× Ñ ×%Ñ% aÓ(¨FÒ2Øà×#Ñ# sÒ*Ø×'Ñ'Ó)‘à×'Ñ'×,Ñ,¨RÓ0�à"×2Ñ2°cÒ9™¸q�Ø—?‘? cÒ)Ø˜a ˜-¨#¨a°2¸±;Ð*@Ñ@‘Cð ˜a ˜-¨#¨q°6©z¨nÐ*=Ñ=�CÜ—m‘m C¨Ó-¨aÑ0�Ø×"Ñ"Ó$ˆCØ×&Ñ&Ó(ˆFØ×"Ñ"×'Ñ'¨Ó/ˆBØ�cŠzØ  "˜XŸ_™_¨T¯^©^Ó<‘
ô ! ›W�
à!+ˆD�H‰H”S˜“XÑñ3 rž   c                óH   — d| _         | j                  | j                  ¬«      S )NT©Únrows)rã  r  râ  rV  s    rW   Ú__next__zStataReader.__next__r  s   € Ø#ˆÔØ�y‰y˜tŸ™ˆyÓ/Ð/rž   c                óB   — |€| j                   }| j                  |¬«      S )a  
        Reads lines from Stata file and returns as dataframe

        Parameters
        ----------
        size : int, defaults to None
            Number of lines to read.  If None, reads whole file.

        Returns
        -------
        DataFrame
        r¼  )râ  r  )r  Úsizes     rW   Ú	get_chunkzStataReader.get_chunkv  s#   € ð ˆ<Ø—?‘?ˆDØ�y‰y˜tˆyÓ$Ð$rž   c	           	     óì  ‡— | j                  «        |€| j                  }|€| j                  }|€| j                  }|€| j                  }|€| j
                  }|€| j                  }|€| j                  }|€| j                  }| j                  dk(  r­|dk(  r¨d| _	        d| _
        t        | j                  ¬«      }	t        |	j                  «      D ]V  \  }
}| j                  |
   }t!        |t"        j$                  «      sŒ0|j&                  dk7  sŒ@|	|   j)                  |«      |	|<   ŒX |�| j+                  |	|«      }	|	S | j,                  dk\  r#| j.                  sd| _	        | j1                  «        | j2                  €J ‚| j2                  }| j                  | j4                  z
  |j6                  z  }||j6                  z  }t9        ||«      }|dk  r|r| j;                  «        t<        ‚| j4                  |j6                  z  }| j>                  jA                  | jB                  |z   «       t9        || j                  | j4                  z
  «      }t#        jD                  | j>                  jG                  |«      ||¬«      }| xj4                  |z  c_        | j4                  | j                  k(  rd| _	        d| _
        | jH                  | jJ                  k7  r7|jM                  «       jO                  |j$                  jQ                  «       «      }|r| j;                  «        tS        |«      dk(  rt        | j                  ¬«      }	n/t        jT                  |«      }	tW        | j                  «      |	_        |€(tY        | j4                  |z
  | j4                  «      |	_-        |�| j+                  |	|«      }	t]        |	| j^                  «      D ]7  \  }}t!        |t`        «      sŒ|	|   jc                  | jd                  «      |	|<   Œ9 | jg                  |	«      }	t        | j                  «      D �
�cg c]
  \  }
}|€Œ	|
‘Œ }}
}t#        j$                  th        «      }|D ]e  }|	jj                  d d …|f   j$                  }||| j                  |   fvsŒ4|	jm                  ||	jj                  d d …|f   j)                  |«      «       Œg | jo                  |	|«      }	|rct        | jp                  «      D ]K  \  }
Šts        ˆfd„tt        D «       «      sŒ|	jm                  |
tw        |	jj                  d d …|
f   ‰«      «       ŒM |r7| j,                  dkD  r(| jy                  |	| jz                  | j|                  |«      }	|�s^g }d	}|	D �]4  }|	|   j$                  }|t#        j$                  t"        j~                  «      t#        j$                  t"        j€                  «      fv r&t#        j$                  t"        j‚                  «      }d}n�|t#        j$                  t"        j„                  «      t#        j$                  t"        j†                  «      t#        j$                  t"        jˆ                  «      fv r%t#        j$                  t"        jŠ                  «      }d}|j�                  ||	|   j)                  |«      f«       �Œ7 |rt        jŽ                  t‘        |«      «      }	|� |	j“                  |	j•                  |«      «      }	|	S c c}}
w )
Nr   T)rö  rs  r;  r©  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrZ  )r‘   )Ú.0Údate_fmtr—   s     €rW   ú	<genexpr>z#StataReader.read.<locals>.<genexpr>ý  s   øè ø€ ÒN°H�s—~‘~ h×/ÑNùs   ƒr…  F)Krþ  rØ  rÙ  rÛ  rÜ  rÝ  rÞ  rÚ  rN  rç  rê  r$   rb  r  rö  r_  rå   r‹   rv   Úcharr�   Ú_do_select_columnsr  ré  rº  rë  rì  r«  rN   r°  ÚStopIterationrÕ  r`  rZ  r•  r  r!  rï  Úbyteswapr³   Únewbyteorderr  Úfrom_recordsr%   r&   rK   rP   r^  r`   r¶   ry  Ú_insert_strlsr”   ÚilocÚisetitemÚ_do_convert_missingre  r�   Ú_date_formatsr�   Ú_do_convert_categoricalsrª  rg  Úfloat16rê   rÄ   rß   rá   rã   r�   r  Ú	from_dictrÆ  Ú	set_indexÚpop)r  r½  rñ  rò  ró  rô  rõ  rö  r÷  rð   r   rõ   Údtrv   Úmax_read_lenÚread_lenr.  Ú
read_linesÚraw_datars  ÚdtypÚvalid_dtypesÚobject_typeÚidxÚretyped_dataÚconvertr—   s                             @rW   r  zStataReader.read‡  sù  ø€ ð 	×ÑÔð Ð Ø ×/Ñ/ˆMØÐ'Ø#'×#=Ñ#=Ð ØÐ"Ø"×3Ñ3ˆOØÐ"Ø"×3Ñ3ˆOØˆ?Ø—m‘mˆGØÐ%Ø!%×!9Ñ!9ÐØÐØŸ™ˆIØˆ=Ø—J‘JˆEð
 �J‰J˜!ŠO ¨!¢Ø*.ˆDÔ'Ø"ˆDŒOÜ T§]¡]Ô3ˆDä# D§L¡LÓ1ò 9‘��3Ø—^‘^ AÑ&�Ü˜b¤"§(¡(Õ+Ø—w‘w #“~Ø$(¨¡I×$4Ñ$4°RÓ$8˜˜Sš	ð	9ð
 Ð"Ø×.Ñ.¨t°WÓ=�ØˆKà× Ñ  CÒ'°$×2IÒ2IØ*.ˆDÔ'Ø×ÑÔð �{‰{Ð&Ð&Ð&Ø—‘ˆØŸ
™
 T×%5Ñ%5Ñ5¸¿¹ÑGˆØ˜5Ÿ>™>Ñ)ˆÜ�x Ó.ˆØ�qŠ=ñ $Ø×'Ñ'Ô)ÜÐØ×!Ñ! E§N¡NÑ2ˆØ×Ñ×Ñ˜t×2Ñ2°VÑ;Ô<Ü˜ §
¡
¨T×-=Ñ-=Ñ =Ó>ˆ
Ü—=‘=Ø×Ñ×"Ñ" 8Ó,°EÀô
ˆð 	×Ò˜JÑ&ÕØ×Ñ˜tŸz™zÒ)Ø*.ˆDÔ'Ø"ˆDŒOà�?‰?˜d×4Ñ4Ò4Ø×(Ñ(Ó*×/Ñ/°·±×0KÑ0KÓ0MÓNˆHáØ×#Ñ#Ô%äˆx‹=˜AÒÜ T§]¡]Ô3‰Dä×)Ñ)¨(Ó3ˆDÜ  §¡Ó/ˆDŒLð ÐÜ#Ø× Ñ  :Ñ-¨t×/?Ñ/?óˆDŒJð ÐØ×*Ñ*¨4°Ó9ˆDô ˜D $§-¡-Ó0ò 	:‰HˆC�Ü˜#œsÕ#Ø  ™IŸO™O¨D¯L©LÓ9��S’	ð	:ð ×!Ñ! $Ó'ˆô *3°4·>±>Ó)B×W™g˜a ÀdÑFVšÐWˆÑWÜ—h‘hœvÓ&ˆØò 	DˆCØ—I‘Iša ˜fÑ%×+Ñ+ˆEØ˜[¨$¯.©.¸Ñ*=Ð>Ò>Ø—‘˜c 4§9¡9ªQ°¨VÑ#4×#;Ñ#;¸EÓ#BÕCð	Dð
 ×'Ñ'¨¨oÓ>ˆáÜ# D§M¡MÓ2ò ‘��3ÜÓNÄÔNÕNØ—M‘MØÔ>¸t¿y¹yÊÈAÈ¹ÐPSÓTõðñ   D×$8Ñ$8¸3Ò$>Ø×0Ñ0Ø�d×,Ñ,¨d¯m©mÐ=OóˆDò ØˆLØˆGØó D�Ø˜S™	Ÿ™�ØœRŸX™X¤b§j¡jÓ1´2·8±8¼B¿J¹JÓ3GÐHÑHÜŸH™H¤R§Z¡ZÓ0�EØ"‘GØÜ—H‘HœRŸW™WÓ%Ü—H‘HœRŸX™XÓ&Ü—H‘HœRŸX™XÓ&ðñ ô
 ŸH™H¤R§X¡XÓ.�EØ"�GØ×#Ñ# S¨$¨s©)×*:Ñ*:¸5Ó*AÐ$BÖCðDñ Ü ×*Ñ*¬4°Ó+=Ó>�àÐ Ø—>‘> $§(¡(¨9Ó"5Ó6ˆDàˆùóW Xs   Ð&
[0Ð1[0c                óð  — i }t        t        |j                  «      «      D �]¥  }| j                  |   }|| j                  vrŒ"t        t        |«      }| j                  |   \  }}|j                  d d …|f   }|j                  }	|	|k  |	|kD  z  }
|
j                  «       sŒ|r�t        j                  t        j                  |
«      «      d   }t        j                  ||
   d¬«      \  }}t        |t        ¬«      }t!        |«      D ]'  \  }}t#        |«      }|||k(     }||j                  |<   Œ) n‘|j$                  }|t        j&                  t        j(                  fvrt        j(                  }t        ||¬«      }|j                  j*                  d   s|j-                  «       }t        j.                  |j                  |
<   |||<   �Œ¨ |r*|j1                  «       D ]  \  }}|j3                  ||«       Œ |S )Nr   T)Úreturn_inverseru   Ú	WRITEABLE)r(  r  rö  r^  rÍ  r   r  rÎ  rŽ   r�   r‹   ÚnonzeroÚasarrayÚuniquer'   r”   r  rì   rv   rê   rÄ   Úflagsr¿   ÚnanrA  rÏ  )r  rð   rô  Úreplacementsr   r—   ÚnminÚnmaxÚseriesÚsvalsÚmissingÚmissing_locÚumissingÚumissing_locÚreplacementÚjÚumrÈ   rï   rv   rß  ra   s                         rW   rÐ  zStataReader._do_convert_missing  sÐ  € àˆÜ”s˜4Ÿ<™<Ó(Ó)ó %	*ˆAØ—-‘- Ñ"ˆCØ˜$×*Ñ*Ñ*Øä”s˜C“.ˆCØ×)Ñ)¨#Ñ.‰JˆD�$Ø—Y‘Yšq !˜t‘_ˆFð —N‘NˆEØ˜t‘|¨°©Ñ5ˆGà—;‘;”=ØáÜ Ÿj™j¬¯©°GÓ)<Ó=¸aÑ@�Ü)+¯©°6¸'±?ÐSWÔ)XÑ&�˜,Ü$ V´6Ô:�Ü& xÓ0ò :‘E�A�rÜ$5°bÓ$9�Mà% l°aÑ&7Ñ8�CØ,9�K×$Ñ$ SÒ)ñ	:ð Ÿ™�Ø¤§¡¬R¯Z©ZÐ 8Ñ8ÜŸJ™J�EÜ$ V°5Ô9�Ø"×*Ñ*×0Ñ0°Ò=ð #.×"2Ñ"2Ó"4�Kô 02¯v©v�×#Ñ# GÑ,Ø)ˆL˜‹OðK%	*ñL Ø*×0Ñ0Ó2ò *‘
��UØ—‘˜c 5Õ)ð*àˆrž   c                ó0  — t        | d«      rt        | j                  «      dk(  r|S t        | j                  «      D ]R  \  }}|dk7  rŒ|j                  ||j                  d d …|f   D �cg c]  }| j                  t        |«         ‘Œ c}«       ŒT |S c c}w )Nr´  r   r€  )rü  r  r´  r  r^  rÏ  rÎ  r  )r  rð   r   rs  Úks        rW   rÍ  zStataReader._insert_strlsM  s‡   € Ü�t˜UÔ#¤s¨4¯8©8£}¸Ò'9ØˆKÜ §¡Ó.ò 	J‰FˆAˆsØ�cŠzØà�M‰M˜!¸¿	¹	Â!ÀQÀ$¹ÖH°1˜dŸh™h¤s¨1£vÓ.ÒHÕIð		Jð
 ˆùò Is   Á)Bc                ó”  — | j                   �s7t        |«      }t        |«      t        |«      k7  rt        d«      ‚|j	                  |j
                  «      }|r(dj                  t        |«      «      }t        d|› �«      ‚g }g }g }g }	|D ]•  }
|j
                  j                  |
«      }|j                  | j                  |   «       |j                  | j                  |   «       |j                  | j                  |   «       |	j                  | j                  |   «       Œ— || _
        || _        || _        |	| _        d| _         ||   S )Nz"columns contains duplicate entriesz, z<The following columns were not found in the Stata data set: T)rè  Úsetr  rf   Ú
differencerö  r–  rÉ  Úget_locr  r_  r^  re  rg  )r  rð   rö  Ú
column_setÚ	unmatchedÚjoinedrq  rp  ÚfmtlistÚlbllistrõ   r   s               rW   rÈ  zStataReader._do_select_columnsW  s2  € Ø×(Ó(Ü˜W›ˆJÜ�:‹¤# g£,Ò.Ü Ð!EÓFÐFØ"×-Ñ-¨d¯l©lÓ;ˆIÙØŸ™¤4¨	£?Ó3�Ü ð4Ø4:°8ð=óð ð
 ˆHØˆGØˆGØˆGØò 1�Ø—L‘L×(Ñ(¨Ó-�Ø—‘ §¡¨qÑ 1Ô2Ø—‘˜tŸ}™}¨QÑ/Ô0Ø—‘˜tŸ}™}¨QÑ/Ô0Ø—‘˜tŸ}™}¨QÑ/Õ0ð1ð &ˆDŒNØ#ˆDŒMØ#ˆDŒMØ#ˆDŒMØ(,ˆDÔ%à�G‰}Ðrž   c                ó  — |s|S g }t        ||«      D �]c  \  }}||v �rB||   }t        j                  t        |j	                  «       «      «      }	||   }
|
j                  |	«      }| j                  r|j                  «       r|	}n6| j                  r(t        j                  t        t        t        «       ¬«       d}t        |
||¬«      }|€>g }|j                  D ],  }||v r|j                  ||   «       Œ|j                  |«       Œ. nt        |j!                  «       «      }	 |j#                  |«      }t'        ||j*                  d¬«      }|j                  ||f«       �ŒN|j                  |||   f«       �Œf t/        t1        |«      d¬«      }|S # t$        $ rd}t'        |d¬«      j)                  «       }t        |j*                  |dkD     «      }ddj-                  |«      z   }d	|› d
|› d�}t%        |«      |‚d}~ww xY w)zC
        Converts categorical columns to Categorical type.
        rs   N)r  ÚorderedF)r¿   rB   zQ--------------------------------------------------------------------------------
r4   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Â   )rP   r‹   r  rÉ  ÚkeysÚisinrã  Úallr’   r“   rÎ   r   r   r   r  r  ri   Úrename_categoriesrf   r'   Úvalue_countsrK   r–  r$   rÆ  )r  rð   Úvalue_label_dictr   r÷  Úcat_converted_datarõ   Úlabelr  r  ÚcolumnÚkey_matchesÚinitial_categoriesÚcat_datar  r  rt  ÚvcÚrepeated_catsÚrepeatsr¦  Ú
cat_seriess                         rW   rÒ  z$StataReader._do_convert_categoricalsw  s  € ñ  ØˆKØÐÜ˜d GÓ,ó =	<‰JˆC�ØÐ(Ò(à% eÑ,�Ü—x‘x¤ R§W¡W£Y£Ó0�Ø˜c™�Ø$Ÿk™k¨$Ó/�Ø×'Ò'¨K¯O©OÔ,=Ø<@Ñ&ð ×+Ò+ä Ÿ™Ü:Ü8Ü'7Ó'9õð
 *.Ð&Ü&ØÐ'9ÐCUô�ð &Ð-à!#�JØ$,×$7Ñ$7ò 8˜Ø# r™>Ø&×-Ñ-¨b°©lÕ;à&×-Ñ-¨hÕ7ñ	8ô "& b§i¡i£kÓ!2�Jð3ð  (×9Ñ9¸*ÓE�Hô& $ H°D·J±JÀUÔK�
Ø"×)Ñ)¨3°
Ð*;Ö<à"×)Ñ)¨3°°S±	Ð*:Ö;ð{=	<ô| œÐ0Ó1¸Ô>ˆØˆøô/ "ò 3Ü 
°Ô7×DÑDÓF�BÜ$(¨¯©°"°q±&Ñ)9Ó$:�MØ-°·	±	¸-Ó0HÑH�GðØ˜ð ð 	€	ð 
ð
�Cô % S›/¨sÐ2ûð!3ús   Ä#FÆ	G?ÆAG:Ç:G?c                ó:   — | j                  «        | j                  S )a�  
        Return data label of Stata file.

        Examples
        --------
        >>> df = pd.DataFrame([(1,)], columns=["variable"])
        >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21)
        >>> data_label = "This is a data file."
        >>> path = "/My_path/filename.dta"
        >>> df.to_stata(path, time_stamp=time_stamp,    # doctest: +SKIP
        ...             data_label=data_label,  # doctest: +SKIP
        ...             version=None)  # doctest: +SKIP
        >>> with pd.io.stata.StataReader(path) as reader:  # doctest: +SKIP
        ...     print(reader.data_label)  # doctest: +SKIP
        This is a data file.
        )rþ  rP  rV  s    rW   Ú
data_labelzStataReader.data_labelÅ  s   € ð$ 	×ÑÔØ×ÑÐrž   c                ó:   — | j                  «        | j                  S )z2
        Return time stamp of Stata file.
        )rþ  rR  rV  s    rW   Ú
time_stampzStataReader.time_stampÚ  s   € ð
 	×ÑÔØ×ÑÐrž   c                ót   — | j                  «        t        t        | j                  | j                  «      «      S )a‘  
        Return a dict associating each variable name with corresponding label.

        Returns
        -------
        dict

        Examples
        --------
        >>> df = pd.DataFrame([[1, 2], [3, 4]], columns=["col_1", "col_2"])
        >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21)
        >>> path = "/My_path/filename.dta"
        >>> variable_labels = {"col_1": "This is an example"}
        >>> df.to_stata(path, time_stamp=time_stamp,  # doctest: +SKIP
        ...             variable_labels=variable_labels, version=None)  # doctest: +SKIP
        >>> with pd.io.stata.StataReader(path) as reader:  # doctest: +SKIP
        ...     print(reader.variable_labels())  # doctest: +SKIP
        {'index': '', 'col_1': 'This is an example', 'col_2': ''}
        >>> pd.read_stata(path)  # doctest: +SKIP
            index col_1 col_2
        0       0    1    2
        1       1    3    4
        )rþ  rÆ  rP   rb  ri  rV  s    rW   Úvariable_labelszStataReader.variable_labelsâ  s,   € ð0 	×ÑÔÜ”C˜Ÿ™ t×'<Ñ'<Ó=Ó>Ð>rž   c                óR   — | j                   s| j                  «        | j                  S )aX  
        Return a nested dict associating each variable name to its value and label.

        Returns
        -------
        dict

        Examples
        --------
        >>> df = pd.DataFrame([[1, 2], [3, 4]], columns=["col_1", "col_2"])
        >>> time_stamp = pd.Timestamp(2000, 2, 29, 14, 21)
        >>> path = "/My_path/filename.dta"
        >>> value_labels = {"col_1": {3: "x"}}
        >>> df.to_stata(path, time_stamp=time_stamp,  # doctest: +SKIP
        ...             value_labels=value_labels, version=None)  # doctest: +SKIP
        >>> with pd.io.stata.StataReader(path) as reader:  # doctest: +SKIP
        ...     print(reader.value_labels())  # doctest: +SKIP
        {'col_1': {3: 'x'}}
        >>> pd.read_stata(path)  # doctest: +SKIP
            index col_1 col_2
        0       0    1    2
        1       1    x    4
        )ré  r°  rª  rV  s    rW   r	  zStataReader.value_labelsý  s%   € ð0 ×&Ò&Ø×#Ñ#Ô%à×%Ñ%Ð%rž   )
TTNFTNTNÚinferN)rð  úFilePath | ReadBuffer[bytes]rñ  rÃ   rò  rÃ   ró  ú
str | Nonerô  rÃ   rõ  rÃ   rö  úSequence[str] | Noner÷  rÃ   rø  ú
int | Nonerù  r.   r7   úStorageOptions | NonerŠ   r3  r4  )rŠ   r1   )r  ztype[BaseException] | Noner  zBaseException | Noner  zTracebackType | NonerŠ   r3  )rŠ   r`   )rŠ   r5  )r2  r`   rŠ   ztuple[int, ...])ro  r`   rŠ   z,tuple[list[int | str], list[str | np.dtype]])rŠ   z	list[str]rf  )r8  r5  rŠ   r3  )rŠ   rg  )r   r5  rŠ   r  )rŠ   r$   rZ  )rÀ  r  rŠ   r$   )NNNNNNNN)r½  r  rñ  úbool | Nonerò  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ö  úSequence[str]rŠ   r$   )
rð   r$   r  údict[str, dict[float, str]]r   r"  r÷  rÃ   rŠ   r$   )rŠ   zdict[str, str])rŠ   r#  )6r6  r7  r8  Ú_stata_reader_docr9  rh  r  rþ  rý  r  r  r  r  r  r  r"  r&  r(  r*  r,  r.  r0  r3  r  r6  r]  ra  rd  rf  rh  rM  rO  rQ  rX  r7  r  ry  r°  rº  r¾  rÁ  r   Ú_read_method_docr  rÐ  rÍ  rÈ  rÒ  rm  r  r  r  r	  Ú__classcell__©rú  s   @rW   rÔ  rÔ  \  s¾  ø… Ø€GàÓð
 #Ø%)Ø $Ø %Ø $Ø(,Ø#'Ø $Ø*1Ø15ð/@à1ð/@ð ð/@ð #ð	/@ð
 ð/@ð ð/@ð ð/@ð &ð/@ð !ð/@ð ð/@ð (ð/@ð /ð/@ð 
õ/@óbóó>ð
à,ðð (ðð (ð	ð
 
óóó$%ó@ó@óRóRóRóRóRóRó@ó
ó.ó5<ðp!Ø ð!à	5ó!ó(Tó
TóTóó'ó
<ó
ó
óI7óVó 'ó*7'ór,ó>0ô%ñ" ÐÓð !Ø%)Ø,0Ø $Ø'+Ø'+Ø(,Ø*.ðUàðUð #ðUð *ð	Uð
 ðUð %ðUð %ðUð &ðUð (ðUð 
òUó  ðUón,ó\óð@LàðLð 6ðLð ð	Lð
 !ðLð 
óLð\ ò ó ð ð( ò ó ð ó?÷6&rž   rÔ  TFr  )rñ  rò  ró  rô  rõ  rö  r÷  rø  Úiteratorrù  r7   c               óŠ   — t        | ||||||||||
¬«      }|	s|r|S |5  |j                  «       cd d d «       S # 1 sw Y   y xY w)N)
rñ  rò  ró  rô  rõ  rö  r÷  rø  r7   rù  )rÔ  r  )r6   rñ  rò  ró  rô  rõ  rö  r÷  rø  r(  rù  r7   Úreaders                rW   Ú
read_statar+    s\   € ô  ØØ#Ø1ØØ'Ø'ØØ-ØØ'Øô€Fñ ‘9Øˆà	ñ Ø�{‰{‹}÷÷ ò ús	   Ÿ9¹Ac                ól   — | j                  «       dv ry| j                  «       dv ryt        d| › d�«      ‚)N)rA  ÚlittlerA  )r@  Úbigr@  zEndianness r‰   )Úlowerrf   )Ú
endiannesss    rW   rí  rí  @  s>   € Ø×ÑÓ˜_Ñ,ØØ	×	Ñ	Ó	˜|Ñ	+Øä˜; z l°/ÐBÓCÐCrž   c                ór   — t        | t        «      r| d|t        | «      z
  z  z   S | d|t        | «      z
  z  z   S )zQ
    Take a char string and pads it with null bytes until it's length chars.
    r  ú )rå   r5  r  ©rî   r·  s     rW   r'  r'  I  s@   € ô �$œÔØ�g ¬#¨d«)Ñ!3Ñ4Ñ4Ð4Ø�&˜F¤S¨£YÑ.Ñ/Ñ/Ð/rž   c                ón   — | dv r#t        j                  t         j                  «      S t        d| › d�«      ‚)zK
    Convert from one of the stata date formats to a type in TYPE_MAP.
    )rp   r8   rw   r:   ry   r<   r}   r=   r€   r>   r„   r?   rˆ   r@   r¾   z not implemented)r‹   rv   rÄ   ÚNotImplementedError)r—   s    rW   Ú_convert_datetime_to_stata_typer6  R  s;   € ð ð ñ ô  �x‰xœŸ
™
Ó#Ð#ä! G¨C¨5Ð0@Ð"AÓBÐBrž   c                ó  — i }| D ]|  }| |   j                  d«      sd| |   z   | |<   ||v r&|j                  |j                  |«      | |   i«       ŒLt        |t        «      st        d«      ‚|j                  || |   i«       Œ~ |S )Nú%z0convert_dates key must be a column or an integer)r‘   ÚupdaterK   rå   r`   rf   )rñ  ÚvarlistÚnew_dictr?  s       rW   Ú_maybe_convert_to_int_keysr<  k  s–   € Ø€HØò 7ˆØ˜SÑ!×,Ñ,¨SÔ1Ø!$ }°SÑ'9Ñ!9ˆM˜#ÑØ�'‰>Ø�O‰O˜WŸ]™]¨3Ó/°¸sÑ1CÐDÕEä˜c¤3Ô'Ü Ð!SÓTÐTØ�O‰O˜S -°Ñ"4Ð5Õ6ð7ð €Orž   c                óÎ  — | j                   t        j                  u r*t        t	        |j
                  «      «      }t        |d«      S | j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ryt        d| › d�«      ‚)	aõ  
    Convert dtype types to stata types. Returns the byte of the given ordinal.
    See TYPE_MAP and comments for an explanation. This is also explained in
    the dta spec.
    1 - 244 are strings of this length
                         Pandas    Stata
    251 - for int8      byte
    252 - for int16     int
    253 - for int32     long
    254 - for float32   float
    255 - for double    double

    If there are dates to convert, then dtype will already have the correct
    type inserted.
    rB   rx  rw  rv  ru  rt  ú
Data type ú not supported.©r^  r‹   Úobject_r   r   rŽ   rM   rÄ   rê   rã   rá   rß   r5  )rv   r  r«  s      rW   Ú_dtype_to_stata_typerB  y  s©   € ð" ‡z�z”R—Z‘ZÑô (¬°f·n±nÓ(EÓFˆÜ�8˜QÓÐØ	�‰”r—z‘zÑ	!ØØ	�‰”r—z‘zÑ	!ØØ	�‰”r—x‘xÑ	ØØ	�‰”r—x‘xÑ	ØØ	�‰”r—w‘wÑ	Øä! J¨u¨g°_Ð"EÓFÐFrž   c                ó  — |dk  rd}nd}|ry| j                   t        j                  u rlt        t	        |j
                  «      «      }||kD  r.|dk\  ryt        t        j                  |j                  «      «      ‚dt        t        |d«      «      z   dz   S | t        j                  k(  ry| t        j                  k(  ry	| t        j                  k(  ry
| t        j                  t        j                   fv ryt#        d| › d�«      ‚)a¢  
    Map numpy dtype to stata's default format for this type. Not terribly
    important since users can change this in Stata. Semantics are

    object  -> "%DDs" where DD is the length of the string.  If not a string,
                raise ValueError
    float64 -> "%10.0g"
    float32 -> "%9.0g"
    int64   -> "%9.0g"
    int32   -> "%12.0g"
    int16   -> "%8.0g"
    int8    -> "%8.0g"
    strl    -> "%9s"
    r;  éô   rk  z%9sr8  rB   r   z%10.0gz%9.0gz%12.0gz%8.0gr>  r?  )r^  r‹   rA  r   r   rŽ   rf   rÊ   rJ   rî   r  rM   rÄ   rê   rã   rß   rá   r5  )rv   r  Údta_versionÚ
force_strlÚmax_str_lenr«  s         rW   Ú_dtype_to_default_stata_fmtrH  �  sâ   € ð& �SÒØ‰àˆÙØØ‡z�z”R—Z‘ZÑÜ'¬°f·n±nÓ(EÓFˆØ�kÒ!Ø˜cÒ!Øä Ô!>×!EÑ!EÀfÇkÁkÓ!RÓSÐSØ”Sœ˜X qÓ)Ó*Ñ*¨SÑ0Ð0Ø	”"—*‘*Ò	ØØ	”"—*‘*Ò	ØØ	”"—(‘(Ò	ØØ	”2—7‘7œBŸH™HÐ%Ñ	%Øä! J¨u¨g°_Ð"EÓFÐFrž   Úcompression_optionsÚfname)r7   rI  c                  ó˜  ‡ — e Zd ZU dZdZdZded<   	 	 	 	 	 	 	 	 d(ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)ˆ fd„Zd*d	„Zd+d
„Z		 	 	 	 d,d„Z
d-d„Zd-d„Zd.d„Zd/d„Zd-d„Zd0d„Zd1d„Zd.d„Zd.d„Zd.d„Zd.d„Zd.d„Zd.d„Zd.d„Zd.d„Zd.d„Z	 	 d2	 	 	 	 	 d3d„Zd.d„Zd.d„Zd.d„Zd.d „Zd.d!„Z d.d"„Z!d-d#„Z"d4d$„Z#d5d%„Z$e%d6d&„«       Z&d7d'„Z'ˆ xZ(S )8ÚStataWriterar  
    A class for writing Stata binary dta files

    Parameters
    ----------
    fname : path (string), buffer or path object
        string, path object (pathlib.Path or py._path.local.LocalPath) or
        object implementing a binary write() functions. If using a buffer
        then the buffer will not be automatically closed after the file
        is written.
    data : DataFrame
        Input to save
    convert_dates : dict
        Dictionary mapping columns containing datetime types to stata internal
        format to use when writing the dates. Options are 'tc', 'td', 'tm',
        'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name.
        Datetime columns that do not have a conversion type specified will be
        converted to 'tc'. Raises NotImplementedError if a datetime column has
        timezone information
    write_index : bool
        Write the index to Stata dataset.
    byteorder : str
        Can be ">", "<", "little", or "big". default is `sys.byteorder`
    time_stamp : datetime
        A datetime to use as file creation date.  Default is the current time
    data_label : str
        A label for the data set.  Must be 80 characters or smaller.
    variable_labels : dict
        Dictionary containing columns as keys and variable labels as values.
        Each label must be 80 characters or smaller.
    {compression_options}

        .. versionchanged:: 1.4.0 Zstandard support.

    {storage_options}

    value_labels : dict of dicts
        Dictionary containing columns as keys and dictionaries of column value
        to labels as values. The combined length of all labels for a single
        variable must be 32,000 characters or smaller.

        .. versionadded:: 1.4.0

    Returns
    -------
    writer : StataWriter instance
        The StataWriter instance has a write_file method, which will
        write the file to the given `fname`.

    Raises
    ------
    NotImplementedError
        * If datetimes contain timezone information
    ValueError
        * Columns listed in convert_dates are neither datetime64[ns]
          or datetime
        * Column dtype is not representable in Stata
        * Column listed in convert_dates is not in DataFrame
        * Categorical label contains more than 32,000 characters

    Examples
    --------
    >>> data = pd.DataFrame([[1.0, 1]], columns=['a', 'b'])
    >>> writer = StataWriter('./data_file.dta', data)
    >>> writer.write_file()

    Directly write a zip file
    >>> compression = {{"method": "zip", "archive_name": "data_file.dta"}}
    >>> writer = StataWriter('./data_file.zip', data, compression=compression)
    >>> writer.write_file()

    Save a DataFrame with dates
    >>> from datetime import datetime
    >>> data = pd.DataFrame([[datetime(2000,1,1)]], columns=['date'])
    >>> writer = StataWriter('./date_data_file.dta', data, {{'date' : 'tw'}})
    >>> writer.write_file()
    rD  r  r2  r  N©r	  c               óð  •— t         ‰| �  «        || _        |€i n|| _        || _        || _        || _        || _        || _        g | _	        t        j                  g t        ¬«      | _        |	| _        d | _        i | _        | j#                  |«       |
| _        |€t&        j(                  }t+        |«      | _        || _        t        j0                  t        j2                  t        j4                  dœ| _        y )Nru   )rv  ru  rt  )r×  r  rð   rØ  Ú_write_indexrR  rP  ri  Ú_non_cat_value_labelsÚ_value_labelsr‹   r  rÃ   Ú_has_value_labelsrà  Ú_output_fileÚ_converted_namesÚ_prepare_pandasr7   rî  r*  rí  r!  Ú_fnamerã   rá   rß   Útype_converters)r  rJ  rð   rñ  Úwrite_indexr*  r  r  r  rù  r7   r	  rú  s               €rW   r  zStataWriter.__init__ 	  sÔ   ø€ ô 	‰ÑÔØˆŒ	Ø$1Ð$9™b¸}ˆÔØ'ˆÔØ%ˆÔØ%ˆÔØ /ˆÔØ%1ˆÔ"Ø46ˆÔÜ!#§¡¨"´DÔ!9ˆÔØ'ˆÔØ.2ˆÔØ57ˆÔà×Ñ˜TÔ"Ø.ˆÔàÐÜŸ™ˆIÜ)¨)Ó4ˆŒØˆŒÜ%'§X¡X´B·H±HÄ2Ç7Á7ÑKˆÕrž   c                ó€   — | j                   j                  j                  |j                  | j                  «      «       y)zS
        Helper to call encode before writing to file for Python 3 compat.
        N)r	  r  r%  r  r  )r  Úto_writes     rW   Ú_writezStataWriter._writeF	  s)   € ð 	�‰×Ñ×!Ñ! (§/¡/°$·.±.Ó"AÕBrž   c                óN   — | j                   j                  j                  |«       y)z?
        Helper to assert file is open before writing.
        N)r	  r  r%  rT  s     rW   Ú_write_byteszStataWriter._write_bytesL	  s   € ð 	�‰×Ñ×!Ñ! %Õ(rž   c                ó–  — g }| j                   €|S | j                   j                  «       D ]›  \  }}|| j                  v r| j                  |   }n)||j                  v rt	        |«      }nt        d|› d�«      ‚t        ||   j                  «      st        d|› d�«      ‚t        ||| j                  «      }|j                  |«       Œ� |S )zc
        Check for value labels provided for non-categorical columns. Value
        labels
        zCan't create value labels for z!, it wasn't found in the dataset.z6, value labels can only be applied to numeric columns.)rP  rA  rT  rö  r  rn  r   rv   rf   r<  r  r  )r  rð   Únon_cat_value_labelsr  ÚlabelsÚcolnameÚsvls          rW   Ú_prepare_non_cat_value_labelsz)StataWriter._prepare_non_cat_value_labelsR	  sí   € ð =?ÐØ×%Ñ%Ð-Ø'Ð'à#×9Ñ9×?Ñ?ÓAò 	-‰OˆG�VØ˜$×/Ñ/Ñ/Ø×/Ñ/°Ñ8‘Ø˜DŸL™LÑ(Ü˜g›,‘äØ4°W°Ið >,ð ,óð ô
 $ D¨¡M×$7Ñ$7Ô8ô !Ø4°W°Ið >>ð >óð ô (¨°¸¿¹ÓHˆCØ ×'Ñ'¨Õ,ð'	-ð( $Ð#rž   c                ó˜  — |j                   D �cg c]  }t        |t        «      ‘Œ }}t        |«      s|S | xj                  t        j                  |«      z  c_        t        j                  }g }t        ||«      D �]ª  \  }}|�r‹t        ||   | j                  ¬«      }| j                  j                  |«       ||   j                  j                  j                   }|t
        j"                  k(  rt%        d«      ‚||   j                  j                  j&                  j)                  «       }	|	j+                  «        ||«      k\  r¨|t
        j,                  k(  r$t        j                   t
        j.                  «      }nZ|t
        j.                  k(  r$t        j                   t
        j0                  «      }n#t        j                   t
        j2                  «      }t        j                  |	|¬«      }	 ||«      |	|	dk(  <   |j                  ||	f«       �Œ•|j                  |||   f«       �Œ­ t5        j6                  t9        |«      «      S c c}w )zŠ
        Check for categorical columns, retain categorical information for
        Stata file and convert categorical data to int
        )r  zCIt is not possible to export int64-based categorical data to Stata.ru   rJ  )r¡  rå   r   r�   rR  r‹   r  rì   re  rP   rþ   r  rQ  r  r  Úcodesrv   r�   rf   rŽ   r¿   rM   rß   rá   rã   rÄ   r$   rÔ  rÆ  )
r  rð   rv   Úis_catre  Údata_formattedrõ   Ú
col_is_catrb  ri   s
             rW   Ú_prepare_categoricalsz!StataWriter._prepare_categoricalss	  sÎ  € ð
 DHÇ;Á;ÖO¸%”*˜UÔ$4Õ5ÐOˆÐOÜ�6Œ{ØˆKà×Ò¤"§(¡(¨6Ó"2Ñ2Õä!2×!IÑ!IÐØˆÜ" 4¨Ó0ó 	8‰OˆC�ÚÜ% d¨3¡i¸$¿.¹.ÔI�Ø×"Ñ"×)Ñ)¨#Ô.Ø˜S™	Ÿ™×+Ñ+×1Ñ1�ØœBŸH™HÒ$Ü$ðAóð ð ˜c™Ÿ™×,Ñ,×4Ñ4×9Ñ9Ó;�ð —:‘:“<Ñ#9¸%Ó#@Ò@Ø¤§¡Ò'Ü "§¡¬¯©Ó 2™Ø¤"§(¡(Ò*Ü "§¡¬¯©Ó 2™ä "§¡¬¯©Ó 4˜ÜŸX™X f°EÔ:�Fñ (>¸eÓ'D��v ‘|Ñ$Ø×%Ñ% s¨F mÖ4à×%Ñ% s¨D°©IÐ&6Ö7ð5	8ô6 ×"Ñ"¤4¨Ó#7Ó8Ð8ùòG Ps   �Ic                ó
  — |D ]}  }||   j                   }|t        j                  t        j                  fv sŒ5|t        j                  k(  r| j                  d   }n| j                  d   }||   j                  |«      ||<   Œ |S )z†
        Checks floating point data columns for nans, and replaces these with
        the generic Stata for missing value (.)
        rª   r[   )rv   r‹   rê   rÄ   rD  rç   )r  rð   r$  rv   ró  s        rW   Ú_replace_nanszStataWriter._replace_nans�	  s~   € ð ò 	6ˆAØ˜‘G—M‘MˆEØœŸ™¤R§Z¡ZÐ0Ò0ØœBŸJ™JÒ&Ø"&×"5Ñ"5°cÑ":‘Kà"&×"5Ñ"5°cÑ":�KØ˜q™'Ÿ.™.¨Ó5��Q’ð	6ð ˆrž   c                 ó   — y)zNo-op, forward compatibilityNr:  rV  s    rW   Ú_update_strl_nameszStataWriter._update_strl_names®	  ó   � rž   c                ó†   — |D ];  }|dk  s|dkD  sŒ|dk  s|dkD  sŒ|dk  s|dkD  sŒ$|dk7  sŒ*|j                  |d«      }Œ= |S )aŠ  
        Validate variable names for Stata export.

        Parameters
        ----------
        name : str
            Variable name

        Returns
        -------
        str
            The validated name with invalid characters replaced with
            underscores.

        Notes
        -----
        Stata 114 and 117 support ascii characters in a-z, A-Z, 0-9
        and _.
        ÚAÚZÚaÚzr²  Ú9rr  )Úreplace©r  rî   r$  s      rW   Ú_validate_variable_namez#StataWriter._validate_variable_name±	  sX   € ð( ò 	,ˆAà�S’˜A ›GØ˜’W  C£Ø˜’W  C£Ø˜“Hà—|‘| A sÓ+‘ð	,ð ˆrž   c                óö  — i }t        |j                  «      }|dd }d}t        |«      D ]Ú  \  }}|}t        |t        «      st	        |«      }| j                  |«      }|| j                  v rd|z   }d|d   cxk  rdk  rn nd|z   }|dt        t        |«      d«       }||k(  s\|j                  |«      dkD  rCdt	        |«      z   |z   }|dt        t        |«      d«       }|dz  }|j                  |«      dkD  rŒC|||<   |||<   ŒÜ t        |«      |_        | j                  rCt        ||«      D ]4  \  }	}
|	|
k7  sŒ| j                  |
   | j                  |	<   | j                  |
= Œ6 |rzg }|j                  «       D ]  \  }}|› d|› �}|j                  |«       Œ t        j!                  d	j#                  |«      «      }t%        j&                  |t(        t+        «       ¬
«       || _        | j/                  «        |S )aÌ  
        Checks column names to ensure that they are valid Stata column names.
        This includes checks for:
            * Non-string names
            * Stata keywords
            * Variables that start with numbers
            * Variables with names that are too long

        When an illegal variable name is detected, it is converted, and if
        dates are exported, the variable name is propagated to the date
        conversion dictionary
        Nr   rr  r²  rt  r!  rB   z   ->   z
    rs   )rÉ  rö  r  rå   r  rw  rÐ  rN   r  r2  r%   rØ  rP   rA  r  rÍ   rJ   r–  r’   r“   r   r   rT  rm  )r  rð   Úconverted_namesrö  Úoriginal_columnsÚduplicate_var_idrô  rî   Ú	orig_namer$  ÚoÚconversion_warningr¦  rñ   s                 rW   Ú_check_column_nameszStataWriter._check_column_namesÏ	  s$  € ð 02ˆÜ�t—|‘|Ó$ˆØ"¡1˜:ÐàÐÜ  Ó)ò 	‰GˆAˆtØˆIÜ˜d¤CÔ(Ü˜4“y�à×/Ñ/°Ó5ˆDð �t×*Ñ*Ñ*Ø˜T‘z�ð �d˜1‘gÔ$ Õ$Ø˜T‘z�àÐ,œ#œc $›i¨Ó,Ð-ˆDà˜9Ò$à—m‘m DÓ)¨AÒ-à¤Ð%5Ó!6Ñ6¸Ñ=�DØÐ 4¤#¤c¨$£i°Ó"4Ð5�DØ$¨Ñ)Ð$ð	 —m‘m DÓ)¨AÓ-ð
 .2� 	Ñ*àˆG�AŠJð5	ô8 ˜W“~ˆŒð ×ÒÜ˜GÐ%5Ó6ò /‘��1Ø˜“6Ø-1×-@Ñ-@ÀÑ-C�D×'Ñ'¨Ñ*Ø×+Ñ+¨AÑ.ð/ñ
 Ø!#ÐØ#2×#8Ñ#8Ó#:ò /‘�	˜4Ø"˜ 8¨D¨6Ð2�Ø"×)Ñ)¨#Õ.ð/ô "×(Ñ(¨¯©Ð7IÓ)JÓKˆBÜ�M‰MØÜ!Ü+Ó-õð !0ˆÔØ×ÑÔ!àˆrž   c                ó  — g | _         g | _        |j                  «       D ]i  \  }}| j                   j                  t	        || j
                  |   «      «       | j                  j                  t        || j
                  |   «      «       Œk y rZ  )rÿ  rp  rA  r  rH  rð   rB  )r  r¡  rõ   rv   s       rW   Ú_set_formats_and_typesz"StataWriter._set_formats_and_types
  so   € Ø"$ˆŒØ"$ˆŒØ Ÿ,™,›.ò 	M‰JˆC�Ø�L‰L×ÑÔ ;¸EÀ4Ç9Á9ÈSÁ>Ó RÔSØ�L‰L×ÑÔ 4°U¸D¿I¹IÀc¹NÓ KÕLñ	Mrž   c                ó   — |j                  «       }| j                  r"|j                  «       }t        |t        «      r|}| j                  |«      }t        |«      }| j                  |«      }t        j                  d|j                  d   «      | _        | j                  |«      }|D �cg c]  }|j                  ‘Œ }}|j                  j                  |«      }| xj                  |z  c_        | j                   j#                  |«       | j%                  |«      }|j                  \  | _        | _        || _        |j                  j-                  «       | _        |j0                  }|D ]D  }|| j2                  v rŒt5        j6                  ||   j8                  d«      sŒ6d| j2                  |<   ŒF t;        | j2                  | j.                  «      | _        | j2                  D ]<  }	t=        | j2                  |	   «      }
t        j8                  |
«      |j>                  |	<   Œ> | jA                  «        | jC                  |«       | j2                  �?| j2                  D ]/  }	t        |	tD        «      sŒ| j2                  |	   | jF                  |	<   Œ1 y y c c}w )NFrB   r¡   rp   )$r¿   rO  Úreset_indexrå   r$   r  rü   rk  r‹   Úrepeatrè   rR  rc  r  rö  r  rQ  Úextendri  ÚnobsÚnvarrð   Útolistr:  r¡  rØ  r   r±   rv   r<  r6  rÎ  Ú_encode_stringsr�  r`   rÿ  )r  rð   Útempr_  rb  Únon_cat_columnsÚhas_non_cat_val_labelsr¡  rõ   r?  Únew_types              rW   rU  zStataWriter._prepare_pandas
  sI  € ð �y‰y‹{ˆà×ÒØ×#Ñ#Ó%ˆDÜ˜$¤	Ô*Ø�ð ×'Ñ'¨Ó-ˆô $ DÓ)ˆð ×!Ñ! $Ó'ˆô "$§¡¨5°$·*±*¸Q±-Ó!@ˆÔð  $×AÑAÀ$ÓGÐà2FÖG¨3˜3Ÿ;›;ÐGˆÐGØ!%§¡×!2Ñ!2°?Ó!CÐØ×ÒÐ"8Ñ8ÕØ×Ñ×!Ñ!Ð"6Ô7ð ×)Ñ)¨$Ó/ˆà#Ÿz™zÑˆŒ	�4”9ØˆŒ	Ø—|‘|×*Ñ*Ó,ˆŒà—‘ˆð ò 	0ˆCØ�d×)Ñ)Ñ)ØÜ�‰˜t C™yŸ™°Õ4Ø+/�×#Ñ# CÒ(ð		0ô 9Ø×Ñ §¡ó
ˆÔð ×&Ñ&ò 	2ˆCÜ6°t×7JÑ7JÈ3Ñ7OÓPˆHÜ!Ÿx™x¨Ó1ˆF�K‰K˜Òð	2ð
 	×ÑÔà×#Ñ# FÔ+ð ×ÑÐ*Ø×*Ñ*ò A�Ü˜c¤3Õ'Ø(,×(;Ñ(;¸CÑ(@�D—L‘L Ò%ñAð +ùòE Hs   Â)Jc                óB  — | j                   }t        | dg «      }t        | j                  «      D ]î  \  }}||v s||v rŒ| j                  |   }|j                  }|j
                  t        j                  u sŒGt        |d¬«      }|dk(  s)t        |«      dk(  s|j                  }t        d|› d�«      ‚| j                  |   j                  j                  | j                  «      }t        t!        |j"                  «      «      | j$                  k  sŒà|| j                  |<   Œð y)	zõ
        Encode strings in dta-specific encoding

        Do not encode columns marked for date conversion or for strL
        conversion. The strL converter independently handles conversion and
        also accepts empty string arrays.
        Ú_convert_strlTr¤   rW  r   zColumn `a  ` cannot be exported.

Only string-like object arrays
containing all strings or a mix of strings and None can be exported.
Object arrays containing only null values are prohibited. Other object
types cannot be exported and must first be converted to one of the
supported types.N)rØ  rO   r  rð   rv   r^  r‹   rA  r   r  rî   rf   r  r  r  r   r   rŽ   Ú_max_string_length)	r  rñ  Úconvert_strlr   rõ   r  rv   Úinferred_dtypeÚencodeds	            rW   r‰  zStataWriter._encode_stringsa
  s  € ð ×+Ñ+ˆä˜t _°bÓ9ˆÜ §	¡	Ó*ò 	-‰FˆAˆsà�MÑ! S¨LÑ%8ØØ—Y‘Y˜s‘^ˆFØ—L‘LˆEØ�z‰zœRŸZ™ZÒ'Ü!,¨V¸DÔ!A�Ø'¨8Ò3¼¸F»ÀqÒ8HØ Ÿ+™+�CÜ$ð	Ø	ˆð ðóð ð Ÿ)™) C™.×,Ñ,×3Ñ3°D·N±NÓC�ô )¬°w·±Ó)GÓHØ×.Ñ.ó/ð &-�D—I‘I˜c’Nñ1	-rž   c           	     ó¾  — t        | j                  d| j                  d| j                  ¬«      5 | _        | j                  j
                  d   �n| j                  j                  t        «       c| _        | j                  _        | j                  j                  j                  | j                  j                  «       	 | j                  | j                  | j                  ¬«       | j                  «        | j                  «        | j!                  «        | j#                  «        | j%                  «        | j'                  «        | j)                  «        | j+                  «        | j-                  «        | j/                  «       }| j1                  |«       | j3                  «        | j5                  «        | j7                  «        | j                  «        | j9                  «        	 ddd«       y# t:        $ rØ}| j                  j=                  «        t?        | j                  t@        tB        jD                  f«      r�tB        jF                  jI                  | j                  «      rd	 tC        jJ                  | j                  «       |‚# tL        $ r6 tO        jP                  d| j                  › d�tR        tU        «       ¬	«       Y |‚w xY w|‚d}~ww xY w# 1 sw Y   yxY w)
a  
        Export DataFrame object to Stata dta format.

        Examples
        --------
        >>> df = pd.DataFrame({"fully_labelled": [1, 2, 3, 3, 1],
        ...                    "partially_labelled": [1.0, 2.0, np.nan, 9.0, np.nan],
        ...                    "Y": [7, 7, 9, 8, 10],
        ...                    "Z": pd.Categorical(["j", "k", "l", "k", "j"]),
        ...                    })
        >>> path = "/My_path/filename.dta"
        >>> labels = {"fully_labelled": {1: "one", 2: "two", 3: "three"},
        ...           "partially_labelled": {1.0: "one", 2.0: "two"},
        ...           }
        >>> writer = pd.io.stata.StataWriter(path,
        ...                                  df,
        ...                                  value_labels=labels)  # doctest: +SKIP
        >>> writer.write_file()  # doctest: +SKIP
        >>> df = pd.read_stata(path)  # doctest: +SKIP
        >>> df  # doctest: +SKIP
            index fully_labelled  partially_labeled  Y  Z
        0       0            one                one  7  j
        1       1            two                two  7  k
        2       2          three                NaN  9  l
        3       3          three                9.0  8  k
        4       4            one                NaN 10  j
        ÚwbF)rù  r  r7   ÚmethodN)r  r  z!This save was not successful but z. could not be deleted. This file is not valid.rs   )+r)   rV  rà  r7   r	  rù  r  r   rS  Úcreated_handlesr  Ú_write_headerrP  rR  Ú
_write_mapÚ_write_variable_typesÚ_write_varnamesÚ_write_sortlistÚ_write_formatsÚ_write_value_label_namesÚ_write_variable_labelsÚ_write_expansion_fieldsÚ_write_characteristicsÚ_prepare_dataÚ_write_dataÚ_write_strlsÚ_write_value_labelsÚ_write_file_close_tagÚ_closeÚ	Exceptionr  rå   r  ÚosÚPathLikeÚpathÚisfileÚunlinkÚOSErrorr’   r“   r  r   )r  ÚrecordsÚexcs      rW   Ú
write_filezStataWriter.write_file†
  sJ  € ô8 Ø�K‰KØØ×)Ñ)ØØ ×0Ñ0ô
ð /	ð Œ\Ø�|‰|×'Ñ'¨Ñ1Ð=ð :>¿¹×9LÑ9LÌgËiÐ6�Ô! 4§<¡<Ô#6Ø—‘×,Ñ,×3Ñ3°D·L±L×4GÑ4GÔHð"Ø×"Ñ"Ø#×/Ñ/¸D×<LÑ<Lð #ô ð —‘Ô!Ø×*Ñ*Ô,Ø×$Ñ$Ô&Ø×$Ñ$Ô&Ø×#Ñ#Ô%Ø×-Ñ-Ô/Ø×+Ñ+Ô-Ø×,Ñ,Ô.Ø×+Ñ+Ô-Ø×,Ñ,Ó.�Ø× Ñ  Ô)Ø×!Ñ!Ô#Ø×(Ñ(Ô*Ø×*Ñ*Ô,Ø—‘Ô!Ø—‘•÷A/	ð /	øôB ò Ø—‘×"Ñ"Ô$Ü˜dŸk™k¬C´·±Ð+=Ô>Ä2Ç7Á7Ç>Á>Ø—K‘KôDðÜŸ	™	 $§+¡+Ô.ð �	øô #ò Ü Ÿ™Ø?ÀÇÁ¸}ð MBð Bä+Ü'7Ó'9ö	ð �	ðúð �	ûðú÷C/	ð /	úsP   ¯BKÂ=D(G/Ç/	KÇ8A-KÉ&JÊKÊ;KËKËKËKËKËKËKc                ó4  — | j                   �Œt        | j                  j                  t        «      sJ ‚| j                  j                  | j                   c}| j                  _        | j                  j                  j                  |j                  «       «       yy)zÌ
        Close the file if it was created by the writer.

        If a buffer or file-like object was passed in, for example a GzipFile,
        then leave this file open for the caller to close.
        N)rS  rå   r	  r  r   r%  r)  )r  r+  s     rW   r§  zStataWriter._closeÓ
  sp   € ð ×ÑÐ(Ü˜dŸl™l×1Ñ1´7Ô;Ð;Ð;Ø'+§|¡|×':Ñ':¸D×<MÑ<MÐ$ˆC�—‘Ô$Ø�L‰L×Ñ×%Ñ% c§l¡l£nÕ5ð )rž   c                 ó   — y©úNo-op, future compatibilityNr:  rV  s    rW   r™  zStataWriter._write_mapà
  rn  rž   c                 ó   — yr´  r:  rV  s    rW   r¦  z!StataWriter._write_file_close_tagã
  rn  rž   c                 ó   — yr´  r:  rV  s    rW   r¡  z"StataWriter._write_characteristicsæ
  rn  rž   c                 ó   — yr´  r:  rV  s    rW   r¤  zStataWriter._write_strlsé
  rn  rž   c                ó:   — | j                  t        dd«      «       y)z"Write 5 zeros for expansion fieldsrÐ   r¨  N)r[  r'  rV  s    rW   r   z#StataWriter._write_expansion_fieldsì
  s   € à�‰”J˜r 1Ó%Õ&rž   c                óz   — | j                   D ],  }| j                  |j                  | j                  «      «       Œ. y rZ  )rQ  r]  r0  r!  )r  r  s     rW   r¥  zStataWriter._write_value_labelsð
  s6   € Ø×$Ñ$ò 	HˆBØ×Ñ˜b×5Ñ5°d·o±oÓFÕGñ	Hrž   c           	     óÊ  — | j                   }| j                  t        j                  dd«      «       | j	                  |dk(  xr dxs d«       | j	                  d«       | j	                  d«       | j                  t        j                  |dz   | j
                  «      d d «       | j                  t        j                  |d	z   | j                  «      d d
 «       |€+| j                  | j                  t        dd«      «      «       n-| j                  | j                  t        |d d d«      «      «       |€t        j                  «       }nt        |t        «      st        d«      ‚g d¢}t        |«      D ��ci c]  \  }}|dz   |“Œ }}}|j                  d«      ||j                     z   |j                  d«      z   }| j                  | j                  |«      «       y c c}}w )Nri  r�  r@  úúr2  r‚  r…   r   r�   rÐ   éP   ú"time_stamp should be datetime type©ÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDecrB   ú%d ú	 %Y %H:%M)r!  r]  rÅ   r&  r[  r‡  r†  Ú_null_terminate_bytesr'  r   Únowrå   rf   r  ÚstrftimerR   )	r  r  r  r*  Úmonthsr   rR   Úmonth_lookupÚtss	            rW   r˜  zStataWriter._write_headerô
  s¨  € ð
 —O‘Oˆ	à×Ñœ&Ÿ+™+ c¨3Ó/Ô0à�‰�I Ñ$Ò/¨Ò9°6Ô:à�‰�FÔà�‰�FÔà×Ñœ&Ÿ+™+ i°#¡o°t·y±yÓAÀ"À1ÐEÔFà×Ñœ&Ÿ+™+ i°#¡o°t·y±yÓAÀ"À1ÐEÔFàÐØ×Ñ˜d×8Ñ8¼ÀBÈÓ9KÓLÕMà×ÑØ×*Ñ*¬:°jÀÀ"°oÀrÓ+JÓKôð
 ÐÜ!Ÿ™›‰JÜ˜J¬Ô1ÜÐAÓBÐBò
ˆô 6?¸vÓ5F×G©¨¨E˜˜A™˜u™ÐGˆÑGà×Ñ Ó&Ø˜:×+Ñ+Ñ,ñ-à×!Ñ! +Ó.ñ/ð 	ð
 	×Ñ˜$×4Ñ4°RÓ8Õ9ùó Hs   Å8Gc                óp   — | j                   D ]'  }| j                  t        j                  d|«      «       Œ) y )Nr  )rp  r]  rÅ   r&  )r  rs  s     rW   rš  z!StataWriter._write_variable_types+  s.   € Ø—<‘<ò 	5ˆCØ×ÑœfŸk™k¨#¨sÓ3Õ4ñ	5rž   c                óˆ   — | j                   D ]3  }| j                  |«      }t        |d d d«      }| j                  |«       Œ5 y )Nr!  rv  )r:  Ú_null_terminate_strr'  r[  )r  rî   s     rW   r›  zStataWriter._write_varnames/  sE   € ð —L‘Lò 	ˆDØ×+Ñ+¨DÓ1ˆDÜ˜d 3 B˜i¨Ó,ˆDØ�K‰K˜Õñ	rž   c                ó^   — t        dd| j                  dz   z  «      }| j                  |«       y )NrÐ   r…   rB   )r'  r‡  r[  )r  Úsrtlists     rW   rœ  zStataWriter._write_sortlist7  s'   € ä˜R  d§i¡i°!¡mÑ!4Ó5ˆØ�‰�GÕrž   c                ó\   — | j                   D ]  }| j                  t        |d«      «       Œ y )Nr~  )rÿ  r[  r'  )r  r—   s     rW   r�  zStataWriter._write_formats<  s(   € à—<‘<ò 	-ˆCØ�K‰Kœ
 3¨Ó+Õ,ñ	-rž   c                ó  — t        | j                  «      D ]m  }| j                  |   rA| j                  |   }| j	                  |«      }t        |d d d«      }| j                  |«       ŒS| j                  t        dd«      «       Œo y )Nr!  rv  rÐ   )r(  r‡  rR  r:  r×  r'  r[  )r  r   rî   s      rW   rž  z$StataWriter._write_value_label_namesA  sv   € ä�t—y‘yÓ!ò 	0ˆAà×%Ñ% aÒ(Ø—|‘| A‘�Ø×/Ñ/°Ó5�Ü! $ s¨ )¨RÓ0�Ø—‘˜DÕ!à—‘œJ r¨2Ó.Õ/ñ	0rž   c                ó²  — t        dd«      }| j                  €,t        | j                  «      D ]  }| j	                  |«       Œ y | j
                  D ]„  }|| j                  v rc| j                  |   }t        |«      dkD  rt        d«      ‚t        d„ |D «       «      }|st        d«      ‚| j	                  t        |d«      «       Œt| j	                  |«       Œ† y )NrÐ   r‚  r¾  ú.Variable labels must be 80 characters or fewerc              3  ó8   K  — | ]  }t        |«      d k  –— Œ y­w)é   N)Úord)rÄ  r$  s     rW   rÆ  z5StataWriter._write_variable_labels.<locals>.<genexpr>[  s   è ø€ Ò<°¤ A£¨¥Ñ<ùs   ‚zKVariable labels must contain only characters that can be encoded in Latin-1)	r'  ri  r(  r‡  r[  rð   r  rf   r  )r  Úblankr   rõ   r
  Ú	is_latin1s         rW   rŸ  z"StataWriter._write_variable_labelsM  sÏ   € ä˜2˜rÓ"ˆà× Ñ Ð(Ü˜4Ÿ9™9Ó%ò #�Ø—‘˜EÕ"ð#àà—9‘9ò 	#ˆCØ�d×+Ñ+Ñ+Ø×-Ñ-¨cÑ2�Ü�u“: ’?Ü$Ð%UÓVÐVÜÑ<°eÔ<Ó<�	Ù Ü$ð4óð ð —‘œJ u¨bÓ1Õ2à—‘˜EÕ"ñ	#rž   c                ó   — |S )rµ  r:  )r  rð   s     rW   Ú_convert_strlszStataWriter._convert_strlse  s   € àˆrž   c                óD  — | j                   }| j                  }| j                  }| j                  �7t        |«      D ])  \  }}||v sŒt	        ||   | j
                  |   «      ||<   Œ+ | j                  |«      }i }| j                  t        t        j                  «      k(  }t        |«      D ]Ô  \  }}||   }|| j                  k  rŠt        j                  «       5  t        j                  ddt        ¬«       ||   j!                  d«      }	d d d «       	j#                  t$        |f¬«      ||<   d|› �}
|
||<   ||   j'                  |
«      ||<   Œ¤||   j(                  }|s|j+                  | j                  «      }|||<   ŒÖ |j-                  d|¬«      S # 1 sw Y   ŒŒxY w)	NÚignorezDowncasting object dtype arrays)r  rÐ   )Úargsrs  F)rK   Úcolumn_dtypes)rð   rp  rØ  r  rÉ   rÿ  rä  r!  rí  rî  r*  r�  r’   Úcatch_warningsÚfilterwarningsr  rç   r¶   r'  r�   rv   rË  Ú
to_records)r  rð   rp  rñ  r   rõ   r¡  Únative_byteorderrs  ÚdcÚstyperv   s               rW   r¢  zStataWriter._prepare_datai  sž  € Ø�y‰yˆØ—,‘,ˆØ×+Ñ+ˆà×ÑÐ*Ü# D›/ò ‘��3Ø˜Ò%Ü >Ø˜S™	 4§<¡<°¡?ó!�D˜’Iðð ×"Ñ" 4Ó(ˆð ˆØŸ?™?¬o¼c¿m¹mÓ.LÑLÐÜ “oò 	$‰FˆAˆsØ˜!‘*ˆCØ�d×-Ñ-Ò-Ü×,Ñ,Ó.ñ .Ü×+Ñ+Ø Ø9Ü!.õð
 ˜c™×)Ñ)¨"Ó-�B÷.ð ŸH™H¤Z°s°f˜HÓ=��S‘	Ø˜C˜5˜	�Ø#��s‘Ø  ™I×,Ñ,¨UÓ3��S’	à˜S™	Ÿ™�Ù'Ø!×.Ñ.¨t¯©Ó?�EØ#��s’ð%	$ð( �‰ U¸&ˆÓAÐA÷#.ð .ús   Ã1FÆF	c                óB   — | j                  |j                  «       «       y rZ  )r]  Útobytes©r  r¯  s     rW   r£  zStataWriter._write_data�  s   € Ø×Ñ˜'Ÿ/™/Ó+Õ,rž   c                ó   — | dz  } | S )Nr2  r:  )r   s    rW   r×  zStataWriter._null_terminate_str“  s   € à	ˆV‰ˆØˆrž   c                óV   — | j                  |«      j                  | j                  «      S rZ  )r×  r  r  )r  r   s     rW   rÏ  z!StataWriter._null_terminate_bytes˜  s"   € Ø×'Ñ'¨Ó*×1Ñ1°$·.±.ÓAÐArž   )NTNNNNr  N)rJ  úFilePath | WriteBuffer[bytes]rð   r$   rñ  údict[Hashable, str] | NonerX  rÃ   r*  r  r  údatetime | Noner  r  r  rõ  rù  r.   r7   r  r	  ú'dict[Hashable, dict[float, str]] | NonerŠ   r3  )rZ  r  rŠ   r3  )ra   r5  rŠ   r3  )rð   r$   rŠ   zlist[StataNonCatValueLabel]r!  r4  ©rî   r  rŠ   r  ©r¡  r'   rŠ   r3  )rð   r$   rŠ   r3  ©NN©r  r  r  rö  rŠ   r3  )rŠ   únp.rec.recarray)r¯  rü  rŠ   r3  )r   r  rŠ   r  )r   r  rŠ   r5  ))r6  r7  r8  r9  r�  r  rh  r  r[  r]  rc  ri  rk  rm  rw  r  r�  rU  r‰  r±  r§  r™  r¦  r¡  r¤  r   r¥  r˜  rš  r›  rœ  r�  rž  rŸ  rä  r¢  r£  Ústaticmethodr×  rÏ  r&  r'  s   @rW   rL  rL  Ê  s¼  ø… ñ
Lð\ ÐØ-6€IÐ*Ó6ð 59Ø Ø $Ø&*Ø!%Ø6:Ø*1Ø15ð$Lð AEñ$Là,ð$Lð ð$Lð 2ð	$Lð
 ð$Lð ð$Lð $ð$Lð ð$Lð 4ð$Lð (ð$Lð /ð$Lð >ð$Lð 
õ$LóLCó)ð$Øð$à	$ó$óB(9óTó"+óó<GóRMó@AóD#-óJKóZ6ó*ó*ó*ó*ó'óHð "&Ø&*ð5:àð5:ð $ð5:ð 
ó	5:ón5óóó
-ó

0ó#ó0ó%BóN-ð òó ð÷Brž   rL  c                óä  — |ry| j                   t        j                  u r2t        t	        |j
                  «      «      }t        |d«      }|dk  r|S y| j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ry| j                   t        j                  u ryt        d	| › d
�«      ‚)a  
    Converts dtype types to stata types. Returns the byte of the given ordinal.
    See TYPE_MAP and comments for an explanation. This is also explained in
    the dta spec.
    1 - 2045 are strings of this length
                Pandas    Stata
    32768 - for object    strL
    65526 - for int8      byte
    65527 - for int16     int
    65528 - for int32     long
    65529 - for float32   float
    65530 - for double    double

    If there are dates to convert, then dtype will already have the correct
    type inserted.
    ry  rB   rk  rz  r{  r|  r}  r~  r>  r?  r@  )rv   r  rF  r«  s       rW   Ú_dtype_to_stata_type_117rÿ  œ  s¾   € ñ$ ØØ‡z�z”R—Z‘ZÑô (¬°f·n±nÓ(EÓFˆÜ�x Ó#ˆØ�tÒØˆOØØ	�‰”r—z‘zÑ	!ØØ	�‰”r—z‘zÑ	!ØØ	�‰”r—x‘xÑ	ØØ	�‰”r—x‘xÑ	ØØ	�‰”r—w‘wÑ	Øä! J¨u¨g°_Ð"EÓFÐFrž   c                ób   — t        | t        «      rt        | d«      } | d|t        | «      z
  z  z   S )zU
    Takes a bytes instance and pads it with null bytes until it's length chars.
    r  r  )rå   r  r5  r  r3  s     rW   Ú_pad_bytes_newr  Æ  s3   € ô �$œÔÜ�T˜7Ó#ˆØ�'˜V¤c¨$£iÑ/Ñ0Ñ0Ð0rž   c                  óH   — e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd
d„Zdd„Zy)ÚStataStrLWriteraÑ  
    Converter for Stata StrLs

    Stata StrLs map 8 byte values to strings which are stored using a
    dictionary-like format where strings are keyed to two values.

    Parameters
    ----------
    df : DataFrame
        DataFrame to convert
    columns : Sequence[str]
        List of columns names to convert to StrL
    version : int, optional
        dta version.  Currently supports 117, 118 and 119
    byteorder : str, optional
        Can be ">", "<", "little", or "big". default is `sys.byteorder`

    Notes
    -----
    Supports creation of the StrL block of a dta file for dta versions
    117, 118 and 119.  These differ in how the GSO is stored.  118 and
    119 store the GSO lookup value as a uint32 and a uint64, while 117
    uses two uint32s. 118 and 119 also encode all strings as unicode
    which is required by the format.  117 uses 'latin-1' a fixed width
    encoding that extends the 7-bit ascii table with an additional 128
    characters.
    Nc                ó*  — |dvrt        d«      ‚|| _        || _        || _        ddi| _        |€t
        j                  }t        |«      | _        d}d}d| _	        |dk(  rd	}d}d
| _	        n
|dk(  rd}nd}ddd|z
  z  z  | _
        || _        || _        y )Nr:  z,Only dta versions 117, 118 and 119 supportedrÐ   ©r   r   r%  r€  r  r;  r�   r  r  r†   r¨  r…   r  )rf   Ú_dta_verÚdfrö  Ú
_gso_tablerî  r*  rí  r!  r  Ú_o_offetÚ_gso_o_typeÚ_gso_v_type)r  r  rö  r>  r*  Ú
gso_v_typeÚ
gso_o_typeÚo_sizes           rW   r  zStataStrLWriter.__init__ì  s²   € ð ˜/Ñ)ÜÐKÓLÐLØˆŒàˆŒØˆŒØ˜v˜,ˆŒØÐÜŸ™ˆIÜ)¨)Ó4ˆŒàˆ
Øˆ
Ø ˆŒØ�cŠ>ØˆFØˆJØ&ˆD�NØ˜Š^Ø‰FàˆFØ˜a 1 v¡:Ñ.Ñ/ˆŒØ%ˆÔØ%ˆÕrž   c                ó0   — |\  }}|| j                   |z  z   S rZ  )r	  )r  r?  rº   r}  s       rW   Ú_convert_keyzStataStrLWriter._convert_key  s   € Ø‰ˆˆ1Ø�4—=‘= 1Ñ$Ñ$Ð$rž   c                óŒ  — | j                   }| j                  }t        |j                  «      }|| j                     }| j                  D �cg c]  }||j	                  |«      f‘Œ }}t        j                  |j                  t
        j                  ¬«      }t        |j                  «       «      D ]b  \  }\  }	}
t        |«      D ]L  \  }\  }}|
|   }|€dn|}|j                  |d«      }|€|dz   |dz   f}|||<   | j                  |«      |||f<   ŒN Œd t        | j                  «      D ]  \  }}|dd…|f   ||<   Œ ||fS c c}w )aø  
        Generates the GSO lookup table for the DataFrame

        Returns
        -------
        gso_table : dict
            Ordered dictionary using the string found as keys
            and their lookup position (v,o) as values
        gso_df : DataFrame
            DataFrame where strl columns have been converted to
            (v,o) values

        Notes
        -----
        Modifies the DataFrame in-place.

        The DataFrame returned encodes the (v,o) values as uint64s. The
        encoding depends on the dta version, and can be expressed as

        enc = v + o * 2 ** (o_size * 8)

        so that v is stored in the lower bits and o is in the upper
        bits. o_size is

          * 117: 4
          * 118: 6
          * 119: 5
        ru   NrÐ   rB   )r  r  rÉ  rö  rK   r‹   Úemptyrè   r×   r  ÚiterrowsÚgetr  )r  Ú	gso_tableÚgso_dfrö  Úselectedrõ   Ú	col_indexr  r}  rß  Úrowrô  rº   r  r?  r   s                   rW   Úgenerate_tablezStataStrLWriter.generate_table  sM  € ð: —O‘Oˆ	Ø—‘ˆÜ�v—~‘~Ó&ˆØ˜$Ÿ,™,Ñ'ˆØ:>¿,¹,ÖG°3�c˜7Ÿ=™=¨Ó-Ò.ÐGˆ	ÐGÜ�x‰x˜Ÿ™¬b¯i©iÔ8ˆÜ& x×'8Ñ'8Ó':Ó;ò 
	4‰MˆA‰z��SÜ(¨Ó3ò 	4‘�‘8�C˜Ø˜#‘h�à˜K‘b¨S�Ø—m‘m C¨Ó.�Ø�;à˜q™5 ! a¡%˜.�CØ%(�I˜c‘NØ!×.Ñ.¨sÓ3��Q˜�T’
ñ	4ð
	4ô   §¡Ó-ò 	%‰FˆAˆsØšq !˜t™*ˆF�3ŠKð	%ð ˜&Ð Ð ùò! Hs   ÁEc           	     ó8  — t        «       }t        dd«      }t        j                  | j                  dz   d«      }t        j                  | j                  dz   d«      }| j                  | j
                  z   }| j                  | j                  z   }| j                  dz   }|j                  «       D ]Û  \  }	}
|
dk(  rŒ|
\  }}|j                  |«       |j                  t        j                  ||«      «       |j                  t        j                  ||«      «       |j                  |«       t        |	d«      }|j                  t        j                  |t        |«      d	z   «      «       |j                  |«       |j                  |«       ŒÝ |j                  «       S )
aç  
        Generates the binary blob of GSOs that is written to the dta file.

        Parameters
        ----------
        gso_table : dict
            Ordered dictionary (str, vo)

        Returns
        -------
        gso : bytes
            Binary content of dta file to be placed between strl tags

        Notes
        -----
        Output format depends on dta version.  117 uses two uint32s to
        express v and o while 118+ uses a uint32 for v and a uint64 for o.
        r´  Úasciir  r³  r   r%  r  r  rB   )r   r5  rÅ   r&  r!  r  r
  rA  r%  r  r)  )r  r  r+  ÚgsoÚgso_typeÚnullÚv_typeÚo_typeÚlen_typeÚstrlÚvorº   r}  Úutf8_strings                 rW   Úgenerate_blobzStataStrLWriter.generate_blobD  sO  € ô: ‹iˆÜ�E˜7Ó#ˆÜ—;‘;˜tŸ™°Ñ4°cÓ:ˆÜ�{‰{˜4Ÿ?™?¨SÑ0°!Ó4ˆØ—‘ 4×#3Ñ#3Ñ3ˆØ—‘ 4×#3Ñ#3Ñ3ˆØ—?‘? SÑ(ˆØ!Ÿ™Ó)ò 	‰HˆD�"Ø�VŠ|ØØ‰DˆAˆqð �I‰I�cŒNð �I‰I”f—k‘k &¨!Ó,Ô-ð �I‰I”f—k‘k &¨!Ó,Ô-ð �I‰I�hÔô    gÓ.ˆKØ�I‰I”f—k‘k (¬C°Ó,<¸qÑ,@ÓAÔBð �I‰I�kÔ"Ø�I‰I�d�Oð/	ð2 �|‰|‹~Ðrž   )r;  N)
r  r$   rö  r"  r>  r`   r*  r  rŠ   r3  )r?  ztuple[int, int]rŠ   r`   )rŠ   z,tuple[dict[str, tuple[int, int]], DataFrame])r  zdict[str, tuple[int, int]]rŠ   r5  )r6  r7  r8  r9  r  r  r  r&  r:  rž   rW   r  r  Ï  sV   „ ñð@ Ø $ð&àð&ð ð&ð ð	&ð
 ð&ð 
ó&óB%ó1!ôf=rž   r  c                  ó*  ‡ — e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zedd„«       Zdd„Z		 	 d	 	 	 	 	 dd	„Z
d d
„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd d„Zd!d„Zd"d„Zˆ xZS )#ÚStataWriter117a�  
    A class for writing Stata binary dta files in Stata 13 format (117)

    Parameters
    ----------
    fname : path (string), buffer or path object
        string, path object (pathlib.Path or py._path.local.LocalPath) or
        object implementing a binary write() functions. If using a buffer
        then the buffer will not be automatically closed after the file
        is written.
    data : DataFrame
        Input to save
    convert_dates : dict
        Dictionary mapping columns containing datetime types to stata internal
        format to use when writing the dates. Options are 'tc', 'td', 'tm',
        'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name.
        Datetime columns that do not have a conversion type specified will be
        converted to 'tc'. Raises NotImplementedError if a datetime column has
        timezone information
    write_index : bool
        Write the index to Stata dataset.
    byteorder : str
        Can be ">", "<", "little", or "big". default is `sys.byteorder`
    time_stamp : datetime
        A datetime to use as file creation date.  Default is the current time
    data_label : str
        A label for the data set.  Must be 80 characters or smaller.
    variable_labels : dict
        Dictionary containing columns as keys and variable labels as values.
        Each label must be 80 characters or smaller.
    convert_strl : list
        List of columns names to convert to Stata StrL format.  Columns with
        more than 2045 characters are automatically written as StrL.
        Smaller columns can be converted by including the column name.  Using
        StrLs can reduce output file size when strings are longer than 8
        characters, and either frequently repeated or sparse.
    {compression_options}

        .. versionchanged:: 1.4.0 Zstandard support.

    value_labels : dict of dicts
        Dictionary containing columns as keys and dictionaries of column value
        to labels as values. The combined length of all labels for a single
        variable must be 32,000 characters or smaller.

        .. versionadded:: 1.4.0

    Returns
    -------
    writer : StataWriter117 instance
        The StataWriter117 instance has a write_file method, which will
        write the file to the given `fname`.

    Raises
    ------
    NotImplementedError
        * If datetimes contain timezone information
    ValueError
        * Columns listed in convert_dates are neither datetime64[ns]
          or datetime
        * Column dtype is not representable in Stata
        * Column listed in convert_dates is not in DataFrame
        * Categorical label contains more than 32,000 characters

    Examples
    --------
    >>> data = pd.DataFrame([[1.0, 1, 'a']], columns=['a', 'b', 'c'])
    >>> writer = pd.io.stata.StataWriter117('./data_file.dta', data)
    >>> writer.write_file()

    Directly write a zip file
    >>> compression = {"method": "zip", "archive_name": "data_file.dta"}
    >>> writer = pd.io.stata.StataWriter117(
    ...     './data_file.zip', data, compression=compression
    ...     )
    >>> writer.write_file()

    Or with long strings stored in strl format
    >>> data = pd.DataFrame([['A relatively long string'], [''], ['']],
    ...                     columns=['strls'])
    >>> writer = pd.io.stata.StataWriter117(
    ...     './data_file_with_long_strings.dta', data, convert_strl=['strls'])
    >>> writer.write_file()
    rk  r;  NrM  c               óž   •— g | _         |	�| j                   j                  |	«       t        ‰| �  ||||||||||
|¬«       i | _        d| _        y )N)r*  r  r  r  r	  rù  r7   rž   )r�  r…  r×  r  Ú_mapÚ
_strl_blob)r  rJ  rð   rñ  rX  r*  r  r  r  r‘  rù  r7   r	  rú  s                €rW   r  zStataWriter117.__init__Ý  sj   ø€ ð" .0ˆÔØÐ#Ø×Ñ×%Ñ% lÔ3ä‰ÑØØØØØØ!Ø!Ø+Ø%Ø#Ø+ð 	ô 	
ð %'ˆŒ	Øˆ�rž   c                óŠ   — t        | t        «      rt        | d«      } t        d|z   dz   d«      | z   t        d|z   dz   d«      z   S )zSurround val with <tag></tag>r  rA  r@  z</)rå   r  r5  )r  Útags     rW   Ú_tagzStataWriter117._tag  sI   € ô �cœ3ÔÜ˜˜WÓ%ˆCÜ�S˜3‘Y ‘_ gÓ.°Ñ4´u¸TÀC¹ZÈ#Ñ=MÈwÓ7WÑWÐWrž   c                ó–   — | j                   j                  €J ‚| j                   j                  j                  «       | j                  |<   y)z.Update map location for tag with file positionN)r	  r  r—  r*  )r  r-  s     rW   Ú_update_mapzStataWriter117._update_map	  s8   € à�|‰|×"Ñ"Ð.Ð.Ð.ØŸ™×,Ñ,×1Ñ1Ó3ˆ�	‰	�#Šrž   c           	     ój  — | j                   }| j                  t        dd«      «       t        «       }|j	                  | j                  t        t        | j                  «      d«      d«      «       |j	                  | j                  |dk(  xr dxs dd«      «       | j                  dk  rd	nd
}|j	                  | j                  t        j                  ||z   | j                  «      d«      «       | j                  dk(  rd
nd}|j	                  | j                  t        j                  ||z   | j                  «      d«      «       |�|dd nd}|j                  | j                  «      }| j                  dk(  rdnd	}	t        j                  ||	z   t        |«      «      }
|
|z   }|j	                  | j                  |d«      «       |€t        j                   «       }nt#        |t        «      st%        d«      ‚g d¢}t'        |«      D ��ci c]  \  }}|dz   |“Œ }}}|j)                  d«      ||j*                     z   |j)                  d«      z   }dt        |d«      z   }|j	                  | j                  |d«      «       | j                  | j                  |j-                  «       d«      «       yc c}}w )zWrite the file headerz<stata_dta>r  Úreleaser@  ÚMSFÚLSFr*  r  r  r%  ÚKr;  r€  ÚNNr¾  rÐ   r  r
  r¿  rÀ  rB   rÍ  rÎ  ó   Ú	timestampÚheader)r!  r]  r5  r   r%  r.  r  Ú_dta_versionrÅ   r&  r‡  r†  r  r  r  r   rÐ  rå   rf   r  rÑ  rR   r)  )r  r  r  r*  r+  Ú	nvar_typeÚ	nobs_sizer
  Úencoded_labelÚ
label_sizeÚ	label_lenrÒ  r   rR   rÓ  rÔ  Ústata_tss                    rW   r˜  zStataWriter117._write_header  sG  € ð —O‘Oˆ	Ø×Ñœ% ¨wÓ7Ô8Ü‹iˆà�	‰	�$—)‘)œE¤# d×&7Ñ&7Ó"8¸'ÓBÀIÓNÔOà�	‰	�$—)‘)˜I¨Ñ,Ò6°Ò?¸%ÀÓMÔNà×,Ñ,°Ò3‘C¸ˆ	Ø�	‰	�$—)‘)œFŸK™K¨	°IÑ(=¸t¿y¹yÓIÈ3ÓOÔPà×,Ñ,°Ò3‘C¸ˆ	Ø�	‰	�$—)‘)œFŸK™K¨	°IÑ(=¸t¿y¹yÓIÈ3ÓOÔPà#-Ð#9�
˜3˜B‘¸rˆØŸ™ T§^¡^Ó4ˆØ ×-Ñ-°Ò4‘S¸#ˆ
Ü—K‘K 	¨JÑ 6¼¸MÓ8JÓKˆ	Ø! MÑ1ˆØ�	‰	�$—)‘)˜M¨7Ó3Ô4ð ÐÜ!Ÿ™›‰JÜ˜J¬Ô1ÜÐAÓBÐBò
ˆô 6?¸vÓ5F×G©¨¨E˜˜A™˜u™ÐGˆÑGà×Ñ Ó&Ø˜:×+Ñ+Ñ,ñ-à×!Ñ! +Ó.ñ/ð 	ð œU 2 wÓ/Ñ/ˆØ�	‰	�$—)‘)˜H kÓ2Ô3Ø×Ñ˜$Ÿ)™) C§L¡L£N°HÓ=Õ>ùó Hs   È	J/c                ó  — | j                   s8d| j                  j                  j                  «       dddddddddddddœ| _         | j                  j                  j	                  | j                   d   «       t        «       }| j                   j                  «       D ]4  }|j                  t        j                  | j                  dz   |«      «       Œ6 | j                  | j                  |j                  «       d«      «       y)zÇ
        Called twice during file write. The first populates the values in
        the map with 0s.  The second call writes the final map locations when
        all blocks have been written.
        r   )Ú
stata_dataÚmapÚvariable_typesÚvarnamesÚsortlistÚformatsÚvalue_label_namesr  Úcharacteristicsrð   Ústrlsr	  Ústata_data_closeúend-of-filerC  r€  N)r*  r	  r  r—  r`  r   ri   r%  rÅ   r&  r!  r]  r.  r)  )r  r+  r  s      rW   r™  zStataWriter117._write_mapH  sÖ   € ð �yŠyàØ—|‘|×*Ñ*×/Ñ/Ó1Ø"#ØØØØ%&Ø#$Ø#$ØØØ !Ø$%Ø ñˆDŒIð" 	�‰×Ñ× Ñ  §¡¨5Ñ!1Ô2Ü‹iˆØ—9‘9×#Ñ#Ó%ò 	?ˆCØ�I‰I”f—k‘k $§/¡/°CÑ"7¸Ó=Õ>ð	?à×Ñ˜$Ÿ)™) C§L¡L£N°EÓ:Õ;rž   c                ó  — | j                  d«       t        «       }| j                  D ]4  }|j                  t	        j
                  | j                  dz   |«      «       Œ6 | j                  | j                  |j                  «       d«      «       y )NrD  r  )
r0  r   rp  r%  rÅ   r&  r!  r]  r.  r)  )r  r+  rs  s      rW   rš  z$StataWriter117._write_variable_typesf  sk   € Ø×ÑÐ)Ô*Ü‹iˆØ—<‘<ò 	?ˆCØ�I‰I”f—k‘k $§/¡/°CÑ"7¸Ó=Õ>ð	?à×Ñ˜$Ÿ)™) C§L¡L£NÐ4DÓEÕFrž   c                óz  — | j                  d«       t        «       }| j                  dk(  rdnd}| j                  D ]O  }| j	                  |«      }t        |d d j                  | j                  «      |dz   «      }|j                  |«       ŒQ | j                  | j                  |j                  «       d«      «       y )NrE  r;  r!  r#  rB   )r0  r   r:  r:  r×  r  r  r  r%  r]  r.  r)  )r  r+  Úvn_lenrî   s       rW   r›  zStataWriter117._write_varnamesm  sŸ   € Ø×Ñ˜Ô$Ü‹iˆà×(Ñ(¨CÒ/‘°SˆØ—L‘Lò 	ˆDØ×+Ñ+¨DÓ1ˆDÜ! $ s¨ )×"2Ñ"2°4·>±>Ó"BÀFÈQÁJÓOˆDØ�I‰I�d�Oð	ð 	×Ñ˜$Ÿ)™) C§L¡L£N°JÓ?Õ@rž   c                ó´   — | j                  d«       | j                  dk  rdnd}| j                  | j                  d|z  | j                  dz   z  d«      «       y )NrF  r<  r…   r�   r  rB   )r0  r:  r]  r.  r‡  )r  Ú	sort_sizes     rW   rœ  zStataWriter117._write_sortlistx  sO   € Ø×Ñ˜Ô$Ø×*Ñ*¨SÒ0‘A°aˆ	Ø×Ñ˜$Ÿ)™) G¨iÑ$7¸4¿9¹9Àq¹=Ñ$IÈ:ÓVÕWrž   c                óH  — | j                  d«       t        «       }| j                  dk(  rdnd}| j                  D ]6  }|j	                  t        |j                  | j                  «      |«      «       Œ8 | j                  | j                  |j                  «       d«      «       y )NrG  r;  r~  r|  )r0  r   r:  rÿ  r%  r  r  r  r]  r.  r)  )r  r+  Úfmt_lenr—   s       rW   r�  zStataWriter117._write_formats}  s   € Ø×Ñ˜Ô#Ü‹iˆØ×)Ñ)¨SÒ0‘"°bˆØ—<‘<ò 	KˆCØ�I‰I”n S§Z¡Z°·±Ó%?ÀÓIÕJð	Kà×Ñ˜$Ÿ)™) C§L¡L£N°IÓ>Õ?rž   c                óÌ  — | j                  d«       t        «       }| j                  dk(  rdnd}t        | j                  «      D ]o  }d}| j
                  |   r| j                  |   }| j                  |«      }t        |d d j                  | j                  «      |dz   «      }|j                  |«       Œq | j                  | j                  |j                  «       d«      «       y )NrH  r;  r!  r#  rÐ   rB   )r0  r   r:  r(  r‡  rR  r:  r×  r  r  r  r%  r]  r.  r)  )r  r+  Úvl_lenr   rî   Úencoded_names         rW   rž  z'StataWriter117._write_value_label_names…  sÈ   € Ø×ÑÐ,Ô-Ü‹iˆà×(Ñ(¨CÒ/‘°SˆÜ�t—y‘yÓ!ò 	$ˆAàˆDØ×%Ñ% aÒ(Ø—|‘| A‘�Ø×+Ñ+¨DÓ1ˆDÜ)¨$¨s°¨)×*:Ñ*:¸4¿>¹>Ó*JÈFÐUVÉJÓWˆLØ�I‰I�lÕ#ð	$ð 	×Ñ˜$Ÿ)™) C§L¡L£NÐ4GÓHÕIrž   c                ó$  — | j                  d«       t        «       }| j                  dk(  rdnd}t        d|dz   «      }| j                  €[t        | j                  «      D ]  }|j                  |«       Œ | j                  | j                  |j                  «       d«      «       y | j                  D ]„  }|| j                  v rc| j                  |   }t        |«      dkD  rt        d«      ‚	 |j                  | j                  «      }|j                  t        ||dz   «      «       Œt|j                  |«       Œ† | j                  | j                  |j                  «       d«      «       y # t         $ r}t        d| j                  › �«      |‚d }~ww xY w)	Nr  r;  r¾  i@  rÐ   rB   rÝ  zDVariable labels must contain only characters that can be encoded in )r0  r   r:  r  ri  r(  r‡  r%  r]  r.  r)  rð   r  rf   r  r  ÚUnicodeEncodeError)	r  r+  rU  rá  rr  rõ   r
  r“  rt  s	            rW   rŸ  z%StataWriter117._write_variable_labels”  sm  € à×ÑÐ*Ô+Ü‹iˆà×(Ñ(¨CÒ/‘°SˆÜ˜r 6¨A¡:Ó.ˆà× Ñ Ð(Ü˜4Ÿ9™9Ó%ò !�Ø—	‘	˜%Õ ð!à×Ñ˜dŸi™i¨¯©«Ð8IÓJÔKØà—9‘9ò 	!ˆCØ�d×+Ñ+Ñ+Ø×-Ñ-¨cÑ2�Ü�u“: ’?Ü$Ð%UÓVÐVðØ#Ÿl™l¨4¯>©>Ó:�Gð —	‘	œ.¨°&¸1±*Ó=Õ>à—	‘	˜%Õ ð	!ð  	×Ñ˜$Ÿ)™) C§L¡L£NÐ4EÓFÕGøô *ò Ü$ð-Ø-1¯^©^Ð,<ð>óð ðûðús   Ã+E(Å(	FÅ1F
Æ
Fc                óh   — | j                  d«       | j                  | j                  dd«      «       y )NrI  rž   )r0  r]  r.  rV  s    rW   r¡  z%StataWriter117._write_characteristics´  s+   € Ø×ÑÐ*Ô+Ø×Ñ˜$Ÿ)™) CÐ):Ó;Õ<rž   c                ó¨   — | j                  d«       | j                  d«       | j                  |j                  «       «       | j                  d«       y )Nrð   s   <data>s   </data>)r0  r]  rð  rñ  s     rW   r£  zStataWriter117._write_data¸  sA   € Ø×Ñ˜Ô Ø×Ñ˜)Ô$Ø×Ñ˜'Ÿ/™/Ó+Ô,Ø×Ñ˜*Õ%rž   c                ó|   — | j                  d«       | j                  | j                  | j                  d«      «       y )NrJ  )r0  r]  r.  r+  rV  s    rW   r¤  zStataWriter117._write_strls¾  s-   € Ø×Ñ˜Ô!Ø×Ñ˜$Ÿ)™) D§O¡O°WÓ=Õ>rž   c                 ó   — y)zNo-op in dta 117+Nr:  rV  s    rW   r   z&StataWriter117._write_expansion_fieldsÂ  rn  rž   c                ó6  — | j                  d«       t        «       }| j                  D ]@  }|j                  | j                  «      }| j                  |d«      }|j                  |«       ŒB | j                  | j                  |j                  «       d«      «       y )Nr	  Úlbl)	r0  r   rQ  r0  r!  r.  r%  r]  r)  )r  r+  r  Úlabs       rW   r¥  z"StataWriter117._write_value_labelsÅ  s|   € Ø×Ñ˜Ô(Ü‹iˆØ×$Ñ$ò 	ˆBØ×)Ñ)¨$¯/©/Ó:ˆCØ—)‘)˜C Ó'ˆCØ�I‰I�c�Nð	ð 	×Ñ˜$Ÿ)™) C§L¡L£N°NÓCÕDrž   c                ó~   — | j                  d«       | j                  t        dd«      «       | j                  d«       y )NrK  z</stata_dta>r  rL  )r0  r]  r5  rV  s    rW   r¦  z$StataWriter117._write_file_close_tagÎ  s4   € Ø×ÑÐ+Ô,Ø×Ñœ% °Ó8Ô9Ø×Ñ˜Õ'rž   c                óº   — | j                   j                  «       D ]>  \  }}|| j                  v sŒ| j                  j                  |«      }|| j                  |<   Œ@ y)z†
        Update column names for conversion to strl if they might have been
        changed to comply with Stata naming rules
        N)rT  rA  r�  rK   )r  ÚorigÚnewrß  s       rW   rm  z!StataWriter117._update_strl_namesÓ  sZ   € ð ×.Ñ.×4Ñ4Ó6ò 	.‰IˆD�#Ø�t×)Ñ)Ò)Ø×(Ñ(×.Ñ.¨tÓ4�Ø*-�×"Ñ" 3Ò'ñ	.rž   c                ó  — t        |«      D ��cg c]'  \  }}| j                  |   dk(  s|| j                  v r|‘Œ) }}}|rCt        ||| j                  ¬«      }|j                  «       \  }}|}|j                  |«      | _        |S c c}}w )zg
        Convert columns to StrLs if either very large or in the
        convert_strl variable
        ry  r=  )r  rp  r�  r  r:  r  r&  r+  )r  rð   r   rõ   Úconvert_colsÚsswÚtabÚnew_datas           rW   rä  zStataWriter117._convert_strlsÞ  s’   € ô $ D›/÷
á��3Ø�|‰|˜A‰ %Ò'¨3°$×2DÑ2DÑ+Dò ð
ˆñ 
ñ Ü! $¨¸d×>OÑ>OÔPˆCØ×.Ñ.Ó0‰MˆC�ØˆDØ!×/Ñ/°Ó4ˆDŒOØˆùó
s   �,Bc                óT  — g | _         g | _        |j                  «       D ]‡  \  }}|| j                  v }t	        || j
                  |   | j                  |¬«      }| j                  j                  |«       | j                   j                  t        || j
                  |   |«      «       Œ‰ y )N)rE  rF  )	rp  rÿ  rA  r�  rH  rð   r:  r  rÿ  )r  r¡  rõ   rv   rF  r—   s         rW   r�  z%StataWriter117._set_formats_and_typesð  s—   € ØˆŒØˆŒØ Ÿ,™,›.ò 	‰JˆC�Ø × 2Ñ 2Ð2ˆJÜ-ØØ—	‘	˜#‘Ø ×-Ñ-Ø%ô	ˆCð �L‰L×Ñ Ô$Ø�L‰L×ÑÜ(¨°·	±	¸#±À
ÓKõñ	rž   )	NTNNNNNr  N)rJ  rô  rð   r$   rñ  rõ  rX  rÃ   r*  r  r  rö  r  r  r  rõ  r‘  úSequence[Hashable] | Nonerù  r.   r7   r  r	  r÷  rŠ   r3  )r  ústr | bytesr-  r  rŠ   r5  )r-  r  rŠ   r3  rú  rû  r4  r!  rù  )r6  r7  r8  r9  r�  r:  r  rý  r.  r0  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r¡  r£  r¤  r   r¥  r¦  rm  rä  r�  r&  r'  s   @rW   r(  r(  „  sc  ø„ ñSðj ÐØ€Lð 59Ø Ø $Ø&*Ø!%Ø6:Ø26Ø*1Ø15ð#ð AEñ#à,ð#ð ð#ð 2ð	#ð
 ð#ð ð#ð $ð#ð ð#ð 4ð#ð 0ð#ð (ð#ð /ð#ð >ð#ð 
õ#ðJ òXó ðXó4ð "&Ø&*ð8?àð8?ð $ð8?ð 
ó	8?ót<ó<Gó	AóXó
@óJóHó@=ó&ó?ó óEó(ó
	.ó÷$rž   r(  c                  óŽ   ‡ — e Zd ZU dZdZded<   	 	 	 	 	 	 	 	 	 	 d	ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
ˆ fd„Zdd„Zˆ xZS )ÚStataWriterUTF8uð  
    Stata binary dta file writing in Stata 15 (118) and 16 (119) formats

    DTA 118 and 119 format files support unicode string data (both fixed
    and strL) format. Unicode is also supported in value labels, variable
    labels and the dataset label. Format 119 is automatically used if the
    file contains more than 32,767 variables.

    Parameters
    ----------
    fname : path (string), buffer or path object
        string, path object (pathlib.Path or py._path.local.LocalPath) or
        object implementing a binary write() functions. If using a buffer
        then the buffer will not be automatically closed after the file
        is written.
    data : DataFrame
        Input to save
    convert_dates : dict, default None
        Dictionary mapping columns containing datetime types to stata internal
        format to use when writing the dates. Options are 'tc', 'td', 'tm',
        'tw', 'th', 'tq', 'ty'. Column can be either an integer or a name.
        Datetime columns that do not have a conversion type specified will be
        converted to 'tc'. Raises NotImplementedError if a datetime column has
        timezone information
    write_index : bool, default True
        Write the index to Stata dataset.
    byteorder : str, default None
        Can be ">", "<", "little", or "big". default is `sys.byteorder`
    time_stamp : datetime, default None
        A datetime to use as file creation date.  Default is the current time
    data_label : str, default None
        A label for the data set.  Must be 80 characters or smaller.
    variable_labels : dict, default None
        Dictionary containing columns as keys and variable labels as values.
        Each label must be 80 characters or smaller.
    convert_strl : list, default None
        List of columns names to convert to Stata StrL format.  Columns with
        more than 2045 characters are automatically written as StrL.
        Smaller columns can be converted by including the column name.  Using
        StrLs can reduce output file size when strings are longer than 8
        characters, and either frequently repeated or sparse.
    version : int, default None
        The dta version to use. By default, uses the size of data to determine
        the version. 118 is used if data.shape[1] <= 32767, and 119 is used
        for storing larger DataFrames.
    {compression_options}

        .. versionchanged:: 1.4.0 Zstandard support.

    value_labels : dict of dicts
        Dictionary containing columns as keys and dictionaries of column value
        to labels as values. The combined length of all labels for a single
        variable must be 32,000 characters or smaller.

        .. versionadded:: 1.4.0

    Returns
    -------
    StataWriterUTF8
        The instance has a write_file method, which will write the file to the
        given `fname`.

    Raises
    ------
    NotImplementedError
        * If datetimes contain timezone information
    ValueError
        * Columns listed in convert_dates are neither datetime64[ns]
          or datetime
        * Column dtype is not representable in Stata
        * Column listed in convert_dates is not in DataFrame
        * Categorical label contains more than 32,000 characters

    Examples
    --------
    Using Unicode data and column names

    >>> from pandas.io.stata import StataWriterUTF8
    >>> data = pd.DataFrame([[1.0, 1, 'á´¬']], columns=['a', 'Î²', 'Ä‰'])
    >>> writer = StataWriterUTF8('./data_file.dta', data)
    >>> writer.write_file()

    Directly write a zip file
    >>> compression = {"method": "zip", "archive_name": "data_file.dta"}
    >>> writer = StataWriterUTF8('./data_file.zip', data, compression=compression)
    >>> writer.write_file()

    Or with long strings stored in strl format

    >>> data = pd.DataFrame([['á´€ relatively long Å�tring'], [''], ['']],
    ...                     columns=['strls'])
    >>> writer = StataWriterUTF8('./data_file_with_long_strings.dta', data,
    ...                          convert_strl=['strls'])
    >>> writer.write_file()
    r  zLiteral['utf-8']r  NrM  c               óÞ   •— |
€|j                   d   dk  rdnd}
n1|
dvrt        d«      ‚|
dk(  r|j                   d   dkD  rt        d«      ‚t        ‰| �  ||||||||||	||¬«       |
| _        y )	NrB   iÿ  r  r<  )r  r<  z"version must be either 118 or 119.zKYou must use version 119 for data sets containing more than32,767 variables)
rñ  rX  r*  r  r  r  r	  r‘  rù  r7   )rè   rf   r×  r  r:  )r  rJ  rð   rñ  rX  r*  r  r  r  r‘  r>  rù  r7   r	  rú  s                 €rW   r  zStataWriterUTF8.__init__d  sž   ø€ ð" ˆ?Ø!ŸZ™Z¨™]¨eÒ3‘c¸‰GØ˜JÑ&ÜÐAÓBÐBØ˜Š^ §
¡
¨1¡°Ò 5Üð#óð ô
 	‰ÑØØØ'Ø#ØØ!Ø!Ø+Ø%Ø%Ø#Ø+ð 	ô 	
ð $ˆÕrž   c                óÐ   — |D ]`  }t        |«      dk  r#|dk  s|dkD  r|dk  s|dkD  r|dk  s|dkD  r|dk7  sdt        |«      cxk  rd	k  sn |d
v sŒO|j                  |d«      }Œb |S )aÕ  
        Validate variable names for Stata export.

        Parameters
        ----------
        name : str
            Variable name

        Returns
        -------
        str
            The validated name with invalid characters replaced with
            underscores.

        Notes
        -----
        Stata 118+ support most unicode characters. The only limitation is in
        the ascii range where the characters supported are a-z, A-Z, 0-9 and _.
        r#  rp  rq  rr  rs  r²  rt  rr  éÀ   >   õ   Ã—õ   Ã·)rà  ru  rv  s      rW   rw  z'StataWriterUTF8._validate_variable_name�  s~   € ð* ò 	,ˆAô ˜“F˜S’LØ˜Sš A¨¢GØ˜Sš A¨¢GØ˜Sš A¨¢GØ˜Sšàœ#˜a›&Ô& 3Ô&Ø˜Ò$à—|‘| A sÓ+‘ð	,ð ˆrž   )
NTNNNNNNr  N)rJ  rô  rð   r$   rñ  rõ  rX  rÃ   r*  r  r  rö  r  r  r  rõ  r‘  rj  r>  r  rù  r.   r7   r  r	  r÷  rŠ   r3  rø  )	r6  r7  r8  r9  r  rh  r  rw  r&  r'  s   @rW   rm  rm    sØ   ø… ñ^ð@ #*€IÐÓ)ð 59Ø Ø $Ø&*Ø!%Ø6:Ø26Ø"Ø*1Ø15ð*$ð AEñ*$à,ð*$ð ð*$ð 2ð	*$ð
 ð*$ð ð*$ð $ð*$ð ð*$ð 4ð*$ð 0ð*$ð ð*$ð (ð*$ð /ð*$ð >ð*$ð  
õ!*$÷X#rž   rm  )r–   r'   r—   r  rŠ   r'   r!  )r6   r  rñ  rÃ   rò  rÃ   ró  r  rô  rÃ   rõ  rÃ   rö  r  r÷  rÃ   rø  r  r(  rÃ   rù  r.   r7   r  rŠ   zDataFrame | StataReader)r0  r  rŠ   r  )rî   r
   r·  r`   rŠ   r
   )r—   r  rŠ   rg  )rñ  rÆ  r:  zlist[Hashable]rŠ   rÆ  )rv   rg  r  r'   rŠ   r`   )r�  F)r  r'   rE  r`   rF  rÃ   rŠ   r  )rv   rg  r  r'   rF  rÃ   rŠ   r`   )rî   rk  r·  r`   rŠ   r5  )vr9  Ú
__future__r   Úcollectionsr   r   r   Úior   r©  rÅ   rî  Útypingr   r	   r
   r   r   r   r’   Únumpyr‹   Úpandas._libsr   Úpandas._libs.libr   Úpandas._libs.writersr   Úpandas.errorsr   r   r   r   Úpandas.util._decoratorsr   r   Úpandas.util._exceptionsr   Úpandas.core.dtypes.baser   Úpandas.core.dtypes.commonr   r   r   Úpandas.core.dtypes.dtypesr   Úpandasr   r   r   r    r!   r"   r#   Úpandas.core.framer$   Úpandas.core.indexes.baser%   Úpandas.core.indexes.ranger&   Úpandas.core.seriesr'   Úpandas.core.shared_docsr(   Úpandas.io.commonr)   Úcollections.abcr*   r+   Útypesr,   r-   Úpandas._typingr.   r/   r0   r1   r2   r3   rK  Ú_statafile_processing_params1Ú_statafile_processing_params2Ú_chunksize_paramsÚ_iterator_paramsÚ_reader_notesÚ_read_stata_docr%  r$  rÑ  rC   rh  r�   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rü   rþ   r<  rì   rp  ÚIteratorrÔ  r+  rí  r'  r6  r<  rB  rH  rL  rÿ  r  r  r(  rm  r:  rž   rW   ú<module>r’     s  ðò
õ #å ÷õ Û 	Û Û 
÷÷ ó ã å Ý (Ý 5÷ó ÷õ 5å 2÷ñ õ
 7÷÷ ñ õ (Ý *Ý 0Ý %Ý 0å 'á÷õ $Ý÷÷ ð4ð ð!NÐ ð!GÐ ð$Ð ð
"Ð ð(€ðð Ð ð  ØÐ ð  ØÐ ð ØÐ ð ØÐ%Ñ&Ð)=Ñ=Ð >ð ?ØÐÑ Ð !ð "ð €ð ð?8€ðtð Ð ð  ØÐ ð  ðÐ ðð Ð ð  ØÐ ð  ØÐ ð ØÐ%Ñ&Ð 'ð (ØÐÑ Ð !ð "à€ð ðÐ ò$ O€ñ ˜d A qÓ)€ˆUÓ )ó]ó@h7ðV(Ð ˜uó ðÐ �Eó ð#Ð ˜%ó ð	Ð �%ó 	ð)Ð  ó óy÷xvñ vôr%˜Oô %÷>Cñ C÷L\
ñ \
ô~|&�+˜sŸ|™|ô |&ñ~ 
ˆ/Óð Ø!%Ø Ø!Ø Ø$(Ø#Ø ØØ&-Ø-1ñ!Ø4ð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð "ð!ð ð!ð ð!ð ð!ð $ð!ð +ð!ð ò!ó ð!óHDó0óCó2ó!GðJ GLð*GØð*GØ(+ð*GØ?Cð*Gàó*GñZ Ø Ð!2Ñ3Ø$Ð%:Ñ;¸gÑEôôKB�+ó KBó	ðKBó\'GóT1÷rñ rôjz�[ô zôzr�nõ rrž   