
    .i%                    t   d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
Z
ddlZddl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 dd
lmZmZmZm Z m!Z! ddl"m#c m$Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, erddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddlm3Z3  G d d      Z4 G d de4      Z5 G d d      Z6 G d d      Z7y)zC
Utilities for conversion to writer-agnostic Excel representation.
    )annotations)CallableHashableIterableMappingSequenceN)TYPE_CHECKINGAnycast)is_list_like)find_stack_level)missing)is_float	is_scalar)	DataFrameIndex
MultiIndexPeriodPeriodIndex)CSS4_COLORS)CSSResolver
CSSWarning)get_level_lengths)ExcelWriterMergeCellsFilePath
IndexLabelStorageOptionsWriteExcelBufferExcelWriterc                  6    e Zd ZdZeZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZy)	ExcelCellrowcolvalstyle
mergestartmergeendNc                X    || _         || _        || _        || _        || _        || _        y Nr#   )selfr$   r%   r&   r'   r(   r)   s          U/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/io/formats/excel.py__init__zExcelCell.__init__C   s.     
$     )NNN)
r$   intr%   r0   r(   
int | Noner)   r1   returnNone)__name__
__module____qualname__
__fields__	__slots__r.    r/   r-   r"   r"   ?   sL    IJI !%#!! ! ! ! 
!r/   r"   c                  @     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )CssExcelCellc	                    |rK|rI|||f   D 
ci c]  \  }
}|
j                         | }}
}t        |j                               } ||      }t        |   d|||d|	 y c c}}
w )Nr$   r%   r&   r'   r9   )lower	frozensetitemssuperr.   )r,   r$   r%   r&   r'   
css_stylescss_rowcss_colcss_converterkwargspropdeclaration_dictunique_declarations	__class__s                r-   r.   zCssExcelCell.__init__U   s     - 4>gw>N3O &/dC

c!    #,,<,B,B,D"E!"56EJScs%J6J s   A$)r$   r0   r%   r0   r'   dict | NonerB   z3dict[tuple[int, int], list[tuple[str, Any]]] | NonerC   r0   rD   r0   rE   Callable | Noner2   r3   )r4   r5   r6   r.   __classcell__)rJ   s   @r-   r;   r;   T   sf    KK K
 K HK K K 'K 
K Kr/   r;   c                     e Zd ZU dZeZdddddddZddddddddddddddZdddd	Zd
ddddZ	dD  ci c]  }|j                         | c}} Zded<   d-d.dZ e       Z	 	 	 	 d/dZ	 	 	 	 d/dZd0dZd1dZd2dZd3dZ	 	 	 	 d4dZ	 	 	 	 	 	 	 	 d5dZd6dZd7dZd8dZd9dZd:d Z	 	 	 	 d;d!Zd3d"Zd3d#Zd<d$Z d3d%Z!d<d&Z"d=d'Z#d>d(Z$d?d)Z%d@d*Z&dAd+Z'd@d,Z(yc c}} w )BCSSToExcelConverteraK  
    A callable for converting CSS declarations to ExcelWriter styles

    Supports parts of CSS 2.2, with minimal CSS 3.0 support (e.g. text-shadow),
    focusing on font styling, backgrounds, borders and alignment.

    Operates by first computing CSS styles in a fairly generic
    way (see :meth:`compute_css`) then determining Excel style
    properties from CSS properties (see :meth:`build_xlstyle`).

    Parameters
    ----------
    inherited : str, optional
        CSS declarations understood to be the containing scope for the
        CSS processed by :meth:`__call__`.
    topcenterbottom)rP   ztext-topmiddlebaselinerR   ztext-bottomTF)boldbolder600700800900normallighter100200300400500)r[   italicoblique            )serifz
sans-serifcursivefantasy)
dashedmediumDashDot
dashDotDothairdottedmediumDashDotDotdoubledashDotslantDashDotmediumDashedzdict[str, str] | None	inheritedNc                    || j                  |      | _        nd | _        t        j                  | j                        | _        y r+   )compute_cssru   	functoolscache_call_uncached_call_cached)r,   ru   s     r-   r.   zCSSToExcelConverter.__init__   s:     !--i8DN!DN &OOD,?,?@r/   c                $    | j                  |      S )a  
        Convert CSS declarations to ExcelWriter style.

        Parameters
        ----------
        declarations : str | frozenset[tuple[str, str]]
            CSS string or set of CSS declaration tuples.
            e.g. "font-weight: bold; background: blue" or
            {("font-weight", "bold"), ("background", "blue")}

        Returns
        -------
        xlstyle : dict
            A style as interpreted by ExcelWriter when found in
            ExcelCell.style.
        )r{   )r,   declarationss     r-   __call__zCSSToExcelConverter.__call__   s    &   ..r/   c                \    | j                  || j                        }| j                  |      S r+   )rw   ru   build_xlstyle)r,   r}   
propertiess      r-   rz   z"CSSToExcelConverter._call_uncached   s+     %%lDNNC
!!*--r/   c                    | j                  |      | j                  |      | j                  |      | j                  |      | j	                  |      d}dfd |       |S )N)	alignmentborderfillfontnumber_formatc                    t        | j                               D ]*  \  }}|| |= t        |t              s |       |r(| |= , y)z4Remove key where value is None, through nested dictsN)listr@   
isinstancedict)dkvremove_nones      r-   r   z6CSSToExcelConverter.build_xlstyle.<locals>.remove_none   sG    QWWY !19!4(NaD!r/   )r   dict[str, str | None]r2   r3   )build_alignmentbuild_border
build_fill
build_fontbuild_number_format)r,   propsoutr   s      @r-   r   z!CSSToExcelConverter.build_xlstyle   s`    --e4''.OOE*OOE*!55e<
	! 	C
r/   c                h    |j                  d      | j                  |      | j                  |      dS )Nz
text-align)
horizontalvertical	wrap_text)get_get_vertical_alignment_get_is_wrap_textr,   r   s     r-   r   z#CSSToExcelConverter.build_alignment   s6      ))L144U;//6
 	
r/   c                `    |j                  d      }|r| j                  j                  |      S y )Nzvertical-align)r   VERTICAL_MAP)r,   r   vertical_aligns      r-   r   z+CSSToExcelConverter._get_vertical_alignment  s.    #34$$((88r/   c                F    |j                  d      y t        |d   dv      S )Nzwhite-space)nowrapprezpre-line)r   boolr   s     r-   r   z%CSSToExcelConverter._get_is_wrap_text  s*    99]#+E-(0MMNNr/   c                *   dD ci c]  }|| j                  |j                  d| d      |j                  d| d      | j                  |j                  d| d                  | j                  |j                  d| d            d c}S c c}w )N)rP   rightrR   leftzborder-z-stylez-widthz-color)r'   color)_border_styler   color_to_excel)r,   r   sides      r-   r   z CSSToExcelConverter.build_border  s     ;

  ++IIvV45IIvV45''		GD62H(IJ
 ,,UYYf7M-NO 

 
	
 

s   BBc                   |||y y|dv ry| j                  |      }|y|dv r|S |dk(  ry|dk(  r|dv ryy|dk(  r|dv ryy	|| j                  v r| j                  |   S t        j                  d
|t        t                      y)Nnone)r   hidden)Ngrooveridgeinsetoutsetsolidrq   ro   )rn   thinrp   rk   rt   zUnhandled border style format: 
stacklevel)_get_width_nameBORDER_STYLE_MAPwarningswarnr   r   )r,   r'   widthr   
width_names        r-   r   z!CSSToExcelConverter._border_style  s    " =U]} &&))%0
IIHH--%H--!d+++((//MM1%;+-
 r/   c                J    | j                  |      }|dk  ry |dk  ry|dk  ryy)Ngh㈵>g?r   gffffff@mediumthick)_width_to_float)r,   width_inputr   s      r-   r   z#CSSToExcelConverter._get_width_nameX  s3    $$[14<S[S[r/   c                ,    |d}| j                  |      S )N2pt)_pt_to_float)r,   r   s     r-   r   z#CSSToExcelConverter._width_to_floatb  s    =E  ''r/   c                \    |j                  d      sJ t        |j                  d            S )Npt)endswithfloatrstrip)r,   	pt_strings     r-   r   z CSSToExcelConverter._pt_to_floatg  s,    !!$'''Y%%d+,,r/   c                V    |j                  d      }|dvr| j                  |      ddS y )Nzbackground-color)Ntransparentr   r   )fgColorpatternType)r   r   )r,   r   
fill_colors      r-   r   zCSSToExcelConverter.build_fillk  s7     YY12
::#22:>wWW ;r/   c                t    |j                  d      }t        |t              r|j                  dd      n|}d|iS )Nznumber-format   §;format_code)r   r   strreplace)r,   r   fcs      r-   r   z'CSSToExcelConverter.build_number_formatr  s6    YY'&0S&9RZZc"rr""r/   c                V   | j                  |      }| j                  |      }|r|d   nd | j                  |      | j                  |      | j	                  |      | j                  |      d|v rdnd d|v xs d | j                  |j                  d            | j                  |      d	S )Nr   	underlinesinglezline-throughr   )	namefamilysizerU   rb   r   striker   shadow)	_get_font_names_get_decoration_select_font_family_get_font_size_get_is_bold_get_is_italicr   r   _get_shadow)r,   r   
font_names
decorations       r-   r   zCSSToExcelConverter.build_fontw  s     ))%0
))%0
%/JqMT..z:''.%%e,))%0&1Z&?(T%3<((7);<&&u-
 	
r/   c                `    |j                  d      }|r| j                  j                  |      S y )Nzfont-weight)r   BOLD_MAP)r,   r   weights      r-   r   z CSSToExcelConverter._get_is_bold  s+    =)==$$V,,r/   c                `    |j                  d      }|r| j                  j                  |      S y )Nz
font-style)r   
ITALIC_MAP)r,   r   
font_styles      r-   r   z"CSSToExcelConverter._get_is_italic  s+    YY|,
??&&z22r/   c                J    |j                  d      }||j                         S y)Nztext-decorationr9   )r   split)r,   r   r   s      r-   r   z#CSSToExcelConverter._get_decoration  s)    YY01
!##%%r/   c                P    d|v r"t        t        j                  d|d               S y )Nztext-shadowz^[^#(]*[1-9])r   researchr   s     r-   r   zCSSToExcelConverter._get_shadow  s(    E!		.%2FGHHr/   c                $   t        j                  d|j                  dd            }g }|D ]b  }|d d dk(  r|dd j                  dd      }n.|d d dk(  r|dd j                  d	d      }n|j	                         }|sR|j                  |       d |S )
Nz(?x)
            (
            "(?:[^"]|\\")+"
            |
            '(?:[^']|\\')+'
            |
            [^'",]+
            )(?=,|\s*$)
        zfont-family rd   "z\"'z\')r   findallr   r   stripappend)r,   r   font_names_tmpr   r   s        r-   r   z#CSSToExcelConverter._get_font_names  s     IImR(
 
" 	(DBQx3Abz))%5bqSAbz))%5zz|!!$'	( r/   c                N    |j                  d      }||S | j                  |      S )Nz	font-size)r   r   )r,   r   r   s      r-   r   z"CSSToExcelConverter._get_font_size  s+    yy%<K  &&r/   c                X    d }|D ]"  }| j                   j                  |      }|s! |S  |S r+   )
FAMILY_MAPr   )r,   r   r   r   s       r-   r   z'CSSToExcelConverter._select_font_family  s<     	D__((.F	
 r/   c                    |y | j                  |      r| j                  |      S 	 | j                  |   S # t        $ r* t	        j
                  d|t        t                      Y y w xY w)NzUnhandled color format: r   )_is_hex_color_convert_hex_to_excelNAMED_COLORSKeyErrorr   r   r   r   r,   r&   s     r-   r   z"CSSToExcelConverter.color_to_excel  sr    ;c"--c22	$$S)) 	MM*3'2+-
 	s   6 0A)(A)c                6    t        |j                  d            S )N#)r   
startswith)r,   color_strings     r-   r  z!CSSToExcelConverter._is_hex_color  s    L++C011r/   c                    |j                  d      }| j                  |      r(|d   dz  |d   dz  z   |d   dz  z   j                         S |j                         S )Nr  r   re   rd   )lstrip_is_shorthand_colorupperr,   r
  codes      r-   r  z)CSSToExcelConverter._convert_hex_to_excel  s]    ""3'##L1GaK$q'A+-Q!;BBDD::<r/   c                |    |j                  d      }t        |      dk(  ryt        |      dk(  ryt        d|       )zcCheck if color code is shorthand.

        #FFF is a shorthand as opposed to full #FFFFFF.
        r     T   FzUnexpected color )r  len
ValueErrorr  s      r-   r  z'CSSToExcelConverter._is_shorthand_color  sC    
 ""3't9>Y!^0?@@r/   r+   )ru   
str | Noner2   r3   )r}   z str | frozenset[tuple[str, str]]r2   dict[str, dict[str, str]])r   Mapping[str, str]r2   r  )r   r  r2   zdict[str, bool | str | None])r   r  r2   r  )r   r  r2   zbool | None)r   r  r2   z dict[str, dict[str, str | None]])r'   r  r   r  r   r  r2   r  )r   r  r2   r  )r   r  r2   r   )r   r   r2   r   )r   r  )r   r  r2   r   )r   r  r2   z$dict[str, bool | float | str | None])r   r  r2   Sequence[str])r   r  r2   zfloat | None)r   r  r2   r1   )r&   r  r2   r  )r
  r   r2   r   )r
  r   r2   r   ))r4   r5   r6   __doc__r   r  r   r   r   r   r>   r   __annotations__r.   r   rw   r~   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  ).0r'   s   00r-   rO   rO   m   s   " L L H" J 	J
 	u( %$A -K/</	"/*.<.	".0
O

&
	)
77(27;E7	7r(
-X#

&
	-
$
4'"2 A{	s   CrO   c                      e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd ZddZddZ	dd	Z
dd
ZddZddZedd       ZddZddZddZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)ExcelFormattera>  
    Class for formatting a DataFrame to a list of ExcelCells,

    Parameters
    ----------
    df : DataFrame or Styler
    na_rep: na representation
    float_format : str, default None
        Format string for floating point numbers
    cols : sequence, optional
        Columns to write
    header : bool or sequence of str, default True
        Write out column names. If a list of string is given it is
        assumed to be aliases for the column names
    index : bool, default True
        output row names (index)
    index_label : str or sequence, default None
        Column label for index column(s) if desired. If None is given, and
        `header` and `index` are True, then the index names are used. A
        sequence should be given if the DataFrame uses MultiIndex.
    merge_cells : bool or 'columns', default False
        Format MultiIndex column headers and Hierarchical Rows as merged cells
        if True. Merge MultiIndex column headers only if 'columns'.
        .. versionchanged:: 3.0.0
            Added the 'columns' option.
    inf_rep : str, default `'inf'`
        representation for np.inf values (which aren't representable in Excel)
        A `'-'` sign will be added in front of -inf.
    style_converter : callable, optional
        This translates Styler styles (CSS) into ExcelWriter styles.
        Defaults to ``CSSToExcelConverter()``.
        It should have signature css_declarations string -> excel style.
        This is only called for body cells.
    autofilter : bool, default False
        If True, add automatic filters to all columns.
    i   i @  Nc                   d| _         || _        t        |t              sA|| _        | j                  j                          |j                  }|

t               }
|
| _        nd | _        d | _        || _	        |t        t        |      j                  |j                              st        d      t        t        |      j                  |j                              t        t        |            k7  rt        d      |j!                  |      | _	        | j                  j                  | _        || _        || _        || _        || _        t        |t*              s|dk7  rt-        d|d      || _        |	| _        || _        y )Nr   z,passes columns are not ALL present dataframez.Not all names specified in 'columns' are found)columnsr   z!Unexpected value for merge_cells=.)
rowcounterna_repr   r   styler_computedatarO   style_converterdfr  r   intersectionr   r  setreindexfloat_formatindexindex_labelheaderr   r  merge_cellsinf_rep
autofilter)r,   r(  r#  r,  colsr/  r-  r.  r0  r1  r'  r2  s               r-   r.   zExcelFormatter.__init__  sD    "i(DKKK  "B&"5"74CD DK#'D uT{//

;<MNN5;++BJJ78CD	NJOPPjjj.DGww(
&+t,	1IA[N!DEE&$r/   c                |   t        |      r"t        j                  |      r| j                  }nvt	        |      rkt        j
                  |      r| j                  }nIt        j                  |      rd| j                   }n$| j                  t        | j                  |z        }t        |dd       t        d      |S )N-tzinfoz{Excel does not support datetimes with timezones. Please ensure that datetimes are timezone unaware before writing to Excel.)r   r   isnar#  r   isposinf_scalarr1  isneginf_scalarr,  r   getattrr  r  s     r-   _format_valuezExcelFormatter._format_valueN  s    S>gll3/++Cc]&&s+ll((-$,,("".D--343$'3@ 
 
r/   c              #    K   | j                   j                  dkD  r| j                  st        d      | j                  s| j
                  sy | j                   }| j                  dv }|j                  |d      }t        |      }d}d}| j                  rGt        | j                  j                  t              r#| j                  j                  j                  dz
  }t        |j                        D ]  \  }}t        |||d         t        t        ||j                   |j"                  d	            D ]  \  }\  }}	}
|	j%                  |
      }|j'                         D ]Z  \  }}d
\  }}|r|dkD  r
|||z   |z   }}t)        |||z   dz   ||   d t+        | j,                  dd       ||| j.                  ||
       \  || _        y w)Nrd   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.>   Tr   Fsparsifyinclude_namesr   r=   TstrictNNctx_columns
r$   r%   r&   r'   rB   rC   rD   rE   r(   r)   )r   nlevelsr-  NotImplementedError_has_aliasesr/  r0  _format_multir   r   r(  r   	enumeratenamesr"   ziplevelscodestaker@   r;   r:  r$  r'  r"  )r,   r   merge_columns
level_strslevel_lengths	coloffsetlnumr   spansrL  level_codesvaluesispan_valr(   r)   s                   r-   _format_header_miz ExcelFormatter._format_header_mi`  s    <<!#::)D 
 !!T[[,,((,==**MQV*W
)*5	::*TWW]]J?--1I#GMM2 	JD$	 	 3<w~~w}}TJ3
 	.D.5&+ [[-F${{} 8'1$
H X\+/Q1IJ"!A)q	&t{{M4H "&"6"6)% 			( s   GGc              #    K   | j                   s| j                  rXd}| j                  rOd}t        | j                  j                  t
              r)t        | j                  j                  j                        }| j                  }| j                   rt        t        | j                        | _        t        | j                        t        | j                        k7  r8t        dt        | j                         dt        | j                         d      | j                  }t        |      D ]F  \  }}t        | j                  ||z   |d t        | j                   dd       d|| j"                         H y y w)Nr   rd   zWriting z cols but got z aliasesrC  r$   r%   r&   r'   rB   rC   rD   rE   )rG  r/  r-  r   r(  r   r  rJ  r   r   r   r  rI  r;   r"  r:  r$  r'  )r,   rR  colnamescolindexcolnames        r-   _format_header_regularz%ExcelFormatter._format_header_regular  s1    Izz	dggmmZ8 #DGGMM$7$7 8I||H  "8T[[9t{{#s4<<'88$"3t||#4"5 6##&t{{#3"4H>   ;;%.x%8 
!'" 9,&t{{M4H$"&"6"6	 	
% !,s   E3E5c                    t         j                  t              r j                         }n j	                         }d} j
                  j                  j                  r j
                  j                  j                  D cg c]  }||nd
 c}dgt         j                        z  z   }t        j                  d d |D              r) fdt        |      D        } xj                  dz  c_        t        j                  ||      S c c}w )Nr9   r   c                    | xr |S r+   r9   )xys     r-   <lambda>z/ExcelFormatter._format_header.<locals>.<lambda>  s
    QW1 r/   c              3  &   K   | ]	  }|d k7    yw)r   Nr9   )r  rb  s     r-   	<genexpr>z0ExcelFormatter._format_header.<locals>.<genexpr>  s     6L1qBw6Ls   c              3  T   K   | ]  \  }}t        j                  ||d        ! y wr+   )r"   r"  )r  r]  r&   r,   s      r-   rf  z0ExcelFormatter._format_header.<locals>.<genexpr>  s,      %# dooxdCs   %(rd   )r   r   r   rY  r_  r(  r-  rJ  r  rx   reducerI  r"  	itertoolschain)r,   gengen2rb  r$   s   `    r-   _format_headerzExcelFormatter._format_header  s     dllJ/((*C--/C$&77==7;ww}}7J7JK!12-KODLL!O" "C  46L6LM)23 1$sD)) Ls   Dc                    t        | j                  j                  t              r| j	                         S | j                         S r+   )r   r(  r-  r   _format_hierarchical_rows_format_regular_rowsr,   s    r-   _format_bodyzExcelFormatter._format_body  s2    dggmmZ01133,,..r/   c              #  (  K   | j                   s| j                  r| xj                  dz  c_        | j                  r| j                  rDt        | j                  t        t        t        j                  t        f      r| j                  d   }nV| j                  r't        | j                  t              r| j                  }n#| j                  j                  j                  d   }t        | j                  t              r| xj                  dz  c_        |r+| j                  durt!        | j                  dz
  d|d        | j                  j                  }t        | j                  j                  t"              r$| j                  j                  j%                         }t'        |      D ]F  \  }}t)        | j                  |z   d|d t+        | j,                  dd       |d| j.                         H d}nd}| j1                  |      E d {    y 7 w)Nrd   r   F	ctx_indexr[  )rG  r/  r"  r-  r.  r   r   tuplenpndarrayr   r   r(  rJ  r   r   r"   r   to_timestamprI  r;   r:  r$  r'  _generate_body)r,   r.  index_valuesidxidxvalrR  s         r-   rp  z#ExcelFormatter._format_regular_rows  s    OOq O :: J  4

E"B% #..q1!!j1A1A3&G".."ggmm11!4$,,
31$t{{%7! 3QTJJ  77==L$''--5#ww}}99;(6 
V"#-&t{{KF"&"6"6	 	
 II&&y111s   HH
HHc              #    K   | j                   s| j                  r| xj                  dz  c_        d}| j                  r| j                  j                  j
                  }| j                  r@t        | j                  t        t        t        j                  t        f      r| j                  }t        | j                  t              r| xj                  dz  c_        t        j                   | r>| j                  dur0t#        |      D ]"  \  }}t%        | j                  dz
  ||d        $ | j&                  rf| j&                  dk7  rV| j                  j                  j)                  dd      }t+        |      }t-        || j                  j                  j.                  | j                  j                  j0                  d      D ]  \  }}}	|j3                  |	|j4                  |j6                        }
t        |
d   t8              r|
j;                         }
|j=                         D ]l  \  }}d	\  }}|dkD  r| j                  |z   |z   dz
  }|}t?        | j                  |z   ||
|   d tA        | jB                  d
d       ||| jD                  ||
       n |dz  } nt-        | j                  j                  ddiD ]{  }t#        |      D ]f  \  }}t        |t8              r|j;                         }t?        | j                  |z   ||d tA        | jB                  d
d       ||| jD                         h |dz  }} | jG                  |      E d {    y 7 w)Nrd   r   Fr   Tr=  r@  )
allow_fill
fill_valuerB  rt  rD  rA  r[  )$rG  r/  r"  r-  r(  rJ  r.  r   r   ru  rv  rw  r   r   r   comany_not_nonerI  r"   r0  rH  r   rK  rL  rM  rN  _can_hold_na	_na_valuer   rx  r@   r;   r:  r$  r'  ry  )r,   gcolidxindex_labelscidxr   rP  rQ  rT  rL  rU  rV  rW  rX  r(   r)   indexcolvalsr{  indexcolvals                     r-   ro  z(ExcelFormatter._format_hierarchical_rows  s
    OOq O::77==..LJ  4

E"B%  $//
 $,,
31$ .4;;e3K"+L"9 KJD$#DOOa$7tTJJK D$4$4	$A!WW]]88! 9 
 !2* =25!GGMM((GGMM'' 	3  !.E6; $[[##)#6#6#)#3#3 ) F "&)V4!'!4!4!6',{{} 8/9,
H#a<)-1)<x)G!)KJ'.H* $! 3 ' &q	"&'.t{{K'N$%$+*.*>*>'1%- " qLGA !H %($Dt$D !L,5l,C ([%k6:*5*B*B*DK* $# 5 ' +"&'.t{{K'N$'$+*.*>*>	 	 qLG!!$ &&w///s   MMMMc                ,    t        | j                        S )z1Whether the aliases for column names are present.)r   r/  rq  s    r-   rG  zExcelFormatter._has_aliasesT  s     DKK((r/   c              #  :  K   t        t        | j                              D ]v  }| j                  j                  d d |f   }t        |      D ]I  \  }}t        | j                  |z   ||z   |d t        | j                  dd       ||| j                         K x y w)Nctxr[  )ranger  r   r(  ilocrI  r;   r"  r:  r$  r'  )r,   rR  colidxseriesrW  r&   s         r-   ry  zExcelFormatter._generate_bodyY  s     C-. 	FWW\\!V),F#F+ 
3"!+*&t{{E4@""&"6"6	 	
	s   BBc              #     K   t        j                  | j                         | j                               D ]&  }| j	                  |j
                        |_        | ( y wr+   )ri  rj  rm  rr  r;  r&   )r,   cells     r-   get_formatted_cellsz"ExcelFormatter.get_formatted_cellsi  sM     OOD$7$7$94;L;L;NO 	D))$((3DHJ	s   AAc                    |dk  rt        d|       d}|dkD  s|s)t        |d      \  }}t        d|z         |z   }|dkD  r&|s)|S )a  
        Convert 0-based column index to Excel column name.

        Parameters
        ----------
        index : int
            The numeric column index to convert to an Excel column name.

        Returns
        -------
        column_name : str
            The column name corresponding to the index.

        Raises
        ------
        ValueError
            Index is negative
        r   zIndex cannot be negative: r      A   )r  divmodchr)r,   r-  column_name	remainders       r-   
_num2excelzExcelFormatter._num2exceln  sc    & 199%ABBai{%eR0E9b9n-;K ai{ r/   c	           
        ddl m}	 | j                  j                  \  }
}|
| j                  kD  s|| j
                  kD  r+t        d|
 d| d| j                   d| j
                         | j                  rd}d}|dk(  rd}n| j                  rd}t        | j                  j                  t              r:| j                  rt        d      | j                  j                  j                  dz
  }t        | j                  t              rI| j                  rt        d      | j                  j                  }| j                  j                  dz   }nd}| j                  |       ||z    }| j                  ||z   |z         }| ||
z   |z    }| d	| }nd
}|i }| j                         }t        ||	      rd}n |	||||      }d}	 |j!                  ||||||       |r|j#                          y
y
# |r|j#                          w w xY w)a  
        writer : path-like, file-like, or ExcelWriter object
            File path or existing ExcelWriter
        sheet_name : str, default 'Sheet1'
            Name of sheet which will contain DataFrame
        startrow :
            upper left cell row to dump data frame
        startcol :
            upper left cell column to dump data frame
        freeze_panes : tuple of integer (length 2), default None
            Specifies the one-based bottommost row and rightmost column that
            is to be frozen
        engine : string, default None
            write engine to use if writer is a path - you can also set this
            via the options ``io.excel.xlsx.writer``,
            or ``io.excel.xlsm.writer``.

        storage_options : dict, optional
            Extra options that make sense for a particular storage connection, e.g.
            host, port, username, password, etc. For HTTP(S) URLs the key-value pairs
            are forwarded to ``urllib.request.Request`` as header options. For other
            URLs (e.g. starting with "s3://", and "gcs://") the key-value pairs are
            forwarded to ``fsspec.open``. Please see ``fsspec`` and ``urllib`` for more
            details, and for more examples on storage options refer `here
            <https://pandas.pydata.org/docs/user_guide/io.html?
            highlight=storage_options#reading-writing-remote-files>`_.

        engine_kwargs: dict, optional
            Arbitrary keyword arguments passed to excel engine.
        r   r   z-This sheet is too large! Your sheet size is: z, z Max sheet size is: rd   zwExcel filters merged cells by showing only the first row. 'autofilter' and 'merge_cells' cannot be used simultaneously.r   :NF)enginestorage_optionsengine_kwargsT)startrowstartcolfreeze_panesautofilter_range)pandas.io.excelr    r(  shapemax_rowsmax_colsr  r2  r-  r   r   r0  rE  r   r  r  _write_cellsclose)r,   writer
sheet_namer  r  r  r  r  r  r    num_rowsnum_colsstartrowsoffsetendrowsoffsetindexoffsetstartautofilter_end_columnendr  formatted_cells	need_saves                        r-   writezExcelFormatter.write  s-   R 	0!WW]](dmm#x$--'??zH: V&&*mm_Bt}}oG 
 ??OM1}dggmmZ8''(6  '+ggmm&;&;a&?dllJ7''(6  +/,,*>*>(,(<(<q(@ !x01(_2L1MNE$(OOHx4G+4U$V!*+Hx,?-,O+PQC"'#/# M224fk*I  /+	F I	!!)!1     y s   G3 3H)
r   NNTTNFinfNF)r#  r   r,  r  r3  zSequence[Hashable] | Noner/  zSequence[Hashable] | boolr-  r   r.  zIndexLabel | Noner0  r   r1  r   r'  rL   r2  r   r2   r3   )r2   Iterable[ExcelCell])r2   r   )rR  r0   r2   r  )r-  r0   r2   r   )Sheet1r   r   NNNN)r  z)FilePath | WriteExcelBuffer | ExcelWriterr  r   r  r0   r  r0   r  ztuple[int, int] | Noner  r  r  zStorageOptions | Noner  rK   r2   r3   )r4   r5   r6   r  r  r  r.   r;  rY  r_  rm  rr  rp  ro  propertyrG  ry  r  r  r  r9   r/   r-   r  r    sp   #J HH
 #'*.,0)--2+/ 0% 0% !	0%
 (0% *0% 0% '0% +0% 0% )0% 0% 
0%d$1f>*,/,2\V0p ) ) 
> #/3!15%)u9u u 	u
 u -u u /u #u 
ur/   r  )8r  
__future__r   collections.abcr   r   r   r   r   rx   ri  r   typingr	   r
   r   r   numpyrv  pandas._libs.libr   pandas.util._exceptionsr   pandas.core.dtypesr   pandas.core.dtypes.commonr   r   pandasr   r   r   r   r   pandas.core.commoncorecommonr  pandas.io.formats._color_datar   pandas.io.formats.cssr   r   pandas.io.formats.formatr   pandas._typingr   r   r   r   r   r    r"   r;   rO   r  r9   r/   r-   <module>r     s    #    	 
   ) 4 &
  !   5 7  #! !*K9 K2CA CALL Lr/   