U
    42iL                  	   @  s   d dl mZ d dlZd dlZd dlmZ d dl	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 G dd	 d	Zd
d ZG dd dZeeeeeeeedehZdddddZdddddddZdS )    )annotationsN)StringIO)Any)Callable)IO)Iteratorc                   @  s&   e Zd ZdZdgZdd Zdd ZdS )	_safe_keyaU  Helper function for key functions when sorting unorderable objects.

    The wrapped-object will fallback to a Py2.x style comparison for
    unorderable types (sorting first comparing the type name and then by
    the obj ids).  Does not work recursively, so dict.items() must have
    _safe_key applied to both the key and the value.

    objc                 C  s
   || _ d S N)r	   )selfr	    r   6/tmp/pip-unpacked-wheel-7n2p7kht/_pytest/_io/pprint.py__init__)   s    z_safe_key.__init__c                 C  sX   z| j |j k W S  tk
rR   tt| j t| j ftt|j t|j fk  Y S X d S r
   )r	   	TypeErrorstrtypeid)r   otherr   r   r   __lt__,   s    z_safe_key.__lt__N)__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r      s   	r   c                 C  s   t | d t | d fS )z&Helper function for comparing 2-tuplesr      )r   )tr   r   r   _safe_tuple6   s    r   c                   @  sn  e Zd ZU dIddddddd	Zd
ddddZd
dddddddddZd
dddddddddZi Zded< d
dddddddddZ	e	ee
j< d
dddddddddZeeejj< d
dddddddddZeeej< d
dddddddddZeeej< d
dddddddd d!Zeeej< eeej< d
dddddddd"d#Zeeej< d
dddddddd$d%Zeeej< d
dddddddd&d'Zeeej< d
dddddddd(d)Zeeejj< d
dddddddd*d+Zeeej j< d,ddddddd-d.d/Z!d,ddddddd-d0d1Z"d2ddddddd-d3d4Z#d
dddd5d6d7Z$d
dddddddd8d9Z%e%eej&j< d
dddddddd:d;Z'e'eej(j< d
dddddddd<d=Z)e)eej*j< d
dddddddd>d?Z+e+eej,j< d
dddddddd@dAZ-e-eej.j< d
ddddddddBdCZ/e/eej0j< d
ddddddddDdEZ1e1eej2j< d
dddddFdGdHZ3dS )JPrettyPrinter   P   Nintz
int | NoneNone)indentwidthdepthreturnc                 C  sJ   |dk rt d|dk	r(|dkr(t d|s4t d|| _|| _|| _dS )aT  Handle pretty printing operations onto a stream using a set of
        configured parameters.

        indent
            Number of spaces to indent for each level of nesting.

        width
            Attempted maximum number of columns in the output.

        depth
            The maximum depth to print out nested structures.

        r   zindent must be >= 0Nzdepth must be > 0zwidth must be != 0)
ValueError_depth_indent_per_level_width)r   r"   r#   r$   r   r   r   r   <   s    zPrettyPrinter.__init__r   r   objectr%   c                 C  s$   t  }| ||ddt d | S )Nr   )	_StringIO_formatsetgetvalue)r   r+   sior   r   r   pformatY   s    zPrettyPrinter.pformatzIO[str]zset[int])r+   streamr"   	allowancecontextlevelr%   c           	   	   C  s   t |}||kr"|t| d S | jt|jd }|d k	rl|| || ||||||d  || nxt	
|rt|ts|jjrt|jdrd|jjjkr|| | ||||||d  || n|| ||| d S )Nr   __wrapped__Z__create_fn__)r   write
_recursion	_dispatchgetr   __repr__addremove_dataclassesZis_dataclass
isinstanceZ__dataclass_params__reprhasattrr6   r   _pprint_dataclass_repr)	r   r+   r2   r"   r3   r4   r5   objidpr   r   r   r-   ^   s<    	

	
     zPrettyPrinter._formatc           	        sP    j j} fddt D }||d  | |||||| |d d S )Nc                   s$   g | ]}|j r|jt |jfqS r   )r@   namegetattr).0fr+   r   r   
<listcomp>   s   z3PrettyPrinter._pprint_dataclass.<locals>.<listcomp>())	__class__r   r>   fieldsr7   _format_namespace_items	r   r+   r2   r"   r3   r4   r5   Zcls_nameitemsr   rJ   r   rB      s    	
zPrettyPrinter._pprint_dataclassz`dict[Callable[..., str], Callable[[PrettyPrinter, Any, IO[str], int, int, set[int], int], None]]r9   c           	      C  s>   |j }|d t| td}| |||||| |d d S )N{key})r7   sortedrR   r   _format_dict_items)	r   r+   r2   r"   r3   r4   r5   r7   rR   r   r   r   _pprint_dict   s
    	zPrettyPrinter._pprint_dictc                 C  sR   t |s|t| d S |j}||jd  | |||||| |d d S NrL   rM   )lenr7   r@   rN   r   rY   )r   r+   r2   r"   r3   r4   r5   clsr   r   r   _pprint_ordered_dict   s    	z"PrettyPrinter._pprint_ordered_dictc                 C  s,   | d | |||||| | d d S )N[]r7   _format_itemsr   r+   r2   r"   r3   r4   r5   r   r   r   _pprint_list   s    	
zPrettyPrinter._pprint_listc                 C  s,   | d | |||||| | d d S rZ   r`   rb   r   r   r   _pprint_tuple   s    	
zPrettyPrinter._pprint_tuplec           	      C  sz   t |s|t| d S |j}|tkr8|d d}n||jd  d}t|td}| |||||| || d S )NrS   rV   z({z})rT   )	r[   r7   r@   rN   r.   r   rW   r   ra   )	r   r+   r2   r"   r3   r4   r5   typendcharr   r   r   _pprint_set   s    	
zPrettyPrinter._pprint_setc                 C  s  |j }t|s|t| d S g }|d}	|dkrD|d7 }|d7 }| j|  }
}t|	D ]\}}t|}|t|	d kr|
|8 }
t||
kr|| qZtd|}|st	|d rt	|
  |}d}t|D ]l\}}|| }|t|d kr|t|	d kr||8 }tt||kr:|r4|t| |}q|}q|rZ|t| qZt|dkrn|| d S |dkr|d t|D ],\}}|dkr|dd	|   || q|dkr|d
 d S )NTr   z\S*\s* rL   r   
 rM   )r7   r[   r@   
splitlinesr)   	enumerateappendrefindallAssertionErrorpop)r   r+   r2   r"   r3   r4   r5   r7   chunkslines
max_width1	max_widthilinerepparts
max_width2currentjpart	candidater   r   r   _pprint_str   sX    	
$


zPrettyPrinter._pprint_strc                 C  s   |j }t|dkr"|t| d S |dk}|rF|d7 }|d7 }|d d}	t|| j| |D ]$}
||	 ||
 |	s\dd|  }	q\|r|d d S )Nr   r   rL   ri   rj   rk   rM   )r7   r[   r@   _wrap_bytes_reprr)   )r   r+   r2   r"   r3   r4   r5   r7   parensdelimry   r   r   r   _pprint_bytes1  s"    	zPrettyPrinter._pprint_bytesc              	   C  s>   |j }|d | t|||d |d ||d  |d d S )Nz
bytearray(
   r   rM   )r7   r   bytes)r   r+   r2   r"   r3   r4   r5   r7   r   r   r   _pprint_bytearrayN  s    	     zPrettyPrinter._pprint_bytearrayc                 C  s0   | d | | ||||| | d d S )Nzmappingproxy(rM   )r7   r-   copyrb   r   r   r   _pprint_mappingproxy`  s    	
z"PrettyPrinter._pprint_mappingproxyc           	      C  sV   t |tjkrd}n|jj}|j }||d  | |||||| |d d S )N	namespacerL   rM   )	r   _typesSimpleNamespacerN   r   __dict__rR   r7   rP   rQ   r   r   r   _pprint_simplenamespaceo  s    	
z%PrettyPrinter._pprint_simplenamespacezlist[tuple[Any, Any]])rR   r2   r"   r3   r4   r5   r%   c              	   C  s   |sd S |j }|| j }dd|  }	|D ]F\}
}||	 || |
|| |d | |||d|| |d q(|dd|   d S )Nrj   rk   : r   ,)r7   r(   rC   r-   r   rR   r2   r"   r3   r4   r5   r7   item_indentdelimnlrU   entr   r   r   rX     s    	

z PrettyPrinter._format_dict_itemsc              	   C  s   |sd S |j }|| j }dd|  }	|D ]^\}
}||	 ||
 |d t||kr^|d n | |||t|
 d d|| |d q(|dd|   d S )Nrj   rk   =...r   r   )r7   r(   r   r-   r[   r   r   r   r   rP     s*    	

	
z%PrettyPrinter._format_namespace_itemsz	list[Any]c              	   C  sf   |sd S |j }|| j }dd|  }	|D ](}
||	 | |
||d|| |d q(|dd|   d S )Nrj   rk   r   r   )r7   r(   r-   )r   rR   r2   r"   r3   r4   r5   r7   r   r   itemr   r   r   ra     s    	

zPrettyPrinter._format_items)r+   r4   r5   r%   c                 C  s   |  || | j|S r
   )
_safe_reprr   r'   )r   r+   r4   r5   r   r   r   rC     s    zPrettyPrinter._reprc                 C  sL   |  |j||}||jj d| d | |||||| |d d S )NrL   , rM   )rC   default_factoryr7   rN   r   rY   )r   r+   r2   r"   r3   r4   r5   rdfr   r   r   _pprint_default_dict  s    	z"PrettyPrinter._pprint_default_dictc                 C  sT   | |jjd  |rF| d | }| |||||| | d | d d S )NrL   rS   rV   rM   )r7   rN   r   most_commonrX   )r   r+   r2   r"   r3   r4   r5   rR   r   r   r   _pprint_counter  s    	

zPrettyPrinter._pprint_counterc                 C  sn   t |jr&t |jdkr8t |jd s8|t| d S ||jjd  | |j||||| |d d S )Nr   r   rL   rM   )r[   mapsr7   r@   rN   r   ra   rb   r   r   r   _pprint_chain_map  s    	&zPrettyPrinter._pprint_chain_mapc                 C  s\   | |jjd  |jd k	r,| d|j  | d | ||||d || | d d S )NrL   zmaxlen=%d, r^   r   z]))r7   rN   r   maxlenra   rb   r   r   r   _pprint_deque  s    	

zPrettyPrinter._pprint_dequec              	   C  s   |  |j|||||d  d S Nr   r-   datarb   r   r   r   _pprint_user_dict'  s    	zPrettyPrinter._pprint_user_dictc              	   C  s   |  |j|||||d  d S r   r   rb   r   r   r   _pprint_user_list4  s    	zPrettyPrinter._pprint_user_listc              	   C  s   |  |j|||||d  d S r   r   rb   r   r   r   _pprint_user_stringA  s    	z!PrettyPrinter._pprint_user_string)r+   r4   	maxlevelsr5   r%   c                 C  s  t |}|tkrt|S t|dd }t|tr|tjkr|s@dS t|}|rX||krXdS ||krht|S |	| g }|j
}	|d7 }t| tdD ]:\}
}| |
|||}| ||||}|	| d|  q|| dd|S t|tr|tjkst|tr|tjkrt|tr6|s0d	S d
}n"t|dkrJd}n|sTdS d}t|}|rx||krx|d S ||krt|S |	| g }|j
}	|d7 }|D ]}| ||||}|	| q|| |d| S t|S )Nr;   z{}z{...}r   rT   r   z{{{}}}r   z[]z[%s]z(%s,)z()z(%s)r   )r   _builtin_scalarsr@   rG   
issubclassdictr;   r   r8   r<   rn   rW   rR   r   r   r=   formatjoinlisttupler[   )r   r+   r4   r   r5   re   rrD   
componentsrn   kvkreprvreprr   ooreprr   r   r   r   N  sf    




zPrettyPrinter._safe_repr)r   r   N)4r   r   r   r   r1   r-   rB   r9   __annotations__rY   r   r;   r]   _collectionsOrderedDictrc   r   rd   r   rg   r.   	frozensetr   r   r   r   r   	bytearrayr   r   MappingProxyTyper   r   rX   rP   ra   rC   r   defaultdictr   Counterr   ChainMapr   dequer   UserDictr   UserListr   
UserStringr   r   r   r   r   r   ;   sb   
   $





9


%r   r   r   r*   c                 C  s   dt | j dt|  dS )Nz<Recursion on z	 with id=>)r   r   r   rJ   r   r   r   r8     s    r8   r    zIterator[str])r+   r#   r3   r%   c                 c  s   d}t | d d }tdt | dD ]T}| ||d  }|| }||krP||8 }t t||krt|rnt|V  |}q$|}q$|rt|V  d S )N    r   r   )r[   ranger@   )r+   r#   r3   r|   lastrw   r~   r   r   r   r   r     s    
r   ) 
__future__r   collectionsr   Zdataclassesr>   ior   r,   ro   typesr   typingr   r   r   r   r   r   r   r   r   r   r   floatcomplexboolr   r    r   r8   r   r   r   r   r   <module>   s*       R