
    MhF                         S SK Jr  S SKJrJr  S SKrS SKJrJ	r	J
r
Jr  S SKJr  S SKJr  S SKrS SKJr  S SKJr  \(       a  S S	KJr  S S
KJr  \" \S   S9 " S S\S   5      5       rg)    )annotations)TYPE_CHECKINGcastN)FilePath
ReadBufferScalarStorageOptions)import_optional_dependency)doc)_shared_docs)BaseExcelReaderOpenDocument)NaTTypestorage_options)r   c                     ^  \ rS rSr  S       SU 4S jjjr\SS j5       r    SS jr\SS j5       r\SS j5       r	SS jr
SS jr S   SS	 jjrSS
 jrSS jrSS jrSS jrSrU =r$ )	ODFReader   c                :   > [        S5        [        TU ]	  UUUS9  g)z
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       L/var/www/html/env/lib/python3.13/site-packages/pandas/io/excel/_odfreader.pyr   ODFReader.__init__    s(    " 	#5)+' 	 	
    c                    SSK Jn  U$ )Nr   r   )odf.opendocumentr   )r   r   s     r   _workbook_classODFReader._workbook_class8   s    1r   c                     SSK Jn  U" U40 UD6$ )Nr   )load)r!   r%   )r   r   r   r%   s       r   load_workbookODFReader.load_workbook>   s     	*&8-88r   c                    g)z'Property for compat with other readers.  )r   s    r   empty_valueODFReader.empty_valueE   s     r   c                    SSK Jn  U R                  R                  U5      nU Vs/ s H  o3R	                  S5      PM     sn$ s  snf )z4Return a list of sheet names present in the documentr   Tablename)	odf.tabler/   bookgetElementsByTypegetAttribute)r   r/   tablests       r   sheet_namesODFReader.sheet_namesJ   s:     	$,,U30671v&777s   Ac                n    SSK Jn  U R                  U5        U R                  R	                  U5      nX1   $ )Nr   r.   )r1   r/   raise_if_bad_sheet_by_indexr2   r3   )r   indexr/   r5   s       r   get_sheet_by_indexODFReader.get_sheet_by_indexR   s/    #((/,,U3}r   c                    SSK Jn  U R                  U5        U R                  R	                  U5      nU H  nUR                  S5      U:X  d  M  Us  $    U R                  5         [        SU S35      e)Nr   r.   r0   zsheet z
 not found)r1   r/   raise_if_bad_sheet_by_namer2   r3   r4   close
ValueError)r   r0   r/   r5   tables        r   get_sheet_by_nameODFReader.get_sheet_by_nameY   sh    #''-,,U3E!!&)T1  	

6$z233r   c                ,  ^ SSK JnJnJn  U" 5       R                  nU" 5       R                  nXg1nUR                  U5      n	Sn
Sn/ nU	 GH{  nUR                   Vs/ s H*  n[        US5      (       d  M  UR                  U;   d  M(  UPM,     nnSn/ mU H  nUR                  U:X  a  U R                  U5      nOU R                  nU R                  U5      nUU R                  :X  a  UU-  nMY  TR                  U R                  /U-  5        SnTR                  U/U-  5        M     U[        T5      :  a  [        T5      nU R                  U5      n[        T5      S:X  a  U
U-  n
OFUR                  U R                  //U
-  5        Sn
UR                  U4S j[        U5       5       5        Uc  GMj  [        U5      U:  d  GM|    O   U H?  n[        U5      U:  d  M  UR                  U R                  /U[        U5      -
  -  5        MA     U$ s  snf )z)
Parse an ODF Table into a list of lists
r   )CoveredTableCell	TableCellTableRowqnamec              3  (   >#    U  H  nTv   M	     g 7fNr*   ).0_	table_rows     r   	<genexpr>+ODFReader.get_sheet_data.<locals>.<genexpr>   s     B0A1Y0As   )r1   rF   rG   rH   rI   r3   
childNodeshasattr_get_cell_valuer+   _get_column_repeatextendlen_get_row_repeatrange)r   sheetfile_rows_neededrF   rG   rH   covered_cell_nametable_cell_name
cell_names
sheet_rows
empty_rowsmax_row_lenrB   	sheet_rowxsheet_cellsempty_cells
sheet_cellvaluecolumn_repeat
row_repeatrowrN   s                         @r   get_sheet_dataODFReader.get_sheet_dataf   s   	
 	
 -.44#+++'9
,,X6

.0#I #---A1g& +,77j+@ -  
 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 C3x+%

D,,-s3x1GHI  Ws   H5HHc                \    SSK Jn  [        UR                  R	                  US4S5      5      $ )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.namespacesrn   int
attributesget)r   ri   rn   s      r   rW   ODFReader._get_row_repeat   s)     	+3>>%%w0F&GKLLr   c                \    SSK Jn  [        UR                  R	                  US4S5      5      $ )Nr   rm   znumber-columns-repeatedro   rp   )r   cellrn   s      r   rT   ODFReader._get_column_repeat   s'    *4??&&1J'KQOPPr   c                l   SSK Jn  [        U5      S:X  a  [        R                  $ UR
                  R                  US45      nUS:X  a  [        U5      S:X  a  ggUc  U R                  $ US	:X  a:  [        UR
                  R                  US
45      5      n[        U5      nXT:X  a  U$ U$ US:X  a(  UR
                  R                  US
45      n[        U5      $ US:X  a  U R                  U5      $ US:X  a(  UR
                  R                  US
45      n[        U5      $ US:X  a3  UR
                  R                  US45      n[        R                  " U5      $ US:X  a=  [        R                  " [        U5      5      n[        [        UR                  5       5      $ U R!                  5         [#        SU 35      e)Nr   )OFFICENSz#N/Az
value-typebooleanTRUETFfloatrf   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )rq   rz   strnpnanrs   rt   r+   r}   rr   _get_cell_string_valuepd	Timestampr   r   r   r@   rA   )r   rw   rz   	cell_type
cell_valuevalstamps          r   rS   ODFReader._get_cell_value   s   +t966MOO''<(@A		!4yF"###'!t22Hg3FGHJj/C 
,&,,h-@AJ$$("..t44*$,,h-@AJ$$& ,,h-EFJ<<
++& LLT+E

--JJL1)=>>r   c                6   SSK Jn  SSKJn  SSKJn  SSKJn  U" 5       R                  nU" 5       R                  n/ nUR                   H  n	[        X5      (       a  U	R                  U:X  a=  [        U	R                  R                  US4S5      5      n
UR                  SU
-  5        M`  U	R                  U:X  a  Mr  UR                  U R                  U	5      5        M  UR                  [!        U	5      R#                  S	5      5        M     S
R%                  U5      $ )zl
Find and decode OpenDocument text:s tags that represent
a run length encoded sequence of space characters.
r   )Element)TEXTNS)
Annotation)Scro    
r)   )odf.elementr   rq   r   
odf.officer   odf.textr   rI   rQ   
isinstancerr   rs   rt   appendr   r   stripjoin)r   rw   r   r   r   r   office_annotationtext_srf   fragmentspacess              r   r    ODFReader._get_cell_string_value   s    
 	())&L..H(,,>>V+ !4!4!8!8&#!JKFLLv.^^'88
 LL!<!<X!FGS]0067 ( wwu~r   r*   )NN)r   FilePath | ReadBuffer[bytes]r   zStorageOptions | Noner   zdict | NonereturnNone)r   ztype[OpenDocument])r   r   r   r   )r   r   )r   z	list[str])r;   rr   )r0   r   rK   )rZ   z
int | Noner   zlist[list[Scalar | NaTType]])r   rr   )r   zScalar | NaTType)__name__
__module____qualname____firstlineno__r   propertyr"   r&   r+   r7   r<   rC   rj   rW   rT   rS   r   __static_attributes____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   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      sd    "
   ? '  0 1-3 \"345^/ ^ 6^r   