
    aVgv                        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y)    )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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 )	ODFReaderz
    Read tables out of OpenDocument formatted files.

    Parameters
    ----------
    filepath_or_buffer : str, path to be parsed or
        an open readable stream.
    {storage_options}
    c                >    t        d       t        | 	  ||       y )Nodfr   )r
   super__init__)selffilepath_or_bufferr   	__class__s      [/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/pandas/io/excel/_odfreader.pyr   zODFReader.__init__(   s     
 	#5)+_M    c                    ddl m} |S )Nr   )OpenDocument)odf.opendocumentr   )r   r   s     r   _workbook_classzODFReader._workbook_class0   s    1r   c                    ddl m}  ||      S )Nr   )load)r   r!   )r   r   r!   s      r   load_workbookzODFReader.load_workbook6   s    )&''r   c                     y)z'Property for compat with other readers.  )r   s    r   empty_valuezODFReader.empty_value;   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_names@   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)   r/   s       r   get_sheet_by_indexzODFReader.get_sheet_by_indexH   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)   r/   tables        r   get_sheet_by_namezODFReader.get_sheet_by_nameO   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 ]c  }|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  }W|j                  | j                  g|z         d}|j                  |g|z          |t        |      k  rt        |      }| j                  |      }| j                  |      r||z  }nC|j                  | j                  gg|z         d}t        |      D ]  }|j!                  |        |Tt        |      |k\  sd 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qname)r+   r=   r>   r?   r@   r-   
childNodeshasattr_get_cell_valuer&   _get_column_repeatextendlen_get_row_repeat_is_empty_rowrangeappend)r   sheetconvert_float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	table_row
sheet_cellvaluecolumn_repeat
row_repeat_rows                            r   get_sheet_datazODFReader.get_sheet_data\   s+   	
 	
 -.44#+++'9
,,X6

.0# &	I #--1g&177j+@ K 
 K02I) >
##6 00]KE ,,E $ 7 7
 C D,,,=0K$$d&6&6%7+%EF"#K$$eW}%<=>  S^+!)n--i8J!!),j(
 t//01J>?
z* ,ALL+,+E
>N0NM&	R  	JC3x+%

D,,-s3x1GHI	J Ys   #G4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.namespacesrb   int
attributesget)r   r^   rb   s      r   rG   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   ra   znumber-columns-repeatedrc   rd   )r   cellrb   s      r   rD   zODFReader._get_column_repeat   s'    *4??&&1J'KQOPPr   c                Z    |j                   D ]  }t        |j                         dkD  s y y)z4
        Helper function to find empty rows
        r   FT)rA   rF   )r   r^   columns      r   rH   zODFReader._is_empty_row   s2     nn 	F6$$%)	 r   c                X   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            }|r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floatrZ   
percentagestringcurrencydatez
date-valuetimezUnrecognized type )re   rn   strnpnanrg   rh   r&   rq   rf   _get_cell_string_valuepdto_datetimer   r   rv   r8   r9   )r   rj   rL   rn   	cell_type
cell_valuevalstamps           r   rC   zODFReader._get_cell_value   s   +t966MOO''<(@A		!4yF"###'!t22Hg3FGHJ*o*$J,&,,h-@AJ$$("..t44*$,,h-@AJ$$& ,,h-EFJ>>*--& NN3t9-E

--JJL1)=>>r   c                   ddl m} ddlm} ddlm}  |       j                  }g }|j                  D ]  }t        ||      rl|j                  |k(  r<t        |j                  j                  |dfd            }|j                  d|z         Z|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)Scrc    
r$   )odf.elementr   re   r   odf.textr   r@   rA   
isinstancerf   rg   rh   rJ   rz   rw   stripjoin)	r   rj   r   r   r   text_srZ   fragmentspacess	            r   rz   z ODFReader._get_cell_string_value   s    
 	() 	8H(G,>>V+ !4!4!8!8&#!JKFLLv.
 LL!<!<X!FGS]0067	8 wwu~r   )N)r   FilePath | ReadBuffer[bytes]r   r	   returnNone)r   r   )r   rw   )r   z	list[str])r4   rf   )r*   rw   )rL   boolrM   z
int | Noner   zlist[list[Scalar | NaTType]])r   rf   )r   r   )rL   r   r   zScalar | NaTType)__name__
__module____qualname____doc__r   propertyr   r"   r&   r1   r5   r;   r_   rG   rD   rH   rC   rz   __classcell__)r   s   @r   r   r      s     +/N8N (N 
	N  
(
   8 84 JNC$(C<FC	%CJMQ
&?P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   pandas._libs.tslibs.nattyper   r   r%   r   r   <module>r      s\    "
   ? '  0 13 \"345^ ^ 6^r   