
    d.                        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  eed
                    G d de                      ZdS )    )annotations)TYPE_CHECKINGcastN)FilePath
ReadBufferScalarStorageOptions)import_optional_dependency)doc)_shared_docs)BaseExcelReader)NaTTypestorage_optionsr   c                       e Zd Z	 dd  fdZe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d"dZ xZS )*	ODFReaderNfilepath_or_bufferFilePath | ReadBuffer[bytes]r   r	   returnNonec                l    t          d           t                                          ||           dS )z
        Read tables out of OpenDocument formatted files.

        Parameters
        ----------
        filepath_or_buffer : str, path to be parsed or
            an open readable stream.
        {storage_options}
        odfr   N)r
   super__init__)selfr   r   	__class__s      V/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/io/excel/_odfreader.pyr   zODFReader.__init__   s7     	#5)))+_MMMMM    c                    ddl m} |S )Nr   )OpenDocument)odf.opendocumentr    )r   r    s     r   _workbook_classzODFReader._workbook_class/   s    111111r   c                $    ddl m}  ||          S )Nr   )load)r!   r$   )r   r   r$   s      r   load_workbookzODFReader.load_workbook5   s%    ))))))t&'''r   strc                    dS )z'Property for compat with other readers.  )r   s    r   empty_valuezODFReader.empty_value:   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>E   s$    7771v&&777r   )	odf.tabler.   bookgetElementsByType)r   r.   tabless      r   sheet_nameszODFReader.sheet_names?   s?     	$#####,,U33777777r   indexintc                |    ddl m} |                     |           | j                            |          }||         S )Nr   r-   )r5   r.   raise_if_bad_sheet_by_indexr6   r7   )r   r:   r.   r8   s       r   get_sheet_by_indexzODFReader.get_sheet_by_indexG   sG    ######((///,,U33e}r   r0   c                    ddl m} |                     |           | j                            |          }|D ]}|                    d          |k    r|c S  |                                  t          d| d          )Nr   r-   r0   zsheet z
 not found)r5   r.   raise_if_bad_sheet_by_namer6   r7   r1   close
ValueError)r   r0   r.   r8   tables        r   get_sheet_by_namezODFReader.get_sheet_by_nameN   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 ]W}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          |          }
|                     |          }|                     |          r|	|z  }	nH|
                    | j        gg|	z             d}	t          |          D ]}|                    |           |t          |          |k    r nY|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)hasattrrM   )r2   x
cell_namess     r   r4   z,ODFReader.get_sheet_data.<locals>.<listcomp>r   sD       1g&& ,-7j+@+@ +@+@+@r   )r5   rI   rJ   rK   rM   r7   
childNodes_get_cell_valuer*   _get_column_repeatextendlen_get_row_repeat_is_empty_rowrangeappend)r   sheetrE   rI   rJ   rK   covered_cell_nametable_cell_name
sheet_rows
empty_rowsmax_row_lenrC   	sheet_rowsheet_cellsempty_cells	table_row
sheet_cellvaluecolumn_repeat
row_repeat_rowrP   s                         @r   get_sheet_datazODFReader.get_sheet_data[   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!!),, ,j(

 t/01J>???
z** , ,ALL+++++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.namespacesrm   r;   
attributesget)r   ri   rm   s      r   rV   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   rl   znumber-columns-repeatedrn   ro   )r   cellrm   s      r   rS   zODFReader._get_column_repeat   s:    ******4?&&1J'KQOOPPPr   boolc                P    |j         D ]}t          |j                   dk    r dS dS )z4
        Helper function to find empty rows
        r   FT)rQ   rU   )r   ri   columns      r   rW   zODFReader._is_empty_row   s>     n 	 	F6$%%))uu * tr   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floatre   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )rp   rz   r&   npnanrq   rr   r*   r}   r;   _get_cell_string_valuepd	Timestampr   r   r   rA   rB   )r   rt   rz   	cell_type
cell_valuevalstamps          r   rR   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}  |            j        }g }|j        D ]}t          ||          rw|j        |k    rCt          |j
                            |dfd                    }|                    d|z             `|                    |                     |                     |                    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)Scrn    
r(   )odf.elementr   rp   r   odf.textr   rM   rQ   
isinstancer;   rq   rr   rY   r   r&   stripjoin)	r   rt   r   r   r   text_sre   fragmentspacess	            r   r   z ODFReader._get_cell_string_value   s   
 	(''''')))))) 	8 	8H(G,, 
8>V++ !4!8!8&#!J!JKKFLLv....
 LL!<!<X!F!FGGGGS]]00667777wwu~~r   )N)r   r   r   r	   r   r   )r   r   )r   r&   )r   r+   )r:   r;   )r0   r&   )rE   rF   r   rG   )r   r;   )r   ru   )r   rx   )__name__
__module____qualname__r   propertyr"   r%   r*   r9   r>   rD   rj   rV   rS   rW   rR   r   __classcell__)r   s   @r   r   r      sv       
 +/N N N N N N N"   X
( ( ( (
    X 8 8 8 X8   4 4 4 4 59C C C C CJM M M MQ Q Q Q
   %? %? %? %?N       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   pandas._libs.tslibs.nattyper   r   r)   r   r   <module>r      sW   " " " " " "       
                ? > > > > > ' ' ' ' ' '     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   