o
    Eh)                     @  s   d Z ddlmZ ddlmZmZmZmZ ddlZ	ddl
Z
ddlmZmZmZ ddlZddlmZ ddlmZ ddlm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!m"Z" ertddlm#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ dZ,G dd dZ-dS )z3
Module for formatting output data into CSV files.
    )annotations)HashableIterableIteratorSequenceN)TYPE_CHECKINGAnycast)writers)SequenceNotStr)cache_readonly)ABCDatetimeIndexABCIndexABCMultiIndexABCPeriodIndex)notna)Index)
get_handle)CompressionOptionsFilePathFloatFormatType
IndexLabelStorageOptionsWriteBuffernpt)DataFrameFormatteri c                   @  sz  e Zd ZU ded< 													
				dkdld(d)Zedmd*d+Zednd-d.Zedmd/d0Zedod2d3Z	edpd4d5Z
dqd7d8Zdrd:d;Zdrd<d=Zdrd>d?Zdsd@dAZedpdBdCZdtdEdFZdudHdIZedvdKdLZedwdNdOZedxdPdQZedpdRdSZedpdTdUZedydWdXZedzdZd[Zd{d\d]Zd{d^d_Zd{d`daZd|dcddZd{dedfZd}didjZ dS )~CSVFormatternpt.NDArray[np.object_]cols ,Nwstrictinfer
"T	formatterr   path_or_buf0FilePath | WriteBuffer[str] | WriteBuffer[bytes]sepstrSequence[Hashable] | Noneindex_labelIndexLabel | Nonemodeencoding
str | Noneerrorscompressionr   quoting
int | Nonelineterminator	chunksize	quotechardate_formatdoublequotebool
escapecharstorage_optionsStorageOptions | NonereturnNonec                 C  s   || _ | j j| _|| _|| _|	| _|| _|| _|| _| 	|| _
|| _|
p'tj| _| || _|| _|| _|p9tj| _|| _| || _| || _d S N)fmtframeobjfilepath_or_bufferr/   r2   r.   r<   r)   _initialize_index_labelr,   r1   csvlibZQUOTE_MINIMALr3   _initialize_quotecharr7   r9   r;   oslinesepr5   r8   _initialize_columnsr   _initialize_chunksizer6   )selfr&   r'   r)   r   r,   r.   r/   r1   r2   r3   r5   r6   r7   r8   r9   r;   r<    rM   6lib/python3.10/site-packages/pandas/io/formats/csvs.py__init__;   s$   
zCSVFormatter.__init__c                 C     | j jS r@   )rA   na_reprL   rM   rM   rN   rQ   e      zCSVFormatter.na_repFloatFormatType | Nonec                 C  rP   r@   )rA   float_formatrR   rM   rM   rN   rU   i   rS   zCSVFormatter.float_formatc                 C  rP   r@   )rA   decimalrR   rM   rM   rN   rV   m   rS   zCSVFormatter.decimalbool | SequenceNotStr[str]c                 C  rP   r@   )rA   headerrR   rM   rM   rN   rX   q   rS   zCSVFormatter.headerc                 C  rP   r@   )rA   indexrR   rM   rM   rN   rY   u   rS   zCSVFormatter.indexr   c                 C  s6   |dur|d u r|   S t|tttjtfs|gS |S )NF)_get_index_label_from_obj
isinstancelisttuplenpndarrayr   rL   r,   rM   rM   rN   rE   y   s   z$CSVFormatter._initialize_index_labelSequence[Hashable]c                 C  s   t | jjtr|  S |  S r@   )r[   rC   rY   r   _get_index_label_multiindex_get_index_label_flatrR   rM   rM   rN   rZ      s   z&CSVFormatter._get_index_label_from_objc                 C  s   dd | j jjD S )Nc                 S  s   g | ]}|pd qS r   rM   ).0namerM   rM   rN   
<listcomp>   s    z<CSVFormatter._get_index_label_multiindex.<locals>.<listcomp>)rC   rY   namesrR   rM   rM   rN   rb      s   z(CSVFormatter._get_index_label_multiindexc                 C  s   | j jj}|d u rdgS |gS )Nr   )rC   rY   rf   r`   rM   rM   rN   rc      s   
z"CSVFormatter._get_index_label_flatc                 C  s   | j tjkr|S d S r@   )r3   rF   Z
QUOTE_NONE)rL   r7   rM   rM   rN   rG      s   z"CSVFormatter._initialize_quotecharc                 C  s   t t| jjtS r@   )r:   r[   rC   columnsr   rR   rM   rM   rN   has_mi_columns   s   zCSVFormatter.has_mi_columnsIterable[Hashable] | Nonec                 C  sx   | j r|d urd}t||d ur/t|tr |jdi | j}nt|}| jjd d |f | _| jj	}|jdi | jS )Nz4cannot specify cols with a MultiIndex on the columnsrM   )
rj   	TypeErrorr[   r   _get_values_for_csv_number_formatr\   rC   locri   )rL   r   msgZnew_colsrM   rM   rN   rJ      s   
z CSVFormatter._initialize_columnsintc                 C  s&   |d u rt t| jpd pdS t|S N   )_DEFAULT_CHUNKSIZE_CELLSlenr   rq   )rL   r6   rM   rM   rN   rK      s   z"CSVFormatter._initialize_chunksizedict[str, Any]c                 C  s   | j | j| j| j| jdS )z7Dictionary used for storing number formatting settings.rQ   rU   r8   r3   rV   rw   rR   rM   rM   rN   rn      s   zCSVFormatter._number_formatr   c                   sP    j j}t|ttfr jd urt fdd|D }|S t|tr&| }|S )Nc                   s$   g | ]}t |r| jnd qS rd   )r   strftimer8   )re   xrR   rM   rN   rg      s   $ z+CSVFormatter.data_index.<locals>.<listcomp>)	rC   rY   r[   r   r   r8   r   r   Zremove_unused_levels)rL   
data_indexrM   rR   rN   rz      s   

zCSVFormatter.data_indexc                 C  s   | j r
t| jddS dS )Nnlevelsrs   r   )rY   getattrrz   rR   rM   rM   rN   r{      s   zCSVFormatter.nlevelsc                 C  s   t | jtttjtfS r@   )r[   rX   r]   r\   r^   r_   r   rR   rM   rM   rN   _has_aliases   s   zCSVFormatter._has_aliasesc                 C  s   t | jp| jS r@   )r:   r}   rX   rR   rM   rM   rN   _need_to_save_header   s   z!CSVFormatter._need_to_save_headerSequenceNotStr[Hashable]c                 C  sb   | j r)t| jtrJ t| jt| jkr&tdt| j dt| j d| jS ttt	 | jS )NzWriting z cols but got z aliases)
r}   r[   rX   r:   ru   r   
ValueErrorr	   r   r   rR   rM   rM   rN   
write_cols   s   zCSVFormatter.write_colslist[Hashable]c                 C  sH   g }| j r| jrt| jtsJ t| j}| jr| jr"|t| j7 }|S r@   )rY   r,   r[   r   r\   rj   r}   r   )rL   encoded_labelsrM   rM   rN   r      s   
zCSVFormatter.encoded_labelsc              
   C  sv   t | j| j| j| j| j| jd!}tj|j	| j
| j| j| j| j| jd| _|   W d   dS 1 s4w   Y  dS )z+
        Create the writer & save.
        )r/   r1   r2   r<   )r5   Z	delimiterr3   r9   r;   r7   N)r   rD   r.   r/   r1   r2   r<   rF   writerZhandler5   r)   r3   r9   r;   r7   _save)rL   ZhandlesrM   rM   rN   save   s(   

"zCSVFormatter.savec                 C  s   | j r|   |   d S r@   )r~   _save_header
_save_bodyrR   rM   rM   rN   r     s   zCSVFormatter._savec                 C  s<   | j r| jr| j| j d S |  D ]}| j| qd S r@   )rj   r}   r   Zwriterowr    _generate_multiindex_header_rows)rL   rowrM   rM   rN   r     s
   zCSVFormatter._save_headerIterator[list[Hashable]]c                 c  s    | j j}t|jD ]4}g }| jr3||j|  t| jt	r3t
| jdkr3|dgt
| jd   ||| |V  q
| jrWt| jdhkrY| jdgt
|  V  d S d S d S )Nrs   r   )rC   ri   ranger{   rY   appendrh   r[   r,   r\   ru   extendZ_get_level_valuesr   set)rL   ri   iZcol_linerM   rM   rN   r     s   z-CSVFormatter._generate_multiindex_header_rowsc                 C  s^   t | j}|| j d }t|D ]}|| j }t|| j |}||kr& d S | || qd S rr   )ru   rz   r6   r   min_save_chunk)rL   Znrowschunksr   start_iend_irM   rM   rN   r   1  s   

zCSVFormatter._save_bodyr   r   c                 C  sh   t ||}| jj| }|jdi | j}t| }| j| jdi | j}t	||| j
| j| j d S )NrM   )slicerC   Zilocrm   rn   r\   Z_iter_column_arraysrz   
libwritersZwrite_csv_rowsr{   r   r   )rL   r   r   ZslicerZdfresdataZixrM   rM   rN   r   ;  s   
zCSVFormatter._save_chunk)r   r    NNr!   Nr"   r#   Nr$   Nr%   NTNN)$r&   r   r'   r(   r)   r*   r   r+   r,   r-   r.   r*   r/   r0   r1   r*   r2   r   r3   r4   r5   r0   r6   r4   r7   r0   r8   r0   r9   r:   r;   r0   r<   r=   r>   r?   )r>   r*   )r>   rT   )r>   rW   )r>   r:   )r,   r-   r>   r   )r>   ra   )r7   r0   r>   r0   )r   rk   r>   r   )r6   r4   r>   rq   )r>   rv   )r>   r   )r>   rq   )r>   r   )r>   r   )r>   r?   )r>   r   )r   rq   r   rq   r>   r?   )!__name__
__module____qualname____annotations__rO   propertyrQ   rU   rV   rX   rY   rE   rZ   rb   rc   rG   rj   rJ   rK   rn   r   rz   r{   r}   r~   r   r   r   r   r   r   r   r   rM   rM   rM   rN   r   8   st   
 *

	











r   ).__doc__Z
__future__r   Zcollections.abcr   r   r   r   ZcsvrF   rH   typingr   r   r	   Znumpyr^   Zpandas._libsr
   r   Zpandas._typingr   Zpandas.util._decoratorsr   Zpandas.core.dtypes.genericr   r   r   r   Zpandas.core.dtypes.missingr   Zpandas.core.indexes.apir   Zpandas.io.commonr   r   r   r   r   r   r   r   Zpandas.io.formats.formatr   rt   r   rM   rM   rM   rN   <module>   s&    $
