o
    gfC                     @  s8  d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ee	eef ee f ZedZedZdQddZdRdSddZ	dTdUddZ	dTdVd d!Z			"	"	dWdXd*d+Z	-dYdZd1d2Zd[d5d6Zd\d]d7d8Z	9		9	"d^d_dAdBZd`dGdHZ	9dadbdMdNZ G dOdP dPeeef Z!dS )cz
Printing tools.
    )annotationsN)	AnyCallableDictIterableMappingSequenceSizedTypeVarUnion)
get_option)is_sequence_KT_VTspaceintlists	list[str]returnstrc                   s   | dt| dt}g }g } fdd|dd D }|ttt|d  ttt|}t|D ]"\}}	||	|| dd}
|
d	||  g|t|	   ||
 q5t| }|D ]
}|d
	| q^d	|S )a  
    Glues together two sets of strings using the amount of space requested.
    The idea is to prettify.

    ----------
    space : int
        number of spaces for padding
    lists : str
        list of str which being joined
    strlen : callable
        function used to calculate the length of each str. Needed for unicode
        handling.
    justfunc : callable
        function used to justify str. Needed for unicode handling.
    strlenjustfuncc                   s   g | ]}t t|  qS  )maxmap.0xr   r   r   X/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/io/formats/printing.py
<listcomp>1   s    zadjoin.<locals>.<listcomp>Nleft)mode  
)
poplenjustifyappendr   r   	enumerateextendzipjoin)r   r   kwargsr   	out_linesnewListslengthsmaxLenilstnltoJoinlinesr   r   r   adjoin   s    
r9   righttextsIterable[str]max_lenr#   c                   sF   |dkr fdd| D S |dkr fdd| D S  fdd| D S )zB
    Perform ljust, center, rjust against string or list-like
    r"   c                      g | ]}|  qS r   )ljustr   r=   r   r   r    D       zjustify.<locals>.<listcomp>centerc                   r>   r   )rB   r   r@   r   r   r    F   rA   c                   r>   r   rjustr   r@   r   r   r    H   rA   r   )r;   r=   r#   r   r@   r   r)   ?   s
   r)   seqr   	_nest_lvlmax_seq_items
int | Nonec                   s   t | trd}n	t| drdnd}du rt| }n
p#tdp#t| }t|  fddtt|t| D }d	|}|t| k rK|d
7 }nt | t	rZt| dkrZ|d7 }|j
|dS )z
    internal. pprinter for iterables. you should probably use pprint_thing()
    rather than calling this directly.

    bounds length of printed sequence, depending on options
    z
{{{body}}}__setitem__z[{body}]z({body})FrG   c                   s*   g | ]}t t d  fdiqS )   rG   )pprint_thingnext)r   r4   rF   kwdsrG   sr   r   r    x   s    z_pprint_seq.<locals>.<listcomp>, , ...rJ   ,)body)
isinstancesethasattrr(   r   iterrangeminr.   tupleformat)rE   rF   rG   rN   fmtnitemsrrS   r   rM   r   _pprint_seqc   s    
	


r_   r   c           
   	   K  s   d}g }d}|du rt | }n
|ptdpt | }t|  d| D ]$\}}	||jt||d fd|i|t|	|d fd|i|d q#|t | k rY|jd|d	 d
S |jd|d
S )zy
    internal. pprinter for iterables. you should probably use pprint_thing()
    rather than calling this directly.
    z{{{things}}}z{key}: {val}FrG   NrJ   )keyvalrP   rQ   )things)r(   r   listitemsr*   r[   rK   r.   )
rE   rF   rG   rN   r\   pairspfmtr]   kvr   r   r   _pprint_dict   s    
ri   Fthingr   escape_charsEscapeChars | Nonedefault_escapesboolquote_stringsc                   s   |fd fdd}t | d	rt| S t| tr'|td
k r't| |d|d}|S t| r<|td
k r<t| ||||d}|S t| trM|rMd||  d}|S || }|S )a  
    This function is the sanctioned way of converting objects
    to a string representation and properly handles nested sequences.

    Parameters
    ----------
    thing : anything to be formatted
    _nest_lvl : internal use only. pprint_thing() is mutually-recursive
        with pprint_sequence, this argument is used to keep track of the
        current nesting level, and limit it.
    escape_chars : list or dict, optional
        Characters to escape. If a dict is passed the values are the
        replacements
    default_escapes : bool, default False
        Whether the input escape characters replaces or adds to the defaults
    max_seq_items : int or None, default None
        Pass through to other pretty printers to limit sequence printing

    Returns
    -------
    str
    rj   r   rk   rl   r   r   c                   sf   dddd}t |tr r|| n|}t| }n|pd}t| }|D ]
}|||| }q&|S )Nz\tz\nz\r)	r&   r   )rT   dictupdaterc   keysr   replace)rj   rk   	translateresultcrm   r   r   as_escaped_string   s   
z'pprint_thing.<locals>.as_escaped_string__next__zdisplay.pprint_nest_depthT)ro   rG   rk   ro   rG   'N)rj   r   rk   rl   r   r   )rV   r   rT   rr   r   ri   r   r_   )rj   rF   rk   rm   ro   rG   rz   rw   r   ry   r   rK      s2    
rK   utf-8ru   encodingerrorsbytesc                 C  s   t | }|||S N)rK   encode)objectr   r   valuer   r   r   pprint_thing_encoded   s   r   enableNonec                 C  s   dt jvrd S ddlm} | }|d u rd S |jj}d}| r<||vr5ddlm} G dd d|}| ||< d|| _d S ||v rGd	|| _d S d S )
NIPythonr   )get_ipythonz!application/vnd.dataresource+json)BaseFormatterc                   @  s   e Zd ZdZefZdS )z<enable_data_resource_formatter.<locals>.TableSchemaFormatter_repr_data_resource_N)__name__
__module____qualname__print_methodrr   _return_typer   r   r   r   TableSchemaFormatter  s    
r   TF)	sysmodulesr   r   display_formatter
formattersIPython.core.formattersr   enabled)r   r   ipr   mimetyper   r   r   r   r   enable_data_resource_formatter   s"   

r   c                 C  s   t | dd|dS )N)rp   rq   r&   Tr|   rK   )rj   rG   r   r   r   default_pprint  s   r   T	formatterr   
is_justifyname
str | Noneindent_for_nameline_break_each_valuec                   s  ddl m} ddlm} | \}}	|du rtdpd}|du r$t| j}|r=t|}
dd|
d	   }dd|
d
   }nd}d}t| }|rPddt|  }nd}tdpW|}||k}|  d0 fdd}d1 fdd}d}|dkrzd| }|S |d	kr|s| d }d | d!| }|S |d
kr|s| d }| d" }d | d| d!| }|S |d	krg }fd#d$| d"d D }n2||krt|d
 d%}fd&d$| d| D }fd'd$| | d D }ng }fd(d$| D }|r5|rt	||\}}n2|std
||k rtd
||k s5t||||fd)d$|D }fd*d$|D }|rr|t| }|d }ttd	t|d	 D ]t|d+}t||k r^ nqMfd,d$|D }fd-d$|D }d.}|}tt|D ]| | d }||||||\}}q||r|| | d/ 7 }|}tt|d	 D ]| | d }||||||\}}q||||d" |d
 |\}}||7 }d!|d }||7 }t||ks|r||7 }n|d7 }d |t|d  }|S )2a  
    Return the formatted obj as a unicode string

    Parameters
    ----------
    obj : object
        must be iterable and support __getitem__
    formatter : callable
        string formatter for an element
    is_justify : bool
        should justify the display
    name : name, optional
        defaults to the class name of the obj
    indent_for_name : bool, default True
        Whether subsequent lines should be indented to
        align with the name.
    line_break_each_value : bool, default False
        If True, inserts a line break for each value of ``obj``.
        If False, only break lines when the a line of values gets wider
        than the display width.

        .. versionadded:: 0.25.0

    Returns
    -------
    summary string
    r   )get_console_size)get_adjustmentNzdisplay.widthP   r&   r$   rJ      z
 z,
 rR   display.max_seq_itemsrO   r   liner   display_widthr   next_line_prefixr   tuple[str, str]c                   s@     |   |  |kr| | 7 } |}||7 }| |fS r   )r(   rstrip)rO   r   r   r   r   adjr   r   _extend_lineb  s
    z+format_object_summary.<locals>._extend_linevaluesr   c                   s   | rt  fdd| D S dS )Nc                 3  s    | ]}  |V  qd S r   r(   r   r   r   r   	<genexpr>n  s    z:format_object_summary.<locals>.best_len.<locals>.<genexpr>r   r   )r   r   r   r   best_lenl  s   z'format_object_summary.<locals>.best_lenrP   z[][]r!   c                      g | ]} |qS r   r   r   r   r   r   r          z)format_object_summary.<locals>.<listcomp>
   c                   r   r   r   r   r   r   r   r      r   c                   r   r   r   r   r   r   r   r      r   c                   r   r   r   r   r   r   r   r      r   c                   r>   r   rC   r   
max_lengthr   r   r      rA   c                   r>   r   rC   r   r   r   r   r      rA   rG   c                      g | ]}t | d qS r   r_   r   	max_itemsr   r   r          c                   r   r   r   r   r   r   r   r      r   r%   z...)rO   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )pandas.io.formats.consoler   pandas.io.formats.formatr   r   typer   r(   rY   _justifyr.   r   reversedrX   r_   r   )objr   r   r   r   r   r   r   r   _name_lenspace1space2nseprG   is_truncatedr   r   closesummaryfirstlastheadtail	max_spacer   pprinted_seqr   wordr   )r   r   r   r   r   format_object_summary  s   #



WTP
r   r   list[Sequence[str]]r   3tuple[list[tuple[str, ...]], list[tuple[str, ...]]]c                   sr   | | }dgt |d   |D ]}dd |D }dd t |D  q fdd| D }  fdd|D }| |fS )a  
    Justify items in head and tail, so they are right-aligned when stacked.

    Parameters
    ----------
    head : list-like of list-likes of strings
    tail : list-like of list-likes of strings

    Returns
    -------
    tuple of list of tuples of strings
        Same as head and tail, but items are right aligned when stacked
        vertically.

    Examples
    --------
    >>> _justify([['a', 'b']], [['abc', 'abcd']])
    ([('  a', '   b')], [('abc', 'abcd')])
    r   c                 S  s   g | ]}t |qS r   r   )r   itemr   r   r   r      r   z_justify.<locals>.<listcomp>c                 S  s   g | ]	\}}t ||qS r   r   )r   r   yr   r   r   r      s    c                   $   g | ]}t d d t| D qS )c                 s      | ]
\}}| |V  qd S r   rC   r   r   r=   r   r   r   r         &_justify.<locals>.<listcomp>.<genexpr>rZ   r-   r   rE   r   r   r   r          c                   r   )c                 s  r   r   rC   r   r   r   r   r     r   r   r   r   r   r   r   r      r   )r(   r-   )r   r   combined	inner_seqlengthr   r   r   r     s   

r   r   r	   include_dtypelist[tuple[str, str | int]]c                 C  s   g }t | dr|r|dd| j df t| dddur(|dt| jf nt| dddur?t| jr?|dt| jf tdpFt	| }t	| |krV|dt	| f |S )a8  
    Return a list of tuples of the (attr, formatted_value)
    for common attrs, including dtype, name, length

    Parameters
    ----------
    obj : object
        Must be sized.
    include_dtype : bool
        If False, dtype won't be in the returned list

    Returns
    -------
    list of 2-tuple

    dtyper}   r   Nnamesr   r   )
rV   r*   r   getattrr   r   anyr   r   r(   )r   r   attrsrG   r   r   r   format_object_attrs  s   r   c                   @  s   e Zd ZdZdddZdS )
PrettyDictz.Dict extension to support abbreviated __repr__r   r   c                 C  s   t | S r   r   )selfr   r   r   __repr__%  s   zPrettyDict.__repr__N)r   r   )r   r   r   __doc__r   r   r   r   r   r   "  s    r   )r   r   r   r   r   r   )r:   )r;   r<   r=   r   r#   r   r   r   )r   N)rE   r   rF   r   rG   rH   r   r   )rE   r   rF   r   rG   rH   r   r   )r   NFFN)rj   r   rF   r   rk   rl   rm   rn   ro   rn   rG   rH   r   r   )r~   ru   )r   r   r   r   r   r   )r   rn   r   r   r   )rj   r   rG   rH   r   r   )TNTF)r   r   r   rn   r   r   r   rn   r   rn   r   r   )r   r   r   r   r   r   )T)r   r	   r   rn   r   r   )"r   
__future__r   r   typingr   r   r   r   r   r   r	   r
   r   pandas._configr   pandas.core.dtypes.inferencer   r   EscapeCharsr   r   r9   r)   r_   ri   rK   r   r   r   r   r   r   r   r   r   r   r   <module>   sF    ,
#%$!J
! 
1.&