
    cMhF                         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rd d	lmZ d d
lmZ  eed                    G 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                       e Zd Z	 	 d!d" fd
Zed#d            Zd$dZed%d            Zed&d            Zd'dZ	d(dZ
	 d)d*dZd+dZd+dZd,dZd%d Z xZS )-	ODFReaderNfilepath_or_bufferFilePath | ReadBuffer[bytes]r   StorageOptions | Noneengine_kwargsdict | NonereturnNonec                n    t          d           t                                          |||           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__s       Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/io/excel/_odfreader.pyr   zODFReader.__init__    sG    " 	#5)))+' 	 	
 	
 	
 	
 	
    type[OpenDocument]c                    ddl m} |S )Nr   r   )odf.opendocumentr   )r   r   s     r!   _workbook_classzODFReader._workbook_class8   s    111111r"   r   c                     ddl m}  ||fi |S )Nr   )load)r%   r(   )r   r   r   r(   s       r!   load_workbookzODFReader.load_workbook>   s/     	*)))))t&88-888r"   strc                    dS )z'Property for compat with other readers.  )r   s    r!   empty_valuezODFReader.empty_valueE   s	     rr"   	list[str]c                Z    ddl m} | j                            |          }d |D             S )z4Return a list of sheet names present in the documentr   Tablec                8    g | ]}|                     d           S )name)getAttribute).0ts     r!   
<listcomp>z)ODFReader.sheet_names.<locals>.<listcomp>P   s$    7771v&&777r"   )	odf.tabler2   bookgetElementsByType)r   r2   tabless      r!   sheet_nameszODFReader.sheet_namesJ   s?     	$#####,,U33777777r"   indexintc                |    ddl m} |                     |           | j                            |          }||         S )Nr   r1   )r9   r2   raise_if_bad_sheet_by_indexr:   r;   )r   r>   r2   r<   s       r!   get_sheet_by_indexzODFReader.get_sheet_by_indexR   sG    ######((///,,U33e}r"   r4   c                    ddl m} |                     |           | j                            |          }|D ]}|                    d          |k    r|c S  |                                  t          d| d          )Nr   r1   r4   zsheet z
 not found)r9   r2   raise_if_bad_sheet_by_namer:   r;   r5   close
ValueError)r   r4   r2   r<   tables        r!   get_sheet_by_namezODFReader.get_sheet_by_nameY   s    ######''---,,U33 	 	E!!&))T11 2 	

2$222333r"   file_rows_needed
int | Nonelist[list[Scalar | NaTType]]c                   ddl m}m}m}  |            j        } |            j        }||h|                    |          }d}	d}
g }|D ]\}fd|j        D             }d}g |D ]}|j        |k    r|                     |          }n| j        }| 	                    |          }|| j        k    r||z  }P
                    | j        g|z             d}
                    |g|z             |
t                    k     rt                    }
|                     |          }t                    dk    r|	|z  }	nO|
                    | j        gg|	z             d}	|
                    fdt          |          D                        |t          |          |k    r n^|D ]C}t          |          |
k     r.|
                    | j        g|
t          |          z
  z             D|S )z9
        Parse an ODF Table into a list of lists
        r   )CoveredTableCell	TableCellTableRowc                F    g | ]}t          |d           r|j        v |S )qname)hasattrrQ   )r6   x
cell_namess     r!   r8   z,ODFReader.get_sheet_data.<locals>.<listcomp>}   sD       1g&& ,-7j+@+@ +@+@+@r"   c              3     K   | ]}V  d S Nr-   )r6   _	table_rows     r!   	<genexpr>z+ODFReader.get_sheet_data.<locals>.<genexpr>   s#      BB1YBBBBBBr"   )r9   rM   rN   rO   rQ   r;   
childNodes_get_cell_valuer.   _get_column_repeatextendlen_get_row_repeatrange)r   sheetrI   rM   rN   rO   covered_cell_nametable_cell_name
sheet_rows
empty_rowsmax_row_lenrG   	sheet_rowsheet_cellsempty_cells
sheet_cellvaluecolumn_repeat
row_repeatrowrT   rX   s                       @@r!   get_sheet_datazODFReader.get_sheet_dataf   s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 -,..4#)+++'9
,,X66

.0# %	 %	I   "-  K
 K02I) > >
#66 00<<EE ,E $ 7 7
 C C D,,,=0KK$$d&6%7+%EFFF"#K$$eW}%<====S^^++!)nn--i88J9~~""j(

 t/01J>???
BBBBj0A0ABBBBBB+E

>N0N0N  	J 	JC3xx+%%

D,-s3xx1GHIIIr"   c                b    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.namespacesrr   r?   
attributesget)r   rn   rr   s      r!   r_   zODFReader._get_row_repeat   s<     	+*****3>%%w0F&GKKLLLr"   c                b    ddl m} t          |j                            |dfd                    S )Nr   rq   znumber-columns-repeatedrs   rt   )r   cellrr   s      r!   r\   zODFReader._get_column_repeat   s:    ******4?&&1J'KQOOPPPr"   Scalar | NaTTypec                   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 || j        S |d	k    rBt          |j                            |d
f                    }t          |          }||k    r|S |S |dk    r+|j                            |d
f          }t          |          S |dk    r| 
                    |          S |dk    r+|j                            |d
f          }t          |          S |dk    r0|j                            |df          }t          j        |          S |dk    rHt          j        t          |                    }t          t          |                                          S |                                  t#          d|           )Nr   )OFFICENSz#N/Az
value-typebooleanTRUETFfloatrk   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )ru   r|   r*   npnanrv   rw   r.   r   r?   _get_cell_string_valuepd	Timestampr   r   r   rE   rF   )r   ry   r|   	cell_type
cell_valuevalstamps          r!   r[   zODFReader._get_cell_value   s   ++++++t996MO''<(@AA		!!4yyF""t5##'!!t22Hg3FGGHHJj//Cj  
,&&,,h-@AAJ$$$(""..t444*$$,,h-@AAJ$$$&  ,,h-EFFJ<
+++&  LT++E

---JJLLL=)==>>>r"   c                @   ddl m} ddlm} ddlm} ddlm}  |            j        } |            j        }g }|j	        D ]}	t          |	|          r|	j        |k    rCt          |	j                            |dfd                    }
|                    d|
z             `|	j        |k    rl|                    |                     |	                     |                    t!          |	                              d	                     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crs    
r,   )odf.elementr   ru   r   
odf.officer   odf.textr   rQ   rZ   
isinstancer?   rv   rw   appendr   r*   stripjoin)r   ry   r   r   r   r   office_annotationtext_srk   fragmentspacess              r!   r   z ODFReader._get_cell_string_value   sI   
 	('''''))))))))))))&JLL. 	8 	8H(G,, 8>V++ !4!8!8&#!J!JKKFLLv....^'888
 LL!<!<X!F!FGGGGS]]00667777wwu~~r"   )NN)r   r   r   r   r   r   r   r   )r   r#   )r   r   r   r   )r   r*   )r   r/   )r>   r?   )r4   r*   rV   )rI   rJ   r   rK   )r   r?   )r   rz   )__name__
__module____qualname__r   propertyr&   r)   r.   r=   rB   rH   ro   r_   r\   r[   r   __classcell__)r    s   @r!   r   r      sc       
 26%)	
 
 
 
 
 
 
0    X
9 9 9 9    X 8 8 8 X8   4 4 4 4 59B B B B BHM M M MQ Q Q Q
%? %? %? %?N       r"   r   r   )
__future__r   typingr   r   numpyr   pandas._typingr   r   r   r	   pandas.compat._optionalr
   pandas.util._decoratorsr   pandasr   pandas.core.shared_docsr   pandas.io.excel._baser   r%   r   pandas._libs.tslibs.nattyper   r   r-   r"   r!   <module>r      sn   " " " " " "       
                ? > > > > > ' ' ' ' ' '     0 0 0 0 0 0 1 1 1 1 1 1 4------333333 \"34555^ ^ ^ ^ ^/ ^ ^ 65^ ^ ^r"   