+
    NV-j‘  ã                  óÒ  a € 0 t $ ^ RIHt ^ RIHtHtHtHtHt ^ RI	H
t
HtHtHtHt ^ RIHt ^ RIHtHt ]
'       d$   ^ RIHt ]],          t]! R]].]3,          R7      t/ tR	]R
&   R R ltR,R R lltR R ltR R ltR R lt ]R R l4       t!]R R l4       t!]R R l4       t!]R R l4       t!R R lt!]R R  l4       t"]R! R" l4       t"R# R$ lt"R% R& lt#R' R( lt$R) R* lt%R+# )-é    )Úannotations)ÚCallableÚHashableÚIterableÚMutableMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚLiteralÚTypeVarÚoverload©Úimport_optional_dependency)Ú
is_integerÚis_list_like)ÚExcelWriterÚusecols_func)Úboundz"MutableMapping[str, ExcelWriter_t]Ú_writersc               ó    € V ^8„  d   QhRRRR/# )é   ÚklassÚExcelWriter_tÚreturnÚNone© )Úformats   "Úf/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/pandas/io/excel/_util.pyÚ__annotate__r   "   s   € ÷ "ñ "˜=ð "¨Tñ "ó    c                óh   € \        V 4      '       g   \        R4      hV P                  pV \        V&   R# )z˜
Add engine to the excel writer registry.io.excel.

You must use this method to integrate with ``to_excel``.

Parameters
----------
klass : ExcelWriter
z&Can only register callables as enginesN)ÚcallableÚ
ValueErrorÚ_enginer   )r   Úengine_names   & r   Úregister_writerr&   "   s,   € ô �E�?Š?ÜÐAÓBÐBØ—-‘-€KØ!„Hˆ[Ór    c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚextÚstrÚmodezLiteral['reader', 'writer']r   r   )r   s   "r   r   r   2   s#   € ÷ &%ñ &%˜Cð &%Ð'Bð &%ÐRUñ &%r    c           
     ó¢   € RRRRRRRRRR	/pRRRRRRRR	/pVR9   g   Q hVR
8X  d#   \        RRR7      pV'       d   RVR&   W0,          # W ,          # )a[  
Return the default reader/writer for the given extension.

Parameters
----------
ext : str
    The excel file extension for which to get the default engine.
mode : str {'reader', 'writer'}
    Whether to get the default engine for reading or writing.
    Either 'reader' or 'writer'

Returns
-------
str
    The default engine for the extension.
ÚxlsxÚopenpyxlÚxlsmÚxlsbÚpyxlsbÚxlsÚxlrdÚodsÚodfÚwriterÚ
xlsxwriterÚwarn)Úerrors)Úreaderr5   r   )r(   r*   Ú_default_readersÚ_default_writersr6   s   &&   r   Úget_default_enginer<   2   sˆ   € ð$ 	�
Ø�
Ø�ØˆvØˆuðÐð 	�
Ø�
Ø�Øˆuð	Ðð Ð'Ô'Ð'Ð'ØˆxÔä/°ÀVÔLˆ
ßØ'3Ð˜VÑ$ØÕ$Ð$àÕ$Ð$r    c               ó    € V ^8„  d   QhRRRR/# )r   r%   r)   r   r   r   )r   s   "r   r   r   [   s   € ÷ Fñ F˜Cð F Mñ Fr    c                ód   €  \         V ,          #   \         d   p\        R T  R24      ThRp?ii ; i)zNo Excel writer 'Ú'N)r   ÚKeyErrorr#   )r%   Úerrs   & r   Ú
get_writerrB   [   s<   € ðFÜ˜Õ$Ð$øÜô FÜÐ,¨[¨M¸Ð;Ó<À#ÐEûðFús   ‚ �/š*ª/c               ó    € V ^8„  d   QhRRRR/# )r   Úxr)   r   Úintr   )r   s   "r   r   r   b   s   € ÷ ñ �#ð ˜#ñ r    c                ó"  € ^ pV P                  4       P                  4        Fc  p\        V4      pV\        R4      8  g   V\        R4      8”  d   \        RV  24      hV^,          V,           \        R4      ,
          ^,           pKe  	  V^,
          # )a1  
Convert Excel column name like 'AB' to 0-based column index.

Parameters
----------
x : str
    The Excel column name to convert to a 0-based column index.

Returns
-------
num : int
    The column index corresponding to the name.

Raises
------
ValueError
    Part of the Excel column name was invalid.
ÚAÚZzInvalid column name: )ÚupperÚstripÚordr#   )rD   ÚindexÚcÚcps   &   r   Ú
_excel2numrO   b   sx   € ð& €Eà�W‰W‹Y�_‰_ÖˆÜ�‹Vˆà”�C“Œ=˜B¤ S£œMÜÐ4°Q°CÐ8Ó9Ð9à˜•
˜R•¤# c£(Õ*¨QÕ.Šñ ð �1�9Ðr    c               ó    € V ^8„  d   QhRRRR/# )r   Úareasr)   r   ú	list[int]r   )r   s   "r   r   r   ‚   s   € ÷ ñ �sð ˜yñ r    c           
     ó&  € . pV P                  R4       Fy  pRV9   dV   VP                  R4      pVP                  \        \        V^ ,          4      \        V^,          4      ^,           4      4       K_  VP	                  \        V4      4       K{  	  V# )aT  
Convert comma separated list of column names and ranges to indices.

Parameters
----------
areas : str
    A string containing a sequence of column ranges (or areas).

Returns
-------
cols : list
    A list of 0-based column indices.

Examples
--------
>>> _range2cols("A:E")
[0, 1, 2, 3, 4]
>>> _range2cols("A,C,Z:AB")
[0, 2, 25, 26, 27]
Ú,Ú:)ÚsplitÚextendÚrangerO   Úappend)rQ   ÚcolsÚrngÚrngss   &   r   Ú_range2colsr]   ‚   sq   € ð* €Dà�{‰{˜3ÖˆØ�#Œ:Ø—9‘9˜S“>ˆDØ�K‰Kœœj¨¨a­Ó1´:¸dÀ1½gÓ3FÈÕ3JÓKÖLà�K‰Kœ
 3›Ö(ñ  ð €Kr    c               ó    € V ^8„  d   QhRRRR/# )r   Úusecolszstr | list[int]r   rR   r   )r   s   "r   r   r   ¤   s   € × EÑ E ?Ð E°yÑ Er    c                ó   € R # ©Nr   ©r_   s   &r   Úmaybe_convert_usecolsrc   £   ó   € ÙBEr    c               ó    € V ^8„  d   QhRRRR/# )r   r_   z	list[str]r   r   )r   s   "r   r   r   ¨   s   € × ?Ñ ? 9Ð ?°Ñ ?r    c                ó   € R # ra   r   rb   s   &r   rc   rc   §   s   € Ù<?r    c               ó    € V ^8„  d   QhRRRR/# )r   r_   r   r   r   )r   s   "r   r   r   ¬   s   € × EÑ E <Ð E°LÑ Er    c                ó   € R # ra   r   rb   s   &r   rc   rc   «   rd   r    c               ó    € V ^8„  d   QhRRRR/# )r   r_   r   r   r   )r   s   "r   r   r   °   s   € × 5Ñ 5 4Ð 5¨DÑ 5r    c                ó   € R # ra   r   rb   s   &r   rc   rc   ¯   s   € Ù25r    c               ó    € V ^8„  d   QhRRRR/# )r   r_   z1str | list[int] | list[str] | usecols_func | Noner   z+None | list[int] | list[str] | usecols_funcr   )r   s   "r   r   r   ³   s   € ÷ ñ Ø>ðà0ñr    c                óŒ   € V f   V # \        V 4      '       d   \        R4      h\        V \        4      '       d   \	        V 4      # V # )zð
Convert `usecols` into a compatible format for parsing in `parsers.py`.

Parameters
----------
usecols : object
    The use-columns object to potentially convert.

Returns
-------
converted : object
    The compatible format of `usecols`.
z}Passing an integer for `usecols` is no longer supported.  Please pass in a list of int from 0 to `usecols` inclusive instead.)r   r#   Ú
isinstancer)   r]   rb   s   &r   rc   rc   ³   sK   € ð  ‚Øˆä�'×ÒÜðRó
ð 	
ô
 �'œ3×ÒÜ˜7Ó#Ð#à€Nr    c               ó    € V ^8„  d   QhRRRR/# )r   Úfreeze_panesztuple[int, int]r   zLiteral[True]r   )r   s   "r   r   r   Ó   s   € × NÑ N¨Ð N¸MÑ Nr    c                ó   € R # ra   r   ©ro   s   &r   Úvalidate_freeze_panesrr   Ò   s   € ÙKNr    c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   zLiteral[False]r   )r   s   "r   r   r   ×   s   € × DÑ D¨Ð D°Ñ Dr    c                ó   € R # ra   r   rq   s   &r   rr   rr   Ö   s   € ÙADr    c               ó    € V ^8„  d   QhRRRR/# )r   ro   ztuple[int, int] | Noner   Úboolr   )r   s   "r   r   r   Ú   s   € ÷ ñ Ð(>ð À4ñ r    c                ó¼   € V eX   \        V 4      ^8X  d=   \        ;QJ d    R V  4       F  '       d   K   RM	  RM! R V  4       4      '       d   R# \        R4      hR# )Nc              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5ira   )rm   rE   )Ú.0Úitems   & r   Ú	<genexpr>Ú(validate_freeze_panes.<locals>.<genexpr>Ü   s   é € ð *
Ù.: dŒJ�tœS×!Ð!«lùs   ‚FTzLfreeze_panes must be of form (row, column) where row and column are integers)ÚlenÚallr#   rq   s   &r   rr   rr   Ú   s_   € ØÒÜˆ|Ó Ô!§c£cñ *
Ù.:ó*
§c§c¢cñ *
Ù.:ó*
÷ '
ò '
ñ äð0ó
ð 	
ñ r    c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úrowúlist[Hashable]Úcontrol_rowz
list[bool]r   z!tuple[list[Hashable], list[bool]]r   )r   s   "r   r   r   ë   s$   € ÷  ñ  Ø	ð Ø&0ð à&ñ r    c                óÐ   € V ^ ,          p\        ^\        V 4      4       FB  pW,          '       g	   W,          pW,          R8X  g   W,          f   W V&   K6  RW&   W,          pKD  	  W3# )a¯  
Forward fill blank entries in row but only inside the same parent index.

Used for creating headers in Multiindex.

Parameters
----------
row : list
    List of items in a single row.
control_row : list of bool
    Helps to determine if particular column is in same parent index as the
    previous value. Used to stop propagation of empty cells between
    different indexes.

Returns
-------
Returns changed row and control_row
Ú F)rX   r}   )r€   r‚   ÚlastÚis   &&  r   Úfill_mi_headerr‡   ë   s_   € ð* ˆq�6€DÜ�1”c˜#“hÖˆØ�~Œ~Ø•6ˆDà�6�RŒ<˜3�6š>Ø�‹Fà"ˆK‰NØ•6ŠDñ  ð ÐÐr    c               ó$   € V ^8„  d   QhRRRRRR/# )r   r€   r�   Ú	index_colzint | Sequence[int]r   z&tuple[Hashable | None, list[Hashable]]r   )r   s   "r   r   r     s$   € ÷ 6ñ 6Ø	ð6Ø$7ð6à+ñ6r    c                óò   € \        V4      '       d%   \        V\        4      '       g   Q h\        V4      pM\        V\        4      '       d   Q hTpW,          pVR8X  d   RMTpV. V RV ORNW^,           R O3# )a]  
Pop the header name for MultiIndex parsing.

Parameters
----------
row : list
    The data row to parse for the header name.
index_col : int, list
    The index columns for our data. Assumed to be non-null.

Returns
-------
header_name : str
    The extracted header name.
trimmed_row : list
    The original data row with the header name removed.
r„   N)r   rm   r   Úmax)r€   r‰   r†   Úheader_names   &&  r   Úpop_header_namer�     s�   € ô* �I×ÒÜ˜)¤X×.Ò.Ð.Ð.Ü�	‹N‰ä˜i¬×2Ò2Ð2Ð2Øˆà•&€KØ%¨Ô+‘$°€KàÐ5˜#˜b˜q˜'Ð5 2Ð5¨°­E¨G¨Ð5Ð5Ð5r    c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úengine_kwargszdict[str, Any] | NoneÚkwargsÚdictr   r   )r   s   "r   r   r   0  s"   € ÷ ñ Ð"7ð Àð È$ñ r    c                óV   € V f   / pMV P                  4       pVP                  V4       V# )aæ  
Used to combine two sources of kwargs for the backend engine.

Use of kwargs is deprecated, this function is solely for use in 1.3 and should
be removed in 1.4/2.0. Also _base.ExcelWriter.__new__ ensures either engine_kwargs
or kwargs must be None or empty respectively.

Parameters
----------
engine_kwargs: dict
    kwargs to be passed through to the engine.
kwargs: dict
    kwargs to be psased through to the engine (deprecated)

Returns
-------
engine_kwargs combined with kwargs
)ÚcopyÚupdate)r�   r�   Úresults   && r   Úcombine_kwargsr–   0  s.   € ð& ÒØ‰à×#Ñ#Ó%ˆØ
‡M�M�&ÔØ€Mr    N)r9   )&Ú__conditional_annotations__Ú
__future__r   Úcollections.abcr   r   r   r   r   Útypingr	   r
   r   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.commonr   r   Úpandas.io.excel._baser   Útyper   Úobjectr   r   Ú__annotations__r&   r<   rB   rO   r]   rc   rr   r‡   r�   r–   )r—   s   @r   Ú<module>r¡      s÷   øðß "Ð "÷õ ÷õ õ ?÷÷
 Ý1à˜Õ%€MÙ˜>°¸8¸*ÀfÐ:LÕ1MÔN€Là/1€Ð
,Ó 1õ"÷ &%õRFõõ@ðB 
Ü Eó 
Ø Eð 
Ü ?ó 
Ø ?ð 
Ü Eó 
Ø Eð 
Ü 5ó 
Ø 5õð> 
Ü Nó 
Ø Nð 
Ü Dó 
Ø Dõõ" õF6÷Dr    