o
    5c*                     @  s   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  mZ d dlmZmZmZ d dlmZ d dlmZmZ erMd dlmZ d d	lmZ G d
d deZdS )    )annotations)defaultdictN)TYPE_CHECKINGAnyDefaultDictTuplecast)FilePathStorageOptionsWriteExcelBuffer)ExcelWriter)combine_kwargsvalidate_freeze_panesOpenDocumentSpreadsheet)	ExcelCellc                      s   e Zd ZdZdZ							d6d7 fddZedd Zejd8ddZed9ddZ	d:ddZ
				d;d<d(d)Zd=d+d,Zd>d.d/Zd?d1d2Zd@d4d5Z  ZS )A	ODSWriterodf)z.odsNwpath)FilePath | WriteExcelBuffer | ExcelWriterengine
str | Nonedate_formatmodestrstorage_optionsr
   if_sheet_existsengine_kwargsdict[str, Any] | NonereturnNonec	                   sV   ddl m}
 |dkrtdt j|||||d t||	}|
di || _i | _d S )Nr   r   az&Append mode is not supported with odf!)r   r   r   r    )odf.opendocumentr   
ValueErrorsuper__init__r   _book_style_dict)selfr   r   r   datetime_formatr   r   r   r   kwargsr   	__class__r#   P/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/io/excel/_odswriter.pyr'   $   s   

zODSWriter.__init__c                 C  s   | j S )z
        Book instance of class odf.opendocument.OpenDocumentSpreadsheet.

        This attribute can be used to access engine-specific features.
        )r(   )r*   r#   r#   r/   bookB   s   zODSWriter.bookotherr   c                 C  s   |    || _dS )zO
        Set book instance. Class type will depend on the engine used.
        N)_deprecate_set_bookr(   )r*   r1   r#   r#   r/   r0   K   s   
dict[str, Any]c                 C  s&   ddl m} dd | j|D }|S )z(Mapping of sheet names to sheet objects.r   )Tablec                 S  s   i | ]}| d |qS name)getAttribute).0sheetr#   r#   r/   
<dictcomp>X   s    
z$ODSWriter.sheets.<locals>.<dictcomp>)	odf.tabler4   r0   getElementsByType)r*   r4   resultr#   r#   r/   sheetsS   s
   
zODSWriter.sheetsc                 C  s2   | j  D ]	}| jj| q| j| jj dS )z(
        Save workbook to disk.
        N)r>   valuesr0   spreadsheet
addElementsave_handleshandle)r*   r9   r#   r#   r/   _save^   s   zODSWriter._saver   cellslist[ExcelCell]
sheet_namestartrowintstartcolfreeze_panestuple[int, int] | Nonec                 C  s  ddl m}m}m} ddlm}	 | |}|dusJ || jv r&| j| }
n||d}
| jj	
|
 t|rEttttf |}| || t|D ]}|

|  qIt|}tt}t|dd dD ]X}||j syt|D ]}||j 
|  qmt|j||j  D ]}||j 
|  ||j  d	7  < q| |\}}||j 
| ||j  d	7  < |	|d
}|
| qbt|dkrtt| d	 D ]}|

||  qdS dS )z1
        Write the frame cells using odf
        r   )r4   	TableCellTableRow)PNr5   c                 S  s   | j | jfS )N)rowcol)cellr#   r#   r/   <lambda>   s    z(ODSWriter._write_cells.<locals>.<lambda>)key   )text)r;   r4   rN   rO   odf.textrP   _get_sheet_namer>   r0   r@   rA   r   r   r   rJ   _create_freeze_panesranger   sortedrQ   rR   _make_table_celllenmaxkeys)r*   rF   rH   rI   rK   rL   r4   rN   rO   rP   wks_rows	col_countrS   pvaluetcprow_nrr#   r#   r/   _write_cellsf   s@   




zODSWriter._write_cellsdict[str, int | str]c                 C  sR   i }|  |j}|dur||d< |jdur'|jdur'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	stylenamerV   numberrowsspannednumbercolumnsspanned)_process_stylestyle
mergestartmergeendr_   )r*   rS   
attributes
style_namer#   r#   r/   _make_table_cell_attributes   s   
z%ODSWriter._make_table_cell_attributestuple[object, Any]c           	      C  s   ddl m} | |}| |j\}}| }}t|tr(t| }t|	 }t|t
j
r@| }|d}||d||dfS t|t
jrc|j d|jdd|jd}|d}||d||dfS td	td
td
tdi}|||t| ||d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   )rN   z%cdate)	valuetype	datevaluerr   -02dz%xstringfloatboolean)rw   valuerr   )r;   rN   rt   _value_with_fmtval
isinstanceboolr   lowerupperdatetime	isoformatstrftimerv   yearmonthdayrJ   r|   type)	r*   rS   rN   rr   r   fmtre   r~   class_to_cell_typer#   r#   r/   r]      s>   




zODSWriter._make_table_cellro   c                 C  s>  ddl m}m}m}m} |du rdS t|}|| jv r!| j| S dt| jd  }|| j|< ||dd}d|v rL|d }	|		d	d
rL|
|d	d d|v rp|d }
|
 D ]\}}ddi}|
|d| || id qXd|v r|d }|	d}|r|
||d |	d}|r|
||d | 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pdrV   z
table-cell)r6   familyfontboldF)
fontweightbordersthinz0.75pt solid #000000border)rr   	alignment
horizontal)	textalignvertical)verticalalign)	odf.styler   r   r   r   jsondumpsr)   r^   getrA   itemsr0   styles)r*   ro   r   r   r   r   	style_keyr6   	odf_styler   r   side	thicknessthickness_translationr   r   r   r#   r#   r/   rn      s@   





zODSWriter._process_styletuple[int, int]c                 C  s  ddl m}m}m}m}m} |dd}| jj| |dd}	||	 | }
|	|
 |dd}|
| ||d}
||
 |
|ddd	d
 |
|ddd	d
 |
|ddt	|d d
 |
|ddt	|d d
 |
|ddt	|d d
 |
|ddt	|d 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-settingsr5   ViewsTablesHorizontalSplitModeshort2)r6   r   rW   VerticalSplitModeHorizontalSplitPositionrJ   VerticalSplitPositionrV   PositionRightPositionBottomN)

odf.configr   r   r   r   r   r0   settingsrA   r   )r*   rH   rL   r   r   r   r   r   config_item_setconfig_item_map_indexedconfig_item_map_entryconfig_item_map_namedr#   r#   r/   rZ   "  sB   







zODSWriter._create_freeze_panes)NNNr   NNN)r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r    r!   )r1   r   r    r!   )r    r3   )r    r!   )Nr   r   N)rF   rG   rH   r   rI   rJ   rK   rJ   rL   rM   r    r!   )r    rj   )r    ru   )ro   r3   r    r   )rH   r   rL   r   r    r!   )__name__
__module____qualname___engine_supported_extensionsr'   propertyr0   setterr>   rE   ri   rt   r]   rn   rZ   __classcell__r#   r#   r-   r/   r       s6    



;

74r   )
__future__r   collectionsr   r   typingr   r   r   r   r   pandas._libs.json_libsr   pandas._typingr	   r
   r   pandas.io.excel._baser   pandas.io.excel._utilr   r   r$   r   pandas.io.formats.excelr   r   r#   r#   r#   r/   <module>   s    