
    OwgF                         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y)    )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 )	ODFReaderc                @    t        d       t        | 	  |||       y)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   engine_kwargsN)r
   super__init__)selffilepath_or_bufferr   r   	__class__s       Q/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/io/excel/_odfreader.pyr   zODFReader.__init__    s(    " 	#5)+' 	 	
    c                    ddl m} |S )Nr   r   )odf.opendocumentr   )r   r   s     r   _workbook_classzODFReader._workbook_class8   s    1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     	*&8-88r   c                     y)z'Property for compat with other readers.  )r   s    r   empty_valuezODFReader.empty_valueE   s     r   c                    ddl m} | j                  j                  |      }|D cg c]  }|j	                  d       c}S c c}w )z4Return a list of sheet names present in the documentr   Tablename)	odf.tabler*   bookgetElementsByTypegetAttribute)r   r*   tablests       r   sheet_nameszODFReader.sheet_namesJ   s8     	$,,U30671v&777s   Ac                p    ddl m} | j                  |       | j                  j	                  |      }||   S )Nr   r)   )r,   r*   raise_if_bad_sheet_by_indexr-   r.   )r   indexr*   r0   s       r   get_sheet_by_indexzODFReader.get_sheet_by_indexR   s1    #((/,,U3e}r   c                    ddl m} | j                  |       | j                  j	                  |      }|D ]  }|j                  d      |k(  s|c S  | j                          t        d| d      )Nr   r)   r+   zsheet z
 not found)r,   r*   raise_if_bad_sheet_by_namer-   r.   r/   close
ValueError)r   r+   r*   r0   tables        r   get_sheet_by_namezODFReader.get_sheet_by_nameY   sm    #''-,,U3 	E!!&)T1	 	

6$z233r   c                   ddl m}m}m}  |       j                  } |       j                  }||h}|j                  |      }	d}
d}g }|	D ]a  }|j                  D cg c]  }t        |d      r|j                  |v r|  }}d}g |D ]  }|j                  |k(  r| j                  |      }n| j                  }| j                  |      }|| j                  k(  r||z  }Vj                  | j                  g|z         d}j                  |g|z          |t              k  rt              }| j                  |      }t              dk(  r|
|z  }
nE|j                  | j                  gg|
z         d}
|j                  fdt        |      D               |Rt        |      |k\  sb n |D ]<  }t        |      |k  s|j                  | j                  g|t        |      z
  z         > |S c c}w )z9
        Parse an ODF Table into a list of lists
        r   )CoveredTableCell	TableCellTableRowqnamec              3  "   K   | ]  }  y wNr&   ).0_	table_rows     r   	<genexpr>z+ODFReader.get_sheet_data.<locals>.<genexpr>   s     B1YBs   )r,   r>   r?   r@   rA   r.   
childNodeshasattr_get_cell_valuer'   _get_column_repeatextendlen_get_row_repeatrange)r   sheetfile_rows_neededr>   r?   r@   covered_cell_nametable_cell_name
cell_names
sheet_rows
empty_rowsmax_row_lenr;   	sheet_rowxsheet_cellsempty_cells
sheet_cellvaluecolumn_repeat
row_repeatrowrF   s                         @r   get_sheet_datazODFReader.get_sheet_dataf   s   	
 	
 -.44#+++'9
,,X6

.0# %	I #--1g&177j+@ K 
 K02I) >
##6 00<E ,,E $ 7 7
 C D,,,=0K$$d&6&6%7+%EF"#K$$eW}%<=>  S^+!)n--i8J9~"j(
 t//01J>?
Bj0ABB+E
>N0NK%	P  	JC3x+%

D,,-s3x1GHI	J Ws   #G3c                \    ddl m} t        |j                  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.namespacesrd   int
attributesget)r   r`   rd   s      r   rN   zODFReader._get_row_repeat   s)     	+3>>%%w0F&GKLLr   c                \    ddl m} t        |j                  j	                  |dfd            S )Nr   rc   znumber-columns-repeatedre   rf   )r   cellrd   s      r   rK   zODFReader._get_column_repeat   s'    *4??&&1J'KQOPPr   c                T   ddl m} t        |      dk(  rt        j                  S |j
                  j                  |df      }|dk(  rt        |      dk(  ryy|| j                  S |d	k(  r:t        |j
                  j                  |d
f            }t        |      }||k(  r|S |S |dk(  r(|j
                  j                  |d
f      }t        |      S |dk(  r| j                  |      S |dk(  r(|j
                  j                  |d
f      }t        |      S |dk(  r2|j
                  j                  |df      }t        j                  |      S |dk(  r<t        j                  t        |            }t        t        |j                               S | j!                          t#        d|       )Nr   )OFFICENSz#N/Az
value-typebooleanTRUETFfloatr]   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )rg   rn   strnpnanri   rj   r'   rq   rh   _get_cell_string_valuepd	Timestampr   r   rv   r9   r:   )r   rl   rn   	cell_type
cell_valuevalstamps          r   rJ   zODFReader._get_cell_value   s   +t966MOO''<(@A		!4yF"###'!t22Hg3FGHJj/Cj 
,&,,h-@AJ$$("..t44*$,,h-@AJ$$& ,,h-EFJ<<
++& LLT+E

--JJL1)=>>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(  r<t        |	j                  j                  |dfd            }
|j                  d|
z         Z|	j                  |k(  rj|j                  | j                  |	             |j                  t!        |	      j#                  d	              d
j%                  |      S )z
        Find and decode OpenDocument text:s tags that represent
        a run length encoded sequence of space characters.
        r   )Element)TEXTNS)
Annotation)Scre    
r%   )odf.elementr   rg   r   
odf.officer   odf.textr   rA   rH   
isinstancerh   ri   rj   appendrz   rw   stripjoin)r   rl   r   r   r   r   office_annotationtext_sr]   fragmentspacess              r   rz   z ODFReader._get_cell_string_value   s    
 	())&L.. 	8H(G,>>V+ !4!4!8!8&#!JKFLLv.^^'88
 LL!<!<X!FGS]0067	8 wwu~r   )NN)r   FilePath | ReadBuffer[bytes]r   zStorageOptions | Noner   zdict | NonereturnNone)r   ztype[OpenDocument])r   r   r   r   )r   rw   )r   z	list[str])r5   rh   )r+   rw   rC   )rQ   z
int | Noner   zlist[list[Scalar | NaTType]])r   rh   )r   zScalar | NaTType)__name__
__module____qualname__r   propertyr    r#   r'   r2   r6   r<   ra   rN   rK   rJ   rz   __classcell__)r   s   @r   r   r      s    
 26%)	
8
 /
 #	

 

0  
9">9	9   8 84 59B'1B	%BHMQ
%?Nr   r   r   )
__future__r   typingr   r   numpyrx   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      sd    "
   ? '  0 1-3 \"345^/ ^ 6^r   