o
    Û­jF   ã                   @  s¶   d dl mZ d dlmZmZ d dlZd dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ erHd d	lmZ d d
lmZ eed d�G dd„ ded ƒƒZdS )é    )Úannotations)ÚTYPE_CHECKINGÚcastN)ÚFilePathÚ
ReadBufferÚScalarÚStorageOptions)Úimport_optional_dependency)Údoc)Ú_shared_docs)ÚBaseExcelReader©ÚOpenDocument)ÚNaTTypeÚstorage_options)r   c                      s¢   e Zd Z		d-d.‡ fd
d„Zed/dd„ƒZd0dd„Zed1dd„ƒZed2dd„ƒZd3dd„Z	d4dd„Z
	d5d6d"d#„Zd7d$d%„Zd7d&d'„Zd8d)d*„Zd1d+d,„Z‡  ZS )9Ú	ODFReaderNÚfilepath_or_bufferúFilePath | ReadBuffer[bytes]r   úStorageOptions | NoneÚengine_kwargsúdict | NoneÚreturnÚNonec                   s   t dƒ tƒ j|||d� dS )aF  
        Read tables out of OpenDocument formatted files.

        Parameters
        ----------
        filepath_or_buffer : str, path to be parsed or
            an open readable stream.
        {storage_options}
        engine_kwargs : dict, optional
            Arbitrary keyword arguments passed to excel engine.
        Úodf)r   r   N)r	   ÚsuperÚ__init__)Úselfr   r   r   ©Ú	__class__© úW/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/io/excel/_odfreader.pyr       s   
ýzODFReader.__init__útype[OpenDocument]c                 C  s   ddl m} |S )Nr   r   )Úodf.opendocumentr   )r   r   r   r   r    Ú_workbook_class8   s   zODFReader._workbook_classr   c                 C  s   ddl m} ||fi |¤ŽS )Nr   )Úload)r"   r$   )r   r   r   r$   r   r   r    Úload_workbook>   s   zODFReader.load_workbookÚstrc                 C  s   dS )z'Property for compat with other readers.Ú r   )r   r   r   r    Úempty_valueE   s   zODFReader.empty_valueú	list[str]c                 C  s&   ddl m} | j |¡}dd„ |D ƒS )z4Return a list of sheet names present in the documentr   ©ÚTablec                 S  s   g | ]}|  d ¡‘qS )Úname)ÚgetAttribute)Ú.0Útr   r   r    Ú
<listcomp>P   s    z)ODFReader.sheet_names.<locals>.<listcomp>)Ú	odf.tabler+   ÚbookÚgetElementsByType)r   r+   Útablesr   r   r    Úsheet_namesJ   s   zODFReader.sheet_namesÚindexÚintc                 C  s*   ddl m} |  |¡ | j |¡}|| S )Nr   r*   )r1   r+   Úraise_if_bad_sheet_by_indexr2   r3   )r   r6   r+   r4   r   r   r    Úget_sheet_by_indexR   s   
zODFReader.get_sheet_by_indexr,   c                 C  sZ   ddl m} |  |¡ | j |¡}|D ]}| d¡|kr |  S q|  ¡  td|› d�ƒ‚)Nr   r*   r,   zsheet z
 not found)r1   r+   Úraise_if_bad_sheet_by_namer2   r3   r-   ÚcloseÚ
ValueError)r   r,   r+   r4   Útabler   r   r    Úget_sheet_by_nameY   s   
ÿzODFReader.get_sheet_by_nameÚfile_rows_neededú
int | Noneúlist[list[Scalar | NaTType]]c                   s†  ddl m}m}m} |ƒ j}|ƒ j}||h‰ | |¡}d}	d}
g }|D ]…}‡ fdd„|jD ƒ}d}g ‰|D ]2}|j|krB|  |¡}n| j}|  	|¡}|| jkrT||7 }q5ˆ 
| jg| ¡ d}ˆ 
|g| ¡ q5|
tˆƒk rrtˆƒ}
|  |¡}tˆƒdkr‚|	|7 }	n| 
| jgg|	 ¡ d}	| 
‡fdd„t|ƒD ƒ¡ |dur¨t|ƒ|kr¨ nq#|D ]}t|ƒ|
k rÀ| 
| jg|
t|ƒ  ¡ q«|S )z9
        Parse an ODF Table into a list of lists
        r   )ÚCoveredTableCellÚ	TableCellÚTableRowc                   s$   g | ]}t |d ƒr|jˆ v r|‘qS )Úqname)ÚhasattrrE   )r.   Úx)Ú
cell_namesr   r    r0   }   s    ý
þz,ODFReader.get_sheet_data.<locals>.<listcomp>c                 3  s   � | ]}ˆ V  qd S ©Nr   )r.   Ú_)Ú	table_rowr   r    Ú	<genexpr>Ÿ   s   € z+ODFReader.get_sheet_data.<locals>.<genexpr>N)r1   rB   rC   rD   rE   r3   Ú
childNodesÚ_get_cell_valuer(   Ú_get_column_repeatÚextendÚlenÚ_get_row_repeatÚrange)r   Úsheetr?   rB   rC   rD   Úcovered_cell_nameÚtable_cell_nameÚ
sheet_rowsÚ
empty_rowsÚmax_row_lenr=   Ú	sheet_rowÚsheet_cellsÚempty_cellsÚ
sheet_cellÚvalueÚcolumn_repeatÚ
row_repeatÚrowr   )rH   rK   r    Úget_sheet_dataf   sP   

þ





€€zODFReader.get_sheet_datac                 C  ó"   ddl m} t|j |dfd¡ƒS )z«
        Return number of times this row was repeated
        Repeating an empty row appeared to be a common way
        of representing sparse rows in the table.
        r   ©ÚTABLENSznumber-rows-repeatedé   ©Úodf.namespacesre   r7   Ú
attributesÚget)r   ra   re   r   r   r    rR   ª   s   zODFReader._get_row_repeatc                 C  rc   )Nr   rd   znumber-columns-repeatedrf   rg   )r   Úcellre   r   r   r    rO   ´   s   zODFReader._get_column_repeatúScalar | NaTTypec                 C  s:  ddl m} t|ƒdkrtjS |j |df¡}|dkr%t|ƒdkr#dS dS |d u r,| jS |d	krFt|j |d
f¡ƒ}t	|ƒ}||krD|S |S |dkrV|j |d
f¡}t|ƒS |dkr_|  
|¡S |dkro|j |d
f¡}t|ƒS |dkr€|j |df¡}t |¡S |dkr’t t|ƒ¡}tt| ¡ ƒS |  ¡  td|› �ƒ‚)Nr   )ÚOFFICENSz#N/Az
value-typeÚbooleanÚTRUETFÚfloatr^   Ú
percentageÚstringÚcurrencyÚdatez
date-valueÚtimezUnrecognized type )rh   rm   r&   ÚnpÚnanri   rj   r(   rp   r7   Ú_get_cell_string_valueÚpdÚ	Timestampr   r   ru   r;   r<   )r   rk   rm   Ú	cell_typeÚ
cell_valueÚvalÚstampr   r   r    rN   ¹   s@   

zODFReader._get_cell_valuec                 C  sÆ   ddl m} ddlm} ddlm} ddlm} |ƒ j}|ƒ j}g }|j	D ]8}	t
|	|ƒrS|	j|krDt|	j |dfd¡ƒ}
| d|
 ¡ q%|	j|krJq%| |  |	¡¡ q%| t|	ƒ d	¡¡ q%d
 |¡S )z„
        Find and decode OpenDocument text:s tags that represent
        a run length encoded sequence of space characters.
        r   )ÚElement)ÚTEXTNS)Ú
Annotation)ÚSÚcrf   ú Ú
r'   )Úodf.elementr   rh   r€   Ú
odf.officer�   Úodf.textr‚   rE   rM   Ú
isinstancer7   ri   rj   Úappendrx   r&   ÚstripÚjoin)r   rk   r   r€   r�   r‚   Úoffice_annotationÚtext_sr^   ÚfragmentÚspacesr   r   r    rx   à   s"   




z ODFReader._get_cell_string_value)NN)r   r   r   r   r   r   r   r   )r   r!   )r   r   r   r   )r   r&   )r   r)   )r6   r7   )r,   r&   rI   )r?   r@   r   rA   )r   r7   )r   rl   )Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr#   r%   r(   r5   r9   r>   rb   rR   rO   rN   rx   Ú__classcell__r   r   r   r    r      s&    ü


ÿ
D


'r   r   )Ú
__future__r   Útypingr   r   Únumpyrv   Úpandas._typingr   r   r   r   Úpandas.compat._optionalr	   Úpandas.util._decoratorsr
   Úpandasry   Úpandas.core.shared_docsr   Úpandas.io.excel._baser   r"   r   Úpandas._libs.tslibs.nattyper   r   r   r   r   r    Ú<module>   s    