U
    d#                     @   s  d Z ddlZddlmZmZ ddlm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mZmZmZmZmZ d	d
lmZ dZeddZeddZeddZeddZeefZ e
fZ!e"e#fZ$eddd	Z%edddZ&edddZ'eddd	Z(edddZ)edddZ*eddd	Z+edddZ,eddd	Z-edddZ.edddZ/d;d d!Z0e&e*fd"d#Z1e*fd$d%Z2d&d' Z3d(d) Z4d<d+d,Z5d-d. Z6d/d0 Z7d1d2 Z8d3d4 Z9d=d5d6Z:d7d8 Z;ddde<fd9d:Z=dS )>a  Streaming, truncating, non-recursive version of :func:`repr`.

Differences from regular :func:`repr`:

- Sets are represented the Python 3 way: ``{1, 2}`` vs ``set([1, 2])``.
- Unicode strings does not have the ``u'`` prefix, even on Python 2.
- Empty set formatted as ``set()`` (Python 3), not ``set([])`` (Python 2).
- Longs don't have the ``L`` suffix.

Very slow with no limits, super quick with limits.
    N)deque
namedtuple)Decimal)chain)Number)
_recursion)	AnyAnyStrCallableDictIteratorListSequenceSetTuple   )truncate)saferepr
reprstream_literal)valuer   	direction_key)r   _quoted_dirty)objid{F: T}[]z, ()z,)   c                 C   s   d t| |||dS )zSafe version of :func:`repr`.

    Warning:
        Make sure you set the maxlen argument, or it will be very slow
        for recursive objects.  With the maxlen set, it's often faster
        than built-in repr.
     )maxlen	maxlevelsseen)join	_saferepr)or&   r'   r(    r,   9/tmp/pip-unpacked-wheel-9cz4377o/celery/utils/saferepr.pyr   C   s    	   r   c                 c   sN   t | }t|  D ]4\}\}}t|V  |V  |V  ||d k r|V  qd S Nr   )len	enumerateitemsr   )mappingLIT_DICT_KVSEPLIT_LIST_SEPsizeikvr,   r,   r-   
_chaindictQ   s    
r9   c                 c   s6   t | }t| D ] \}}|V  ||d k r|V  qd S r.   )r/   r0   )itr4   r5   r6   r8   r,   r,   r-   
_chainlist^   s
    r;   c                 C   s   t | j dS )Nz())type__name__sr,   r,   r-   _repr_empty_setg   s    r@   c                 C   s@   t | tr<z| d W n" tk
r:   | jddd Y S X | S )Nutf-8backslashreplaceerrors)
isinstancebytesencodeUnicodeDecodeErrordecode)valr,   r,   r-   	_safetextl   s    
rK   ...c                 C   sP   |r<t | |kr<t| d |  }tdt| | dS tdt|  dS )N')r/   
memoryviewtobytes_bytes_prefix_repr_binary_bytes)rJ   r&   Zellipsischunkr,   r,   r-   _format_binary_bytesx   s    rS   c                 C   s   d|  S )Nbr,   r>   r,   r,   r-   rP      s    rP   c                 C   sb   z|  dW S  tk
r\   z
| j}W n& tk
rL   | j ddd Y  Y S X |  Y S Y nX d S )NrA   replacerC   )rI   rH   hexAttributeError)rJ   Zashexr,   r,   r-   rQ      s    
rQ   c                 C   s0   t | trt| |S dt| |ddS d S )Nz'{}'rM   z\')rE   rF   rS   formatr   rU   )rJ   r&   r,   r,   r-   _format_chars   s    

rY   c                 C   sj   z
t | W S  tk
rd } z<dt }dt| t| dd|d|d W Y S d }~X Y nX d S )N
z<Unrepresentable z#xr    >)repr	Exceptionr)   	tracebackformat_stackr<   id)objexcstackr,   r,   r-   _repr   s
    
re   c           
      c   s   t t| gg}t|||dD ]\}}|d k	rJ|dkrJdV  ||  qt|tr\|j}n@t|trvt|j||}n&t|t	rt
|j|}ntt||}|V  |d k	r|t|8 }q|D ]&}|D ]}	t|	tr|	js|	jV  qqd S )N)r(   r'   r   z, ...)r   iterr   appendrE   r   r   r   r   r   rY   rK   r   r/   )
r+   r&   r'   r(   rd   tokenr:   rJ   Zrest1Zrest2r,   r,   r-   r*      s(    



r*   c                 C   sR   t | |kr|||| fS tt | j d|j ddt|j ddd|| fS )Nr"   Fr   r#   r   )r<   r   r=   r   )rJ   	lit_startlit_endZbuiltin_typeZchainerr,   r,   r-   _reprseq   s    rk   c                 c   s@  |pt  }| j}| j}|j}|j}|j}	| r<d }
}| }|D ]}|}||trb||j q@q@||tr||j	7 }||fV  q@||t
r||fV  q@||trt||fV  q@||trt||fV  q@||trt||fV  q@||trt||fV  q@||tr<|s$t||fV  q@t|ttt t\}
}}n||trptt|dkr\tntt|  }
}}nT||trttt |  }
}}n2||t!rt"t#t|  }
}}nt||fV  q@|r||kr|
j$ d|j$ |fV  q@t%|}||rt&||fV  q@|	| |t'|
g|t||g|  q(q@q(dS )z Streaming repr, yielding tokens.Nr   rL   )(setrg   popleft__contains__discardaddr   r   r   r   r   r   re   safe_tstrchars_tr   rangeset_tr@   rk   LIT_SET_STARTLIT_SET_ENDr;   tupleLIT_TUPLE_STARTr/   LIT_TUPLE_END_SVLIT_TUPLE_ENDdictLIT_DICT_STARTLIT_DICT_ENDr9   listLIT_LIST_STARTLIT_LIST_ENDr   ra   r   r   )rd   r(   r'   levelrE   rg   rm   Z
is_in_seenZdiscard_from_seenZadd_to_seenri   rj   r:   rJ   origr   r,   r,   r-   r      s    









        
r   )Nr$   N)rL   )Nr$   N)>__doc__r_   collectionsr   r   decimalr   	itertoolsr   Znumbersr   pprintr   typingr   r	   r
   r   r   r   r   r   r   textr   __all__r   r   r   r   rF   rr   rs   rq   	frozensetrl   ru   r}   r3   r~   r   r   r4   rv   rw   ry   r{   rz   r   r9   r;   r@   rK   rS   rP   rQ   rY   re   r*   rk   rE   r   r,   r,   r,   r-   <module>   sT   ,






	
		
