
    o[we*                        d dl mZ d dlmZ d dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ erd dlmZmZmZmZ d d	lmZ  G d
 de          ZdS )    )annotations)defaultdictN)TYPE_CHECKINGAnyDefaultDictcastoverload)json)ExcelWriter)combine_kwargsvalidate_freeze_panes)ExcelWriterIfSheetExistsFilePathStorageOptionsWriteExcelBuffer)	ExcelCellc                       e Zd ZdZdZ	 	 	 	 	 	 	 d-d. fdZed             Zed/d            Zd0dZ		 	 	 	 d1d2d"Z
d3d$Zd4d&Zed5d(            Zed6d)            Zd7d*Zd8d,Z xZS )9	ODSWriterodf)z.odsNwpath)FilePath | WriteExcelBuffer | ExcelWriterengine
str | Nonedate_formatmodestrstorage_optionsStorageOptions | Noneif_sheet_existsExcelWriterIfSheetExists | Noneengine_kwargsdict[str, Any] | NonereturnNonec	                    ddl m}
 |dk    rt          d          t          ||	          } |
di || _        t                                          |||||           i | _        d S )Nr   )OpenDocumentSpreadsheetaz&Append mode is not supported with odf!)r   r   r    r"    )odf.opendocumentr'   
ValueErrorr   _booksuper__init___style_dict)selfr   r   r   datetime_formatr   r   r    r"   kwargsr'   	__class__s              :lib/python3.11/site-packages/pandas/io/excel/_odswriter.pyr.   zODSWriter.__init__$   s     	=<<<<<3;;EFFF&}f==,,==}==
++' 	 	
 	
 	
 ,.    c                    | j         S )z
        Book instance of class odf.opendocument.OpenDocumentSpreadsheet.

        This attribute can be used to access engine-specific features.
        )r,   )r0   s    r4   bookzODSWriter.bookB   s     zr5   dict[str, Any]c                Z    ddl m} d | j                            |          D             }|S )z(Mapping of sheet names to sheet objects.r   )Tablec                :    i | ]}|                     d           |S name)getAttribute).0sheets     r4   
<dictcomp>z$ODSWriter.sheets.<locals>.<dictcomp>P   s8     
 
 
 v&&
 
 
r5   )	odf.tabler:   r7   getElementsByType)r0   r:   results      r4   sheetszODSWriter.sheetsK   sK     	$#####
 
44U;;
 
 
 r5   c                    | j                                         D ]!}| j        j                            |           "| j                            | j        j                   dS )z(
        Save workbook to disk.
        N)rE   valuesr7   spreadsheet
addElementsave_handleshandle)r0   r@   s     r4   _savezODSWriter._saveV   s\     ['')) 	4 	4EI!,,U3333	t}+,,,,,r5   r   cellslist[ExcelCell]
sheet_namestartrowintstartcolfreeze_panestuple[int, int] | Nonec                <   ddl m}m}m} ddlm}	 |                     |          }|J || j        v r| j        |         }
n+ ||          }
| j        j	        
                    |
           t          |          r=t          t          t          t          f         |          }|                     ||           t!          |          D ]}|

                     |                        t#          |          }t#          t                    }t%          |d           D ]}||j                 s:t!          |          D ]*}||j                 
                     |                       +t!          |j        ||j                 z
            D ]?}||j                 
                     |                       ||j        xx         dz  cc<   @|                     |          \  }}||j                 
                    |           ||j        xx         dz  cc<    |	|	          }|
                    |           t-          |          dk    rOt!          t/          |                                          dz             D ]}|

                    ||                    dS dS )
z1
        Write the frame cells using odf
        r   )r:   	TableCellTableRow)PNr<   c                    | j         | j        fS N)rowcol)cells    r4   <lambda>z(ODSWriter._write_cells.<locals>.<lambda>   s    DHdh3G r5   )key   )text)rB   r:   rW   rX   odf.textrY   _get_sheet_namerE   r7   rH   rI   r   r   tuplerR   _create_freeze_panesranger   sortedr\   r]   _make_table_celllenmaxkeys)r0   rN   rP   rQ   rS   rT   r:   rW   rX   rY   wks_rows	col_countr^   pvaluetcprow_nrs                      r4   _write_cellszODSWriter._write_cells^   s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	

 	))*55
%%%$$+j)CC%Z(((CI!,,S111 .. 	@c3h>>L%%j,???x 	' 	'ANN88::&&&&'11!,S!1!1	5&G&GHHH 	 	DTX& ;x ; ;AN--iikk:::: 48i&99:: ) )TX))))++666$(###q(####..t44JFBN%%b)))dh1$vAMM! t99q==DIIKK 0 01 455 - -tF|,,,, =- -r5   dict[str, int | str]c                    i }|                      |j                  }|||d<   |j        )|j        "t	          d|j                  |d<   |j        |d<   |S )a*  Convert cell attributes to OpenDocument attributes

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        attributes : Dict[str, Union[int, str]]
            Dictionary with attributes and attribute values
        N	stylenamera   numberrowsspannednumbercolumnsspanned)_process_stylestyle
mergestartmergeendrk   )r0   r^   
attributes
style_names       r4   _make_table_cell_attributesz%ODSWriter._make_table_cell_attributes   sg     ,.
((44
!&0J{#?&4=+D.1!T_.E.EJ*+15J-.r5   tuple[object, Any]c                   ddl m} |                     |          }|                     |j                  \  }}|x}}t          |t                    rBt          |                                          }t          |          	                                }t          |t          j
                  r9|                                }|                    d          }| |d||          fS t          |t          j                  r@|j         d|j        dd|j        d}|                    d          }| |d||          fS t          d	t"          d
t$          d
t          di}| ||t'          |                   ||          fS )a  Convert cell data to an OpenDocument spreadsheet cell

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        pvalue, cell : Tuple[str, TableCell]
            Display value, Cell value
        r   )rW   z%cdate)	valuetype	datevaluer   -02dz%xstringfloatboolean)r   valuer   )rB   rW   r   _value_with_fmtval
isinstanceboolr   lowerupperdatetime	isoformatstrftimer   yearmonthdayrR   r   type)	r0   r^   rW   r   r   fmtrq   r   class_to_cell_types	            r4   ri   zODSWriter._make_table_cell   s    	('''''55d;;
''11Sc4   	&HHNN$$EXX^^%%Fc8,--  	MMOOE\\$''F	Fe
SSS  X]++ 	x??#)???#'???E\\$''F	Fe
SSS  XWwi	" 	0c;)   r5   r|   c                    d S r[   r)   r0   r|   s     r4   r{   zODSWriter._process_style       r5   c                    d S r[   r)   r   s     r4   r{   zODSWriter._process_style   r   r5   c                4   ddl m}m}m}m} |dS t          j        |          }|| j        v r| j        |         S dt          | j                  dz    }|| j        |<    ||d          }d|v r=|d         }	|		                    d	d
          r|
                     |d	                     d|v rP|d         }
|
                                D ]3\  }}ddi}|
                     |d| ||         i                     4d|v rt|d         }|	                    d          }|r|
                     ||                     |	                    d          }|r|
                     ||                     | j        j        
                    |           |S )a  Convert a style dictionary to a OpenDocument style sheet

        Parameters
        ----------
        style : Dict
            Style dictionary

        Returns
        -------
        style_key : str
            Unique style key for later reference in sheet
        r   )ParagraphPropertiesStyleTableCellPropertiesTextPropertiesNpdra   z
table-cell)r=   familyfontboldF)
fontweightbordersthinz0.75pt solid #000000border)r   	alignment
horizontal)	textalignvertical)verticalalign)	odf.styler   r   r   r   r
   ujson_dumpsr/   rj   getrI   itemsr7   styles)r0   r|   r   r   r   r   	style_keyr=   	odf_styler   r   side	thicknessthickness_translationr   r   r   s                    r4   r{   zODSWriter._process_style   s/   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 =4$U++	(((#I..-C())!+--&*#EtL999	U??=Dxx&& H$$^^v%F%F%FGGGI&G#*==??  i)/1G(H%$$''$3TOO5J95U#V     
 %k*I"|44J P$$%8%8:%N%N%NOOO }}Z00H R$$%8%8x%P%P%PQQQ	##I...r5   tuple[int, int]c           
        ddl m}m}m}m}m}  |d          }| j        j                            |            |d          }	|                    |	            |            }
|	                    |
            |d          }|
                    |            ||          }
|                    |
           |
                     |ddd	
                     |
                     |ddd	
                     |
                     |ddt          |d                   
                     |
                     |ddt          |d                   
                     |
                     |ddt          |d                   
                     |
                     |ddt          |d                   
                     dS )z
        Create freeze panes in the sheet.

        Parameters
        ----------
        sheet_name : str
            Name of the spreadsheet
        freeze_panes : tuple of (int, int)
            Freeze pane location x and y
        r   )
ConfigItemConfigItemMapEntryConfigItemMapIndexedConfigItemMapNamedConfigItemSetzooo:view-settingsr<   ViewsTablesHorizontalSplitModeshort2)r=   r   rb   VerticalSplitModeHorizontalSplitPositionrR   VerticalSplitPositionra   PositionRightPositionBottomN)

odf.configr   r   r   r   r   r7   settingsrI   r   )r0   rP   rT   r   r   r   r   r   config_item_setconfig_item_map_indexedconfig_item_map_entryconfig_item_map_nameds               r4   rf   zODSWriter._create_freeze_panes"  su   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 (--@AAA	%%o666"6"6G"D"D"D""#:;;; 2 2 4 4**+@AAA 2 2 A A A(()>??? 2 2
 C C C(()>???((J1cJJJ	
 	
 	
 	((J/gCHHH	
 	
 	
 	((J.U\RS_AUAU  	
 	
 	

 	((J,5s<PQ??S?S  	
 	
 	

 	((JO%c,q/>R>RSSS	
 	
 	
 	((J,5s<PQ??S?STTT	
 	
 	
 	
 	
r5   )NNNr   NNN)r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   )r$   r8   )r$   r%   )Nr   r   N)rN   rO   rP   r   rQ   rR   rS   rR   rT   rU   r$   r%   )r$   rv   )r$   r   )r|   r8   r$   r   )r|   r%   r$   r%   )r|   r#   r$   r   )rP   r   rT   r   r$   r%   )__name__
__module____qualname___engine_supported_extensionsr.   propertyr7   rE   rM   ru   r   ri   r	   r{   rf   __classcell__)r3   s   @r4   r   r       sm       G%
 ""&15;?/3. . . . . . .<   X    X- - - - "&/39- 9- 9- 9- 9-v   ,5 5 5 5n    X    X2 2 2 2h9
 9
 9
 9
 9
 9
 9
 9
r5   r   )
__future__r   collectionsr   r   typingr   r   r   r   r	   pandas._libsr
   pandas.io.excel._baser   pandas.io.excel._utilr   r   pandas._typingr   r   r   r   pandas.io.formats.excelr   r   r)   r5   r4   <module>r      s^   " " " " " " # # # # # #                     - - - - - -       
  2            211111{
 {
 {
 {
 {
 {
 {
 {
 {
 {
r5   