+
    xȇi                      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   "e/Users/max/.openclaw/workspace/postharvest/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WWY__VC=BSM4QC899
R#c(*Q.  19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#:99S>DKKja1:d1g3F3JKLKK
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? Ey 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< EL 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 54 5D 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 NM 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      *
.:dJtS!!ls   FTzLfreeze_panes must be of form (row, column) where row and column are integers)lenallr#   rq   s   &r   rr   rr      s_    |!cc *
.:*
ccc *
.:*
 '
 '
 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_    * q6D1c#h~~6D6R<36>F"KN6D   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#bq'525EG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.    & ##%
MM&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:L1MNL/1
, 1" &%RF@B 
 E 
 E 
 ? 
 ? 
 E 
 E 
 5 
 5> 
 N 
 N 
 D 
 D" F6Dr    