
    o[we(                        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mZmZmZ dd	lmZ dd
lmZ ddlm Z  erddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) dZ* G d d          Z+dS )z3
Module for formatting output data into CSV files.
    )annotations)HashableIterableIteratorSequenceN)TYPE_CHECKINGAnycast)writers)cache_readonly)ABCDatetimeIndexABCIndexABCMultiIndexABCPeriodIndex)notna)Index)
get_handle)CompressionOptionsFilePathFloatFormatType
IndexLabelStorageOptionsWriteBuffer)DataFrameFormatteri c                     e Zd ZU ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dOdPd(ZedQd)            ZedRd+            ZedQd,            ZedSd.            Z	edTd/            Z
dUd1ZdVd3ZdVd4ZdVd5ZdWd6ZedTd7            ZdXd9ZdYd;ZedZd=            Zed[d?            Zed\d@            ZedTdA            ZedTdB            ZedVdC            Zed]dE            Zd^dFZd^dGZd^dHZd_dJZd^dKZd`dNZ dS )aCSVFormatter
np.ndarray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                   || _         | j         j        | _        || _        || _        |	| _        || _        || _        || _        | 	                    |          | _
        || _        |
pt          j        | _        |                     |          | _        || _        || _        |pt&          j        | _        || _        |                     |          | _        |                     |          | _        d S N)fmtframeobjfilepath_or_bufferr/   r2   r.   r<   r)   _initialize_index_labelr,   r1   csvlib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<   s                     6lib/python3.11/site-packages/pandas/io/formats/csvs.py__init__zCSVFormatter.__init__9   s    ( 8>"- /:	.77DD6&"633I>>&$,:
&,,T22	33I>>    c                    | j         j        S rA   )rB   na_reprN   s    rO   rS   zCSVFormatter.na_repc       xrQ   FloatFormatType | Nonec                    | j         j        S rA   )rB   float_formatrT   s    rO   rX   zCSVFormatter.float_formatg   s    x$$rQ   c                    | j         j        S rA   )rB   decimalrT   s    rO   rZ   zCSVFormatter.decimalk   s    xrQ   bool | list[str]c                    | j         j        S rA   )rB   headerrT   s    rO   r]   zCSVFormatter.headero   rU   rQ   c                    | j         j        S rA   )rB   indexrT   s    rO   r_   zCSVFormatter.indexs   s    x~rQ   r   c                    |durF||                                  S t          |t          t          t          j        t          f          s|gS |S )NF)_get_index_label_from_obj
isinstancelisttuplenpndarrayr   rN   r,   s     rO   rF   z$CSVFormatter._initialize_index_labelw   sP    e##"55777dE2:x-PQQ %#}$rQ   Sequence[Hashable]c                    t          | j        j        t                    r|                                 S |                                 S rA   )rb   rD   r_   r   _get_index_label_multiindex_get_index_label_flatrT   s    rO   ra   z&CSVFormatter._get_index_label_from_obj   s<    dhnm44 	033555--///rQ   c                8    d | j         j        j        D             S )Nc                    g | ]}|pd S r    ).0names     rO   
<listcomp>z<CSVFormatter._get_index_label_multiindex.<locals>.<listcomp>   s    <<<t
<<<rQ   )rD   r_   namesrT   s    rO   rj   z(CSVFormatter._get_index_label_multiindex   s    <<tx~';<<<<rQ   c                4    | j         j        j        }|dgn|gS )Nr   )rD   r_   rq   rg   s     rO   rk   z"CSVFormatter._get_index_label_flat   s!    hn)"*tt=rQ   c                4    | j         t          j        k    r|S d S rA   )r3   rG   
QUOTE_NONE)rN   r7   s     rO   rI   z"CSVFormatter._initialize_quotechar   s    <6,,,trQ   c                Z    t          t          | j        j        t                              S rA   )r:   rb   rD   columnsr   rT   s    rO   has_mi_columnszCSVFormatter.has_mi_columns   s    Jtx/??@@@rQ   Iterable[Hashable] | Nonec                   | j         r|d}t          |          |Rt          |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 columnsro   )
ry   	TypeErrorrb   r   _format_native_types_number_formatrc   rD   locrx   )rN   r   msgnew_colss       rO   rL   z CSVFormatter._initialize_columns   s     	%Lnn$$)) "0t0GG43FGGDzzx|AAAtG,DH 8#,x,CCt/BCCCrQ   intc                d    | t           t          | j                  pdz  pdS t          |          S N   )_DEFAULT_CHUNKSIZE_CELLSlenr   r   )rN   r6   s     rO   rM   z"CSVFormatter._initialize_chunksize   s1    ,TY1D1EK!K9~~rQ   dict[str, Any]c                D    | j         | j        | j        | j        | j        dS )z7Dictionary used for storing number formatting settings.rS   rX   r8   r3   rZ   r   rT   s    rO   r~   zCSVFormatter._number_format   s.     k -+||
 
 	
rQ   r   c                      j         j        }t          |t          t          f          r# j        t           fd|D                       }n)t          |t                    r|                                }|S )Nc                f    g | ]-}t          |          r|                    j                  nd .S rn   )r   strftimer8   )rp   xrN   s     rO   rr   z+CSVFormatter.data_index.<locals>.<listcomp>   s8    VVVaqAD,---rVVVrQ   )	rD   r_   rb   r   r   r8   r   r   remove_unused_levels)rN   
data_indexs   ` rO   r   zCSVFormatter.data_index   s    X^
z$4n#EFF	; ,VVVV:VVV JJ 
M22 	;#88::JrQ   c                @    | j         rt          | j        dd          S dS )Nnlevelsr   r   )r_   getattrr   rT   s    rO   r   zCSVFormatter.nlevels   s%    : 	4?Iq9991rQ   c                f    t          | j        t          t          t          j        t          f          S rA   )rb   r]   rd   rc   re   rf   r   rT   s    rO   _has_aliaseszCSVFormatter._has_aliases   s    $+tRZ'JKKKrQ   c                8    t          | j        p| j                  S rA   )r:   r   r]   rT   s    rO   _need_to_save_headerz!CSVFormatter._need_to_save_header   s    D%4555rQ   c                h   | j         rt          | 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   rb   r]   r:   r   r   
ValueErrorr
   r   r   rT   s    rO   
write_colszCSVFormatter.write_cols   s     
	7!$+t444444;3ty>>11 Ws49~~WWS=M=MWWW   ; *DI666rQ   list[Hashable]c                    g }| j         r7| j        r0t          | j        t                    sJ t	          | j                  }| j        r| j        r|t	          | j                  z  }|S rA   )r_   r,   rb   r   rc   ry   r   r   )rN   encoded_labelss     rO   r   zCSVFormatter.encoded_labels   ss    )+: 	4$* 	4d.99999!$"233N" 	4d&7 	4d4?333NrQ   c           
     L   t          | j        | j        | j        | j        | j        | j                  5 }t          j        |j	        | j
        | j        | j        | j        | j        | j                  | _        |                                  ddd           dS # 1 swxY w Y   dS )z+
        Create the writer & save.
        )r/   r1   r2   r<   )r5   	delimiterr3   r9   r;   r7   N)r   rE   r.   r/   r1   r2   r<   rG   writerhandler5   r)   r3   r9   r;   r7   _save)rN   handless     rO   savezCSVFormatter.save   s    
 #I];( 0
 
 
 	  -#2( ,?.  DK JJLLL'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABB Bc                d    | j         r|                                  |                                  d S rA   )r   _save_header
_save_bodyrT   s    rO   r   zCSVFormatter._save  s5    $ 	 rQ   c                    | j         r| j        r!| j                            | j                   d S |                                 D ]}| j                            |           d S rA   )ry   r   r   writerowr    _generate_multiindex_header_rows)rN   rows     rO   r   zCSVFormatter._save_header  st    " 	*d&7 	*K  !455555<<>> * *$$S))))* *rQ   Iterator[list[Hashable]]c              #  <  K   | j         j        }t          |j                  D ]}g }| j        r|                    |j        |                    t          | j        t                    rFt          | j                  dk    r.|                    dgt          | j                  dz
  z             |                    |                    |                     |V  | j        r8t          | j                  dhk    r!| j        dgt          |          z  z   V  d S d S d S )Nr   r   )rD   rx   ranger   r_   appendrs   rb   r,   rc   r   extend_get_level_valuesr   set)rN   rx   icol_lines       rO   r   z-CSVFormatter._generate_multiindex_header_rows  s-     ("w'' 	 	AHz Ha 0111d.55 H#d>N:O:ORS:S:SOORDC0@,A,AA,E$FGGGOOG55a88999NNNN
  	<3t':#;#;t#C#C%s7||(;;;;;;;	< 	<#C#CrQ   c                    t          | j                  }|| j        z  dz   }t          |          D ]C}|| j        z  }t	          || j        z   |          }||k    r d S |                     ||           Dd S r   )r   r   r6   r   min_save_chunk)rN   nrowschunksr   start_iend_is         rO   r   zCSVFormatter._save_body-  s    DO$$4>)Q.v 	- 	-A$.(G$.0%88E%We,,,,	- 	-rQ   r   r   c                \   t          ||          }| j        j        |         } |j        j        di | j        fdt          t          j                            D             } | j	        |         j
        di | j        }t          j        ||| j        | j        | j                   d S )Nc                :    g | ]}                     |          S ro   )iget_values)rp   r   ress     rO   rr   z,CSVFormatter._save_chunk.<locals>.<listcomp>=  s%    BBBq""BBBrQ   ro   )slicerD   iloc_mgrto_native_typesr~   r   r   itemsr   r}   
libwriterswrite_csv_rowsr   r   r   )rN   r   r   slicerdfdataixr   s          @rO   r   zCSVFormatter._save_chunk7  s    w&&X]6"%bg%<<(;<<BBBBE#ci..,A,ABBB9T_V$9PPD<OPP!LIK	
 	
 	
 	
 	
rQ   )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>   rV   )r>   r[   )r>   r:   )r,   r-   r>   r   )r>   rh   )r7   r0   r>   r0   )r   rz   r>   r   )r6   r4   r>   r   )r>   r   )r>   r   )r>   r   )r>   r   )r>   r?   )r>   r   )r   r   r   r   r>   r?   )!__name__
__module____qualname____annotations__rP   propertyrS   rX   rZ   r]   r_   rF   ra   rj   rk   rI   ry   rL   rM   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rQ   rO   r   r   6   s         
 IK*.)-#*1"%) $ #"& !%15%(? (? (? (? (?T    X % % % X%       X     X    X   0 0 0 0= = = => > > >    A A A XAD D D D&   
 
 
 
 X
    ^    X L L L XL 6 6 6 X6 7 7 7 X7 
 
 
 X
   4   
* * * *< < < <*- - - -
 
 
 
 
 
rQ   r   ),__doc__
__future__r   collections.abcr   r   r   r   csvrG   rJ   typingr   r	   r
   numpyre   pandas._libsr   r   pandas.util._decoratorsr   pandas.core.dtypes.genericr   r   r   r   pandas.core.dtypes.missingr   pandas.core.indexes.apir   pandas.io.commonr   pandas._typingr   r   r   r   r   r   pandas.io.formats.formatr   r   r   ro   rQ   rO   <module>r      s    # " " " " "                				              . . . . . . 2 2 2 2 2 2            - , , , , , ) ) ) ) ) ) ' ' ' ' ' ' 
<                <;;;;; # P
 P
 P
 P
 P
 P
 P
 P
 P
 P
rQ   