U
    EZh'                     @   sf  U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ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mZm Z m!Z!m"Z" d d	l#m$Z$ zd dl%Z&e'e&d
Z(W n e)k
r   dZ(Y nX ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< erddl=m>Z>m?Z?m@Z@mAZAmBZBmCZC eeDdddZEeed dddZFeGeDdddZHeIdg ZJeGeDdd d!ZKdeed# d$eDeDeeL eeL eeL eDe"eMdf d%
d&d'ZNeGe"eOe!eOd(f f eDd)d*d+ZPded# d$eDeDeeL eeL eeL eDdd,	d-d.ZQG d/d0 d0e7ZReeef e!eMeMeMf d1d2d3ZSee e!eMeMeMf d1d4d5ZTd6e!eMeMeMf d1d7d8ZUejVd9d: eeUeeSed;d: eeTeWd<d: e	d=d: eXd>d: eYd?d: e
d@d: eZdAd: e[dBd: edCd: iZ\eeOeege!eMeMeMf f f e]dD< e[e\^ Z_eWejVee	fZ`eeDddEdFZaeG dGdH dHZbeG dIdJ dJZceeDddKdLZddeeeL eeL eeL ebdMdNdOZedPdQdddddReeLeLeeL eeL eeL eDeMdSdTdUZfddVdddddWeed# eDeeL eeL eeL eDddXdYdZZgehd[krbG d\d] d]Zid d^lmjZj G d_d` d`ejZkeeLZldaeldb< ddcdddedfdadgdhdidjhgeXddkdlheeYdmdndodpdqdrgiedndsdtdududvgdwekdxdydzd{d|d}gei d~Zmemdb nem d dlompZp epeRemdVdd G dd dZqepeReq  dS )    N)array)CounterUserDictUserListdefaultdictdeque)	dataclassfieldsis_dataclass)isclass)islice)MappingProxyType)TYPE_CHECKINGAnyCallableDefaultDictDequeDictIterableListOptionalSequenceSetTupleUnion)RichReprResultibF   get_console)	loop_last)	pick_bool)RichRenderablecell_len)ReprHighlighter)JupyterMixinJupyterRenderable)Measurement)Text)ConsoleConsoleOptionsHighlighterTypeJustifyMethodOverflowMethodRenderResultobjreturnc                 C   s   t ott| S )z1Check if an object was created with attrs module.)
_has_attrs_attr_moduleZhastyper1    r7   ;/tmp/pip-unpacked-wheel-36xvkur8/pip/_vendor/rich/pretty.py_is_attr_object<   s    r9   z_attr_module.Attribute[Any]c                 C   s   t rtt| S g S )zGet fields for an attrs object.)r3   r4   r	   r5   r6   r7   r7   r8   _get_attr_fieldsA   s    r:   c                 C   s4   z| j jjtjtjfkW S  tk
r.   Y dS X dS )zCheck if an instance of a dataclass contains the default repr.

    Args:
        obj (object): A dataclass instance.

    Returns:
        bool: True if the default repr is used, False if there is a custom repr.
    FN)__repr____code__co_filenamedataclasses__file__reprlib	Exceptionr6   r7   r7   r8   _is_dataclass_reprF   s    rB   _dummy_namedtuplec              	   C   sB   d}zt | j}W n ttfk
r,   Y nX t tj}||kS )zCheck if an instance of namedtuple contains the default repr

    Args:
        obj (object): A namedtuple

    Returns:
        bool: True if the default repr is used, False if there's a custom repr.
    N)inspectgetfiler;   OSError	TypeErrorrC   )r1   Zobj_fileZdefault_repr_filer7   r7   r8   _has_default_namedtuple_repr]   s    	rH   ignorer*   r.   )
valueconsoleoverflowcropindent_guides
max_length
max_string	max_depth
expand_allr2   c	                 C   s   ddl m}	 t| ts| d kr"d S |p*t }| L}
t| |	rH|  |jt| trZ| nt	| ||||||dd|ddd W 5 Q R X |

 dS )	Nr   )ConsoleRenderable   )rL   rN   rO   rP   rQ   rR   marginT )rM   Znew_line_startend
)rK   rS   _safe_isinstancer'   r   capturelineprintr"   Prettygetrstrip)rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rZ   r7   r7   r8   _ipy_display_hookq   s2    


r`   .)r1   class_or_tupler2   c                 C   s(   zt | |W S  tk
r"   Y dS X dS )zFisinstance can fail in rare cases, for example types with no __class__FN)
isinstancerA   )r1   ra   r7   r7   r8   rY      s    rY   )	rK   rL   rM   rN   rO   rP   rQ   rR   r2   c              	      s   ddl m  p   dk	s"ttdd fdd}z
t }	W n tk
rh   |t_Y n@X ddlm	}
 G fdd	d	|
}| }||	j
jd
< dS )a  Install automatic pretty printing in the Python REPL.

    Args:
        console (Console, optional): Console instance or ``None`` to use global console. Defaults to None.
        overflow (Optional[OverflowMethod], optional): Overflow method. Defaults to "ignore".
        crop (Optional[bool], optional): Enable cropping of long lines. Defaults to False.
        indent_guides (bool, optional): Enable indentation guides. Defaults to False.
        max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to None.
        max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None.
        max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None.
        expand_all (bool, optional): Expand all containers. Defaults to False.
        max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100.
    r   r   NrJ   r2   c              
      sR   | dk	rN dk	st dt_ jt| tr,| nt| dd | t_dS )z?Replacement sys.displayhook which prettifies objects with Rich.N)rL   rN   rO   rP   rQ   rR   )rM   )AssertionErrorbuiltins_r\   rY   r"   r]   )rJ   )rK   rM   rR   rN   rQ   rO   rP   rL   r7   r8   display_hook   s$    
zinstall.<locals>.display_hook)BaseFormatterc                       s:   e Zd ZU dZeed< eed fddZdS )zinstall.<locals>.RichFormatterTpprintrc   c              
      s,   | j r t|  dS t|S d S )N)rK   rL   rN   rO   rP   rQ   rR   )ri   r`   repr)selfrJ   rR   r   rN   rQ   rO   rP   rL   r7   r8   __call__   s    z'install.<locals>.RichFormatter.__call__N)__name__
__module____qualname__ri   bool__annotations__r   rm   r7   rl   r7   r8   RichFormatter   s   
rs   z
text/plain)pip._vendor.richr   rd   r   Zget_ipython	NameErrorsysdisplayhookZIPython.core.formattersrh   Zdisplay_formatter
formatters)rK   rL   rM   rN   rO   rP   rQ   rR   rg   iprh   rs   Zrich_formatterr7   )	rK   rM   rR   r   rN   rQ   rO   rP   rL   r8   install   s    
"
 rz   c                   @   s   e Zd ZdZdddddddddddddeed eed ed	 ee eee ee ee eeedd
ddZddddddZ	ddddddZ
dS )r]   ak  A rich renderable that pretty prints an object.

    Args:
        _object (Any): An object to pretty print.
        highlighter (HighlighterType, optional): Highlighter object to apply to result, or None for ReprHighlighter. Defaults to None.
        indent_size (int, optional): Number of spaces in indent. Defaults to 4.
        justify (JustifyMethod, optional): Justify method, or None for default. Defaults to None.
        overflow (OverflowMethod, optional): Overflow method, or None for default. Defaults to None.
        no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to False.
        indent_guides (bool, optional): Enable indentation guides. Defaults to False.
        max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to None.
        max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None.
        max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None.
        expand_all (bool, optional): Expand all containers. Defaults to False.
        margin (int, optional): Subtrace a margin from width to force containers to expand earlier. Defaults to 0.
        insert_line (bool, optional): Insert a new line if the output has multiple new lines. Defaults to False.
    N   Fr   )indent_sizejustifyrL   no_wraprN   rO   rP   rQ   rR   rU   insert_liner,   r-   r.   )_objecthighlighterr|   r}   rL   r~   rN   rO   rP   rQ   rR   rU   r   r2   c                C   sX   || _ |pt | _|| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _|| _|| _d S N)r   r%   r   r|   r}   rL   r~   rN   rO   rP   rQ   rR   rU   r   )rk   r   r   r|   r}   rL   r~   rN   rO   rP   rQ   rR   rU   r   r7   r7   r8   __init__  s    zPretty.__init__r*   r+   r/   )rK   optionsr2   c              	   c   s   t | j|j| j | j| j| j| j| jd}t	j
|| jp:|j| jpD|jt| j|jdd}|rf| |nt	t| j ddd}| jr|js|j| jdd}| jrd|krd	V  |V  d S )
N	max_widthr|   rO   rP   rQ   rR   pretty)r}   rL   r~   stylez.__repr__ returned empty stringz
dim italic)r   zrepr.indentrX   rV   )pretty_reprr   r   rU   r|   rO   rP   rQ   rR   r)   Z	from_ansir}   rL   r!   r~   r   r5   rN   Z
ascii_onlyZwith_indent_guidesr   )rk   rK   r   
pretty_strZpretty_textr7   r7   r8   __rich_console__0  s>    
	

	 zPretty.__rich_console__r(   c              	   C   sL   t | j|j| j| j| j| j| jd}|r>tdd |	 D nd}t
||S )Nr   c                 s   s   | ]}t |V  qd S r   r#   .0r[   r7   r7   r8   	<genexpr>`  s     z*Pretty.__rich_measure__.<locals>.<genexpr>r   )r   r   r   r|   rO   rP   rQ   rR   max
splitlinesr(   )rk   rK   r   r   
text_widthr7   r7   r8   __rich_measure__S  s    
zPretty.__rich_measure__)N)rn   ro   rp   __doc__r   r   intrq   r   r   r   r7   r7   r7   r8   r]      sL      $ r]   )r   r2   c                 C   s   d| j ddd| j dfS )Nzdefaultdict(z, {})z, {}))default_factoryr   r7   r7   r8   _get_braces_for_defaultdicte  s    r   c                 C   s,   | j d krdS dd| j  dd| j  dfS )N)deque([])zdeque()r   z
], maxlen=)zdeque(maxlen=)maxlenr   r7   r7   r8   _get_braces_for_dequem  s    
r   z
array[Any]c                 C   s   d| j ddd| j dfS )Nzarray(z, [r   r   )typecoder   r7   r7   r8   _get_braces_for_arrayw  s    r   c                 C   s   dS )N)z	environ({r   zenviron({})r7   r   r7   r7   r8   <lambda>|      r   c                 C   s   dS )N)z	Counter({r   z	Counter()r7   r   r7   r7   r8   r     r   c                 C   s   dS N){}z{}r7   r   r7   r7   r8   r     r   c                 C   s   dS r   r7   r   r7   r7   r8   r     r   c                 C   s   dS )N)zfrozenset({r   zfrozenset()r7   r   r7   r7   r8   r     r   c                 C   s   dS N)[]z[]r7   r   r7   r7   r8   r     r   c                 C   s   dS r   r7   r   r7   r7   r8   r     r   c                 C   s   dS )N)r   r   zset()r7   r   r7   r7   r8   r     r   c                 C   s   dS )N)(r   ()r7   r   r7   r7   r8   r     r   c                 C   s   dS )N)zmappingproxy({r   zmappingproxy({})r7   r   r7   r7   r8   r     r   _BRACESc                 C   s.   t | ts$t| s$t| ds$t| o,t|  S )z3Check if an object may be expanded by pretty print.__rich_repr__)rY   _CONTAINERSr
   hasattrr9   r   r6   r7   r7   r8   is_expandable  s    
r   c                   @   s   e Zd ZU dZdZeed< dZeed< dZeed< dZ	eed< dZ
eed< dZeed	< dZeed
< dZeed< dZeed   ed< dZeed< dZeed< ee dddZeeedddZedddZdeeeedddZdS ) Nodez4A node in a repr tree. May be atomic or a container.rV   key_repr
value_repr
open_braceclose_braceemptyFlastis_tupleis_namedtupleNchildrenz: key_separatorz, 	separatorr2   c                 c   s   | j r| j V  | jV  | jr&| jV  n| jdk	r| jr| jV  | jrt| jstt| jdkrt| jd  E dH  dV  n(| jD ] }| E dH  |j	sz| j
V  qz| jV  n| jV  dS )zGenerate tokens for this node.Nr   r   ,)r   r   r   r   r   r   r   leniter_tokensr   r   r   r   )rk   childr7   r7   r8   r     s"    




zNode.iter_tokens)start_lengthrO   r2   c                 C   s0   |}|   D ]}|t|7 }||kr dS qdS )a*  Check the length fits within a limit.

        Args:
            start_length (int): Starting length of the line (indent, prefix, suffix).
            max_length (int): Maximum length.

        Returns:
            bool: True if the node can be rendered within max length, otherwise False.
        FT)r   r$   )rk   r   rO   total_lengthtokenr7   r7   r8   check_length  s    
zNode.check_lengthc                 C   s   d |  }|S NrV   )joinr   )rk   Z	repr_textr7   r7   r8   __str__  s    zNode.__str__P   r{   )r   r|   rR   r2   c                 C   sx   t | ddg}d}|t|k r`|| }|jrV|jsV|s@||sV|||||d < |d7 }qddd |D }|S )al  Render the node to a pretty repr.

        Args:
            max_width (int, optional): Maximum width of the repr. Defaults to 80.
            indent_size (int, optional): Size of indents. Defaults to 4.
            expand_all (bool, optional): Expand all levels. Defaults to False.

        Returns:
            str: A repr string of the original object.
        T)nodeis_rootr   r   rX   c                 s   s   | ]}t |V  qd S r   )strr   r7   r7   r8   r     s     zNode.render.<locals>.<genexpr>)_Liner   
expandableexpandedr   expandr   )rk   r   r|   rR   linesZline_nor[   repr_strr7   r7   r8   render  s    
zNode.render)r   r{   F)rn   ro   rp   r   r   r   rr   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r     s0   
       r   c                   @   s   e Zd ZU dZdZed  ed< dZeed< dZ	ee
 ed< dZeed< dZeed	< dZeed
< dZeed< dZeed< eedddZeedddZeed  dddZedddZdS )r   zA line in repr output.NparentFr   r   rV   textsuffix
whitespacer   r   r   c                 C   s   t | jdk	o| jjS )z"Check if the line may be expanded.N)rq   r   r   rk   r7   r7   r8   r     s    z_Line.expandable)rO   r2   c                 C   s:   t | jt| j t| j }| jdk	s,t| j||S )z4Check this line fits within a given number of cells.N)r   r   r$   r   r   r   rd   r   )rk   rO   r   r7   r7   r8   r     s    z_Line.check_length)r|   r2   c                 c   s   | j }|dk	st| j}|js"t|jrJt|j |j |j |dV }nt|j|dV }| jd|  }|jozt	|jdk}t
|jD ]4\}}|rdn|j}	t||||	|o| d}
|
V  qt|j|| j| jdV  dS )z6Expand this line by adding children on their own line.N)r   r    r   r   )r   r   r   r   r   )r   r   r   r   )r   rd   r   r   r   r   r   r   r   r   r    r   r   r   r   )rk   r|   r   r   new_lineZchild_whitespaceZtuple_of_oner   r   r   r[   r7   r7   r8   r     s8    

z_Line.expandc                 C   sH   | j r | j | j | jpd S | j | j | jp4d | j  S d S r   )r   r   r   r   r   r_   r   r7   r7   r8   r   (  s    "z_Line.__str__)rn   ro   rp   r   r   r   rr   r   rq   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r7   r7   r7   r8   r     s   
!r   c                 C   s<   zt | dd}W n tk
r&   Y dS X t| to:t|tS )aX  Checks if an object is most likely a namedtuple. It is possible
    to craft an object that passes this check and isn't a namedtuple, but
    there is only a minuscule chance of this happening unintentionally.

    Args:
        obj (Any): The object to test

    Returns:
        bool: True if the object is a namedtuple. False otherwise.
    _fieldsNF)getattrrA   rb   tuple)r1   r	   r7   r7   r8   _is_namedtuple1  s
    r   )r   rO   rP   rQ   r2   c              	      s\   t tdfddt jjdt tttd fdd  | d	d
}|S )a`  Traverse object and generate a tree.

    Args:
        _object (Any): Object to be traversed.
        max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to None.
        max_string (int, optional): Maximum length of string before truncating, or None to disable truncating.
            Defaults to None.
        max_depth (int, optional): Maximum depth of data structures, or None for no maximum.
            Defaults to None.

    Returns:
        Node: The root of a tree structure which can be used to render a pretty repr.
    r0   c              
      s    dk	rFt | ttfrFt|  krFt|   }| d  d| }n@zt| }W n2 tk
r } zdt|d}W 5 d}~X Y nX |S )z0Get repr string for an object, but catch errors.N+z<repr-error >)rY   bytesr   r   rj   rA   )r1   Z	truncatedZobj_reprerror)rP   r7   r8   to_reprY  s    
"ztraverse.<locals>.to_reprFr   )r1   rootdepthr2   c           "         s  t }|krtddS t}dk	o0|k}tttttttf f  ddd}ztd}W n t	k
r|   d}Y nX d}|sztd	rt
s }W n t	k
r   Y nX |dk	r| tjd
d}	t||}
jj}|
rg }|j}|r0|	rtd| dd}nt| dd}n|	rRtd| dd||dd}nt| dd||d}t|
D ]h\}}t|tr|\}}||d d}||_||_d|_|| n||d d}||_|| qpn&t|	rd| dn| dg |d}| ntr*|s*| g }|j}t  r|rZtjj dd}ntjj dd||d}tttttttgtf  f  d fdd}t| D ]T\}\}}}|rtt||d}n||d d}||_||_d|_|| qntjj dg |d}| nptr
tts
|s
tr
| g }|j}|r~tjj dd}ntjj dd||jj dd}tfddtD D ]>\}}t|j|d d}|j|_||_d|_|| q| ntrt r| jj}|rFt| dd}npg }|j}t| dd|| dd}t! " D ]8\}\}}||d d}||_||_d|_|| q|| ntt#rt#D ]}t|r|} qq҈| t$| \}}}|r(t| d| d}nX|j%tj%krNt|d }n2rrg }t||||d}|j}t&}|d }tt'rt(" }dk	rt)|}t*|D ]:\} \}}||d d}||_| |k|_|| qnRt(}!dk	rt)|!}!t*|!D ],\} }||d d}| |k|_|| qdk	r|kr|td!|  d"d  nt|g |d#}| nt|d }ttk|_+t|_,|S )$zWalk the object depth first.z...)r   N)	rich_argsr2   c                 s   s   | D ]x}t |trvt|dkr>|\}}}||kr2q||fV  q|t|dkr^|\}}||fV  q|t|dkr||d V  q|V  qd S )N      r   r   )rY   r   r   )r   argkeyr   defaultr7   r7   r8   iter_rich_argsy  s    

z3traverse.<locals>._traverse.<locals>.iter_rich_argsZ,awehoi234_wdfjwljet234_234wdfoijsdfmmnxpi492Fr   angular<z...>z(...)r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   )r   =r   )r   r   r   r   c                  3   st    D ]j} | j rzt| j}W n0 tk
rN } z| j|dfV  W 5 d}~X Y qX | j|t| j rf| j ndfV  qdS )z$Iterate over attr fields and values.N)rj   r   namerA   callable)attrrJ   r   Zattr_fieldsr1   r7   r8   
iter_attrs  s     z/traverse.<locals>._traverse.<locals>.iter_attrs)r   r   r   r   r   c                 3   s$   | ]}|j rt |jr|V  qd S r   )rj   r   r   )r   fieldr6   r7   r8   r     s    z.traverse.<locals>._traverse.<locals>.<genexpr>)r   r   r   r   )r   r   z... +T)r   r   r   )-idr   r5   r   r   r   r   r   r   rA   r   r   r   list	__class__rn   appendr    rY   r   r   r   r   r9   r:   r   r   r
   rB   r	   r   r   rH   _asdictitemsr   r   r;   r   _MAPPING_CONTAINERSiterr   	enumerater   r   )"r1   r   r   Zobj_idZobj_typeZreached_max_depthr   Zfake_attributesZrich_repr_resultr   args
class_namer   r   r   r   r   r   r   Z
child_noder   r   rJ   Zrepr_callabler   Zcontainer_typer   r   r   Z	num_itemsZlast_item_indexZ
iter_itemsindexZiter_values)	_traverserQ   rO   pop_visitedpush_visitedr   visited_idsr   r8   r  m  s|   
$ 



  









ztraverse.<locals>._traverseT)r   )Fr   )r   r   setaddremoverq   r   r   )r   rO   rP   rQ   r   r7   )r  rQ   rO   rP   r  r  r   r  r8   traverseD  s    & ~r  r   r{   r   )r   r   r|   rO   rP   rQ   rR   r2   c          	      C   s4   t | tr| }nt| |||d}|j|||d}|S )a  Prettify repr string by expanding on to new lines to fit within a given width.

    Args:
        _object (Any): Object to repr.
        max_width (int, optional): Desired maximum width of repr string. Defaults to 80.
        indent_size (int, optional): Number of spaces to indent. Defaults to 4.
        max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to None.
        max_string (int, optional): Maximum length of string before truncating, or None to disable truncating.
            Defaults to None.
        max_depth (int, optional): Maximum depth of nested data structure, or None for no depth.
            Defaults to None.
        expand_all (bool, optional): Expand all containers regardless of available width. Defaults to False.

    Returns:
        str: A possibly multi-line representation of the object.
    )rO   rP   rQ   )r   r|   rR   )rY   r   r  r   )	r   r   r|   rO   rP   rQ   rR   r   r   r7   r7   r8   r   n  s    
     r   T)rK   rN   rO   rP   rQ   rR   )r   rK   rN   rO   rP   rQ   rR   r2   c             
   C   s6   |dkrt  n|}|jt| |||||dddd dS )a  A convenience function for pretty printing.

    Args:
        _object (Any): Object to pretty print.
        console (Console, optional): Console instance, or None to use default. Defaults to None.
        max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to None.
        max_string (int, optional): Maximum length of strings before truncating, or None to disable. Defaults to None.
        max_depth (int, optional): Maximum depth for nested data structures, or None for unlimited depth. Defaults to None.
        indent_guides (bool, optional): Enable indentation guides. Defaults to True.
        expand_all (bool, optional): Expand all containers. Defaults to False.
    NrI   )rO   rP   rQ   rN   rR   rL   T)Z	soft_wrap)r   r\   r]   )r   rK   rN   rO   rP   rQ   rR   Z_consoler7   r7   r8   ri     s    	ri   __main__c                   @   s   e Zd ZedddZdS )
BrokenReprr   c                 C   s   dd  dS )Nr   r   zthis will failr7   r   r7   r7   r8   r;     s    zBrokenRepr.__repr__Nrn   ro   rp   r   r;   r7   r7   r7   r8   r
    s   r
  )
NamedTuplec                   @   s:   e Zd ZU eed< eed< eed< eed< ee ed< dS )StockKeepingUnitr   descriptionZpricecategoryZreviewsN)rn   ro   rp   r   rr   floatr   r7   r7   r7   r8   r    s
   
r     foozHello World!gZd;Y@gʡE3t@g    cA      )r   r   r   r{      r   r   ZcrumbleZappleZrhubarbZbutterZsugarZflourZorangeZpearZkumquatAX  duriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurianduriandurian)FTNzSparkling British Spring WaterzCarbonated spring waterg?Zwaterzits amazing!zits terrible!)r  barr   counterZatomic
namedtupleZBroken)r\      )rN   rP   c                   @   s   e Zd ZedddZdS )Thingr   c                 C   s   dS )NzHello[38;5;239m World!r7   r   r7   r7   r8   r;     s    zThing.__repr__Nr  r7   r7   r7   r8   r    s   r  )NrI   FFNNNF)NrI   FFNNNF)NNN)rre   collectionsr>   rD   osr@   rv   r   r   r   r   r   r   r   r	   r
   r   	itertoolsr   typesr   typingr   r   r   r   r   r   r   r   r   r   r   r   r   Zpip._vendor.rich.reprr   r   r4   r   r3   ImportErrorrV   r   Z_loopr    Z_pickr!   abcr"   cellsr$   r   r%   Zjupyterr&   r'   Zmeasurer(   r   r)   rK   r*   r+   r,   r-   r.   r/   rq   r9   r:   objectrB   r  rC   rH   r   r   r`   r5   rY   rz   r]   r   r   r   _Environdict	frozensetr   r  r   r   rr   keysr   r   r   r   r   r   r  r   ri   rn   r
  r  r  ddatar   rt   r\   r  r7   r7   r7   r8   <module>   s   <
 
        
1         Rh"
             (
TC     /+%
 
!