gL iF ddlmZddlmZmZddlZddlmZm Z m Z m Z ddl m Z ddlmZddlZddlmZddlmZer dd lmZdd lmZeed  Gd dedZy)) annotations) TYPE_CHECKINGcastN)FilePath ReadBufferScalarStorageOptions)import_optional_dependency)doc) _shared_docs)BaseExcelReader OpenDocument)NaTTypestorage_options)rceZdZ d dfd ZeddZ ddZeddZeddZddZ ddZ d ddZ dd Z dd Z dd Zdd ZxZS) ODFReaderc@tdt| |||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__)selffilepath_or_bufferrr __class__s `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/io/excel/_odfreader.pyrzODFReader.__init__ s(" #5)  +'  cddlm}|S)Nrr)odf.opendocumentr)rrs r_workbook_classzODFReader._workbook_class8s 1rc ddlm}||fi|S)Nr)load)rr")rrrr"s r load_workbookzODFReader.load_workbook>s *&8-88rcy)z'Property for compat with other readers.)rs r empty_valuezODFReader.empty_valueEsrcddlm}|jj|}|Dcgc]}|j dc}Scc}w)z4Return a list of sheet names present in the documentrTablename) odf.tabler*bookgetElementsByType getAttribute)rr*tablests r sheet_nameszODFReader.sheet_namesJs8 $,,U30671v&777sAcpddlm}|j||jj |}||S)Nrr))r,r*raise_if_bad_sheet_by_indexr-r.)rindexr*r0s rget_sheet_by_indexzODFReader.get_sheet_by_indexRs1# ((/,,U3e}rcddlm}|j||jj |}|D]}|j d|k(s|cS|j td|d)Nrr)r+zsheet z not found)r,r*raise_if_bad_sheet_by_namer-r.r/close ValueError)rr+r*r0tables rget_sheet_by_namezODFReader.get_sheet_by_nameYsm# ''-,,U3 E!!&)T1   6$z233rcddlm}m}m}|j}|j}||h}|j |} d} d} g} | D]a} | j Dcgc]}t|dr|j|vr| }}d}g|D]}|j|k(r|j|}n |j}|j|}||jk(r||z }Vj|jg|zd}j|g|z| tkr t} |j| }tdk(r| |z } nE| j|jgg| zd} | jfdt|D|Rt| |k\sbn| D]<}t|| ks|j|jg| t|z z>| Scc}w)z9 Parse an ODF Table into a list of lists r)CoveredTableCell TableCellTableRowqnamec3"K|]}ywNr&).0_ table_rows r z+ODFReader.get_sheet_data..sB1YBs )r,r>r?r@rAr. childNodeshasattr_get_cell_valuer'_get_column_repeatextendlen_get_row_repeatrange)rsheetfile_rows_neededr>r?r@covered_cell_nametable_cell_name cell_names sheet_rows empty_rows max_row_lenr; sheet_rowx sheet_cells empty_cells sheet_cellvalue column_repeat row_repeatrowrFs @rget_sheet_datazODFReader.get_sheet_datafs   -.44#+++'9 ,,X6   .0#% I#--1g&177j+@K K02I) > ##6 00 S^+!)n --i8J9~"j(  t//01J>?  Bj0ABB+E >N0NK% P JC3x+% D,,-s3x1GHI J Ws#G3c\ddlm}t|jj |dfdS)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. rTABLENSznumber-rows-repeatedodf.namespacesrdint attributesget)rr`rds rrNzODFReader._get_row_repeats) +3>>%%w0F&GKLLrc\ddlm}t|jj |dfdS)Nrrcznumber-columns-repeatedrerf)rcellrds rrKzODFReader._get_column_repeats'*4??&&1J'KQOPPrcTddlm}t|dk(rtjS|j j |df}|dk(rt|dk(ryy| |jS|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|dk(r2|j j |df}tj|S|dk(r >rc ddlm}ddlm}ddlm}ddlm}|j}|j}g}|jD]} t| |r|| j|k(r>V+ !4!4!8!8&#!JKFLLv.^^'88 LL!9 988 459B'1B %BHMQ %?Nrrr) __future__rtypingrrnumpyrxpandas._typingrrrr pandas.compat._optionalr pandas.util._decoratorsr pandasr{pandas.core.shared_docsr pandas.io.excel._baser rrpandas._libs.tslibs.nattyperrr&rrrsd"  ?'01-3\"345^/^6^r