
    Pi(                         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       n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/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 ]g}d}g |j        D ]}t          |d          r|j        |v r|j        |k    r|                     |          }n| j	        }| 
                    |          }|| j	        k    r||z  }i                    | 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i|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TableRowqnamec              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   rP   r;   
childNodeshasattr_get_cell_valuer.   _get_column_repeatextendlen_get_row_repeatrange)r   sheetrI   rM   rN   rO   covered_cell_nametable_cell_name
cell_names
sheet_rows
empty_rowsmax_row_lenrG   	sheet_rowempty_cells
sheet_cellvaluecolumn_repeat
row_repeatrowrT   s                       @r!   get_sheet_datazODFReader.get_sheet_dataf   s{   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 -,..4#)+++'9
,,X66

.0# !	 !	IK02I'2 B B
:w// BJ4D
4R4R!'?:: $ 4 4Z @ @ $ 0$($;$;J$G$GM  000#}4!(($*:);k)IJJJ&'!((%=)@AAA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.namespacesro   r?   
attributesget)r   rk   ro   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   rn   znumber-columns-repeatedrp   rq   )r   cellro   s      r!   rY   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floatrh   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )rr   ry   r*   npnanrs   rt   r.   r|   r?   _get_cell_string_valuepd	Timestampr   r   r   rE   rF   )r   rv   ry   	cell_type
cell_valuevalstamps          r!   rX   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crp    
r,   )odf.elementr   rr   r   
odf.officer   odf.textr   rP   rV   
isinstancer?   rs   rt   appendr   r*   stripjoin)r   rv   r   r   r   r   office_annotationtext_srh   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*   rR   )rI   rJ   r   rK   )r   r?   )r   rw   )__name__
__module____qualname__r   propertyr&   r)   r.   r=   rB   rH   rl   r\   rY   rX   r   __classcell__)r    s   @r!   r   r      s^       
 26%)	
 
 
 
 
 
 
0    X
9 9 9 9    X 8 8 8 X8   4 4 4 4 59> > > > >@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Z Z Z Z Z/ Z Z 65Z Z Zr"   