
    fc                       d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddl+m,Z, ddl+m-Z-  ej.        d ej/                  Z0d! Z1d" Z2d# Z3 ed$d%          Z4 ed&d'          Z5 ed(d)          Z6 ed*d+          Z7 ed,d-          Z8 ed.d'          Z9 ed/d0          Z: ed1d2          Z; ed3d4          Z< G d5 d6ej                  Z=dS )7    N)defaultdict)
namedtuple)Decimal)Fractionwraps)StringIO)isinf)isnan)warn   )	xmlwriter)Format)Drawing)Shape)	XMLwriter)xl_rowcol_to_cell)xl_rowcol_to_cell_fast)xl_cell_to_rowcol)xl_col_to_name)xl_rangexl_color)xl_pixel_width)get_sparkline_style)supported_datetime)datetime_to_excel_datetime)get_image_properties)preserve_whitespace)quote_sheetname)DuplicateTableName)OverlappingRangea  
    \bANCHORARRAY\(    |
    \bBYCOL\(          |
    \bBYROW\(          |
    \bCHOOSECOLS\(     |
    \bCHOOSEROWS\(     |
    \bDROP\(           |
    \bEXPAND\(         |
    \bFILTER\(         |
    \bHSTACK\(         |
    \bLAMBDA\(         |
    \bMAKEARRAY\(      |
    \bMAP\(            |
    \bRANDARRAY\(      |
    \bREDUCE\(         |
    \bSCAN\(           |
    \bSEQUENCE\(       |
    \bSINGLE\(         |
    \bSORT\(           |
    \bSORTBY\(         |
    \bSWITCH\(         |
    \bTAKE\(           |
    \bTEXTSPLIT\(      |
    \bTOCOL\(          |
    \bTOROW\(          |
    \bUNIQUE\(         |
    \bVSTACK\(         |
    \bWRAPCOLS\(       |
    \bWRAPROWS\(       |
    \bXLOOKUP\(c                 <     t                      fd            }|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                     	 |r|d         }t          |           n,# t          $ r t          |          }||dd          z   }Y nw xY w | g|R i |S Nr   r   )int
ValueErrorr   )selfargskwargs	first_argnew_argsmethods        V/var/www/ffwdstore.be/apps/py-env/lib/python3.11/site-packages/xlsxwriter/worksheet.pycell_wrapperz'convert_cell_args.<locals>.cell_wrapper_   s    	'  G	I 	' 	' 	'(33Hd122h&DDD	'
 vd,T,,,V,,,s    &AAr   r-   r/   s   ` r.   convert_cell_argsr1   X   s6     6]]- - - - ]-     c                 <     t                      fd            }|S )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c                    	 |rt          |d                    n# t          $ r d|d         v rC|d                             d          \  }}t          |          \  }}t          |          \  }}nt          |d                   \  }}||}}||||g}	|	                    |dd                     |	}Y nw xY w 
| g|R i |S )Nr   :r   r&   r'   splitr   extend)r(   r)   r*   cell_1cell_2row_1col_1row_2col_2r,   r-   s             r.   r/   z(convert_range_args.<locals>.cell_wrapperw   s    	 DG 	 	 	d1g~~!%as!3!3088u088uu0a99u$euueU3HOODH%%%DDD	 vd,T,,,V,,,s    BB65B6r   r0   s   ` r.   convert_range_argsr?   p   s6     6]]- - - - ]-* r2   c                 <     t                      fd            }|S )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c                 L   	 |rt          |d                    n# t          $ rr d |d                             d          D             \  }}t          |          \  }}t          |          \  }}||g}|                    |dd                     |}Y nw xY w 	| g|R i |S )Nr   c                     g | ]}|d z   S )1 ).0cols     r.   
<listcomp>z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>   s    FFFCcCiFFFr2   r5   r   r6   )
r(   r)   r*   r9   r:   _r<   r>   r,   r-   s
            r.   column_wrapperz+convert_column_args.<locals>.column_wrapper   s    	 DG 	 	 	FF47==3E3EFFFNFF(00HAu(00HAuu~HOODH%%%DDD	 vd,T,,,V,,,s    A9BBr   )r-   rI   s   ` r.   convert_column_argsrJ      s6     6]]- - - - ]-  r2   Stringzstring, formatNumberznumber, formatBlankformatBooleanzboolean, formatFormulazformula, format, valueDatetimeArrayFormulaz$formula, format, value, range, atype
RichStringzstring, format, raw_stringErrorzerror, format, valuec                   J    e Zd ZdZ fdZd Zed             Zd Zedd            Z	ddZ
edd	            Zdd
Zedd            ZddZedd            ZddZe	 	 dd            Ze	 	 dd            ZddZ	 	 	 ddZedd            ZddZedd            ZddZedd            ZddZed             Zd Zd Zedd            Zedd             Z edd!            Z!edd"            Z"edd#            Z#edd$            Z$edd%            Z%d& Z&dd'Z'd( Z(d) Z)d* Z*d+ Z+d, Z,d- Z-d. Z.e/	 dd/            Z0e/	 dd0            Z1d1 Z2dd2Z3dd3Z4dd4Z5e	 dd5            Z6ed6             Z7d7 Z8d8 Z9edd9            Z:e	 dd:            Z;edd;            Z<edd<            Z=ed=             Z>edd>            Z?	 dd@Z@eddA            ZAeddB            ZBddDZCdE ZDdF ZEdG ZFddIZGddJZHeddK            ZIdL ZJdM ZKddNZLddOZMdP ZNdQ ZOdR ZPd dUZQddVZRddWZSddXZTe/ddY            ZUddZZVd[ ZWd\ ZXed]             ZYd^ ZZd_ Z[d` Z\da Z]db Z^dc Z_dd Z`ddeZaddfZbdg Zcdh ZdddiZedj Zfdk Zgdl Zhdm Zidn Zjdo Zkdp Zldq Zmdr Znds Zodt Zpdu Zqdv Zrdw ZsddxZtddyZudz Zvd{ Zwd| Zxd} Zyd~ Zzd Z{d Z|d Z}d Z~d Zd Zd ZddZddZd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 ddZ	 ddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdÄ ZdĄ Zdń ZdƄ ZdǄ ZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zdd΄Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS (  	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    c                 x
   t          t          |                                            d| _        d| _        d| _        d| _        d| _        d| _        d| _	        g | _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        i | _        g | _        d| _        d| _        d| _        d| _        g | _        d	| _        d| _        d| _        d| _        d
| _         d| _!        d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        d| _(        d| _)        d| _*        d| _+        d| _,        g | _-        g | _.        g | _/        d| _0        d| _1        d| _2        d| _3        d| _4        d| _5        d| _6        d| _7        d| _8        d| _9        d| _:        d| _;        d| _<        d| _=        d| _>        d| _?        d| _@        g | _A        g | _B        i | _C        g | _D        d| _E        i | _F        t          t                    | _I        d| _J        d
| _K        d| _L        d| _M        d
| _N        d| _O        d| _P        d| _Q        d| _R        d
| _S        d
| _T        d
| _U        d| _V        d| _W        d| _X        d| _Y        d| _Z        d| _[        d| _\        d| _]        i | _^        g | __        t          t                    | _`        g | _a        i | _b        i | _c        i | _d        d| _e        d| _f        d| _g        t          t                    | _h        g | _i        d| _j        d| _k        d| _l        g | _m        d| _n        d| _o        d| _p        g | _q        d| _r        i | _s        i | _t        i | _u        i | _v        d| _w        d| _x        d
| _y        d| _z        d| _{        g | _|        g | _}        g | _~        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        d| _        i | _        d| _        i | _        d| _        d| _        d| _        d| _        d| _        g | _        i | _        g | _        d| _        d
| _        d| _        d| _        d| _        t          t                    | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _l        d| _        d| _        d| _        d| _        d| _        i | _        d| _        d| _        d| _        d| _        dS )z
        Constructor.

        Nr   Fi  i   i @        r   Tffffff?      ?333333?d         \( @@   D      i  )superrV   __init__nameindex	str_tablepaletteconstant_memorytmpdiris_chartsheet
ext_sheets
fileclosedexcel_versionexcel2003_style
xls_rowmax
xls_colmax
xls_strmax
dim_rowmin
dim_rowmax
dim_colmin
dim_colmaxcol_info
selectionshiddenactive	tab_colortop_left_cellpanesactive_paneselectedpage_setup_changed
paper_sizeorientationprint_options_changedhcentervcenterprint_gridlinesscreen_gridlinesprint_headersrow_col_headersheader_footer_changedheaderfooterheader_footer_alignsheader_footer_scalesheader_imagesfooter_imagesheader_images_listmargin_leftmargin_right
margin_topmargin_bottommargin_headermargin_footerrepeat_row_rangerepeat_col_rangeprint_area_range
page_orderblack_whitedraft_qualityprint_comments
page_startfit_page	fit_width
fit_heighthbreaksvbreaksprotect_optionsprotected_rangesnum_protected_rangesset_colsr   dictset_rowszoomzoom_scale_normalprint_scaleis_right_to_left
show_zerosleading_zerosoutline_row_leveloutline_col_leveloutline_styleoutline_belowoutline_right
outline_onoutline_changedoriginal_row_heightdefault_row_heightdefault_row_pixelsdefault_col_widthdefault_col_pixelsdefault_date_pixelsdefault_row_zeroednameswrite_matchtablemergemerged_cellstable_cells	row_spanshas_vmlhas_header_vmlhas_commentscommentscomments_listcomments_authorcomments_visiblevml_shape_idbuttons_listvml_header_idautofilter_areaautofilter_reffilter_range	filter_onfilter_colsfilter_typefilter_cells	row_sizescol_size_changedrow_size_changedlast_shape_id	rel_counthlink_count
hlink_refsexternal_hyper_linksexternal_drawing_linksexternal_comment_linksexternal_vml_linksexternal_table_linksexternal_background_linksdrawing_linksvml_drawing_linkschartsimagestables
sparklinesshapes
shape_hashdrawingdrawing_relsdrawing_rels_idvml_drawing_relsvml_drawing_rels_idbackground_imagebackground_bytesrstringprevious_rowvalidationscond_formatsdata_bars_2010use_data_bars_2010dxf_priority	page_viewvba_codename	date_1904
hyperlinksstrings_to_numbersstrings_to_urlsnan_inf_to_errorsstrings_to_formulasdefault_date_formatdefault_url_formatremove_timezonemax_url_lengthrow_data_filenamerow_data_fhworksheet_metavml_data_idrow_data_fh_closedvertical_dpihorizontal_dpiwrite_handlersignored_errorshas_dynamic_arraysuse_future_functionsignore_write_string)r(   	__class__s    r.   rf   zWorksheet.__init__   s    	i'')))	
 "!$!
"'%*"$ $"$%*"$(!$(!"$!   " " "! "$%!#D))	!" !!"!"$#% "$"$!%"$#% "#
 &&

#!#D))! ! !" % %$&!&(#&(#"$$&!)+&!#  "#$  $ % "' %d++"'#!&#' #' "&$"!%" !%"' ""'$)!#(   r2   c                    |dk    r | j         ||g|R  S | j        r$|                    d          r | j        ||g|R  S |                    d          r$|                    d          r | j        ||g|R  S d|v rU| j        rNt          j        d|          s*t          j        d|          st          j        d|          r | j        ||g|R  S | j	        rm	 t          |          }| j        st          |          s't          |          s | j        |||g|d	d          R  S n# t          $ r Y nw xY w | j        ||g|R  S  | j        ||g|R  S )
NrY   =z{=}r5   (ftp|http)s?://mailto:z(in|ex)ternal:r   )_write_blankr  
startswith_write_formulaendswithr  rematch
_write_urlr   floatr  r   r
   _write_numberr'   _write_string)r(   tokenrowrF   r)   fs         r.   _write_token_as_stringz Worksheet._write_token_as_string  s   B;;$4$S#55555# 	8(8(8(=(= 	8&4&sC7$7777D!! 	8ennS&9&9 	8&4&sC7$7777 5LL$  *E22  8Iu--	 
 8,e44  #4?33d3333" 	7%LL) F%(( F588 F-4-c3EDHEEEE    &4%c366666 &4%c366666s   AD( (
D54D5c                       | j         ||g|R  S )a  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

        Args:
            row:   The cell row (zero indexed).
            col:   The cell column (zero indexed).
            *args: Args to pass to sub functions.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of called method.

        _writer(   r%  rF   r)   s       r.   writezWorksheet.write  s     " t{3+d++++r2   c                 z   |st          d          |d         }|j        }|| j        v r| j        |         } || ||g|R  }|n|S | | j        ||g|R  S |t          u r | j        ||g|R  S |t          t          t          t          fv r | j
        ||g|R  S |t          u r | j        |||g|R  S |t          j        t          j        t          j        t          j        fv r | j        ||g|R  S t%          |t          t          t          t          f          r | j
        ||g|R  S t%          |t                    r | j        |||g|R  S t%          |t                    r | j        ||g|R  S t'          |          r | j        ||g|R  S 	 t          |          } | j
        |||g|dd          R  S # t(          $ r Y n,t           $ r  t          dt+          |          z            w xY w	 t          |            | j        ||g|R  S # t(          $ r  t          dt+          |          z            w xY w)Nz,write() takes at least 4 arguments (3 given)r   r   zUnsupported type %s in write())	TypeErrorr  r  r  bool_write_booleanr!  r&   r   r   r"  strr'  datetimedatetime	timedelta_write_datetime
isinstancer   r'   typer#  )	r(   r%  rF   r)   r$  
token_typewrite_handlerfunction_returnr&  s	            r.   r*  zWorksheet._write  s$    	LJKKK Q _
 ,,, /
;M+mD#sBTBBBO
 &&& =$4$S#55555 &4&sC7$7777%gx888%4%c366666.4.uc3FFFFFMM	
 
 
 (4'S848888
 eeS'8<== 	7%4%c366666 eS!! 	G.4.uc3FFFFF eT"" 	8&4&sC7$7777 e$$ 	9'4'S848888	LeA%4%c3=DH==== 	 	 	D 	L 	L 	L<tE{{JKKK	L	LJJJ%4%c366666 	L 	L 	L<tE{{JKKK	Ls   &F9 9
G.)G.2H *H:Nc                 2    |                      ||||          S )a  
        Write a string to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            string: Cell data. Str.
            format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.

        )r#  )r(   r%  rF   stringcell_formats        r.   write_stringzWorksheet.write_string1  s    " !!#sFK@@@r2   c                 ^   d}|                      ||          rdS t          |          | j        k    r|d | j                 }d}| j        s| j                            |          }n|}| j        r || j        k    r|                     |           t          ||          | j	        |         |<   |S Nr   )
_check_dimensionslenrt   rk   ri   _get_shared_string_indexr   _write_single_rowcell_string_tupler   )r(   r%  rF   r=  r>  	str_errorstring_indexs          r.   r#  zWorksheet._write_stringE  s    	 !!#s++ 	2 v;;((-do-.FI # 	">BB6JJLL!L  	(C$*;$;$;""3'''  1{KK
3r2   c                 2    |                      ||||          S )a  
        Write a number to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            number:      Cell data. Int or float.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r"  r(   r%  rF   numberr>  s        r.   write_numberzWorksheet.write_number`  s      !!#sFK@@@r2   c                     t          |          st          |          r| j        r|t          |          r|                     ||d|d          S |t          j        k    r|                     ||d|d          S |t          j         k    r|                     ||d|d          S nt          d          |                     ||          rdS | j        r || j	        k    r| 
                    |           t          ||          | j        |         |<   dS )N#NUM!z1/0#DIV/0!z-1/0zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionrB  r   )r   r
   r  r  mathinfr.  rD  rk   r   rG  cell_number_tupler   rL  s        r.   r"  zWorksheet._write_numbers  s4   == 	E&MM 	% == Y..sC+wWWWtx''..sCYWWWy((..sCiXXX )  D   !!#s++ 	2  	(C$*;$;$;""3'''  1EE
3qr2   c                 2    |                      ||||          S )a  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            blank:       Any value. It is ignored.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  r(   r%  rF   blankr>  s        r.   write_blankzWorksheet.write_blank  s    "   c5+>>>r2   c                     |dS |                      ||          rdS | j        r || j        k    r|                     |           t	          |          | j        |         |<   dS )Nr   rB  )rD  rk   r   rG  cell_blank_tupler   rV  s        r.   r  zWorksheet._write_blank  sy    1 !!#s++ 	2  	(C$*;$;$;""3'''  0<<
3qr2   r   c                 4    |                      |||||          S )a  
        Write a formula to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            formula:     Cell formula.
            cell_format: An optional cell Format object.
            value:       An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Formula can't be None or empty.

        )r  r(   r%  rF   formular>  values         r.   write_formulazWorksheet.write_formula  s     & ""3Wk5IIIr2   c           	         |                      ||          rdS ||dk    rt          d           dS t                              |          r|                     |||||||          S |                    d          r0|                    d          r|                     |||||||          S |                     |          }| j	        r || j
        k    r|                     |           t          |||          | j        |         |<   dS )NrB  rY   zFormula can't be None or empty{r  r   )rD  r   re_dynamic_functionsearchwrite_dynamic_array_formular  r  _write_array_formula_prepare_formulark   r   rG  cell_formula_tupler   r\  s         r.   r  zWorksheet._write_formula  s9   !!#s++ 	2?gmm12222 %%g.. 	33S#sG[%  
 c"" 	w'7'7'<'< 	,,S#sG[%  
 ''00  	(C$*;$;$;""3'''  2';NN
3qr2   c           
          t                               |          r|                     |||||||          S |                     |||||||d          S )an  
        Write a formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        static)rb  rc  rd  re  )r(   	first_row	first_collast_rowlast_colr]  r>  r^  s           r.   write_array_formulazWorksheet.write_array_formula  st    : %%g.. 	339h';PU   ((	
 	
 		
r2   c           
      X    |                      |||||||d          }|dk    rd| _        |S )a|  
        Write a dynamic array formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        dynamicr   T)re  r  )	r(   rj  rk  rl  rm  r]  r>  r^  errors	            r.   rd  z%Worksheet.write_dynamic_array_formula  sI    8 ))	
 	
 A::&*D#r2   Fc                     |                     d          r
|dd          }|                     d          r
|dd          }|                    d          r
|d d         }d|v r|S t          j        dd|          }t          j        d	d
|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd |          }t          j        d!d"|          }t          j        d#d$|          }t          j        d%d&|          }t          j        d'd(|          }t          j        d)d*|          }t          j        d+d,|          }t          j        d-d.|          }t          j        d/d0|          }t          j        d1d2|          }t          j        d3d4|          }t          j        d5d6|          }t          j        d7d8|          }t          j        d9d:|          }t          j        d;d<|          }t          j        d=d>|          }t          j        d?d@|          }| j        s|s|S t          j        dAdB|          }t          j        dCdD|          }t          j        dEdF|          }t          j        dGdH|          }t          j        dIdJ|          }t          j        dKdL|          }t          j        dMdN|          }t          j        dOdP|          }t          j        dQdR|          }t          j        dSdT|          }t          j        dUdV|          }t          j        dWdX|          }t          j        dYdZ|          }t          j        d[d\|          }t          j        d]d^|          }t          j        d_d`|          }t          j        dadb|          }t          j        dcdd|          }t          j        dedf|          }t          j        dgdh|          }t          j        didj|          }t          j        dkdl|          }t          j        dmdn|          }t          j        dodp|          }t          j        dqdr|          }t          j        dsdt|          }t          j        dudv|          }t          j        dwdx|          }t          j        dydz|          }t          j        d{d||          }t          j        d}d~|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd |          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        d	d
|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd |          }t          j        d!d"|          }t          j        d#d$|          }t          j        d%d&|          }t          j        d'd(|          }t          j        d)d*|          }t          j        d+d,|          }t          j        d-d.|          }t          j        d/d0|          }t          j        d1d2|          }t          j        d3d4|          }t          j        d5d6|          }t          j        d7d8|          }t          j        d9d:|          }t          j        d;d<|          }|S (=  Nra  r   r  r  rB  z_xlfn.z\bANCHORARRAY\(z_xlfn.ANCHORARRAY(z	\bBYCOL\(z_xlfn.BYCOL(z	\bBYROW\(z_xlfn.BYROW(z\bCHOOSECOLS\(z_xlfn.CHOOSECOLS(z\bCHOOSEROWS\(z_xlfn.CHOOSEROWS(z\bDROP\(z_xlfn.DROP(z
\bEXPAND\(z_xlfn.EXPAND(z
\bFILTER\(z_xlfn._xlws.FILTER(z
\bHSTACK\(z_xlfn.HSTACK(z
\bLAMBDA\(z_xlfn.LAMBDA(z\bMAKEARRAY\(z_xlfn.MAKEARRAY(z\bMAP\(z
_xlfn.MAP(z\bRANDARRAY\(z_xlfn.RANDARRAY(z
\bREDUCE\(z_xlfn.REDUCE(z\bSCAN\(z_xlfn.SCAN(z	\SINGLE\(z_xlfn.SINGLE(z\bSEQUENCE\(z_xlfn.SEQUENCE(z\bSORT\(z_xlfn._xlws.SORT(z
\bSORTBY\(z_xlfn.SORTBY(z
\bSWITCH\(z_xlfn.SWITCH(z\bTAKE\(z_xlfn.TAKE(z\bTEXTSPLIT\(z_xlfn.TEXTSPLIT(z	\bTOCOL\(z_xlfn.TOCOL(z	\bTOROW\(z_xlfn.TOROW(z
\bUNIQUE\(z_xlfn.UNIQUE(z
\bVSTACK\(z_xlfn.VSTACK(z\bWRAPCOLS\(z_xlfn.WRAPCOLS(z\bWRAPROWS\(z_xlfn.WRAPROWS(z\bXLOOKUP\(z_xlfn.XLOOKUP(z	\bACOTH\(z_xlfn.ACOTH(z\bACOT\(z_xlfn.ACOT(z\bAGGREGATE\(z_xlfn.AGGREGATE(z
\bARABIC\(z_xlfn.ARABIC(z\bARRAYTOTEXT\(z_xlfn.ARRAYTOTEXT(z\bBASE\(z_xlfn.BASE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBETA.INV\(z_xlfn.BETA.INV(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z
\bBITAND\(z_xlfn.BITAND(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z	\bBITOR\(z_xlfn.BITOR(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z
\bBITXOR\(z_xlfn.BITXOR(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z
\bCONCAT\(z_xlfn.CONCAT(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOTH\(z_xlfn.COTH(z\bCOT\(z
_xlfn.COT(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bCSCH\(z_xlfn.CSCH(z\bCSC\(z
_xlfn.CSC(z\bDAYS\(z_xlfn.DAYS(z\bDECIMAL\(z_xlfn.DECIMAL(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z
\bF.DIST\(z_xlfn.F.DIST(z\bF.INV.RT\(z_xlfn.F.INV.RT(z	\bF.INV\(z_xlfn.F.INV(z
\bF.TEST\(z_xlfn.F.TEST(z\bFILTERXML\(z_xlfn.FILTERXML(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bIFNA\(z_xlfn.IFNA(z\bIFS\(z
_xlfn.IFS(z	\bIMAGE\(z_xlfn.IMAGE(z
\bIMCOSH\(z_xlfn.IMCOSH(z	\bIMCOT\(z_xlfn.IMCOT(z
\bIMCSCH\(z_xlfn.IMCSCH(z	\bIMCSC\(z_xlfn.IMCSC(z
\bIMSECH\(z_xlfn.IMSECH(z	\bIMSEC\(z_xlfn.IMSEC(z
\bIMSINH\(z_xlfn.IMSINH(z	\bIMTAN\(z_xlfn.IMTAN(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bISOMITTED\(z_xlfn.ISOMITTED(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bLET\(z
_xlfn.LET(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z	\bMUNIT\(z_xlfn.MUNIT(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bNORM.INV\(z_xlfn.NORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bPDURATION\(z_xlfn.PDURATION(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPHI\(z
_xlfn.PHI(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bRRI\(z
_xlfn.RRI(z\bSECH\(z_xlfn.SECH(z\bSEC\(z
_xlfn.SEC(z
\bSHEETS\(z_xlfn.SHEETS(z	\bSHEET\(z_xlfn.SHEET(z
\bSKEW.P\(z_xlfn.SKEW.P(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z
\bT.DIST\(z_xlfn.T.DIST(z\bT.INV.2T\(z_xlfn.T.INV.2T(z	\bT.INV\(z_xlfn.T.INV(z
\bT.TEST\(z_xlfn.T.TEST(z\bTEXTAFTER\(z_xlfn.TEXTAFTER(z\bTEXTBEFORE\(z_xlfn.TEXTBEFORE(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bVALUETOTEXT\(z_xlfn.VALUETOTEXT(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z
\bXMATCH\(z_xlfn.XMATCH(z\bXOR\(z
_xlfn.XOR(z
\bZ.TEST\(z_xlfn.Z.TEST()r  r  r  subr  )r(   r]  expand_future_functionss      r.   rf  zWorksheet._prepare_formulaF  s   c"" 	"abbkGc"" 	"abbkGC   	#crclG wN &+-A7KK&~w??&~w??&*,?II&*,?II&mW==&AA&(=wGG&AA&AA&)+=wGG&\7;;&)+=wGG&AA&mW==&@@&*;WEE&&97CC&AA&AA&mW==&)+=wGG&~w??&~w??&AA&AA&*;WEE&*;WEE&)97CC( 	1H 	N&~w??&mW==&)+=wGG&AA&+-A7KK&mW==&)+=wGG&*;WEE&02KWUU&*,?II&)+=wGG&AA&)+=wGG&~w??&)+=wGG&AA&,.CWMM&/1I7SS&-/EwOO&*,?II&,.CWMM&)+=wGG&*,?II&)97CC&AA&/1I7SS&,.CWMM&mW==&\7;;&,.CWMM&,.CWMM&mW==&\7;;&mW==&)97CC&+-A7KK&,.CWMM&*,?II&)+=wGG&AA&*;WEE&~w??&AA&)+=wGG&*,?II&-/EwOO&')F
 
 &+-NPW
 
 &13MwWW&,.CWMM&/1I7SS&+-A7KK&*,?II&)+=wGG&/1I7SS&~w??&~w??&,.CWMM&mW==&\7;;&~w??&AA&~w??&AA&~w??&AA&~w??&AA&~w??&)+=wGG&)+=wGG&*,?II&\7;;&,.CWMM&+-A7KK&AA&AA&)+=wGG&)+=wGG&~w??&-/EwOO&)+=wGG&*;WEE&+-A7KK&*,?II&+-A7KK&)+=wGG&.0GQQ&.0GQQ&/1I7SS&/1I7SS&,.CWMM&\7;;&,.CWMM&,.CWMM&,.CWMM&+-A7KK&*;WEE&)97CC&\7;;&mW==&\7;;&AA&~w??&AA&)97CC&)97CC&)+=wGG&)+=wGG&AA&*;WEE&~w??&AA&)+=wGG&*,?II&*;WEE&)97CC&)97CC&+-A7KK&~w??&~w??&*,?II&,.CWMM&AA&\7;;&AAr2   ri  c	                 x   ||k    r||}}||k    r||}}|                      ||          rdS |                      ||          rdS ||k    r||k    rt          ||          }	n$t          ||          dz   t          ||          z   }	|                     |          }| j        r || j        k    r|                     |           t          ||||	|          | j        |         |<   | j        sPt          ||dz             D ]<}
t          ||dz             D ]&}|
|k    s||k    r| 	                    |
|d|           '=dS )NrB  r5   r   r   )
rD  r   rf  rk   r   rG  cell_arformula_tupler   ranger"  )r(   rj  rk  rl  rm  r]  r>  r^  atype
cell_ranger%  rF   s               r.   re  zWorksheet._write_array_formula  s    x"*IxIx"*IxI !!)Y77 	2!!(H55 	2   Y(%:%:*9i@@JJ ")Y77#Hh778  ''00  	.I0A$A$A""9--- ,@[%U,
 ,

9i(
 # 	EY155 E E HqL99 E ECi''3)+;+;**3QDDDE qr2   c                 2    |                      ||||          S )a  
        Write a date or time to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            date:        Date and/or time as a datetime object.
            cell_format: A cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r6  )r(   r%  rF   r3  r>  s        r.   write_datetimezWorksheet.write_datetime2  s      ##CdK@@@r2   c                     |                      ||          rdS | j        r || j        k    r|                     |           |                     |          }|| j        }t          ||          | j        |         |<   dS )NrB  r   )rD  rk   r   rG  _convert_date_timer  cell_datetime_tupler   )r(   r%  rF   r3  r>  rM  s         r.   r6  zWorksheet._write_datetimeE  s    !!#s++ 	2  	(C$*;$;$;""3''' ((.. 2K  36;GG
3qr2   c                 2    |                      ||||          S )a  
        Write a boolean value to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            boolean:     Cell data. bool type.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r0  )r(   r%  rF   booleanr>  s        r.   write_booleanzWorksheet.write_booleanZ  s      ""3WkBBBr2   c                     |                      ||          rdS | j        r || j        k    r|                     |           |rd}nd}t	          ||          | j        |         |<   dS )NrB  r   r   )rD  rk   r   rG  cell_boolean_tupler   )r(   r%  rF   r  r>  r^  s         r.   r0  zWorksheet._write_booleanm  s    !!#s++ 	2  	(C$*;$;$;""3''' 	EEE  2%EE
3qr2   c                 6    |                      ||||||          S )a  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )r   )r(   r%  rF   urlr>  r=  tips          r.   	write_urlzWorksheet.write_url  s     & sCk63GGGr2   c                    |                      ||          rdS ||}d}|                    d          r.|                    dd          }|                    dd          }d}d}|                    d          rZ|                    dd          }|                    dd	          }|                    dd          }|                    dd	          }d
}|                    dd          }d}	t          |          | j        k    rt          d           dS |}
|dk    rd|v r|                    dd          \  }}
nd }
|                     |          }|
|s|                     |
          }
t          j	        d|          st          j	        d|          rd|z   }t          j
        dd|          }|
pd}| j        }t          |          |k    st          |          |k    rt          d||fz             dS | xj        dz  c_        | j        dk    rt          d|z             dS || j        }| j        s?| j        r || j        k    r|                     |           |                     ||||           |||
|d| j        |         |<   |	S )NrB  r   	internal:rY      F	external:/\Tr  r   zFIgnoring URL since it exceeds Excel's string limit of 32767 charactersrC  #\w:\\file:///z^\.\\zfIgnoring URL '%s' with link or location/anchor > %d characters since it exceeds Excel's limit for URLSi  zNIgnoring URL '%s' since it exceeds Excel's limit of 65,530 URLS per worksheet.)	link_typer  r1  r  )rD  r  replacerE  rt   r   r7   _escape_urlr  r  rs  r  r   r  r  rk   r   rG  r#  r   )r(   r%  rF   r  r>  r=  r  r  externalrI  url_strtmp_url_strmax_urls                r.   r   zWorksheet._write_url  s   !!#s++ 	2 >F 	 >>+&& 	++k2..C^^K44FI >>+&& 	++k2..C++c4((C^^K44F^^C..FH 	2.. 	v;;((#   2  >>czz"yya00WW""3''C"8"**733 x$$ '(<(< ' 3& &2s++C m%s88g[!1!1G!;!;EHKW~V   2 	Ae##-/23   2 1K' 	># ,d.?(?(?&&s+++ sC=== #	%
 %
S! r2   c                       | j         ||g|R  S )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

        Args:
            row:          The cell row (zero indexed).
            col:          The cell column (zero indexed).
            string_parts: String and format pairs.
            cell_format:  Optional Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.
            -3: 2 consecutive formats used.
            -4: Empty string used.
            -5: Insufficient parameters.

        )_write_rich_stringr+  s       r.   write_rich_stringzWorksheet.write_rich_string	  s!    * 't&sC7$7777r2   c                 0   t          |          }d }d}d}|                     ||          rdS t          |d         t                    r|                                }t                      }t                      | _        | j                            |           t                      }	g }
d}d}t          |          dk    rt          d           dS |D ]}t          |t                    sf|dk    r+|
                    |	           |
                    |           n|
                    |           |dk    rt          d            d	S ||z  }d
}n5|dk    r|dk    rt          d            dS |
                    |           d}|dz  }t          |
d         t                    s| j                            d           |
D ]}t          |t                    r0| j                            d           |                     |           Gg }t          |          r|                    d           | j                            d||           | j                            d           | j        j                                        }t          |          | j        k    rt          d           dS | j        s| j                            |          }n|}| j        r || j        k    r|                     |           t3          |||          | j        |         |<   dS )Nr   rY   rB  rN   r  zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().r  r=  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().r  r   r)z	xml:spacepreservetzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().rC  )listrD  r7  r   popr	   r   r   _set_filehandlerE  r   append_xml_start_tag_write_fontr   _xml_data_element_xml_end_tagfhgetvaluert   rk   ri   rF  r   rG  cell_rich_string_tupler   )r(   r%  rF   r)   tokensr>  rJ  
raw_stringr  default	fragmentspreviousposr$  
attributesr=  s                   r.   r  zWorksheet._write_rich_string!  s   d
 !!#s++ 	2 fRj&)) 	' **,,K ZZ {{$$R((( ((
 	v;;!B   2 "	 "	EeV,, $x''$$W---$$U++++ $$U+++B;;A   22 e#
# x''C!GGJ   22   '''#1HCC )A,// 	-L'',,,  	/ 	/E%(( /++C000  ''''  
&u-- A%%&?@@@..sE:FFF))#.... ))++ z??T_,,?   2 # 	">BB6JJLL!L  	(C$*;$;$;""3'''  6+z 
  

3 qr2   c                     || j         |<   dS )a"  
        Add a callback function to the write() method to handle user defined
        types.

        Args:
            user_type:      The user type() to match on.
            user_function:  The user defined function to write the type data.
        Returns:
            Nothing.

        N)r  )r(   	user_typeuser_functions      r.   add_write_handlerzWorksheet.add_write_handler  s     *7I&&&r2   c                 V    |D ]%}|                      ||||          }|r|c S |dz  }&dS )a  
        Write a row of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r)  r(   r%  rF   datar>  r$  rq  s          r.   	write_rowzWorksheet.write_row  K      	 	EKKS%==E 1HCCqr2   c                 V    |D ]%}|                      ||||          }|r|c S |dz  }&dS )a  
        Write a column of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r)  r  s          r.   write_columnzWorksheet.write_column  r  r2   c                    |                      ||dd          rt          d||fz             dS |i }|                    dd          }|                    dd          }|                    dd	          }|                    d
d	          }|                    dd          }	|                    dd          }
|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    d|          }|s3t          j                            |          st          d|z             dS | j                            ||||||||	|
||||g           dS )a  
        Insert an image with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            filename: Path and filename for in supported formats.
            options:  Position, scale, url and data stream of the image.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert image at (%d, %d).rB  Nx_offsetr   y_offsetx_scaler   y_scaler  r  object_positionr  
image_datadescription
decorativeFpositioningImage file '%s' not found.)rD  r   getospathexistsr   r  )r(   r%  rF   filenameoptionsr  r  r  r  r  r  anchorr  r  r  s                  r.   insert_imagezWorksheet.insert_image  s   " !!#sD$77 	3sCj@AAA2?G;;z1--;;z1--++i++++i++kk%&&kk%&&.22[[t44
kk-66[[u55
 ]F33 	"'..":": 	-89992	
 	
 	
" qr2   c                    |                      ||          rt          d||fz             dS |i }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }	|                    d	d
          }
|s3t          j                            |          st          d|z             dS |r1|| j        }d| _        |                     ||||d|           d
| _        t          ||          \  }}}}}}}||||	|
g}| j
                            ||          }t          d||          | j        |         |<   dS )a  
        Embed an image in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            filename: Path and filename for in supported formats.
            options:  Url and data stream of the image.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        zCannot embed image at (%d, %d).rB  Nr  r  r>  r  r  r  Fr  T#VALUE!r   )rD  r   r  r  r  r  r  r  r  r   embedded_imagesget_image_indexcell_error_tupler   )r(   r%  rF   r  r  r  r  r>  r  r  r  
image_typerH   digestimageimage_indexs                   r.   embed_imagezWorksheet.embed_image  s   " !!#s++ 	2c3Z?@@@2?Gkk%&&kk%&&kk-66[[t44
kk-66[[u55
 	"'..":": 	-89992 	-""5'+D$NN3S+tSAAA',D$ !:66	
 :z;
K*::5&II  0	;TT
3qr2   c                    |                      ||dd          rt          d||fz             dS |d}|i }|                    dd          }|                    dd          }|                    d	d
          }|                    dd
          }|                    dd
          }	|                    dd          }
|                    dd          }| j                            ||||||||	||
|g           dS )a  
        Insert an textbox with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            text:     The text for the textbox.
            options:  Textbox options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz"Cannot insert textbox at (%d, %d).rB  NrY   r  r   r  r  r   r  r  r  r  F)rD  r   r  r   r  )r(   r%  rF   textr  r  r  r  r  r  r  r  s               r.   insert_textboxzWorksheet.insert_textboxR  s   " !!#sD$77 	5c
BCCC2<D?G;;z1--;;z1--++i++++i++.22kk-66[[u55
	
 	
 	
 qr2   c                    |                      ||dd          rt          d||fz             dS |i }|j        s|j        r|j        j        rt          d           dS d|_        |j        rd|j        _        |                    dd          }|                    dd          }|                    d	d
          }|                    dd
          }|                    dd
          }	|                    dd          }
|                    dd          }|j        d
k    r|j        }|j        d
k    r|j        }|j        r|j        }|j        r|j        }| j	        
                    ||||||||	|
|g
           dS )a  
        Insert an chart with its top-left corner in a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            chart:   Chart object.
            options: Position and scale of the chart.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert chart at (%d, %d).rB  Nz7Chart cannot be inserted in a worksheet more than once.r  r   r  r  r   r  r  r  r  F)rD  r   already_insertedcombinedr  r  r  r  r  r   r  )r(   r%  rF   chartr  r  r  r  r  r  r  r  s               r.   insert_chartzWorksheet.insert_chart  s   " !!#sD$77 	3sCj@AAA2?G ! 	7U^ 	78W 	7JKKKF%)E"~ 726/;;z1--;;z1--++i++++i++.22kk-66[[u55
 =AmG=AmG> 	&~H> 	&~H	
 	
 	
 qr2   c                     |i }|                      ||          rdS t          |          | j        k    rdS d| _        d| _        ||||g| j        |         |<   dS )a  
        Write a comment to a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            comment: Cell comment. Str.
            options: Comment formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32k characters.

        NrB  rC  r   r   )rD  rE  rt   r   r   r   )r(   r%  rF   commentr  s        r.   write_commentzWorksheet.write_comment  sw    " ?G !!#s++ 	2 w<<$/))2 $'Wg">c3qr2   c                     d| _         dS )z
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r(   s    r.   show_commentszWorksheet.show_comments       !"r2   c                     |s3t           j                            |          st          d|z             dS || _        || _        dS )z
        Set a background image for a worksheet.

        Args:
            filename:       Path and filename for in supported formats.
            is_byte_stream: File is a stream of bytes.
        Returns:
            Nothing.

        r  rB  N)r  r  r  r   r   r   )r(   r  is_byte_streams      r.   set_backgroundzWorksheet.set_background  sP      	bgnnX&>&> 	-89992 . (r2   c                     || _         dS )z
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r   )r(   authors     r.   set_comments_authorzWorksheet.set_comments_author  s      &r2   c                     | j         S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rg   r  s    r.   get_namezWorksheet.get_name  s     yr2   c                 D    d| _         d| _        | j        | j        _        dS )a  
        Set this worksheet as the active worksheet, i.e. the worksheet that is
        displayed when the workbook is opened. Also set it as selected.

        Note: An active worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)r{   r   rh   r
  activesheetr  s    r.   activatezWorksheet.activate,  s%     *.*'''r2   c                 "    d| _         d| _        dS )z
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)r   r{   r  s    r.   selectzWorksheet.select>  s     r2   c                 "    d| _         d| _        dS )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   Nr{   r   r  s    r.   hidezWorksheet.hideO        r2   c                 "    d| _         d| _        dS )z
        Hide the current worksheet. This can only be unhidden by VBA.

        Args:
            None.

        Returns:
            Nothing.

        r  r   Nr  r  s    r.   very_hiddenzWorksheet.very_hidden_  r  r2   c                 6    d| _         | j        | j        _        dS )aJ  
        Set current worksheet as the first visible sheet. This is necessary
        when there are a large number of worksheets and the activated
        worksheet is not visible on the screen.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r{   rh   r
  
firstsheetr  s    r.   set_first_sheetzWorksheet.set_first_sheeto  s     )-&&&r2   c                    |i }||k    r||}}d}|                     dd          }|                     dd          }|                     dd          }	|s|r|rd}
nd}
|                     d|||
          rdS |                     d|||
          rdS |	dk     rd}	|	d	k    rd	}	|	| j        k    r|	| _        t          ||d
z             D ]}||||	|dg| j        |<   d| _        dS )a  
        Set the width, and other properties of a single column or a
        range of columns.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        NTr{   F	collapsedlevelr   rB     r   )r  rD  r   rw  ry   r   )r(   rk  rm  widthr>  r  
ignore_rowr{   r  r  
ignore_colrF   s               r.   
set_columnzWorksheet.set_column  sO   ( ?G x%-yY 
 Xu--KKU33	GQ''  	5 	V 	JJJ !!!Xz:FF 	2!!!Y
JGG 	2 199E199E4)))%*D" HqL11 	W 	WC"'feYPU!VDM# !%qr2   c                 b    ||                      |          }|                     |||||          S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width in pixels. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        )_pixels_to_widthr	  )r(   rk  rm  r  r>  r  s         r.   set_column_pixelszWorksheet.set_column_pixels  s7    ( ))%00Ey(E;PPPr2   c                    | j         rt          d           dS | j        dS i }t          | j        j        | j        j        j                  }t          | j        | j        dz             D ]}| j	        
                    |          st          | j        | j        dz             D ]}|| j	        |         v r| j	        |         |         }|j        j        }d}|dv rb|dk    r|j        }||         }	n|j        }	d|	vrt#          |	          }n.|	                    d          D ]}	t#          |	          }
|
|k    r|
}n|d	k    r%d
t'          t)          |j                            z  }n|dk    r| j        }n|dk    r|j        rd}nd}n|dk    s|dk    rt1          |j        t4          t6          f          r0|j        dk    r$d
t'          t)          |j                            z  }nUt1          |j        t(                    rt#          |j                  }n&t1          |j        t8                    r|j        rd}nd}| j        
                    ||f          r|dk    r|dz  }|
                    |d          }||k    r|||<   |                                D ]\  }}|                     |d
z             }|dk    rd}| j         
                    |          rv| j         
                    |          }|d         }|d         }|)|s'||k    r || j         |         d<   d| j         |         d<   || j         |         d<   d| j         |         d<   |dddddg| j         |<   dS )z
        Simulate autofit based on the data, and datatypes in each column.

        Args:
            None.

        Returns:
            Nothing.

        z1Autofit is not supported in constant_memory mode.N)keyr   r   rK   rS   rK   
rL   r  rQ   rO      $   rP   rR      g     o@   TF)!rk   r   rv   sortedri   string_table__getitem__rw  ru   r   r  rw   rx   r  __name__r=  r  r   r7   rE  r1  rM  r   r  r7  r^  r!  r&   r/  r   itemsr  ry   )r(   col_width_maxstringsrow_numcol_numcell	cell_typelength	string_idr=  
seg_length	width_maxpixel_widthr  ry   
user_widthr{   s                    r.   autofitzWorksheet.autofit  s     	DEEEF ?"F  N'T^-H-T
 
 
 T_do.ABB W	8 W	8G:>>'**  $/A2EFF S8 S8dj111:g.w7D $ 7IF $<<< %00(,I%,Y%7FF%)_Fv--%3F%;%;FF +1,,t*<*< 8 8-;F-C-C
#-#6#6-7F8
 #h.. "#ST[)9)9%:%:!:"j00 "&!9"i//  < (%'FF%'FF"i//93N3N
 &dj5#,?? ,#zA~~)*STZ-A-A)A'
C88 ,%3DJ%?%?FF'
D99 ,#z ,)+)+ (,,gw-?@@ %VaZZ" !. 1 1'1 = =I	))17g.gS8l %2$7$7$9$9 	N 	N G[ ))+/::E u}} }  )) N  =,,W55%a[
!!)&)z))49g.q148g.q105DM'*1-04DM'*1--*/ua)Mg&&5	N 	Nr2   c                    |i }| j         | j         }nd}|                     ||          rdS || j        }|                    dd          }|                    dd          }|                    dd          }|dk    r	d}| j        }|dk     rd}|d	k    rd	}|| j        k    r|| _        |||||g| j        |<   d
| _        ||g| j        |<   dS )a  
        Set the width, and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        Nr   rB  r{   Fr  r  r   r  T)rw   rD  r   r  r   r   r   r   )	r(   r%  heightr>  r  min_colr{   r  r  s	            r.   set_rowzWorksheet.set_rowm  s    ?G ?&oGGG !!#w// 	2>,F Xu--KKU33	GQ'' Q;;F,F 199E199E4)))%*D" %k65)Lc !%  &v.sqr2   c                 `    ||                      |          }|                     ||||          S )a  
        Set the width (in pixels), and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height in pixels. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        )_pixels_to_heightr*  )r(   r%  r(  r>  r  s        r.   set_row_pixelszWorksheet.set_row_pixels  s5     ++F33F||Cg>>>r2   c                 `    || j         }|| j        k    rd| _        || _         |r	d| _        dS dS )z
        Set the default row properties.

        Args:
            height:           Default height. Optional, defaults to 15.
            hide_unused_rows: Hide unused rows. Optional, defaults to False.

        Returns:
            Nothing.

        NTr   )r   r   r   r   )r(   r(  hide_unused_rowss      r.   set_default_rowzWorksheet.set_default_row  sO     >,FT---$(D!&,D# 	(&'D###	( 	(r2   c           	         ||k    r||k    rt          d           dS ||k    r||}}||k    r||}}|                     ||          rdS |                     ||          rdS t          ||||          }t          ||dz             D ]}t          ||dz             D ]}	| j                            ||	f          r2| j                            ||	f          }
t          d|d|
d          | j                            ||	f          r2| j                            ||	f          }
t          d|d|
d          || j        ||	f<   | j        	                    ||||g           | 
                    ||||           t          ||dz             D ]=}t          ||dz             D ]'}	||k    r|	|k    r|                     ||	d	|           (>d
S )a3  
        Merge a range of cells.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            data:         Cell data.
            cell_format:  Cell Format object.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of write().

        zCan't merge single cellNrB  r   zMerge range '!' overlaps previous merge range ''.!' overlaps previous table range 'rY   r   )r   rD  r   rw  r   r  r"   r   r   r  r*  r  )r(   rj  rk  rl  rm  r  r>  ry  r%  rF   previous_ranges              r.   merge_rangezWorksheet.merge_range  ss   2   Y(%:%:*+++F x%-yYx%-yY !!)Y77 	2!!(H55 	2 iHhGG
HqL11 	? 	?CY155 ? ?$((#s44 ?%)%6%:%:C:%F%FN**%::~~~7   %))3*55 ?%)%5%9%93*%E%EN**%::~~~7  
 5?D%sCj11?" 	
9i8DEEE 	Iy$<<< HqL11 	= 	=CY155 = =)##y(8(8!!#sB<<<<=
 qr2   c                     ||k     r||}}||k     r||}}|                      ||||          }t          ||||          }|| _        || _        ||g| _        t          ||dz             D ]}d| j        ||f<   dS )a  
        Set the autofilter area in the worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
             Nothing.

        r   TN)_convert_name_arear   r   r   r   rw  r   )r(   rj  rk  rl  rm  arearefrF   s           r.   
autofilterzWorksheet.autofilter!	  s      i%-yYi%-yY &&y)XxPPy)Xx@@#!&1 HqL11 	7 	7C26Dy#.//	7 	7r2   c                 D   | j         st          d           dS 	 t          |           nG# t          $ r: |}t	          |dz             \  }}|| j        k    rt          d|z             Y dS Y nw xY w| j        \  }}||k     s||k    rt          d|||fz             dS |                     |          }t          |          dvrt          d|z             | 	                    ||          }t          |          dk    r*|d	         dk    r| 
                    ||d
         g           npt          |          dk    rI|d	         dk    r=|d         d
k    r1|d         dk    r%| 
                    ||d
         |d         g           n|| j        |<   d	| j        |<   d
| _        dS )z
        Set the column filter criteria.

        Args:
            col:       Filter column (zero-indexed).
            criteria:  Filter criteria.

        Returns:
             Nothing.

        -Must call autofilter() before filter_column()NrC   Invalid column '%s'z6Column '%d' outside autofilter() column range (%d, %d))rZ   r  z+Incorrect number of tokens in criteria '%s'r  r   r   r  rZ      )r   r   r&   r'   r   rs   r   _extract_filter_tokensrE  _parse_filter_expressionfilter_column_listr   r   r   )r(   rF   criteria
col_letterrH   	col_firstcol_lastr  s           r.   filter_columnzWorksheet.filter_columnB	  s    # 	@AAAF		HHHH 	 	 	J(s33HQdo%%*Z7888 &%	 !% 1H ??cHnnH	8,-   F,,X66v;;f$$>IJJJ..x@@ v;;!q	Q##C&)5555[[A&)q..VAY!^^q	UV##C&)VAY)?@@@@ %+DS!$%DS!   * >A.-A.c                 v   | j         st          d           dS 	 t          |           nG# t          $ r: |}t	          |dz             \  }}|| j        k    rt          d|z             Y dS Y nw xY w| j        \  }}||k     s||k    rt          d|||fz             dS || j        |<   d| j        |<   d| _	        dS )z
        Set the column filter criteria in Excel 2007 list style.

        Args:
            col:      Filter column (zero-indexed).
            filters:  List of filter criteria to match.

        Returns:
             Nothing.

        r=  NrC   r>  z5Column '%d' outside autofilter() column range (%d,%d)r   )
r   r   r&   r'   r   rs   r   r   r   r   )r(   rF   filtersrD  rH   rE  rF  s          r.   rB  zWorksheet.filter_column_list~	  s    # 	@AAAF		HHHH 	 	 	J(s33HQdo%%*Z7888 &%	 !% 1H ??cHnn )X67   F ' !rH  c                 	   |                      ||dd          rdS |                      ||dd          rdS |i }n|                                }h d}|                                D ]}||vrt          d|z              dS d|v r|d         |d<   d	|v r|d	         |d<   d
|vrt          d           dS ddddddddddddd}|d
         |vrt          d|d
         z             dS ||d
                  |d
<   |d
         dk    r,|                    d          |                    d          dS |d
         dk    s|d
         dk    s|d
         dk    r
d|d<   d|d<   d|vrt          d           dS i ddddddd dd!dd"d#d$d#d%d#d&d'd(d'd)d*d+d*d,d-d.d-d/d0d1d0}	|d         |	vrt          d2|d         z             dS |	|d                  |d<   |d         dk    s|d         dk    rd|vrt          d3           dS nd|d<   d4d5d6d7}
d8|vrd4|d8<   n5|d8         |
vrt          d9|d8         z             dS |
|d8                  |d8<   |d
         d:v r|d         rxt          |d                   rc|                     |d                   }d;|z  |d<   |d         r8t          |d                   r#|                     |d                   }d;|z  |d<   |                    d          r3t          |d                   d<k    rt          d=|d         z             dS |                    d>          r3t          |d>                   d<k    rt          d?|d>         z             dS |                    d          r3t          |d                   d@k    rt          dA|d         z             dS |                    dB          r3t          |dB                   d@k    rt          dC|dB         z             dS |d
         dk    rRt          |d         t                    r7 | j
        |d          }t          |          d@k    rt          dD|z             dS dE|vrd5|dE<   dF|vrd5|dF<   dG|vrd5|dG<   dH|vrd5|dH<   ||||gg|dI<   dJ|v r!|dI                             |dJ                    dK|v r|dK                             dLdM          |dK<   | j                            |           d4S )Na  
        Add a data validation to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Data validation options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        TrB  N>   r^  sourcemaximumminimumrC  dropdownvalidate
error_type
show_error
show_inputerror_titleinput_titlemulti_rangeother_cellsignore_blankerror_messageinput_messagez+Unknown parameter '%s' in data_validation()rC  rL  r^  rN  rP  z5Parameter 'validate' is required in data_validation()nonewholedecimalr  r3  r4  
textLengthcustom)anyz	any valuezwhole numberr\  integerr]  r  r3  r4  ztext lengthr   r_  zJUnknown validation type '%s' for parameter 'validate' in data_validation()rU  rZ  betweenrC  rM  z5Parameter 'criteria' is required in data_validation()not between
notBetweenequal toequalr  ==not equal tonotEqual!=<>greater thangreaterThan>	less thanlessThan<greater than or equal togreaterThanOrEqual>=less than or equal tolessThanOrEqual<=zHUnknown criteria type '%s' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   r  )stopwarninginformationrQ  zJUnknown criteria type '%s' for parameter 'error_type' in data_validation()r3  r4  %.16g    z6Length of input title '%s' exceeds Excel's limit of 32rT  z6Length of error title '%s' exceeds Excel's limit of 32   z9Length of input message '%s' exceeds Excel's limit of 255rY  z9Length of error message '%s' exceeds Excel's limit of 255zSLength of list items '%s' exceeds Excel's limit of 255, use a formula range insteadrX  rO  rS  rR  cellsrW  rV  $rY   )rD  copykeysr   r  r   r}  rE  r7  r  	_csv_joinr8   r  r   r  )r(   rj  rk  rl  rm  r  valid_parameters	param_keyvalid_typescriteria_typeserror_types	date_timer]  s                r.   data_validationzWorksheet.data_validation	  s}   $ !!)YdCC 	2!!(HdDAA 	2?GG llnnG
 
 
* ! 	 	I 000BYNOOOrr 1
 w&x0GG&y1GG W$$HIII2 # '"
 
  :k1124;J4GH   2"-gj.A"BGJ
 J6))M**2O,,42
 J6))z"f,,z"h.."+GJ!%GI W$$HIII2
y
<
 
 	

 '
 J
 *
 *
 M
 
 
 
 '(<
 &
 $%6
  #!
( :n4424;J4GH   2"01D"EGJ :)++wz/Bl/R/R''E   r ( "&GI 
 
 w&&$%GL!!\"+55')0)>?   2$/0E$FGL! J#333  4"77#344 4 //0@AAI&2GGy! 9&89K&L&L 9 33GI4FGG	%,y%8	" ;;}%% 	#gm.D*E*E*J*JH-()   2 ;;}%% 	#gm.D*E*E*J*JH-()   2 ;;'' 	C0H,I,IC,O,OK/*+   2 ;;'' 	C0H,I,IC,O,OK/*+   2 :&((Z8H$-O-O($dngg&67G7||c!!79@A   r ((&'GN#W$$"#GJw&&$%GL!w&&$%GL! '	8XFG G##G##GM$:;;; G##%,]%;%C%CC%L%LGM" 	(((qr2   c                 D   |                      ||dd          rdS |                      ||dd          rdS |i }n|                                }h d}|                                D ]}||vrt          d|z              dS d|vrt          d           dS i d	d
dddddddddddddddddddddddddd d!d!d"d"d#d$d%d&d'}|d         |vrt          d(|d         z             dS |d         dk    rd|d)<   ||d                  |d<   i d*d*d+d,d-d.d/d.d0d.d1d2d3d2d4d2d5d6d7d6d8d9d:d9d;d<d=d<d>d?d@d?dAdBdCdDdEdFdGdHdIdJdKdLdMdNdKdNdO}	dP|v r|dP         |	v r|	|dP                  |dP<   |d         dQv rd
|d<   dR|v rIt	          |dR                   st          dS           dS |                     |dR                   }
dT|
z  |dR<   dU|v rIt	          |dU                   st          dV           dS |                     |dU                   }
dT|
z  |dU<   dW|v rIt	          |dW                   st          dX           dS |                     |dW                   }
dT|
z  |dW<   i dYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydz}|d         d&k    r|                    d{          st          d|           d}S |d{         |vrt          d~|d{         z             dS ||d{                  |d{<   d|d<   |d{                             d          rd|d<   n |d{                             d          rd|d<   |                     |                    d          |                    d                    |d<   ||k    r||}}||k    r||}}t          ||||          }t          ||          }d|v r|d         }|                    dd          }d|v r%|d         r|d                                         |d<   | j        |d<   | xj        dz  c_        | j        s|                    d          s|                    d          s|                    d          s|                    d          s|                    d          s~|                    d          si|                    d          sT|                    d          s?|                    d          s*|                    d          s|                    d          rd|d<   |d         dk    r|dP         dBk    rdB|d<   d|dR         d|d|d<   n|dP         dCk    rd|d<   d|dR         d|d|d<   n|dP         dDk    r*dD|d<   d|t          |dR                   |dR         fz  |d<   nN|dP         dEk    r*dE|d<   d|t          |dR                   |dR         fz  |d<   nt          d|dP         z             |d         dk    r|dP         dFk    r	d|z  |d<   n|dP         dGk    r	d|z  |d<   n|dP         dk    r	d|z  |d<   n|dP         dHk    rd|d|d|d<   n|dP         dIk    rd|d|d|d<   n|dP         dJk    rd|d|d|d<   n|dP         dKk    rd|d|d|d<   nl|dP         dLk    rd|d|d|d|d<   nP|dP         dMk    rd|d|d|d<   n7|dP         dNk    rd|d|d|d|d	|d<   nt          d|dP         z             |d         dk    rd|z  |d<   |d         dk    rd|z  |d<   |d         dk    rd|z  |d<   |d         d k    rd|z  |d<   |d         d!k    rd|d<   d|d<   d|d<   d|d<   |                    ddæ           |                    ddŦ           |                    ddǦ           |                    ddǦ           |                    ddʦ           |                    dd̦           t#          |d                   |d<   t#          |d                   |d<   |d         d"k    rd|d<   d|d<   |                    ddæ           |                    ddͦ           |                    ddŦ           |                    ddǦ           |                    ddǦ           |                    ddΦ           |                    ddϦ           |                    ddЦ           t#          |d                   |d<   t#          |d                   |d<   t#          |d                   |d<   d|vrd|d<   |d         d$k    rd|d<   |                    d¦          sd|d<   d|d<   n|d         |d<   |                    dĦ          sd|d<   d|d<   n|d         |d<   |                    ddǦ           |                    ddǦ           |                    ddئ           |                    d|d                    |                    ddڦ           |                    ddڦ           |                    ddڦ           |                    dd           |                    ddۦ           |                    ddۦ           |                    ddڦ           |                    ddڦ           |                    dd           |                    ddܦ           t#          |d                   |d<   t#          |d                   |d<   t#          |d                   |d<   t#          |d                   |d<   t#          |d                   |d<   |                    d          rFd| _        |d         dk    r|d         dk    rd|d<   |d         dk    r|d         dk    rd|d<   ||d<   	 |d                             d/          |d<   n# t(          t*          f$ r Y nw xY w	 |d                             d/          |d<   n# t(          t*          f$ r Y nw xY w	 |d                             d/          |d<   n# t(          t*          f$ r Y nw xY w|| j        v r!| j        |                             |           n|g| j        |<   dS )a#  
        Add a conditional format to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Conditional format options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        TrB  N>$   r8  iconsr^  rN   rM  rN  bar_onlyrC  max_typemid_typemin_type	bar_color	bar_solid	max_color	max_value	mid_color	mid_value	min_color	min_value
icon_style
icons_only
max_length
min_lengthrV  stop_if_truebar_directionbar_no_borderdata_bar_2010reverse_iconsbar_axis_colorbar_border_colorbar_axis_positionbar_negative_colorbar_negative_color_samebar_negative_border_colorbar_negative_border_color_samez.Unknown parameter '%s' in conditional_format()rC  r8  z4Parameter 'type' is required in conditional_format()r  cellIsr3  r4  averageaboveAverage	duplicateduplicateValuesuniqueuniqueValuestoptop10bottomr  time_period
timePeriodblankscontainsBlanks	no_blanksnotContainsBlankserrorscontainsErrors	no_errorsnotContainsErrors2_color_scale3_color_scaledata_bardataBar
expressioniconSet)r]  icon_setz?Unknown value '%s' for parameter 'type' in conditional_format()	directionrb  rc  rd  re  rf  r  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  
containingcontainsTextnotContains
beginsWithendsWith	yesterdaytoday	last7DayslastWeekthisWeeknextWeek	lastMonth	thisMonth	nextMonth)znot containingzbegins withz	ends withr  r  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthrC  r{  r^  z5Conditional format 'value' must be a datetime object.r|  rN  z7Conditional format 'minimum' must be a datetime object.rM  z7Conditional format 'maximum' must be a datetime object.3_arrows3Arrows3_flags3Flags3_traffic_lights_rimmed3TrafficLights23_symbols_circled3Symbols4_arrows4Arrows4_red_to_black4RedToBlack4_traffic_lights4TrafficLights5_arrows_gray5ArrowsGray
5_quarters	5Quarters3_arrows_gray3ArrowsGray3_traffic_lights3TrafficLights3_signs3Signs	3_symbols	3Symbols24_arrows_gray4ArrowsGray	4_ratings4Rating5_arrows5Arrows	5_ratings5Ratingr  z^The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format()r  z/Unknown icon_style '%s' in conditional_format()rZ   total_icons4r?  5r  r  rV  r  rY   rN   priorityr   r  r  r  r  r  r  r  r  r  r  r  is_data_bar_2010zNOT(ISERROR(SEARCH("z",z)))r]  notContainsTextzISERROR(SEARCH("z))zLEFT(%s,%d)="%s"zRIGHT(%s,%d)="%s"z2Invalid text criteria '%s' in conditional_format()zFLOOR(%s,1)=TODAY()-1zFLOOR(%s,1)=TODAY()tomorrowzFLOOR(%s,1)=TODAY()+1zAND(TODAY()-FLOOR(z,1)<=6,FLOOR(z,1)<=TODAY())zAND(TODAY()-ROUNDDOWN(z*,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(z,0)<(WEEKDAY(TODAY())+7))z",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(z ,0)-TODAY()<=7-WEEKDAY(TODAY()))zAND(ROUNDDOWN(z+,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(z",0)-TODAY()<(15-WEEKDAY(TODAY())))z
AND(MONTH(z)=MONTH(TODAY())-1,OR(YEAR(z)=YEAR(TODAY()),AND(MONTH(z)=1,YEAR(A1)=YEAR(TODAY())-1)))z)=MONTH(TODAY()),YEAR(z)=YEAR(TODAY()))z)=MONTH(TODAY())+1,OR(YEAR(z
)=12,YEAR(z)=YEAR(TODAY())+1)))z9Invalid time_period criteria '%s' in conditional_format()zLEN(TRIM(%s))=0zLEN(TRIM(%s))>0zISERROR(%s)zNOT(ISERROR(%s))
colorScaler  r  r  minr  maxr  r   r  r  z#FF7128r  z#FFEF9C
percentilez#F8696Bz#FFEB84z#63BE7Br  2   autoMinx14_min_typeautoMaxx14_max_typer  z#638EC6r  Fz#FF0000z#000000  rw  )rD  r  r  r   r   r}  r  r  _set_icon_propsr   r   r  _get_dxf_indexr   r   rE  
setdefaultr   rp   lstripKeyErrorAttributeErrorr   r  )r(   rj  rk  rl  rm  r  valid_parameterr  
valid_typecriteria_typer  valid_iconsry  
start_cells                 r.   conditional_formatzWorksheet.conditional_format
  sp   ( !!)YdCC 	2!!(HdDAA 	2?GG llnnG%
 %
 %
P ! 	 	I//E	QRRRrr 0
   GHHH2
H
F
 F
 ~	

 *
 n
 7
 g
 F
 <
 &
 ,
 &
 ,
 _
  _!
" 	#
$ $!'
 
 

. 6?*,,*,3FO<   2v(**'/$(9GFO!
y!
<!
 !
 	!

 '!
 J!
 *!
 *!
 M!
 !
 !
 !
 '(<!
 &!
 $%6!
  #!!
" .#!
$ ,'#$&###%%%')A!
 !
 !
H   WZ%8M%I%I"/
0C"DGJ 6?...&GFO'!!)''*:;; ;PQQQ2 $ 7 78H I II'.':GG$G##)')*<== =RSSS2 $ 7 7	8J K KI)09)<GI&G##)')*<== =RSSS2 $ 7 7	8J K KI)09)<GI&
	
x
 &'8
  	

 	
 m
  0
 ]
 +
 ]
  0
 x
 
 ]
 
  	!
" #
* 6?i'';;|,, C   r |$K77El+,   r(3GL4I(J% &'GM"|$//44 +)*&&&11#66 +)*&#33M**GKK,@,@   GG
 x"*IxIx"*IxI iHhGG
&y)<<
 G## /J#++C44J w78#4 ' 1 @ @ B BGH #/
Q #	/{{?++	/ {{;''	/ {{-..		/
 {{/00	/ {{455	/ {{677	/ {{;<<	/ {{?++	/ {{.//	/ {{+,,	/ {{?++	/ +/G&' 6?f$$z"n44"0G$$$JJ&	"" $55"3G$$$JJ&	"" $44".%7())G$; &	""
 $
22",%8())G$< &	"" .07
0CD   6?l**z"k11%<z%I	""$//%:Z%G	""$
22%<z%I	"" $333 "zz:::/ 	"" $
222 "zz:::/ 	"" $
222 "zz:::/ 	"" $
222 "zz:::/ 	"" $333 "zz:::zzz; 	"" $333 "zz:::/ 	"" $333 "zz:::zzz:::G 	"" .07
0CD   6?...!2Z!?GI6?111!2Z!?GI6?...!.!;GI6?111!3j!@GI 6?o--*GFO !%GH #'GJ#'GK z5111z5111{A...{A...{I666{I666#+GK,@#A#AGK #+GK,@#A#AGK  6?o--*GFO !%GHz5111z<888z5111{A...{A...{I666{I666{I666#+GK,@#A#AGK #+GK,@#A#AGK #+GK,@#A#AGK  '))')$ 6?i'' $GH;;z** >&+
#*3''*1**=';;z** >&+
#*3''*1**='{A...{A...{I66617;3GHHHz5111666{E2223333Y???:IFFF8%@@@?GGG2B777/;;;#+GK,@#A#AGK *27;M3N*O*OG&'(09I1J(K(KG$%,4W=Q5R,S,SG()3;344 4G/0
 ;;)** 		*!%Dz"e++0D0I0I'+$z"e++0D0I0I'+$)GG	#*;#7#>#>s#C#CGK  .) 	 	 	D		#*;#7#>#>s#C#CGK  .) 	 	 	D		#*;#7#>#>s#C#CGK  .) 	 	 	D	 ***j)009999-4IDj)qs6   o& &o:9o:>p p10p15q q('q(c                 8   i }i }|i }n|                                 }| j        rt          d           dS |                     ||dd          rdS |                     ||dd          rdS ||k    r||}}||k    r||}}t	          ||||          }t          ||dz             D ]}	t          ||dz             D ]}
| j                            |	|
f          r2| j                            |	|
f          }t          d|d|d	          | j	                            |	|
f          r2| j	                            |	|
f          }t          d|d
|d	          || j        |	|
f<   h d}|
                                D ]}||vrt          d|z              dS |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   ||z
  }|d         r|dz  }|dk     rt          d           dS |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   d|v r|d         }||d<   d|v rt          d |z             dS t          j        d!|t          j                  rt          j        d"|          rt          d#|z             dS t          j        d$|          rt          d%|z             dS t          j        d&|          st          j        d'|          rt          d(|z             dS d)|v r8|d)         |d)<   |d)         d*|d)<   |d)                             dd*          |d)<   nd+|d)<   |}|}|                    d          r|dz  }|                    d          r|dz  }t	          ||||          |d,<   t	          ||||          |d-<   |d         sd|d<   |d         r|d-         |d<   d}g |d.<   i }t          ||dz             D ]}|d/t          |          z   d*d*d*dd*ddd0	}d.|v rF|t!          |d.                   k    r|d.         |dz
           }nd}|r|                    d1d          }|                    d2          r|d2         |d<   |d         }|                                }||v rt          d3|z              dS d||<   |                    d4          |d5<   d6|v rk|d6         rc|d6         }|                    d7          r|                    d7          }|                    d8d9          }|                     |d          }||d6<   |                    d:          r|d:         }|d;k    rd<}|d=k    rd>}t+          g d?          }||v r|                     ||d                   }n|                     |d          }||d@<   dA}||d:<   |                    dBd          }|                     |||||           nM|                    dC          r8|dC         }||dC<   |                     ||||                    d1                     ||                                |d1<   |||dz
  <   |d.                             |           |d         r$|                     |||d         |d5                    |dz  }dD|v r|dD         }d}t          ||dz             D ]}	d} t          ||dz             D ]|}
|t!          |          k     rb| t!          ||                   k     rI||         |          }!| |v r|                     |	|
|!||                     n|                     |	|
|!d           | dz  } }|dz  }t9          t          ||dz                       D ]h\  }}|d.         |         }"|"rS|"d6         rK|                    |          }#|"d6         }t          ||dz             D ]}	|                     |	|||#           i| j                            |           |d         r"t          ||dz             D ]}
d| j        ||
f<   dS )EaY  
        Add an Excel table to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Table format options. (Optional)

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
            -3: Not supported in constant_memory mode.
        Nz5add_table() isn't supported in 'constant_memory' moder  TrB  r   zTable range 'r4  r3  r2  >   r  rg   stylecolumns	total_rowr;  
header_rowbanded_rowslast_columnfirst_columnbanded_columnsz%Unknown parameter '%s' in add_table()rC  r  r  r;  r   z1Must have at least one data row in in add_table()r  Fshow_first_colr  show_last_colshow_row_stripesr  show_col_stripesheader_row_countr  totals_row_shownrg    z.Name '%s' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in add_table(): '%s'z^[a-zA-Z][a-zA-Z]?[a-dA-D]?\d+$z0Name looks like a cell name in add_table(): '%s'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$z3Invalid name '%s' like a RC cell ref in add_table()r  rY   TableStyleMedium9rw  a_ranger  Column)	idrg   total_stringtotal_functioncustom_totaltotal_valuer]  rN   name_formatrN   r   z*Duplicate header name in add_table(): '%s'header_formatr*  r]  r  @z[#This Row],r'  
count_nums	countNumsstd_devstdDevr  r.  countr  r  r0  sumvarr(  r_  r)  r&  r  )r  rk   r   rD  r   rw  r   r  r"   r   r  r  r  UNICODEr  r1  rE  lowerr  r	  rf  set_table_function_to_formular  r#  r  r  r*  	enumerater   r   )$r(   rj  rk  rl  rm  r  r   col_formatsry  r%  rF   r5  r  r  num_rowsrg   first_data_rowlast_data_rowcol_id
seen_namesr  col_data	user_dataxformatheader_namer]  function	subtotalsr^  r&  r  ijr$  column_dataformula_formats$                                       r.   	add_tablezWorksheet.add_table  s
   $ ?GG llnnG 	HIII2 !!)YdCC 	2!!(HdDAA 	2 x%-yYx%-yY iHhGG
HqL11 	> 	>CY155 > >#''c
33 >%)%5%9%93*%E%EN**%::~~~7   &**C:66 >%)%6%:%:C:%F%FN**%::~~~7  
 4>D$c3Z00>"
 
 
 ! 	 	I//<yHIIIrr 0
 ")]D!A!A 'L$ ? ? 'L$ ? ? i'<  	MHa<<DEEE2 #*++ne"D"D!(]E!B!Bo$+KKu$E$E !$+KK0@%$H$H !$+KKa$@$@ !$+KKU$C$C ! W6?D E&Md{{ELMMMr 8/rzBB bhG G  DtKLLLr x:DAA G$NOOOr xT** bh7NPT.U.U JTQRRRr g$W-E'NW~%!#g #7^33C<<E'NN0E'N # ;;|$$ 	 aN;;{## 	QM ")Y(KKg#Iy-RRi |$ 	&$%GL! <  	3"'	"2E, i
Y155 x	 x	G  3v;;. ""$ " #
 
H G##S!34444 '	 26A: >II $I W6'mmHd;;G !}}X.. ?+4X+>( #+6"2K&,,..Dz))IDPQQQ!rr+/
4(.7mmO.L.LH]+ !I--)I2F-"+I"6 #--c22 :&-nnS&9&9G #*//#~"F"F #'"7"7"F"F.5+ !}}%566 *#,-=#>#|33'2H#y00'/H$'	 	 	% %	 $y00&*&E&E ((6*:' 'GG '+&;&;Hd&K&KG7>H^4'/H5=!12 )mQ ? ?++HgwQVWWWW"~66 '0'@3?0**$g|Y]]8=T=T  
 *-4-C-C-E-E* /6K
+ )##H--- |$ ""w(8(=:Q   aKFF W6?DA^]Q->?? 
 
 HqL99  C3t99}}Sa\\)9)9 $Q
++ KKS%QHHHH KKS%>>>FAAQ  )y(Q,)G)GHH 	O 	OOFG	*62K O{95 O!,!8!8%i0 1BCC O OC''Wg~NNNN 	5!!! <  	;Y155 ; ;6:!9c"233qr2   c                 	   |                      ||dd          rdS dt          ||          gi}|i }h d}|                                D ]}||vrt          d|z              dS d|vrt          d           d	S |                    d
d          }|dvrt          d           d	S |dk    rd}||d
<   d|v r3t          |d         t                    r|d         |d<   n|d         g|d<   t          |d         t                    r|d         |d<   n|d         g|d<   t          |d                   }t          |d                   }	||	k    rt          d           d	S t          |d                   |d<   t          | j	                  }
g }|d         D ]N}|
                    dd          }|                    d          }d|vr|
dz   |z   }|                    |           O||d<   g }|d         D ]-}|
                    dd          }|                    |           .||d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d           |d!<   |                    d"          |d"<   |                    d#          |d#<   |                    d$          |d$<   |                    d%          |d%<   |                    d&          |d&<   |                    d'          |d(<   |                    d)          |d)<   |                    d*d          }|d+k    rd,|d-<   n|d.k    rd/|d-<   nd0|d-<   |                    d1          }|rd|vr|
dz   |z   }||d1<   |                    d2d,          }t          |          }|d3         |d4<   |d         |d5<   |d"         |d6<   |d         |d7<   |d!         |d8<   |d         |d9<   |d         |d:<   |                     ||d4           |                     ||d5           |                     ||d6           |                     ||d7           |                     ||d8           |                     ||d9           |                     ||d:           | j                            |           d,S );ap  
        Add sparklines to the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Sparkline formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.

        TrB  	locationsN>   r  r  axisr8  rw  r  weightmarkersreverselocation	date_axis	low_color	low_point
high_color
high_point
last_color
last_pointempty_cellsfirst_colorfirst_pointplot_hiddenshow_hiddenseries_colormarkers_colornegative_colornegative_pointsz)Unknown parameter '%s' in add_sparkline()rw  z0Parameter 'range' is required in add_sparkline()rC  r8  line)rb  columnwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()rd  stackedrQ  rangeszMMust have the same number of location and range parameters in add_sparkline()r2  r  rY   r  !rV  highrT  lowra  negativer[  firstrX  lastrO  r  r  rM  rP  r]  r{   rN  rY  zeror   emptyconnectspangaprR  r  seriesr^  r`  r_  rZ  rW  rU  rS  )rD  r   r  r   r  r7  r  rE  r    rg   r  r	  r  r   _set_spark_colorr   )r(   r%  rF   r  	sparkliner  r  
spark_typerange_countlocation_count	sheetname
new_rangesspark_rangenew_locationsrQ  rn  
date_rangestyle_idr  s                      r.   add_sparklinezWorksheet.add_sparkline  s   $ !!#sD$77 	2 #4S##>#>"?@	?G
 
 
< ! 	 	I 000@9LMMMrr 1
 '!!CDDD2 [[00
;;;3   2##"J&	&   '*-t44 ?)0)<	+&&*1**=)>	+&gg&-- 	5")'"2Ih#*7#3"4Ih)H-..Y{344 .((0   2 !;!788	' $DI..	 
$X. 	+ 	+K%--c266K &,,S11K +%%'#o;k****(	( !+. 	+ 	+H''R00H  ****!.	+ $KK55	&";;{33	% ',= > >	*$[[77	'#KK55	&&{{955	)";;u--	%";;u--	%#KK//	&&{{955	)%kk-88	(%kk(33	( M2..F??!"Igi!'Ig!&Ig [[--
 	6#Z//"S:5J!+	+ ;;w**#H--$)(O	.!&+J&7	"#%*9%5	/"#(>	- "'-	,"'-	,!&u	+ 	i.AAAi2BCCCi/BBBi-@@@i,???i,???i+>>>y)))qr2   c                     d}t          ||          }||k    r||}}||k    r||}}t          ||||          }|dk    rdS |||gg| _        dS )a  
        Set the selected cell or cells in a worksheet

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Nothing.
        NA1)r   r   rz   )r(   rj  rk  rl  rm  paneactive_cellsqrefs           r.   set_selectionzWorksheet.set_selection  s|      (	9== x%-yYx%-yYIxBB D==F +u56r2   c                 L    |dk    r|dk    rdS t          ||          | _        dS )z
        Set the first visible cell at the top left of a worksheet.

        Args:
            row: The cell row (zero indexed).
            col: The cell column (zero indexed).

        Returns:
            0:  Nothing.
        r   N)r   r~   )r(   r%  rF   s      r.   set_top_left_cellzWorksheet.set_top_left_cell  s2     !88qF.sC88r2   r   c                 L    || _         || _        || _        || _        d| _        dS )a  
        Control outline settings.

        Args:
            visible:       Outlines are visible. Optional, defaults to True.
            symbols_below: Show row outline symbols below the outline bar.
                           Optional, defaults to True.
            symbols_right: Show column outline symbols to the right of the
                           outline bar. Optional, defaults to True.
            auto_style:    Use Automatic style. Optional, defaults to False.

        Returns:
            0:  Nothing.
        TN)r   r   r   r   r   )r(   visiblesymbols_belowsymbols_right
auto_styles        r.   outline_settingszWorksheet.outline_settings  s1    " "**'#r2   c                 .    ||}||}|||||g| _         dS )at  
        Create worksheet panes and mark them as frozen.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        N)r   )r(   r%  rF   top_rowleft_col	pane_types         r.   freeze_paneszWorksheet.freeze_panes  s/     ?GH39=


r2   c                 8    |                      ||||d           dS )a  
        Create worksheet panes and mark them as split.

        Args:
            x:        The position for the vertical split.
            y:        The position for the horizontal split.
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        r  N)r  )r(   xyr  r  s        r.   split_paneszWorksheet.split_panes  s&      	!Q155555r2   r^   c                 n    |dk     s|dk    rt          d|z             d}t          |          | _        dS )z
        Set the worksheet zoom factor.

        Args:
            zoom: Scale factor: 10 <= zoom <= 400.

        Returns:
            Nothing.

        
     z/Zoom factor %d outside range: 10 <= zoom <= 400r^   N)r   r&   r   )r(   r   s     r.   set_zoomzWorksheet.set_zoom.  s?     "99s

BTIJJJDII			r2   c                     d| _         dS )z
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r  s    r.   right_to_leftzWorksheet.right_to_left@  r  r2   c                     d| _         dS )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r   r  s    r.   	hide_zerozWorksheet.hide_zeroM  s     r2   c                 .    t          |          | _        dS )z
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   r}   r(   colors     r.   set_tab_colorzWorksheet.set_tab_colorZ  s     "%r2   rY   c                 8   |dk    r|                      |          }|si }i ddddddddddd	dd
ddddddddddddddddddddd}|                                D ]$}||v r||         ||<   t          d|z             %||d<   || _        dS )z
        Set the password and protection options of the worksheet.

        Args:
            password: An optional password string.
            options:  A dictionary of worksheet objects to protect.

        Returns:
            Nothing.

        rY   sheetTcontentFobjects	scenariosformat_cellsformat_columnsformat_rowsinsert_columnsinsert_rowsinsert_hyperlinksdelete_columnsdelete_rowsselect_locked_cellssortr;  pivot_tablesselect_unlocked_cellszUnknown protection object: '%s'passwordN)_encode_passwordr  r   r   )r(   r  r  defaultsr  s        r.   protectzWorksheet.protectg  s^    r>>,,X66H 	G
T
u
 u
 	

 E
 e
 5
 e
 5
  
 e
 5
 "4
 E
 %
  E!
" $T#
* <<>> 	> 	>Ch '6<====  ('r2   c                 <   |t          d           dS |                    d          }|                    dd          }| xj        dz  c_        |dt	          | j                  z   }|r|                     |          }| j                            |||f           dS )	a0  
        Unprotect ranges within a protected worksheet.

        Args:
            cell_range: The cell or cell range to unprotect.
            range_name: An optional name for the range.
            password:   An optional password string. (undocumented)

        Returns:
            Nothing.

        Nz1Cell range must be specified in unprotect_range()rB  r  r  rY   r   Range)r   r	  r  r   r1  r  r   r  r(   ry  
range_namer  s       r.   unprotect_rangezWorksheet.unprotect_range  s     DEEE2  &&s++
''R00
!!Q&!! 3t'@#A#AAJ 	7,,X66H$$j*h%GHHHHHr2   c                     |                      ||dd          rt          d||fz             dS |i }|                     |||          }| j                            |           d| _        dS )aM  
        Insert a button form object into the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Button formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz!Cannot insert button at (%d, %d).rB  Nr   r   )rD  r   _button_paramsr   r  r   )r(   r%  rF   r  buttons        r.   insert_buttonzWorksheet.insert_button  s      !!#sD$77 	4SzABBB2?G$$S#w77  (((qr2   c                 "    d| _         d| _        dS )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr   r   r  s    r.   set_landscapezWorksheet.set_landscape       "&r2   c                 "    d| _         d| _        dS )z
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNr  r  s    r.   set_portraitzWorksheet.set_portrait  r  r2   c                     || _         dS )z
        Set the page view mode.

        Args:
            0: Normal view mode
            1: Page view mode (the default)
            2: Page break view mode

        Returns:
            Nothing.

        Nr   r(   views     r.   set_page_viewzWorksheet.set_page_view  s     r2   c                     d| _         dS )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r  Nr  r  s     r.   set_pagebreak_viewzWorksheet.set_pagebreak_view  s     r2   c                 *    |r|| _         d| _        dS dS )z
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)r   r   )r(   r   s     r.   	set_paperzWorksheet.set_paper  s+      	+(DO&*D###	+ 	+r2   c                 "    d| _         d| _        dS )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r.   center_horizontallyzWorksheet.center_horizontally$       &*"r2   c                 "    d| _         d| _        dS )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)r   r   r  s    r.   center_verticallyzWorksheet.center_vertically2  r  r2   r[   r\   c                 >    || _         || _        || _        || _        dS )z
        Set all the page margins in inches.

        Args:
            left:   Left margin.
            right:  Right margin.
            top:    Top margin.
            bottom: Bottom margin.

        Returns:
            Nothing.

        N)r   r   r   r   )r(   leftrightr  r  s        r.   set_marginszWorksheet.set_margins@  s)      !#r2   c                 Z   |}|                     dd          }t          |          dk    rt          d           dS |t          |t                    sd|i}ni }|                                }|||d<   g | _        |                    d          rC| j                            |                    d          |                    d          d	g           |                    d
          rC| j                            |                    d
          |                    d          dg           |                    d          rC| j                            |                    d          |                    d          dg           |	                    d          }t          | j                  }||k    r!t          d|d|d|           g | _        dS d|v r|d         | _
        d|v r|d         | _        || _        |                    dd          | _        d| _        |r	d| _        dS dS )z
        Set the page header caption and optional margin.

        Args:
            header:  Header string.
            margin:  Header margin.
            options: Header options, mainly for images.

        Returns:
            Nothing.

        
&[Picture]&Gr~  zCHeader string cannot be longer than Excel's limit of 255 charactersNmargin
image_leftimage_data_leftLHimage_centerimage_data_centerCHimage_rightimage_data_rightRHzNumber of header images (#) doesn't match placeholder count () in string: align_with_marginsscale_with_docr]   T)r  rE  r   r7  r   r  r   r  r  r2  r   r   r   r   r   r   )r(   r   r  r  header_origplaceholder_countimage_counts          r.   
set_headerzWorksheet.set_headerS  t    d33v;;VWWWFgt,, .#W-G ,,..  &GH  ;;|$$ 	%%\**GKK8I,J,JDQ   ;;~&& 	%%^,,gkk:M.N.NPTU   ;;}%% 	%%]++W[[9K-L-LdS   #LL..$,--++D ;; 1 1 1;;@  
 "$DF7**(/0D(ED%w&&(/0@(AD%$[[377%)" 	'"&D	' 	'r2   c                 Z   |}|                     dd          }t          |          dk    rt          d           dS |t          |t                    sd|i}ni }|                                }|||d<   g | _        |                    d          rC| j                            |                    d          |                    d          d	g           |                    d
          rC| j                            |                    d
          |                    d          dg           |                    d          rC| j                            |                    d          |                    d          dg           |	                    d          }t          | j                  }||k    r!t          d|d|d|           g | _        dS d|v r|d         | _
        d|v r|d         | _        || _        |                    dd          | _        d| _        |r	d| _        dS dS )z
        Set the page footer caption and optional margin.

        Args:
            footer:  Footer string.
            margin:  Footer margin.
            options: Footer options, mainly for images.

        Returns:
            Nothing.

        r  r  r~  zCFooter string cannot be longer than Excel's limit of 255 charactersNr  r  r  LFr  r  CFr  r  RFzNumber of footer images (r  r  r  r  r]   T)r  rE  r   r7  r   r  r   r  r  r2  r   r   r   r   r   r   )r(   r   r  r  footer_origr  r  s          r.   
set_footerzWorksheet.set_footer  r  r2   c                 r    ||}|dz  }|dz  }d||fz  }t          | j                  }|dz   |z   | _        dS )z
        Set the rows to repeat at the top of each printed page.

        Args:
            first_row: Start row for range.
            last_row: End row for range.

        Returns:
            Nothing.

        Nr   z$%d:$%drg  )r    rg   r   )r(   rj  rl  r9  rx  s        r.   repeat_rowszWorksheet.repeat_rows  s\      H 	Q	A Ix00 $DI..	 )C$ 6r2   c                     ||}t          |d          }t          |d          }|dz   |z   }t          | j                  }|dz   |z   | _        dS )z
        Set the columns to repeat at the left hand side of each printed page.

        Args:
            first_col: Start column for range.
            last_col: End column for range.

        Returns:
            Nothing.

        Nr   r5   rg  )r   r    rg   r   )r(   rk  rm  r9  rx  s        r.   repeat_columnszWorksheet.repeat_columns  sg      H #9a00	!(A.. 3) $DI..	 )C$ 6r2   c                     |dk    rd| _         d| _        d| _        dS |dk    rd| _         d| _        dS d| _         d| _        dS )a1  
        Set the option to hide gridlines on the screen and the printed page.

        Args:
            option:    0 : Don't hide gridlines
                       1 : Hide printed gridlines only
                       2 : Hide screen and printed gridlines

        Returns:
            Nothing.

        r   r   TN)r   r   r   )r(   options     r.   hide_gridlineszWorksheet.hide_gridlines"  s`     Q;;#$D $%D!)-D&&&q[[#$D $%D!!!#$D $%D!!!r2   c                 "    d| _         d| _        dS )z
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r   r  s    r.   print_row_col_headerszWorksheet.print_row_col_headers:  s     "%)"""r2   c                     d| _         dS )z
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r  s    r.   hide_row_col_headerszWorksheet.hide_row_col_headersH  s      $r2   c                     |dk    r$|dk    r|| j         dz
  k    r|| j        dz
  k    rdS |                     ||||          }|| _        dS )a  
        Set the print area in the current worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        r   r   N)rr   rs   r8  r   )r(   rj  rk  rl  rm  r9  s         r.   
print_areazWorksheet.print_areaU  sg    ( NNQDOa///DOa///F &&y)XxPP $qr2   c                 "    d| _         d| _        dS )z
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r   r   r  s    r.   print_acrosszWorksheet.print_acrossv  s     "&r2   c                 >    d| _         || _        || _        d| _        dS )a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

        Args:
            width:  Number of pages horizontally.
            height: Number of pages vertically.

        Returns:
            Nothing.

        r   TN)r   r   r   r   )r(   r  r(  s      r.   fit_to_pageszWorksheet.fit_to_pages  s'      "&r2   c                     || _         dS )z
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r   )r(   
start_pages     r.   set_start_pagezWorksheet.set_start_page  s     %r2   c                     |dk     s|dk    rt          d|z             dS d| _        t          |          | _        d| _        dS )z
        Set the scale factor for the printed page.

        Args:
            scale: Print scale. 10 <= scale <= 400.

        Returns:
            Nothing.

        r  r  z2Print scale '%d' outside range: 10 <= scale <= 400Nr   T)r   r   r&   r   r   )r(   scales     r.   set_print_scalezWorksheet.set_print_scale  sS     2::EMNNNF u::"&r2   c                 "    d| _         d| _        dS )z
        Set the option to print the worksheet in black and white.

        Args:
            None.

        Returns:
            Nothing.

        TN)r   r   r  s    r.   print_black_and_whitezWorksheet.print_black_and_white  s      "&r2   c                     || _         dS )z
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of rows where the page breaks should be added.

        Returns:
            Nothing.

        N)r   r(   breakss     r.   set_h_pagebreakszWorksheet.set_h_pagebreaks       r2   c                     || _         dS )z
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of columns where the page breaks should be added.

        Returns:
            Nothing.

        N)r   r  s     r.   set_v_pagebreakszWorksheet.set_v_pagebreaks  r  r2   c                 Z    |	|| _         dS dt          | j        dz             z   | _         dS )z
        Set the VBA name for the worksheet. By default this is the
        same as the sheet name: i.e., Sheet1 etc.

        Args:
            name: The VBA name for the worksheet.

        Returns:
            Nothing.

        NSheetr   )r   r1  rh   )r(   rg   s     r.   set_vba_namezWorksheet.set_vba_name  s9      $D '#dj1n*=*= =Dr2   c                     |dS |                                 }h d}|                                D ]}||vrt          d|z              dS || _        dS )a  
        Ignore various Excel errors/warnings in a worksheet for user defined
        ranges.

        Args:
            options: A dict of ignore errors keys with cell range values.

        Returns:
            0: Success.
           -1: Incorrect parameter or option.

        NrB  >	   
eval_errorformula_rangeformula_differsformula_unlockedcalculated_columntwo_digit_text_yearempty_cell_referencelist_data_validationnumber_stored_as_textz)Unknown parameter '%s' in ignore_errors()r   )r  r  r   r  )r(   r  r  r  s       r.   ignore_errorszWorksheet.ignore_errors  s     ?2 llnnG

 

 

 ! 	 	I 000@9LMMMrr 1 &qr2   c                 <   |d         | _         |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        |d	         | _        |d
         | _	        |d         | _
        |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        | j        rFd| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        | j        r]t9          j        | j                  \  }}t=          j        |           || _         tC          |dd          | _"        | j"        | _#        d S d S )Nrg   rh   ri   r
  rk   rl   r   r   r  r  r  r  r  rq   r  r  r  r  g     )@   r\   r         ?F)dirzw+utf-8modeencoding)$rg   rh   ri   r
  rk   rl   r   r   r  r  r  r  r  rq   r  r  r  r  r   r   r   r   r   r   r   r   r   r   tempfilemkstempr  closer  openr	  r  )r(   	init_datafdr  s       r.   _initializezWorksheet._initialize!  s   f%	w'
";/'(89():;)";/"+,@"A#,-B#C ():;!*+>!?#,-B#C "+,@"A():;():;'(89$-.D$E!():; 
	.',D$&+D#&(D##D $DDO!"D!$D!$D(-D%  		' &-$+>>>NRHRLLL%-D"#H4'JJJD &DGGG		' 		'r2   c                 &   |                                   |                                  |                                  |                                  |                                  |                                  |                                  | j        s|                                  n| 	                                 | 
                                 |                                  | j        r|                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                      d           | !                                 d S )N	worksheet)"_xml_declaration_write_worksheet_write_sheet_pr_write_dimension_write_sheet_views_write_sheet_format_pr_write_colsrk   _write_sheet_data_write_optimized_sheet_data_write_sheet_protection_write_protected_rangesrq   _write_phonetic_pr_write_auto_filter_write_merge_cells_write_conditional_formats_write_data_validations_write_hyperlinks_write_print_options_write_page_margins_write_page_setup_write_header_footer_write_row_breaks_write_col_breaks_write_ignored_errors_write_drawings_write_legacy_drawing_write_legacy_drawing_hf_write_picture_write_table_parts_write_ext_listr  
_xml_closer  s    r.   _assemble_xml_filezWorksheet._assemble_xml_fileM  s    	 	 	 	 	!!! 	##%%% 	 # 	/""$$$$,,... 	$$&&& 	$$&&&  	&##%%% 	!!! 	!!! 	''))) 	$$&&& 	    	!!### 	  """ 	    	!!### 	    	    	""$$$ 	 	""$$$ 	%%''' 	 	!!! 	 	+&&& 	r2   c                 R   |dk     s|dk     rdS || j         k    s|| j        k    rdS |s|s| j        r|| j        k     rdS |s2| j        || j        k     r|| _        | j        || j        k    r|| _        |s2| j        || j        k     r|| _        | j        || j        k    r|| _        dS rA  )rr   rs   rk   r   ru   rv   rw   rx   )r(   r%  rF   r  r  s        r.   rD  zWorksheet._check_dimensions  s     77cAgg2$/!!SDO%;%;2  	* 	1E 	T&&&r 	&&#*?*?"%&#*?*?"% 	&&#*?*?"%&#*?*?"%qr2   c                 8    t          || j        | j                  S N)r   r   r  )r(   dt_objs     r.   r}  zWorksheet._convert_date_time  s    )&$.$BVWWWr2   c                    d}d}d}d}t          |d          }	t          |d          }
dt          |dz             z   }dt          |dz             z   }|dk    r|| j        dz
  k    r|	}|
}d}n%|dk    r|| j        dz
  k    r|}|}d}n
|	|z   }|
|z   }||k    r|s|}n|dz   |z   }t	          | j                  }|dz   |z   }|S )NrY   r   r   r  r5   rg  )r   r1  rr   rs   r    rg   )r(   	row_num_1	col_num_1	row_num_2	col_num_2range1range2r9  row_col_only
col_char_1
col_char_2
row_char_1
row_char_2rx  s                 r.   r8  zWorksheet._convert_name_area  s     $Iq11
#Iq11
3y1}---
3y1}---
 >>i4?Q+>>>FFLL!^^	T_q-@ @ @FFLL*,F*,F VLDDC<&(D $DI..	3%r2   c                     |sd S t          |          }d|v r|                    d           t          |          }|                                 d}t	          |          |k    r
|d |         }|S )Nr   i  )r7  remover  r  rE  )r(   r  
breaks_setbreaks_listmax_num_breakss        r.   _sort_pagebreakszWorksheet._sort_pagebreaks  s      	F[[

??a   :&& {n,,%o~o6Kr2   c                 @   |sg S t          j        d          }|                    |          }g }|D ]k}|                    d          r
|dd          }|                    d          r
|d d         }|                    dd          }|                    |           l|S )Nz"(?:[^"]|"")*"|\S+"r   rB  z"")r  compilefindallr  r  r  r  )r(   r  token_rer  
new_tokensr$  s         r.   r@  z Worksheet._extract_filter_tokens  s      	I:344!!*--
 		% 		%E$$ "abb	~~c"" #crc
MM$,,Ee$$$$r2   c                 z   t          |          dk    r|d         }t          j        d|          rd}n.t          j        d|          rd}nt          d|d|d	           |                     ||dd                   }|                     ||d
d                   }||gz   |z   S |                     ||          S )Nr  rZ   z(and|&&)r   z	(or|\|\|)r   Token 'z3' is not a valid conditional in filter expression ''r?  )rE  r  r  r   _parse_filter_tokens)r(   r  r  conditionalexpression_1expression_2s         r.   rA  z"Worksheet._parse_filter_expression9  s     v;;! !)Kx
K00 ,44 3>;;


L  
  44Z!MML44Z!MML;-/,>>,,Z@@@r2   c                    ddddddddddddd}|                     |d         d           }|d         }t          j        d|d	                                                   rt	          |d                   }|dk     s|d
k    rt          d||fz             |                                }|dk    r|dk    rt          d|d|d           |d	                                         dk    rd}nd}|d         dk    r|dz  }t          |          }|s$|d	         rt          d|d	         d|d           t          j        d|                                          rZ|dk    r"|dk    rt          d|d         d|d           |                                }|dk    r	|dk    rd}n|dk    rd}d}nd}d}|dk    rt          j        d|          rd}||gS )Nr  r  r   rZ   r?     )rg  r  z=~eqrj  z!~nerk  rq  rw  rn  rt  z
top|bottomr   i  z?The value '%d' in expression '%s' must be in the range 1 to 500r  %z
The type 'z' in expression 'z' must be either 'items' or '%'r     r}  rp  z0' is not a valid operator in filter expression 'rq  zblanks|nonblankszThe operator 'z/' is not valid in relation to Blanks/NonBlanks'r  r!  z[*?]   )r  r  r  r6  r&   r   r1  rc  )r(   r  r  	operatorsoperatorr$  r^  s          r.   rr  zWorksheet._parse_filter_tokensW  sa   
 
 
	 ==D11q	 8L&)//"3"344 	q	NNEqyyECKK47<j6IJ  
 KKMMEESLL8=zzzK  
 ay  E))ayCAJJE 	F1I 	D/4QxxxE   8&66 	 1}}Q ayyy***.   KKMME   q==Eq== H$EE HE q==RYvu55=H%  r2   c                     d}|d d d         D ]%}|dz	  dz  |dz  dz  z  }|t          |          z  }&|dz	  dz  |dz  dz  z  }|t          |          z  }|dz  }d|z  S )Nr   rB     r   rX   iK  z%X)ordrE  )r(   r  hashchars       r.   r  zWorksheet._encode_password  s    
 TTrTN 	 	DRZ4'TQY&,@ADCIIDDt#f(<=Hd{r2   c                 r   d}| j         |         \  }}}}}}}}}}}}}||z  }||z  }|d|z  z  }|d|	z  z  }|                     |||||||          }t          d|dz  z             }t          d|dz  z             }| j        sMt	                      }d|_        || _        | j                            ddt          |          z   dz   d g           n| j        }|	                                }||d	<   ||d
<   ||d<   ||d<   ||d<   d |d<   ||d<   d|d<   d|d<   ||d<   ||d<   |||d<   |rd }d}d}t          j        d|          r|                     |          }t          j        d|          r|                     |          }t          j        d|          r|                    dd          }|                     |          }|                    dd          }t          j        d|          st          j        d|          rd|z   }n|                    d d!          }t          j        d"|          r|                    d"d          }d }|t          |          | j        k    rt!          d#|| j        fz             nO| j                            |          s| j                            |||g           |                     |          |d<   | j                            |
          s2| j                            d$d%t          |          z   d&z   |z   g           |                     |
          |d<   d S )'Nr  g      X@r$  5%  r   /drawing../drawings/drawing.xmlr8  
dimensionsr  r(  r  shaper  r   	rel_indexurl_rel_indexr  r  
/hyperlinkExternalr  ^mailto:r  rY   r  %23r  r  r  r  r  r  aIgnoring URL '%s' with link and/or anchor > %d characters since it exceeds Excel's limit for URLS/image../media/image.)r   _position_object_emusr&   r   r   embeddedr   r  r1  _add_drawing_objectr  r  r  r  rE  r  r   r   r  r   _get_drawing_rel_index)r(   rh   image_id
drawing_idr  r(  rg   r  x_dpiy_dpir  drawing_typer%  rF   rH   r  r  r  r  r  r  r  r  r  r  r   drawing_objecttargetrel_typetarget_modes                                 r.   _prepare_imagezWorksheet._prepare_image  s     K	
 	' 	$,//h%
 

 C54<())SFTM*++ | 		#iiG G"DL'..2S__DvMtT    lG 4466!-v'1|$"'w#)x (,}%"&w#)x &'{#*+' #u'1|$",7N=) %	WF#H$Kx)3// /))#..x
C(( /))#..xS)) 	7["55))&11U338FF++ 7rxv/F/F 7'&0FF#^^D#66FxS)) #[#66"!v;;!444M 345     ,0055 S*118V[2QRRR6:6Q6QRU6V6VN?3 $$V,, 	%%+c(mm;cAJNO   '+&A&A&&I&I{###r2   c                    d}| j         |         \  }}}}}}	}
}}}}|                    d| j        dz            }|                    d| j        dz            }||z  }||	z  }|                     |||||||          }t          d|dz  z             }t          d|dz  z             }| j        sMt                      }d|_        || _        | j	        
                    dd	t          |          z   d
z   d g           n| j        }t          dd|          }|
|_        |                                }||d<   ||d<   ||d<   ||d<   ||d<   ||d<   ||d<   d|d<   d|d<   |                    d          |d<   ||d<   |                    dd           }|rcd }d}d}t          j        d|          r|                     |          }t          j        d|          r|                     |          }t          j        d|          rA|                    dd          }|                     |          }|                    dd          }t          j        d |          r|                    d d          }d }|t'          |          | j        k    rt+          d!|| j        fz             d S | j                            |          s| j        
                    |||g           |                     |          |d<   d S d S d S )"NrZ   r  r(  rw  r$  r  r   r  r  r  rectTextBoxr8  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r  r   r   r  r&   r   r   r  r   r  r1  r   r  r  r  r  r  r  rE  r  r   r   r   r  )r(   rh   r  r  r%  rF   r  r  r  r  r  r  r  r  r  r  r(  r  r   r  r  r  r  r  r  s                            r.   _prepare_shapezWorksheet._prepare_shape7  s    K	
 GT%<q%@AAXt'>'BCC'//h%
 


 C54<())SFTM*++ | 		#iiG G"DL'..2S__DvMtT    lGfi11
 4466!-v'1|$"'w#)x (3}%"'w#)x &'{#*+' 'E 2 2u'1|$kk%&&  	WF#H$Kx)3// /))#..x
C(( /))#..xS)) 4[*==))&11U33xS)) #[#66"!v;;!444M 345      ,0055 S*118V[2QRRR6:6Q6QRU6V6VN?333A 	W  	W* "!r2   c
           	      6   t          j        dd|          }| j                            |	          s2| j                            ddt          |          z   dz   |z   g           |                     |	          }
| j                            |||||||
g           d S )Nz\..*$rY   r  r  r  )	r  rs  r   r  r   r  r1  _get_vml_drawing_rel_indexr   )r(   r  r  r(  rg   r  positionr  r  r  ref_ids              r.   _prepare_header_imagezWorksheet._prepare_header_image  s     vhD))$((00 	"))+c(mm;cAJNO   0088&&FD(E5&A	
 	
 	
 	
 	
r2   c                 j    | j                             ddt          |          z   dz   |z   g           d S )Nr  r  r  )r   r  r1  )r(   r  r  s      r.   _prepare_backgroundzWorksheet._prepare_background  sE    &--'#h--7#=
JK	
 	
 	
 	
 	
r2   c           
         d}| j         |         \
  }}}}}	}
}}}}|dz
  |_        t          d|j        |
z  z             }t          d|j        |z  z             }|                     ||||	|||          }|j        }| j        sLt                      }d|_	        || _        | j
                            ddt          |          z   dz   g           n| j        }|                                }||d<   ||d<   ||d<   ||d	<   ||d
<   d |d<   ||d<   |                                 |d<   d|d<   d |d<   ||d<   ||d<   | j                            ddt          |          z   dz   g           d S )Nr   r$  r  r  r  r8  r  r  r(  rg   r  r  r  r   r  r  r  r  z/chartz../charts/chart)r   r%  r&   r  r(  r  
chart_namer   r   r  r   r  r1  r  r  r   )r(   rh   chart_idr  r  r%  rF   r  r  r  r  r  r  r  r  r  r(  r  rg   r   r  s                        r.   _prepare_chartzWorksheet._prepare_chart  s    K	
 a< C5;0122SEL72344//h%
 


  | 		#iiG G"DL'..2S__DvMN    lG 4466!-v'1|$"'w#)x !%v"&w#)x &*&A&A&C&C{#*+' $u(3}%'1|$!!(3x==86AB	
 	
 	
 	
 	
r2   c           
      b   |                      |||||||          \
  }}}}}}	}
}}}t          dd|z  z             }t          dd|z  z             }t          dd|
z  z             }
t          dd|z  z             }t          dd|z  z             }t          dd|z  z             }||||||	|
|||f
S )Nr$  r  )_position_object_pixelsr&   )r(   	col_start	row_startx1y1r  r(  r  col_endrow_endx2y2x_absy_abss                 r.   r  zWorksheet._position_object_emus  s    ( ((y"b%
 
	
 tby!!tby!!tby!!tby!!C$,&''C$,&''9b"gwBuUUr2   c           
      J   d}d}	|dk     r2|dk    r,||                      |dz
            z  }|dz  }|dk     r|dk    ,|dk     r2|dk    r,||                     |dz
            z  }|dz  }|dk     r|dk    ,|dk     rd}|dk     rd}| j        r+t          |          D ]}
||                      |
          z  }n|| j        |z  z  }||z  }| j        r+t          |          D ]}|	|                     |          z  }	n|	| j        |z  z  }	|	|z  }	||                      ||          k    r7||                      |          z  }|dz  }||                      ||          k    7||                     ||          k    r7||                     |          z  }|dz  }||                     ||          k    7|}|}|                      ||          dk    r||z   }|                     ||          dk    r||z   }||                      ||          k    r8||                      ||          z  }|dz  }||                      ||          k    8||                     ||          k    r8||                     ||          z  }|dz  }||                     ||          k    8|}|}||||||||||	g
S r%   )	_size_col	_size_rowr   rw  r   r   r   )r(   r  r  r  r  r  r(  r  r  r  r>  row_idr  r  r  r  s                   r.   r  z!Worksheet._position_object_pixels/  sK   (  1ffQ$..Q///BNI 1ffQ
 1ffQ$..Q///BNI 1ffQ
 66B66B   	9	** 0 0///0 T,y88E   	9	** 0 0///0 T,y88E DNN9f5555$..+++BNI DNN9f5555
 DNN9f5555$..+++BNI DNN9f5555
  >>)V,,q00BJE>>)V,,q00b[F t~~gv6666T^^GV444EqLG t~~gv6666
 w7777dnnWf555FqLG w7777
 9b"gwBuUUr2   c                    d}d}d}|| j         v rr| j         |         d         }| j         |         d         }|| j        }|r	|dk    rd}n?|dk     rt          |||z   z  dz             }n t          ||z  dz             |z   }n| j        }|S )Nr  r  r   r  r?  r   r$  )ry   r   r&   r   )r(   rF   r  max_digit_widthpaddingpixelsr  r{   s           r.   r  zWorksheet._size_col  s      $-M#&q)E]3'*F}.  F&A++Uo&?@3FGGU_4s:;;gE,Fr2   c                     d}|| j         v rD| j         |         d         }| j         |         d         }|r	|dk    rd}n*t          d|z            }nt          d| j        z            }|S )Nr   r   r?  gUUUUUU?)r   r&   r   )r(   r%  r  r  r(  r{   s         r.   r  zWorksheet._size_row  s    
  $.  ^C(+F^C(+F 1&A++Y/00T%<<==Fr2   c                 <    d}d}|dk    r	|||z   z  }n||z
  |z  }|S )Ng      @g      @   rD   )r(   r  r  r  r  s        r.   r  zWorksheet._pixels_to_width  s:    R<<o78EEg%8Er2   c                     d|z  S )Nr\   rD   )r(   r  s     r.   r,  zWorksheet._pixels_to_height  s    f}r2   c                 
   d}d}d}d dd d d d ||d dd ddddd	}|                                 D ]}	||	         ||	<   |d
         s||d
<   |d         s||d<   t          |d                                                   |d<   |d                             ddd          |d<   |d         "t	          |d                   \  }
}|
|d<   ||d<   | j        }| j        }|d         J|dk    rd|d<   n>||dz
  k    r	|dz
  |d<   n,||dz
  k    r	|dz
  |d<   n||dz
  k    r	|dz
  |d<   n|dz
  |d<   |d         >|dk    rd|d<   n2||dz
  k    rd|d<   n#||dz
  k    rd|d<   n||dz
  k    rd|d<   nd|d<   |d         >||dz
  k    r	|dz
  |d<   n,||dz
  k    r	|dz
  |d<   n||dz
  k    r	|dz
  |d<   n|dz   |d<   |d         2||dz
  k    rd|d<   n#||dz
  k    rd|d<   n||dz
  k    rd|d<   nd|d<   |d         r|d
         |d         z  |d
<   |d         r|d         |d         z  |d<   t          d |d
         z             |d
<   t          d |d         z             |d<   |                     |d         |d         |d         |d         |d
         |d         |          }|	                    |d
                    |	                    |d                    ||||d!         |d"         |d         |d#         |d$         |d%         g	|gz   S )&N   J   r   z#ffffe1r   Tahoma   r  )r  r  r  	start_col	start_rowr  r  r(  r  r  r  r  	font_name	font_sizefont_familyr  r(  r  ffr  r  r  r  rZ   r  rw  r  r  r  r  r  r?  r  1   r_   r  r  r$  r  r  r  r  r  )
r  r   r6  r  r   rr   rs   r&   r  r  )r(   r%  rF   r=  r  default_widthdefault_heightr  paramsr  r  r  row_maxcol_maxverticess                  r.   _comment_paramszWorksheet._comment_params  sn     "$!
 
( <<>> 	' 	'C!#,F3KK g 	,+F7Oh 	.-F8 #6'?3399;;w !/11$Q??w ,+%6vl7K%L%L"Y	"+F;"+F;
 //+&axx&'{##!##&-k{##!##&-k{##!##&-k{##&)Ag{#*%axx%&z""!##%'z""!##%'z""!##%'z""%'z"+&gk!!&-k{##!##&-k{##!##&-k{##&)Ag{#*%gk!!%'z""!##%'z""!##%'z""%'z" ) 	B$Woy0AAF7O) 	D%h/&2CCF8 cF7O344wsVH%5566x //;;::7O8
 
 	w(((x())) 897O;;=!

 J
 
	r2   c           	      B   | j         }| j        }d}dt          | j                  z   }||i d}i }	|                                D ]}
||
         |	|
<   |	                    d          }|d|z  }||d         d<   |	                    d          rd|	d         z   |d<   nd	|z  |d<   |	                    d
          |d
<   |	                    d|          |	d<   |	                    d|          |	d<   |	                    dd          |	d<   |	                    dd          |	d<   |	d         |	                    dd          z  |	d<   |	d         |	                    dd          z  |	d<   t          d|	d         z             |	d<   t          d|	d         z             |	d<   ||	d<   ||	d<   |                     |	d         |	d         |	d         |	d         |	d         |	d         |          }|                    |	d                    |                    |	d                    ||d<   |S )Nr   r   )r%  rF   fontcaptionz	Button %dr  macroz[0]!z[0]!Button%d_Clickr  r  r(  r  r  r  r  r$  r  r  r  )	r   r   rE  r   r  r  r&   r  r  )r(   r%  rF   r  r  r  r  button_numberr  r  r  r  r  s                r.   r  zWorksheet._button_params[  sg    0/C 1222S"55 <<>> 	' 	'C!#,F3KK **Y'' ?!M1G$+vy! ::g 	C$vg6F7OO2]BF7O !'

= 9 9} !**Wm<<w!::h??x $ZZ
A66z#ZZ
A66z !/FJJy!,D,DDw!(+fjjA.F.FFx cF7O344wsVH%5566x!{!{ //;;::7O8
 
 	w(((x()))%zr2   c                    g }t          | j                                                  }|D ]}t          | j        |                                                   }|D ]}	| j        |         |	         }
 | j        |
 }|| j        |         |	<   | j        r/| j        |         |	         d         d| j        |         |	         d<   | j        |         |	         d         | j        | j        |         |	         d<   |                    | j        |         |	                    | j                            ddt          |          z   dz   g           | j	        r6|| _
        | j                            ddt          |          z   d	z   g           t          |          }|}t          t          |d
z                      D ]}d|||z   dz   fz  }|| _        || _        |S )Nr?  r   rZ   /vmlDrawing../drawings/vmlDrawing.vmlz	/commentsz../commentsr  rd   z%s,%d)r  r   r  r  r   r   r  r   r1  r   r   r   rE  rw  r&   r  r   )r(   r  r   vml_drawing_id
comment_idr   row_numsr%  col_numsrF   user_optionsr  r2  start_data_idrF  s                  r.   _prepare_vml_objectszWorksheet._prepare_vml_objects  s     $-,,..// 	9 	9CdmC0557788H 9 9#}S1#6--|<*0c"3' ( 7}S)#.q1956c*3/2 =%c*1-5151EDM#&s+A.c 23 788889  	&&4s>7J7JJVST	
 	
 	
  	!)D'..mc*oo=FG   H# s54<(()) 	I 	IA![-!2Ca2G$HHKK&(r2   c                 r    || _         | j                            ddt          |          z   dz   g           d S )Nr  r  r  )r   r   r  r1  )r(   r   r  s      r.   _prepare_header_vml_objectsz%Worksheet._prepare_header_vml_objects  sL     +&&4s>7J7JJVST	
 	
 	
 	
 	
r2   c                 V   | j         D ]}||d<   |                    d          dt          |          z   |d<   |d                                         }||v rt	          d|d         z            d||<   | j                            ddt          |          z   dz   g           |d	z  }d S )
Nr%  rg   Tablez2Duplicate name '%s' used in worksheet.add_table().Tz/tablez../tables/tabler  r   )r   r  r1  r6  r!   r   r  )r(   table_idseenr   rg   s        r.   _prepare_tableszWorksheet._prepare_tables  s    [ 	 	E"E$Kyy  ( '#h-- 7f =&&((Dt||(H5QW=X   "T
 %,,,s8}}<vEF   MHH+	 	r2   c           	          d}|                     dd          }|                     dd          }|                     dd          }|                     dd	          }d
dddddddd}||v r||         }d|d|d}nt          d|z             |S )NrY   rq  z''r  z'#]z'][z'[e   f   g   h   i   k   m   n   r1  z	SUBTOTAL(z,[z])z(Unsupported function '%s' in add_table())r  r   )r(   rD  col_namer]  rE  func_nums         r.   r8  z$Worksheet._table_function_to_formula  s     ##C..##C..##C..##C.. 	
 	
	 y   *HH-5XXxxx@GG;hFGGGr2   c                 F    ||vrd S dt          ||                   i||<   d S )Nrgbr   )r(   rt  r  
user_colors       r.   rs  zWorksheet._set_spark_color  s4    W$$F!&1D(E(E F	*r2   c                 |   | j         rdS g }t          ||dz             D ]}|| j        vr|                    d            "t          ||dz             D ]}|| j        |         v r| j        |         |         }|j        j        }	|	dv r|                    d|j        z             R|	dk    r7|j        }
| j        	                    |
          }|                    |           |	dv r!|j
        }|d}|                    |           |	dk    r|                    d	           |                    d            |S )
NrD   r   rL   rQ   r|  rK   )rP   rR   r   rM   rY   )rk   rw  r   r  r  r  rM  r=  ri   _get_shared_stringr^  )r(   r  r  r  r  r  r  r  r  r  rh   r=  r^  s                r.   _get_range_datazWorksheet._get_range_data  sy     	2 Y!44 %	& %	&Gdj((D!!! GaK88 & &dj111:g.w7D $ 7I $:::Gdk$9::::"h.. $!%!B!B5!I!IF++++"&AAA $
 =$%EE****"g--B KK%%%%?&B r2   c                 D    d |D             }d                     |          S )Nc                 Z    g | ](}t          |t                    st          |          n|)S rD   )r7  r1  )rE   items     r.   rG   z'Worksheet._csv_join.<locals>.<listcomp>V  s1    TTTd*T3"7"7ATTTTTr2   ,)join)r(   r  s     r.   r  zWorksheet._csv_joinR  s(     UTeTTTxxr2   c                    t          j        d|          r|S |                    dd          }|                    dd          }|                    dd          }|                    dd	          }|                    d
d          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|S )Nz%[0-9a-fA-F]{2}rz  z%25rj  z%22r!  z%20rq  z%3crn  z%3er  z%5br  z%5d^z%5e`z%60ra  z%7br  z%7d)r  rc  r  )r(   r  s     r.   r  zWorksheet._escape_urlZ  s    9&,, 	J kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%kk#u%%
r2   c                     || xj         dz  c_         | j         S | j                            |          r| j        |         S | xj         dz  c_         | j         | j        |<   | j         S Nr   )r   r   r  r(   r  s     r.   r  z Worksheet._get_drawing_rel_indexn  sx    >  A%  ''""6** 	($V,,  A%  (,(<Df%''r2   c                     | j                             |          r| j         |         S | xj        dz  c_        | j        | j         |<   | j        S r  )r   r  r   r  s     r.   r  z$Worksheet._get_vml_drawing_rel_indexz  sV     $$V,, 	,(00$$)$$,0,DD!&)++r2   c                    | j         }|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r|                    d           |j        r| 	                    |j                   |j
        dk    r|                     d           |j
        d	k    r|                     d
           |                    dd|j        fg           |j        dk    rn|j        r|                     d|j                   nq|j        r|                     d|j                   nN|j        r1|                     |j                  }|                     d|           n|                     dd           |                    dd|j        fg           |                    dd|j        fg           |j        dk    r%|j        s|                    dd|j        fg           |                    d           d S )NrPrbrF  strikeoutlineshadowr   superscriptr  	subscriptszvalrB  themeindexedr  rFontfamilyCalibrischeme)r   r  bold_xml_empty_tagitalicfont_strikeoutfont_outlinefont_shadow	underline_write_underlinefont_script_write_vert_alignr  r  _write_colorcolor_indexed
font_color_get_palette_color_write_rstring_colorr  r  	hyperlinkfont_schemer  )r(   	xf_format
xml_writerr  s       r.   r  zWorksheet._write_font  s   \
!!%((( > 	+%%c*** 	+%%c***# 	0%%h///! 	1%%i000  	0%%h///  	7!!)"5666  A%%""=111 A%%"";/// 	!!$%1D)E(FGGG ?b  _ 	2gy7777$ 	2i)@AAAA! 	2++I,@AAE%%eU3333%%gq111 	!!'UI4G,H+IJJJ!!(eY5J-K,LMMM)++I4G+%%h%9N1O0PQQQ&&&&&r2   c                 z    g }|dk    rdg}n|dk    rdg}n	|dk    rdg}| j                             d|           d S )Nr  )r  double!   )r  singleAccounting"   )r  doubleAccountingur   r%  )r(   r*  r  s      r.   r+  zWorksheet._write_underline  s^    
 >>+,JJ"__56JJ"__56J##C44444r2   c                 F    d|fg}| j                             d|           d S )Nr  	vertAlignr>  r(   r  r  s      r.   r-  zWorksheet._write_vert_align  s+    cl^
##K<<<<<r2   c                 F    ||fg}| j                             d|           d S Nr  r>  r(   rg   r^  r  s       r.   r2  zWorksheet._write_rstring_color  s+    Um_
##GZ88888r2   c                 \    |d         dk    r
|dd          }d|                                 z   S )Nr   r  r   FF)upperr  s     r.   r1  zWorksheet._get_palette_color  s/    8s??!""IEekkmm##r2   c                 X    | j         s"| j                                         d| _         d S d S )NT)r  r	  r,  r  s    r.   
_opt_closezWorksheet._opt_close  s:    & 	+""$$$&*D###	+ 	+r2   c                 z    | j         r3| j        }t          |dd          | _        d| _         | j        | _        d S d S )Nza+r&  r'  F)r  r  r-  r	  r  )r(   r  s     r.   _opt_reopenzWorksheet._opt_reopen  sL    " 	'-H#H4'JJJD&+D#&DGGG		' 	'r2   c                    g }t          |          D ]}|                    dddd           |dk    rd|d         d<   d|d	         d<   |d
k    r!d|d         d<   d|d	         d<   d|d         d<   |dk    r,d|d         d<   d|d	         d<   d|d         d<   d|d         d<   |rdt          |          }||k    r|d	z
  }t          |          D ]9}||                             d          m||         d         ||         d<   ||         d         }t	          |t
                    r3|                    d          r|                    d          ||         d<   ||                             d          red}||         d         |vrt          d||         d         z             n4||         d         ||         d<   ||         d         dk    rd||         d<   ||                             d          }	|	r|	dk    rd||         d<   ;|S )NFr   percent)rC  r^  r8  rZ   C   r^  r9  r   r?  K   r      r  r  P   <   (   r`   r  r8  )rM  r  rM  r]  zOUnknown icon property type '%s' for sub-property 'type' in conditional_format()rM  numrC  rn  T)	rw  r  rE  r  r7  r1  r  r	  r   )
r(   r  
user_propspropsrH   max_datarF  tmpr  rC  s
             r.   r  zWorksheet._set_icon_props  sw    {## 	M 	MALLeaKKLLLL ! "E!HW "E!HW! "E!HW "E!HW "E!HW! "E!HW "E!HW "E!HW "E!HW  #	0:H;&&&?8__ 0 0a=$$W--9(21g(>E!HW%  (7+C!#s++ <s0C0C <,/JJsOOa) a=$$V,, 5"PK!!}V,K??F(mF34    ,6a=+@a( 8F+x77/4E!HV, &a=,,Z88 0C+/E!HZ(r2   c                    d}|dz   }|dz   }|dz   }d}|dz   }d|fd|fg}| j         d	k    rC|                    d
|f           |                    d|f           |                    d           |                     d|           d S )Nz"http://schemas.openxmlformats.org/zspreadsheetml/2006/mainz!officeDocument/2006/relationshipszmarkup-compatibility/2006zhttp://schemas.microsoft.com/zoffice/spreadsheetml/2009/9/acxmlnszxmlns:rr  zxmlns:mczxmlns:x14ac)zmc:Ignorablex14acr2  )rp   r  r  )r(   schemarZ  xmlns_rxmlns_mc	ms_schemaxmlns_x14acr  s           r.   r4  zWorksheet._write_worksheet4  s     622>>773	"BB&G(<=
 %%z84555}k:;;;7888K44444r2   c                    | j         
| j        d}n| j         `| j        Y| j        | j        k    rt          d| j                  }nt          d| j                  }t          d| j                  }|dz   |z   }nw| j         | j        k    r+| j        | j        k    rt          | j         | j                  }n<t          | j         | j                  }t          | j        | j                  }|dz   |z   }|                     dd|fg           d S )Nr  r   r5   	dimensionr:  )ru   rw   rx   r   rv   r%  )r(   r:  r9   r:   s       r.   r6  zWorksheet._write_dimensionH  s   
 ?"t'> CC_$)D
 $/11'4?;; +1do>>*1do>>slV+_//DOt4V4V#DOT_EECC 'tHHF&tHHF3,'CK5#,88888r2   c                     |                      d           |                                  |                     d           d S )N
sheetViews)r  _write_sheet_viewr  r  s    r.   r7  zWorksheet._write_sheet_viewsk  sD    L))) 	   ,'''''r2   c                    g }| j         s|                    d           | j        r|                    d           | j        s|                    d           | j        r|                    d           | j        r|                    d           | j        s|                    d           | j        dk    r|                    d           n | j        d	k    r|                    d
           | j        dk    r|                    d| j        f           | j	        dk    r|                    d| j	        f           | j        dk    r#| j
        r|                    d| j	        f           | j        dk    r|                    d| j	        f           | j        d	k    r|                    d| j	        f           |                    d           | j        st          | j                  rU|                     d|           |                                  |                                  |                     d           d S |                     d|           d S )N)showGridLinesr   )showRowColHeadersr   )	showZerosr   rightToLeftr   )tabSelectedr   showOutlineSymbolsr   r   )r  
pageLayoutr  )r  pageBreakPreviewrY   topLeftCellr^   	zoomScaler   zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutView)workbookViewIdr   	sheetView)r   r  r   r   r   r   r   r   r~   r   r   r   rE  rz   r  _write_panes_write_selectionsr  r%  r(   r  s     r.   re  zWorksheet._write_sheet_viewt  s   
 $ 	42333  	86777  	0.///   	20111 = 	20111  	97888 >Q45555^q  :;;; ##}d.@ABBB 9{DI6777~""t'="!!#4di"@AAA~""!!#<di"HIII~""!!#=ty"IJJJ/000: 	9T_-- 	9Z888""$$$k*****Z88888r2   c                    | j         }| j        }| j        }d|fg}| j         | j        k    r|                    d           | j        r|                    d           |r|                    d|f           |r|                    d|f           | j        dk    r|                    d           |                     d|           d S )	NdefaultRowHeightcustomHeightr   )
zeroHeightr   outlineLevelRowoutlineLevelColr  zx14ac:dyDescentz0.25sheetFormatPr)r   r   r   r   r  r   rp   r%  )r(   r   	row_level	col_levelr  s        r.   r8  z Worksheet._write_sheet_format_pr  s    !4*	*	)+=>?
"d&>>>1222" 	1/000 	>0)<=== 	>0)<===%%9:::OZ88888r2   c                    | j         sd S |                     d           t          | j                                                   d         }|}| j         |         }| j         |= |}|}t          | j                                                   D ]>}| j         |         }||dz   k    r	||k    r|}!|                     |||           |}|}|}?|                     |||           || j         |<   |                     d           d S )Ncolsr   r   )ry   r  r  r  _write_col_infor  )r(   rk  rm  prev_col_optionsdeleted_coldeleted_col_optionsrF   col_optionss           r.   r9  zWorksheet._write_cols  s5    } 	FF### DM..001115	=3M)$.$-,,..// 	/ 	/C-,K hl""{6F'F'F $$Y:JKKK	$#.   	Y2BCCC &9k"&!!!!!r2   c                    |\  }}}}}}	d}
d}|r|                                 }|
|sd}d}
nd}n|dk    rd}
|dk    rd}d}|dk     r<t          t          |||z   z  dz             t          |          z  dz            dz  }n;t          t          ||z  dz             |z   t          |          z  dz            dz  }d|dz   fd	|dz   fd
d|z  fg}|r|                    d|f           |r|                    d           |	r|                    d           |
r|                    d           |r|                    d|f           |r|                    d           |                     d|           d S )Nr   r   ra   r  r  r$  g      p@r  r  r  r|  r  )r{   rC   )bestFitrC   )customWidthrC   outlineLevel)r  rC   rF   )_get_xf_indexr&   r!  r  r%  )r(   col_minr  ry   r  r>  r{   r  r  r&  custom_widthxf_indexr  r  r  s                  r.   r  zWorksheet._write_col_info  s'   BJ?VUIw  	3"0022H =  d]]L 199OGqyyUo&?@3FGG001  
   U_4s:;;gE001  
   GaK GaK go&

  	3w1222 	/o... 	0./// 	42333 	7~u5666 	20111E:.....r2   c                     | j         |                     d           d S |                     d           |                                  |                     d           d S )N	sheetData)ru   r%  r  _write_rowsr  r  s    r.   r:  zWorksheet._write_sheet_data3  sd    ?",,,,,,,,k*****r2   c                    | j         |                     d           d S |                     d           d}| j                            d           | j                            |          }|r6| j                            |           | j                            |          }|6| j                                         t          j
        | j                   |                     d           d S )Nr  i   r   )ru   r%  r  r	  seekreadr  r,  r,  r  unlinkr  r  )r(   	buff_sizer  s      r.   r;  z%Worksheet._write_optimized_sheet_data=  s     ?",,,,,,,, I!!!$$$#((33D 8d###',,Y77  8 ""$$$Id,---k*****r2   c                     d| j         fd| j        fd| j        fd| j        fd| j        fd| j        fg}|                     d|           d S )Nr  r  r  r  r   r   pageMargins)r   r   r   r   r   r   r%  rz  s     r.   rE  zWorksheet._write_page_marginsU  sj     T%&d'(DO$t)*t)*t)*

 	M:66666r2   c                    g }| j         sd S | j        r|                    d| j        f           | j        dk    r|                    d| j        f           | j        r'| j        dk    r|                    d| j        f           | j        r'| j        dk    r|                    d| j        f           | j        r|                    d           | j        dk    r|                    d| j        f           | j	        r|                    d	           n|                    d
           | j
        r|                    d           | j        dk    r|                    d           | j        rG| j        r|                    d| j        f           | j        r|                    d| j        f           nF| j        r|                    d| j        f           | j        r|                    d| j        f           |                     d|           d S )N	paperSizer^   r	  r   
fitToWidthfitToHeight)	pageOrderoverThenDownfirstPageNumber)r   portrait)r   	landscape)blackAndWhiterC   r   )useFirstPageNumberrC   horizontalDpiverticalDpi	pageSetup)r   r   r  r   r   r   r   r   r   r   r   rm   r  r  r%  rz  s     r.   rF  zWorksheet._write_page_setupb  sj   & 
 & 	F ? 	>{DO<=== s""w(89::: = 	>T^q00|T^<==== 	@T_11}do>??? ? 	=;<<< ?Q0$/BCCC  	<9:::::;;;  	64555 ?a9:::  	J" J!!?D4G"HIII  F!!=$2C"DEEE  F!!=$2C"DEEE" J!!?D4G"HIIIK44444r2   c                 (   g }| j         sd S | j        r|                    d           | j        r|                    d           | j        r|                    d           | j        r|                    d           |                     d|           d S )N)horizontalCenteredr   )verticalCenteredr   )headingsr   )	gridLinesr   printOptions)r   r   r  r   r   r   r%  rz  s     r.   rD  zWorksheet._write_print_options  s    
) 	F < 	97888 < 	75666  	/o...  	0.///NJ77777r2   c                    g }| j         s|                    d           | j        s|                    d           | j        rc|                     d|           | j        r|                                  | j        r|                                  | 	                    d           d S | j
        r|                     d|           d S d S )N)scaleWithDocr   )alignWithMarginsr   headerFooter)r   r  r   r   r  r   _write_odd_headerr   _write_odd_footerr  rq   r%  rz  s     r.   rG  zWorksheet._write_header_footer  s    
( 	31222( 	75666% 	<
;;;{ )&&((({ )&&(((n-----! 	<
;;;;;	< 	<r2   c                 <    |                      d| j                   d S )N	oddHeader)r  r   r  s    r.   r  zWorksheet._write_odd_header       {DK88888r2   c                 <    |                      d| j                   d S )N	oddFooter)r  r   r  s    r.   r  zWorksheet._write_odd_footer  r  r2   c                 $   |                                   t          | j        | j        dz             D ]\}|| j        v s|| j        v s| j        |         r9t          |dz            }|| j        v r| j        |         }nd }| j        |         r|| j        vr| 	                    ||           n"| 	                    ||| j        |                    t          | j
        | j        dz             D ];}|| j        |         v r*| j        |         |         }|                     |||           <|                     d           || j        v r$|                     ||| j        |                    :|                     ||| j        |                    ^d S )Nr   r  r%  )_calculate_spansrw  ru   rv   r   r   r   r&   r   
_write_rowrw   rx   _write_cellr  _write_empty_row)r(   r  
span_indexrp  r  col_refs         r.   r  zWorksheet._write_rows  s   T_do.ABB "	Q "	QG4=((dm++:g& ,
 !2..
//>*5DDD:g& Qdm336666t}W7MNNN#($/A:M#N#N H H"dj&999&*j&9'&BG ,,WgwGGG%%e,,,,--))'4w9OPPPP ))'4w9OPPPE"	Q "	Qr2   c                 V   | j         }|| _         || j        v s|| j        v s| j        |         rd }| j        |         r|| j        vr|                     ||           n"|                     ||| j        |                    t          | j        | j        dz             D ];}|| j        |         v r*| j        |         |         }|                     |||           <| 	                    d           n"| 
                    ||| j        |                    | j                                         d S )Nr   r%  )r   r   r   r   r  rw  rw   rx   r  r  r  clear)r(   current_row_numr  rp  r  r  s         r.   rG  zWorksheet._write_single_row  sE    #+dm##w$-'?'?4:gCV'? Dz'" M$-//OOGT2222OOGT4=3IJJJ$T_do6IJJ D DG$*W"555"&*W"5g">(('7CCC!!%(((( %%gtT]75KLLL 	
r2   c                 0   i }d }d }t          | j        | j        dz             D ]}|| j        v rFt          | j        | j        dz             D ](}|| j        |         v r||}|}||k     r|}||k    r|})|| j        v rOt          | j        | j        dz             D ]1}|| j        v r&|| j        |         v r||}|}!||k     r|}||k    r|}2|dz   dz  dk    s|| j        k    r*t          |dz            }||dz  }|dz  }|d|||<   d }|| _        d S )Nr   r  r   r5   )	rw  ru   rv   r   rw   rx   r   r&   r   )r(   spansspan_minspan_maxr  r  r  s          r.   r  zWorksheet._calculate_spans2  s   
 T_do.ABB "	$ "	$G$*$$$T_do6IJJ 	3 	3G$*W"555#+'.H'.HH&11+2&11+2$-''$T_do6IJJ 	3 	3G$-//Gt}W?U4U4U#+'.H'.HH&11+2&11+21"a''Gt,F,F 2..
'MHMH3;88XX(FE*%#Hr2   c                    d}|r	|\  }}}}	}
nd\  }}}}	}
|| j         }d|dz   fg}|r|                                }|r|                    d|f           |r|                    d|f           |r|                    d           || j        k    r|                    dd	|z  f           |r|                    d
           || j        k    r|                    d           |	r|                    d|	f           |
r|                    d           | j        dk    r|                    d           |r|                     d|           d S |                     d|           d S )Nr   )NNr   r   r   r  r   r  s)customFormatr   htz%g)r{   r   r}  r  )r  r   r  r  r%  )r   r  r  r   rp   _xml_empty_tag_unencoded_xml_start_tag_unencoded)r(   r%  r  
properties	empty_rowr  r(  r>  r{   r  r  r  s               r.   r  zWorksheet._write_rowa  s    	P<F9FK		<O9FK	>,FC!Gn%
  	3"0022H  	0w./// 	/sHo... 	31222T---tTF]3444 	-m,,,T---1222 	7~u5666 	0.///%%9::: 	=))%<<<<<))%<<<<<r2   c                 8    |                      |||d           d S )NT)r  )r  )r(   r%  r  r  s       r.   r  zWorksheet._write_empty_row  s"    UJ$?????r2   c                    t          ||          }d|fg}|j        r1|j                                        }|                    d|f           n|| j        v rP| j        |         d         r=| j        |         d         }|                    d|                                f           nG|| j        v r>| j        |         d         }|)|                    d|                                f           |j        j        }	|	dv r|                     |j	        |           d S |	dv r|j
        }
| j        s|                     |
|           d S |                     |
          }
|
                    d          r-|
                    d          r|                     |
|           d S t#          |
          }|                     |
||           d S |	dk    r|j        }t)          |j        t*                    r"|                    d	           |j        rd}n_d
}n\t)          |j        t,                    rBd}|j        dk    rn4|j        |v r|                    d           n|                    d           |                     |j        ||           d S |	dk    r|j        dk    r|                    d           	 t5          |j                   n%# t6          $ r |                    d           Y nw xY w|                     d|           |                     |j        |j                   |                     |j                   |                      d           d S |	dk    r| !                    d|           d S |	dk    r\|                    d	           |                     d|           |                     |j"                   |                      d           d S |	dk    rx|                    d           |                    d|j        f           |                     d|           |                     |j#                   |                      d           d S d S )Nr  r  r   r  r  z<r>z</r>rP   )r  r  r   )rQ  z#N/Az#NAME?z#NULL!rP  z#REF!r  rY   )r  e)r  r1  rR   rp  )cmr   crM   rO   rT   vm)$r   rN   r  r  r   ry   r  r  _xml_number_elementrM  r=  rk   _xml_string_element_escape_control_charactersr  r  _xml_rich_inline_stringr   _xml_inline_stringr^  r7  r/  r1  _xml_formula_elementr]  rx  r!  r'   r  _write_cell_array_formularw  _write_cell_valuer  r%  r  rq  )r(   r%  rF   r  ry  r  r  row_xfcol_xftype_cell_namer=  r  r^  error_codess                 r.   r  zWorksheet._write_cell  s    ,C55
J'(
; 	A{0022HsHo....DM!!dmC&8&;!]3'*FsF$8$8$:$:;<<<<DM!!]3'*F!!!3(<(<(>(>"?@@@0 333$$T[*=====777[F' J((<<<<<
 88@@ $$U++ J0G0G J00DDDDD  36::H++FHjIIIIIy((JE$*d++ 4!!*---: EEEEDJ,, 4 :##Z;..%%j1111%%l333%%dlE:FFFFF~-- zY&&!!),,,0dj!!!! 0 0 0!!,/////0 Z000**4<DDD""4:...c"""""w&&Z00000y((j)))Z000""4<000c"""""w&&j)))tTZ0111Z000""4:...c""""" '&s   .K K%$K%c                 :    |d}|                      d|           d S )NrY   vr  )r(   r^  s     r.   r  zWorksheet._write_cell_value  s(    =EsE*****r2   c                 @    dd|fg}|                      d||           d S )N)r  arrayr:  r&  r  )r(   r]  ry  r  s       r.   r  z#Worksheet._write_cell_array_formula  s/    $uj&9:
sGZ88888r2   c                    g }| j         s| j        s| j        s| j        s	| j        sd S | j        r|                    d| j        f           | j        r|                    d           | j         s| j        s| j        ri|                     d|           |                                  |                                  | 	                                 | 
                    d           d S |                     d|           d S )NcodeName)
filterModer   sheetPr)r   r   r}   r   r   r  r  _write_tab_color_write_outline_pr_write_page_set_up_prr  r%  rz  s     r.   r5  zWorksheet._write_sheet_pr  s/   
 	N	 N	 (		
 %	 F 	?z4+<=>>>> 	1/000= 	7DN 	7d.B 	7	:666!!###""$$$&&(((i(((((	:66666r2   c                 J    | j         sd S dg}|                     d|           d S )N)	fitToPager   pageSetUpPr)r   r%  rz  s     r.   r  zWorksheet._write_page_set_up_pr7  s5    } 	F&'
M:66666r2   c                 R    | j         }|sd S d|fg}|                     d|           d S )Nr  tabColor)r}   r%  )r(   r  r  s      r.   r  zWorksheet._write_tab_color?  s>     	Fen%
J
33333r2   c                 (   g }| j         sd S | j        r|                    d           | j        s|                    d           | j        s|                    d           | j        s|                    d           |                     d|           d S )N)applyStylesr   )summaryBelowr   )summaryRightr   rm  	outlinePr)r   r   r  r   r   r   r%  rz  s     r.   r  zWorksheet._write_outline_prJ  s    
# 	F 	20111! 	31222! 	31222 	97888K44444r2   c                     |                      | j                  }|sd S t          |          }d|fd|fg}|                     d|           |D ]}|                     |d           |                     d           d S )Nr2  manualBreakCount	rowBreaksi?  )rh  r   rE  r  
_write_brkr  )r(   page_breaksr2  r  r  s        r.   rH  zWorksheet._write_row_breaks\  s    ++DL99 	FK   e'


 	K444" 	, 	,GOOGU+++++&&&&&r2   c                     |                      | j                  }|sd S t          |          }d|fd|fg}|                     d|           |D ]}|                     |d           |                     d           d S )Nr2  r  	colBreaksi )rh  r   rE  r  r  r  )r(   r   r2  r  r  s        r.   rI  zWorksheet._write_col_breaksq  s    ++DL99 	FK   e'


 	K444" 	. 	.GOOGW----+&&&&&r2   c                 D    d|fd|fdg}|                      d|           d S )Nr%  r  )manr   brkr%  )r(   brk_idbrk_maxr  s       r.   r  zWorksheet._write_brk  s3    Vnug&6
C
E:.....r2   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ]}|                     |           |                     d           d S )Nr2  
mergeCells)r   rE  r  _write_merge_cellr  )r(   r   r2  r  merged_ranges        r.   r@  zWorksheet._write_merge_cells  s    zL!! 	F&'
L*555( 	1 	1L""<0000,'''''r2   c                     |\  }}}}t          ||          }t          ||          }|dz   |z   }d|fg}	|                     d|	           d S )Nr5   r:  	mergeCell)r   r%  )
r(   r  row_minr  r  r  r9   r:   r:  r  s
             r.   r  zWorksheet._write_merge_cell  se    /;,'7G #7G44"7G44slV#cl^
K44444r2   c                    g }d }t          | j                                                  }|sd S |D ]7}t          | j        |                                                   }|D ]}| j        |         |         }|d         }| j        rK| j        |         r>| j        |         |         r+| j        |         |         }	|	j        j        dk    r|d         }|dk    ra| xj        dz  c_        |                    |||| j        |d         ||d         g           | j                            d|d         dg           |                    ||||d         |d         |d         g           9| 	                    d	           |D ]8}
|

                    d
          }|dk    r | j        |
  (|dk    r
 | j        |
  9|                     d	           d S )Nr  rK   r  r   r1  r  r  r  r   r   r  )r  r   r  r   r  r  r   r  r   r  r  _write_hyperlink_external_write_hyperlink_internalr  )r(   r   displayr  r  r  r  linkr  r  r)   s              r.   rC  zWorksheet._write_hyperlinks  s@    
 $/..0011  	F   0	 0	Gdog6;;==>>H $ + +w/8 -	 : .$*W"5 .$*W:Mg:V .:g.w7D~.(::"&u+>>NNa'NN%%%## N K# K
 
 
 -44%tE{J?   
 %%%## K K K	 	 	 	E+\ 	L))) 	6 	6DIA~~..555a..55,'''''r2   c                    t          ||          }dt          |          z   }d|fd|fg}	||	                    d|f           ||	                    d|f           ||	                    d|f           |                     d|	           d S )NrIdr:  r:idrQ  r  tooltipr3  )r   r1  r  r%  )
r(   r%  rF   id_numrQ  r  r  r:  r_idr  s
             r.   r  z#Worksheet._write_hyperlink_external  s      S))s6{{"clVTN3
z84555y'2333y'2333K44444r2   c                     t          ||          }d|fd|fg}||                    d|f           |                    d|f           |                     d|           d S )Nr:  rQ  r  r  r3  )r   r  r%  )r(   r%  rF   rQ  r  r  r:  r  s           r.   r  z#Worksheet._write_hyperlink_internal  sz      S))clZ$:;
y'23339g.///K44444r2   c                     | j         sd S d| j         fg}| j        rA|                     d|           |                                  |                     d           d S |                     d|           d S )Nr:  
autoFilter)r   r   r  _write_autofiltersr  r%  rz  s     r.   r?  zWorksheet._write_auto_filter  s    " 	Fd123
> 	:j999##%%%l+++++ j99999r2   c                     | j         \  }}t          ||dz             D ]@}|| j        vr| j        |         }| j        |         }|                     ||z
  ||           Ad S r  )r   rw  r   r   _write_filter_column)r(   col1col2rF   r  r   s         r.   r  zWorksheet._write_autofilters*  s     (ttax(( 
	G 
	GC$*** %c*F*3/K %%cDj+vFFFF
	G 
	Gr2   c                     d|fg}|                      d|           |dk    r|                     |           n|                     |           |                     d           d S )NcolIdfilterColumnr   )r  _write_filters_write_custom_filtersr  )r(   r>  r   rJ  r  s        r.   r   zWorksheet._write_filter_column;  sw    '(
NJ777!(((( &&w///.)))))r2   c                    d |D             }g }t          |          t          |          k    rdg}t          |          dk    r+t          |          dk    r|                     d|           d S |                     d|           t          |          D ]}|                     |           |                     d           d S )Nc                 \    g | ])}t          |                                          d k    '|*S )r  )r1  r6  )rE   filters     r.   rG   z,Worksheet._write_filters.<locals>.<listcomp>L  s4    VVVc&kk6G6G6I6IX6U6Uf6U6U6Ur2   )rW  r   r   r   rJ  )rE  r%  r  r  _write_filterr  )r(   rJ  
non_blanksr  r;  s        r.   r&  zWorksheet._write_filtersJ  s    VV7VVV

w<<3z??**&Jw<<1ZA!5!5	:66666 	:666$Z00 / /
"":....i(((((r2   c                 <    d|fg}|                      d|           d S )Nr  r*  r  rA  s      r.   r+  zWorksheet._write_filter^  s)    cl^
Hj11111r2   c                    t          |          dk    r6|                     d            | j        |  |                     d           d S g }|d         dk    rdg}ndg}|                     d|           |                     |d         |d                    |                     |d         |d                    |                     d           d S )	Nr  customFiltersr   )andr   )r0  r   r   rZ   r?  )rE  r  _write_custom_filterr  )r(   r  r  s      r.   r'  zWorksheet._write_custom_filtersd  s    v;;!000%D%v..o..... J ayA~~(\

(\
 <<<%%fQi;;;%%fQi;;;o.....r2   c                     g }dddddddd}||         	||         }nt          d|z             |dk    r|                    d	|f           |                    d
|f           |                     d|           d S )Nrp  rf  rv  rm  ri  rs  )r   r  rZ   r?  r  rw  r|  zUnknown operator = %sr~  r  customFilter)r   r  r%  )r(   r~  r  r  r}  s        r.   r1  zWorksheet._write_custom_filter{  s    
  #
 
	 X* *HH(83444 wz845555#,'''NJ77777r2   c                 z   g }| j         sd S | j         }|d         r|                    d|d         f           |d         r|                    d           |d         r|                    d           |d         s|                    d           |d         s|                    d	           |d
         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         r|                    d           |d         s|                    d           |d         r|                    d           |d         r|                    d           |d          r|                    d!           |d"         s|                    d#           |                     d$|           d S )%Nr  r  )r  r   r  )r  r   r  )r  r   r  )r  r   r  )formatCellsr   r  )formatColumnsr   r  )
formatRowsr   r  )insertColumnsr   r  )
insertRowsr   r  )insertHyperlinksr   r  )deleteColumnsr   r  )
deleteRowsr   r  )selectLockedCellsr   r  )r  r   r;  )r  r   r  )pivotTablesr   r  )selectUnlockedCellsr   sheetProtection)r   r  r%  )r(   r  r  s      r.   r<  z!Worksheet._write_sheet_protection  s   
# 	F&: 	Az7:+>?@@@7 	,l+++9 	.n---y! 	.n---{# 	0.///>" 	20111#$ 	42333=! 	1/000#$ 	42333=! 	1/000&' 	75666#$ 	42333=! 	1/000,- 	867776? 	+k***<  	1/000>" 	20111./ 	:8999-z:::::r2   c                     | j         dk    rd S |                     d           | j        D ]\  }}}|                     |||           |                     d           d S )Nr   protectedRanges)r   r  r   _write_protected_ranger  r  s       r.   r=  z!Worksheet._write_protected_ranges  s{    $))F-...040E 	J 	J,J
H''
JIIII+,,,,,r2   c                     g }|r|                     d|f           |                     d|f           |                     d|f           |                     d|           d S )Nr  r  rg   protectedRanger  r%  )r(   ry  r  r  r  s        r.   rC  z Worksheet._write_protected_range  sw    
 	6z845557J/0006:.///,j99999r2   c                 l    | j         sd S | xj        dz  c_        |                     | j                   d S r  )r   r   _write_drawingr  s    r.   rK  zWorksheet._write_drawings  s=    | 	F!DN+++++r2   c                 `    dt          |          z   }d|fg}|                     d|           d S )Nr  r  r   r1  r%  )r(   r  r  r  s       r.   rH  zWorksheet._write_drawing  s:    s:&tn%
Iz22222r2   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r  r  legacyDrawing)r   r   r1  r%  r(   r  r  s      r.   rL  zWorksheet._write_legacy_drawing  s_    | 	F 	!s4>***tn%
OZ88888r2   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r  r  legacyDrawingHF)r   r   r1  r%  rM  s      r.   rM  z"Worksheet._write_legacy_drawing_hf  sa    " 	F 	!s4>***tn%
-z:::::r2   c                     | j         sd S | xj        dz  c_        dt          | j                  z   }d|fg}|                     d|           d S )Nr   r  r  picture)r   r   r1  r%  rM  s      r.   rN  zWorksheet._write_picture  s`    $ 	F 	!s4>***tn%
Iz22222r2   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ]}|                     |           |                     d           d S )Nr2  dataValidations)r   rE  r  _write_data_validationr  )r(   r   r2  r  
validations        r.   rB  z!Worksheet._write_data_validations  s    &K   	F&'
-z:::% 	4 	4J''
3333+,,,,,r2   c                 <   d}g }|d         D ]=}|dk    r|dz  }|\  }}}}||k    r||}}||k    r||}}|t          ||||          z  }>|                    d          r|d         }|d         dk    rF|                    d|d         f           |d         d	k    r|                    d
|d         f           d|v rB|d         dk    r|                    d           |d         dk    r|                    d           |d         r|                    d           |d         s|                    d           |d         r|                    d           |d         r|                    d           d|v r|                    d|d         f           d|v r|                    d|d         f           d|v r|                    d|d         f           d|v r|                    d|d         f           |                    d |f           |d         dk    r|                     d!|           d S |                     d!|           |                     |d"                    |d#         |                     |d#                    |                     d!           d S )$NrY   r  r!  rV  rP  r[  r8  rC  rb  r~  rQ  r   )
errorStylery  r  )rW  rz  rX  )
allowBlankr   rO  )showDropDownr   rS  )showInputMessager   rR  )showErrorMessager   rT  
errorTitlerY  rq  rU  promptTitlerZ  promptr  dataValidationr^  rM  )r   r  r  r%  r  _write_formula_1_write_formula_2r  )	r(   r  r  r  r  	row_firstrE  row_lastrF  s	            r.   rT  z Worksheet._write_data_validation'  s<   
 W% 	H 	HE{{9>6Y	8X 8##)19H8##)19HXiHhGGGEE;;}%% 	+M*E:&((vwz':;<<<z"i//!!:wz/B"CDDD7""|$))!!";<<<|$))!!"?@@@>" 	1/000z" 	31222<  	75666<  	75666G##|W]-CDEEEg%%w(@ABBBG##}gm.DEFFFg%%x)ABCCC7E*+++:&(( 0*===== 0*=== !!''"2333 y!-%%gi&8999./////r2   c                    t          |t                    r | j        | }d|z  }nK	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nz"%s"r  formula1)r7  r  r  r!  r'   r  r	  r  r(   r]  s     r.   r`  zWorksheet._write_formula_1t  s     gt$$ 
	2$dng.Gw&GG2g 2 2 2%%c** 2%nnS11G2
 	z733333s   7 4A.-A.c                     	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nr  formula2r!  r'   r  r	  r  rf  s     r.   ra  zWorksheet._write_formula_2  sv    	.'NNNN 	. 	. 	.!!#&& .!..--	.
 	z733333    4A	A	c                     t          | j                                                  }|sd S |D ]#}|                     || j        |                    $d S rU  )r  r   r  _write_conditional_formatting)r(   rf  
cond_ranges      r.   rA  z$Worksheet._write_conditional_formats  sn    )..0011 	F  	 	J..D-j9   	 	r2   c                     d|fg}|                      d|           |D ]}|                     |           |                     d           d S )Nr  conditionalFormatting)r  _write_cf_ruler  )r(   rm  r  r  params        r.   rl  z'Worksheet._write_conditional_formatting  sg    
+,
3Z@@@ 	' 	'E&&&&122222r2   c                    d|d         fg}d|v r%|d         |                     d|d         f           |                     d|d         f           |                    d          r|                     d           |d         dk    r|                     d|d	         f           |                     d
|           d|v r;d|v r7|                     |d                    |                     |d                    n|                     |d                    |                     d
           d S |d         dk    rt          j        d|d	                   r|                     d           t          j        d|d	                   r|                     d           t          j        d|d	                   rEt          j        d|d	                   }|                     d|                    d          f           |                     d
|           d S |d         dk    rwd	|v r!|d	         dk    r|                     d           d|v r|                     d           |d         pd}|                     d|f           |                     d
|           d S |d         dk    r|                     d
|           d S |d         dk    r|                     d
|           d S |d         d k    s$|d         d!k    s|d         d"k    s|d         d#k    r|                     d|d	         f           |                     d$|d         f           |                     d
|           |                     |d%                    |                     d
           d S |d         d&k    re|                     d&|d	         f           |                     d
|           |                     |d%                    |                     d
           d S |d         d'k    s$|d         d(k    s|d         d)k    s|d         d*k    rH|                     d
|           |                     |d%                    |                     d
           d S |d         d+k    rB|                     d
|           | 	                    |           |                     d
           d S |d         d,k    rl|                     d
|           | 
                    |           |                    d-          r|                     |           |                     d
           d S |d         d.k    rH|                     d
|           |                     |d	                    |                     d
           d S |d         d/k    rB|                     d
|           |                     |           |                     d
           d S d S )0Nr8  rN   dxfIdr  r  )
stopIfTruer   r  r~  rC  cfRulerN  rM  r^  r  below)r  r   rf  )equalAverager   z[123] std devz([123]) std devr0  r   r  rz  )rM  r   r  )r  r   r  rankr  r  r  r  r  r  r  r]  r  r  r  r  r  r  r  r  r  r  )r  r  r  _write_formula_elementr  r  rc  groupr%  _write_color_scale_write_data_bar_write_data_bar_ext_write_icon_set)r(   r  r  r  rx  s        r.   rp  zWorksheet._write_cf_rule  sa   vf~./
v&"2">wx(89::::vj'9:;;;::n%% 	1/000&>X%%z6*+=>???*555F""yF':':++F9,=>>>++F9,=>>>>++F7O<<<h'''''F^~--y&"455 7!!"5666y&"455 7!!"5666y&*<== >	"3VJ5GHH!!8U[[^^"<===*55555F^w&&V##z(:c(A(A!!.111f$$!!-000'?(bDvtn---*55555F^000*55555F^~--*55555 6Nn,,f~!222f~--f~++z6*+=>???vvg7888*555''y(9:::h'''''F^|++|VJ-?@AAA*555''y(9:::h''''' 6N...f~!444f~!111f~!444*555''y(9:::h'''''F^|++*555##F+++h'''''F^y((*555  (((zz,-- 1((000h'''''F^|++*555''z(:;;;h'''''F^y((*555  (((h''''' )(r2   c                     	 t          |           n:# t          $ r- |                    d          r|                    d          }Y nw xY w|                     d|           d S )Nr  r]  ri  rf  s     r.   ry  z Worksheet._write_formula_element  sv    	.'NNNN 	. 	. 	.!!#&& .!..--	.
 	y'22222rj  c                    |                      d           |                     |d         |d                    |d         "|                     |d         |d                    |                     |d         |d                    |                     d|d	                    |d
         |                     d|d
                    |                     d|d                    |                     d           d S )Nr  r  r  r  r  r  r  r  r  r  r  )r  _write_cfvor.  r  )r(   rq  s     r.   r{  zWorksheet._write_color_scale   s     	L)))z*E+,>???(U:.k0BCCCz*E+,>???%{!3444)eU;%7888%{!3444,'''''r2   c                 <   g }|                     d          r|                    d|d         f           |                     d          r|                    d|d         f           |                     d          r|                    d           |                     d|           |                     |d         |d	                    |                     |d
         |d                    |                     d|d                    |                     d           d S )Nr  	minLengthr  	maxLengthr  	showValuer   r  r  r  r  r  r  r  )r  r  r  r  r.  r  )r(   rq  r  s      r.   r|  zWorksheet._write_data_bar5  s#   
 99\"" 	B{E,,?@AAA99\"" 	B{E,,?@AAA99Z   	0.///Iz222z*E+,>???z*E+,>???%{!3444)$$$$$r2   c                 h   | j         dz   }t          | j                  dz   }d||fz  }||d<   | j                            |           |                     d           |                     d           |                     d|           |                     d           |                     d           d S )Nr   z{DA7ABA51-AAAA-BBBB-%04X-%012X}guidextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idext)rh   rE  r   r  r  
_write_extr  r  )r(   rq  worksheet_countdata_bar_countr  s        r.   r}  zWorksheet._write_data_bar_extL  s     *q.T011A50O^3TT f""5)))H%%%@AAAx...%   (#####r2   c                    g }|d         dk    rd|d         fg}|                     d          r|                    d           |                     d          r|                    d           |                     d|           t          |d                   D ]+}|                     |d	         |d
         |d                    ,|                     d           d S )Nr  r  r  r  r  r  )rP  r   r  r8  r^  rC  )r  r  r  reversedr  r  )r(   rq  r  icons       r.   r~  zWorksheet._write_icon_set^  s    
 "222$eL&9:;J99\"" 	0.///99_%% 	.n---Iz222 U7^,, 	L 	LDT&\4=$z:JKKKK)$$$$$r2   c                     d|fg}||                     d|f           |r|                     d           |                     d|           d S )Nr8  r  )gter   cfvorF  )r(   cf_typer  rC  r  s        r.   r  zWorksheet._write_cfvot  sd    w'(
?ucl+++ 	*j)))FJ/////r2   c                 <    ||fg}|                      d|           d S rC  r  rD  s       r.   r.  zWorksheet._write_color  s)    Um_
GZ00000r2   c                 .    | j         D ]} | j        |  d S rU  )rz   _write_selection)r(   	selections     r.   ry  zWorksheet._write_selections  s0     	. 	.I!D!9---	. 	.r2   c                     g }|r|                     d|f           |r|                     d|f           |r|                     d|f           |                     d|           d S )Nr  
activeCellr  r  rF  )r(   r  r  r  r  s        r.   r  zWorksheet._write_selection  s    
 	.vtn--- 	;|[9::: 	0w.///K44444r2   c                 z    | j         }t          |          sd S |d         dk    r | j        |  d S  | j        |  d S )Nr?  r  )r   rE  _write_split_panes_write_freeze_panes)r(   r   s     r.   rx  zWorksheet._write_panes  sU    
5zz 	F8q==#D#U++++$D$e,,,,r2   c                 @   g }|}|}t          ||          }	d}
d}d}d}| j        r| j        d         \  }}}g | _        |r||rzd}
t          |d          }t          d|          }| j                            d||g           | j                            d||g           | j                            d||g           nA|r d}
| j                            d||g           nd}
| j                            d||g           |dk    rd}n|dk    rd}nd	}|r|                    d
|f           |r|                    d|f           |                    d|	f           |                    d|
f           |                    d|f           |                     d|           d S )NrY   r   bottomRighttopRight
bottomLeftfrozenr   frozenSplitr7   xSplitySplitrq  
activePanestater  )r   rz   r  r%  )r(   r%  rF   r  r  r  r  y_splitx_splitr~   r   r  r  r  rH   row_cellcol_cells                    r.   r  zWorksheet._write_freeze_panes  s   
)'8<< ? 	!&*oa&8#QU DO  	G3 	G'K(a00H(C00HO""J(#CDDDO""L(H#EFFFO""M;#FGGGG 	G$KO""JU#CDDDD 'KO""L+u#EFFF >>EE!^^!EEE 	3x1222 	3x1222=-8999<56667E*+++FJ/////r2   c                    g }d}d}d}	d}
|}|}| j         r| j         d         \  }}	}
g | _         d}|rt          d|z  dz             }|r|                     |          }||k    rB||k    r<t          d|dz
  dz  dz  z             }t          d|dz
  dz  d	z  d
z  dz  z             }t          ||          }|s|}	|}
|r||rzd}t          |d          }t          d|          }| j                             d||g           | j                             d||g           | j                             d|	|
g           nA|r d}| j                             d|	|
g           nd}| j                             d|	|
g           |r|                    dd|z  f           |r|                    dd|z  f           |                    d|f           |r|                    d|f           |                     d|           d S )Nr   rY   r   r`   i,  r$  r_     rZ   r?  rb   r  r  r  r  r|  r  rq  r  r  )rz   r&   _calculate_x_split_widthr   r  r%  )r(   r%  rF   r  r  r  r  has_selectionr   r  r  r  r  rH   r~   r  r  s                    r.   r  zWorksheet._write_split_panes  s   
 ? 	&*oa&8#QU DOM  	."w,,--G 	=33G<<G
 c>>h#oo#3" 4r 99::G3'C-2!5!9A!=!BBCCH)'8<<  	"'K!E  	G3 	G'K(!44H(H55HO""J(#CDDDO""L(H#EFFFO""M;#FGGGG 	G$KO""JU#CDDDD 'KO""L+u#EFFF  	=x7):;<<< 	=x7):;<<<=-8999 	;|[9:::FJ/////r2   c                     d}d}|dk     rt          |||z   z  dz             }nt          ||z  dz             |z   }|dz  dz  }|dz  }|dz   }|S )	Nr  r  r   r$  rZ   r?  r`   r  )r&   )r(   r  r  r  r  pointstwipss          r.   r  z"Worksheet._calculate_x_split_width%  s}      199/G";<sBCCFF03677'AF !a  r2   c                     | j         }t          |          }|sd S d|fg}|                     d|           |D ],}| xj        dz  c_        |                     | j                   -|                     d           d S )Nr2  
tablePartsr   )r   rE  r  r   _write_table_partr  )r(   r   r2  r  rH   s        r.   rO  zWorksheet._write_table_parts<  s    F  	F 

 	L*555 	3 	3ANNaNN""4>2222,'''''r2   c                 `    dt          |          z   }d|fg}|                     d|           d S )Nr  r  	tablePartrJ  rM  s      r.   r  zWorksheet._write_table_partU  sF     s4yy  

 	K44444r2   c                    t          | j                  }t          | j                  }|s|sd S |                     d           |r|                                  |r|                                  |                     d           d S )Nr  )rE  r   r   r  _write_ext_list_data_bars_write_ext_list_sparklinesr  )r(   has_data_barshas_sparkliness      r.   rP  zWorksheet._write_ext_listc  s    D/00T_-- 	^ 	F 	H%%% 	-**,,, 	.++---(#####r2   c                     |                      d           |                     d           | j        D ]}|                     |           |                     d           |                     d           d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsr  )r  r  r   "_write_conditional_formatting_2010r  )r(   r  s     r.   r  z#Worksheet._write_ext_list_data_barsv  s    @AAA8999 + 	> 	>H33H====6777%     r2   c                    d}d|fg}|                      d|           |                     |           |                     |           |                     |d         |d                    |                     |d         |d                    |d         s|                     |d	                    |d
         s|                     |d                    |d         s#|d         s|                     |d                    |d         dk    r|                     |d                    |                     d           |                     d           | 	                    d|d                    |                     d           d S )N3http://schemas.microsoft.com/office/excel/2006/mainxmlns:xmzx14:conditionalFormattingr  r  r  r  r  r  r  r  r  r  r  r[  r  x14:dataBar
x14:cfRulexm:sqrefrw  )
r  _write_x14_cf_rule_write_x14_data_bar_write_x14_cfvo_write_x14_border_color_write_x14_negative_fill_color _write_x14_negative_border_color_write_x14_axis_colorr  r  )r(   r  xmlns_xmr  s       r.   r  z,Worksheet._write_conditional_formatting_2010  s   H!8,-
7DDD 	))) 	  *** 	Xn5x7LMMMXn5x7LMMM( 	G((2D)EFFF 12 	P//9M0NOOO )	Y=>	Y 11(;V2WXXX '(F22&&x0@'ABBB-(((,''' 	z8G+<===566666r2   c                 V    d}|d         }d|fd|fg}|                      d|           d S )Nr  r  r8  r%  r  r  )r(   r  	rule_typer  r  s        r.   r  zWorksheet._write_x14_cf_rule  s@    	y)D$<8
L*55555r2   c                 J   d}d}d|fd|fg}|d         s|                     d           |d         r|                     d           |d	         d
k    r|                     d           |d	         dk    r|                     d           |d         r|                     d           |d         s|d         s|                     d           |d         dk    r|                     d           |d         dk    r|                     d           |                     d|           d S )Nr   r^   r  r  r  )borderr   r  )gradientr   r  r  )r  leftToRightr  )r  rk  r  )negativeBarColorSameAsPositiver   r  )$negativeBarBorderColorSameAsPositiver   r  middle)axisPositionr  r[  )r  r[  r  )r  r  )r(   r  r  r  r  s        r.   r  zWorksheet._write_x14_data_bar  su   

 *%*%


 ( 	-m,,,K  	/o...O$..:;;;O$//:;;;-. 	ECDDD )	K=>	K IJJJ'(H448999'(F226777M:66666r2   c                     d|fg}|dv r|                      d|           d S |                     d|           |                     d|           |                     d           d S )Nr8  )r  r  r  r  zx14:cfvoxm:f)r%  r  r  r  )r(   r  r^  r  s       r.   r  zWorksheet._write_x14_cfvo  s}    y)*
<<<
J77777
J777""65111j)))))r2   c                 <    d|fg}|                      d|           d S )Nr  zx14:borderColorr  r(   r  r  s      r.   r  z!Worksheet._write_x14_border_color  s*    cl^
-z:::::r2   c                 <    d|fg}|                      d|           d S )Nr  zx14:negativeFillColorr  r  s      r.   r  z(Worksheet._write_x14_negative_fill_color  s*    cl^
3Z@@@@@r2   c                 <    d|fg}|                      d|           d S )Nr  zx14:negativeBorderColorr  r  s      r.   r  z*Worksheet._write_x14_negative_border_color  s*    cl^
5zBBBBBr2   c                 <    d|fg}|                      d|           d S )Nr  zx14:axisColorr  r  s      r.   r  zWorksheet._write_x14_axis_color  s)    cl^
OZ88888r2   c                 F   |                      d           |                                  t          | j                  D ]7}|                     |           |                     |d                    |                     |d                    |                                  |                     |d                    | 	                    |d                    | 
                    |d                    |                     |d                    |                     |d                    |d	         r|                     d
|d	                    |                     |           |                     d           9|                     d           |                     d           d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}r^  r`  r_  rZ  rW  rU  rS  rR  r  x14:sparklineGroupx14:sparklineGroupsr  )r  _write_sparkline_groupsr  r   _write_sparkline_group_write_color_series_write_color_negative_write_color_axis_write_color_markers_write_color_first_write_color_last_write_color_high_write_color_lowr  _write_sparklinesr  )r(   rt  s     r.   r  z$Worksheet._write_ext_list_sparklines  s   @AAA 	$$&&& "$/22 !	4 !	4I''	222 $$Y~%>??? &&y1A'BCCC ""$$$ %%i&@AAA ##Im$<=== ""9\#:;;; ""9\#:;;; !!)K"8999% G&&vy/EFFF""9---23333/000%     r2   c                 n   |                      d           t          |d                   D ]t}|d         |         }|d         |         }|                      d           |                     d|           |                     d|           |                     d           u|                     d           d S )Nzx14:sparklinesr2  rf  rL  zx14:sparkliner  r  )r  rw  r  r  )r(   rt  rF  rz  rQ  s        r.   r  zWorksheet._write_sparklines-   s     	,---y)** 	/ 	/A#H-a0K -a0H000""6;777"":x888o....*+++++r2   c                 P    d}|dz   }d|fd|fg}|                      d|           d S )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14urir  r  )r(   r  r\  	xmlns_x14r  s        r.   r  zWorksheet._write_ext>   sH    788	 )$CL


 	E:.....r2   c                 @    d}d|fg}|                      d|           d S )Nr  r  r  r  )r(   r  r  s      r.   r  z!Worksheet._write_sparkline_groupsJ   s1    H!8,-
1:>>>>>r2   c                 |   |                     d          }g }|                     d          4|d         dk    rd|d<   n"|                    d|d         f           d|d<   |                     d          4|d         dk    rd|d<   n"|                    d	|d         f           d|d<   |d
         dk    r|                    d
|d
         f           |                     d          r|                    d|d         f           |                     d          r|                    d           |r|                    d|f           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d           |                     d          r|                    d            |                     d          r|                    d!|d         f           |                     d          r|                    d"|d         f           |                     d#          r|                    d$           |                     d%|           d S )&Nrn  r  rz  cust_max	manualMaxr_  r  cust_min	manualMinr8  rb  rN  
lineWeightrR  )dateAxisr   displayEmptyCellsAsrO  )rO  r   rh  )rh  r   ri  )ri  r   rk  )rk  r   rl  )rl  r   rj  )rj  r   rM  )displayXAxisr   r{   )displayHiddenr   minAxisTypemaxAxisTyperP  rj  r  )r  r  r  )r(   r  rn  r  s       r.   r  z Worksheet._write_sparkline_groupR   s]   0 G$$
;;u)u~((&-
##!!;"?@@@&.
#;;u)u~((&-
##!!;"?@@@&.
# 6?f$$vwv7888;;x   	A|WX->?@@@;;{## 	/o... 	>4e<===;;y!! 	.n---;;v 	+k***;;u 	*j)));;w 	,l+++;;v 	+k***;;z"" 	/o...;;v 	31222;;x   	42333;;z"" 	D}gj.ABCCC;;z"" 	D}gj.ABCCC;;y!! 	201110*=====r2   c                 b   g }|                     d          r|                    d|d         f           |                     d          r|                    d|d         f           |                     d          r|                    d|d         f           |                     ||           d S )Nr  r  tint)r  r  r%  )r(   elementr  r  s       r.   _write_spark_colorzWorksheet._write_spark_color   s    
99U 	5ueEl344499W 	9wg788899V 	7vuV}5666GZ00000r2   c                 2    |                      d|           d S )Nzx14:colorSeriesr  r  s     r.   r  zWorksheet._write_color_series   s     1599999r2   c                 2    |                      d|           d S )Nzx14:colorNegativer  r  s     r.   r  zWorksheet._write_color_negative   s     3U;;;;;r2   c                 6    |                      dddi           d S )Nzx14:colorAxisr  FF000000r  r  s    r.   r  zWorksheet._write_color_axis   s#    %1DEEEEEr2   c                 2    |                      d|           d S )Nzx14:colorMarkersr  r  s     r.   r  zWorksheet._write_color_markers   s     2E:::::r2   c                 2    |                      d|           d S )Nzx14:colorFirstr  r  s     r.   r  zWorksheet._write_color_first   s     0%88888r2   c                 2    |                      d|           d S )Nzx14:colorLastr  r  s     r.   r  zWorksheet._write_color_last       77777r2   c                 2    |                      d|           d S )Nzx14:colorHighr  r  s     r.   r  zWorksheet._write_color_high   r
  r2   c                 2    |                      d|           d S )Nzx14:colorLowr  r  s     r.   r  zWorksheet._write_color_low   s    66666r2   c                 :    ddg}|                      d|           d S )N)fontId0)r8  noConversion
phoneticPrr  rz  s     r.   r>  zWorksheet._write_phonetic_pr   s/     $


 	L*55555r2   c                    | j         sd S |                     d           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d	|           | j                             d
          r#| j         d
         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           | j                             d          r#| j         d         }|                     d|           |                     d           d S )NignoredErrorsr   numberStoredAsTextr  	evalErrorr  r]  r  formulaRanger  unlockedFormular  emptyCellReferencer  listDataValidationr  calculatedColumnr  twoDigitTextYear)r  r  r  _write_ignored_errorr  )r(   ignored_ranges     r.   rJ  zWorksheet._write_ignored_errors   sy   " 	FO,,,""#:;; 	K /0GHM%%&:MJJJ""<00 	B /=M%%k=AAA""#455 	@ /0ABM%%i???""?33 	E /@M%%nmDDD""#566 	H /0BCM%%&7GGG""#9:: 	K /0FGM%%&:MJJJ""#9:: 	K /0FGM%%&:MJJJ""#677 	I /0CDM%%&8-HHH""#899 	I /0EFM%%&8-HHH/*****r2   c                 B    d|f|dfg}|                      d|           d S )Nr  r   ignoredErrorr  )r(   r8  r  r  s       r.   r  zWorksheet._write_ignored_error!  s8     m$1I


 	NJ77777r2   rU  )Nr   )F)Nr   ri  )NNN)NF)r   r   )r   r   r   r   )NNr   )NN)r^   )rY   N)r   )r[   r[   r\   r\   )rY   NN)FF)r   )r  
__module____qualname____doc__rf   r'  r1   r,  r*  r?  r#  rN  r"  rX  r  r_  r  r?   rn  rd  rf  re  r{  r6  r  r0  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rJ   r	  r  r&  r*  r-  r0  r6  r;  rG  rB  r  r  rJ  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r
  r  r  r  r  r!  r0  rR  rD  r}  r8  rh  r@  rA  rr  r  r  r  r  r  r  r  r  r  r  r  r,  r  r  r  r  r  r8  rs  r  r  r  r  r  r  r+  r-  r2  r1  rI  rK  r  r4  r6  r7  re  r8  r9  r  r:  r;  rE  rF  rD  rG  r  r  r  rG  r  r  r  r  r  r  r5  r  r  r  rH  rI  r  r@  r  rC  r  r  r?  r  r   r&  r+  r'  r1  r<  r=  rC  rK  rH  rL  rM  rN  rB  rT  r`  ra  rA  rl  rp  ry  r{  r|  r}  r~  r  r.  ry  r  rx  r  r  r  rO  r  rP  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  rJ  r  __classcell__)r  s   @r.   rV   rV      s        W) W) W) W) W)t#7 #7 #7J , , ,&NL NL NL` A A A A&   6 A A A A$   8 ? ? ? ?&   $ J J J J*   @  *
 *
 *
 *
X  ) ) ) )Zr r r rz 4 4 4 4l A A A A$   * C C C C$   6 H H H H*i i i iV 8 8 8.w w wr7 7 7    ,    , : : : :x ; ; ; ;z 1 1 1 1f D D D DL ! ! ! !F" " ") ) ) )&& & &  5 5 5$  "      4 4 4$ IM> > > >@ IMQ Q Q Q0PN PN PNd; ; ; ;z? ? ? ?(( ( ( (. JNI I I IV 7 7 7@: : :x( ( (T @ @ @ @D @D~ ~ ~ ~@ I I I IV
 } } } }~  7  7  7D 9 9 9 9$ GH$ $ $ $0 > > > >, 6 6 6 6"   $" " "  ) ) )1( 1( 1( 1(fI I I I>    F' ' '' ' '      + + +    $ $ $ $&K' K' K' K'ZK' K' K' K'Z7 7 7 74 7 7 7 74& & & &0* * *$ $ $   @' ' '' ' '$% % %' ' ',' ' '    > > > >"( ( ( (^*' *' *'Xb b bH   BX X X& & &P  4  BA A A<V! V! V!p  "uJ uJ uJn]W ]W ]W~
 
 
&
 
 
:
 :
 :
x V  V  VH^V ^V ^V@   <   *
 
 
  G G GRG G GR1 1 1f
 
 
  2  :G G G3 3 3j    (
( 
( 
( 
(, , , ,4' 4' 4'l5 5 5= = =9 9 9$ $ $+ + +' ' '> > > >L5 5 5(!9 !9 !9F( ( (99 99 99v9 9 90&" &" &"PB/ B/ B/H+ + ++ + +07 7 7L5 L5 L5\8 8 82< < <(9 9 99 9 9&Q &Q &QP# # # #J- - -^1= 1= 1= 1=f@ @ @ @t# t# t#l+ + +9 9 97 7 787 7 7	4 	4 	45 5 5$' ' '*' ' '*/ / /( ( ($5 5 5L( L( L(^ FJ5 5 5 5& >B5 5 5 5: : :"G G G"* * *) ) )(2 2 2/ / /.8 8 86.; .; .;`
- 
- 
-
: 
: 
:, , ,3 3 39 9 9; ; ;3 3 3- - -$K0 K0 K0Z4 4 4"4 4 4
 
 
3 3 3j( j( j(X3 3 3( ( (*% % %.$ $ $$% % %,
0 
0 
0 
01 1 1. . .
5 5 5
- 
- 
-60 60 60pE0 E0 E0N  .( ( (25 5 5$ $ $&! ! !+7 +7 +7Z6 6 6%7 %7 %7N	* 	* 	*; ; ;
A A A
C C C
9 9 9
,! ,! ,!\, , ,"
/ 
/ 
/? ? ?W> W> W>r1 1 1: : :< < <F F F; ; ;9 9 98 8 88 8 87 7 76 6 6++ ++ ++Z8 8 8 8 8 8 8r2   rV   )>r2  rR  r  r  r*  collectionsr   r   r]  r   	fractionsr   	functoolsr   ior	   r
   r   warningsr   rY   r   rN   r   r   r   r  r   r   utilityr   r   r   r   r   r   r   r   r   r   r   r   r    
exceptionsr!   r"   rk  VERBOSErb  r1   r?   rJ   rH  rT  rZ  r  rg  r~  rv  r  r  rV   rD   r2   r.   <module>r,     s     				 				  # # # # # # " " " " " "                                                                               & & & & & & + + + + + + & & & & & & # # # # # #             # # # # # # ( ( ( ( ( ( ' ' ' ' ' ' / / / / / / ) ) ) ) ) ) ( ( ( ( ( ( $ $ $ $ $ $ * * * * * * ( ( ( ( ( ( bj< J?    P  0  @  @ Jx)9:: Jx)9:: :gx00 Z	+<== Z	+CDD  j-=>> !z:   $L2NOO :g'=>> UA8 UA8 UA8 UA8 UA8	# UA8 UA8 UA8 UA8 UA8r2   