U
    nËjÇ,  ã                   @  s   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZ ejdk rvd dlmZ ed	ed
ed�Zeded�Zeded
ed�Zeded�Zeddd�Zeddd�Zddddœdd„Zdddœdd„Zdd „ ZG d!d„ deee ƒZG d"d„ dee eƒZ dS )#é    )ÚannotationsN)ÚCallableÚSequence)Úpartial)ÚgetmroÚisclass)ÚTYPE_CHECKINGÚGenericÚTypeÚTypeVarÚcastÚoverload)é   é   )r   Ú_BaseExceptionT_coT)ÚboundÚ	covariantÚdefaultÚ_BaseExceptionT)r   Ú_ExceptionT_coÚ_ExceptionTÚ_ExceptionGroupSelfÚExceptionGroupÚ_BaseExceptionGroupSelfÚBaseExceptionGroupÚBaseExceptionztuple[type[BaseException]]Úbool)ÚexcÚparentsÚreturnc                 C  s*   t | jƒd d… D ]}||kr dS qdS )NéÿÿÿÿTF)r   Ú	__class__)r   r   Úcls© r#   ú>/tmp/pip-unpacked-wheel-5uj10mm2/exceptiongroup/_exceptions.pyÚcheck_direct_subclass   s    r%   ú`type[_BaseExceptionT] | tuple[type[_BaseExceptionT], ...] | Callable[[_BaseExceptionT_co], bool]z$Callable[[_BaseExceptionT_co], bool])Ú	conditionr   c                 C  sr   t | ƒr*tttt | ƒtƒr*tt| fd�S t| tƒrTt	dd„ | D ƒƒrftt| d�S nt
| ƒrftd| ƒS tdƒ‚d S )N)r   c                 s  s    | ]}t |ƒot|tƒV  qd S ©N)r   Ú
issubclassr   )Ú.0Úxr#   r#   r$   Ú	<genexpr>-   s     z'get_condition_filter.<locals>.<genexpr>zCallable[[BaseException], bool]z?expected a function, exception type or tuple of exception types)r   r)   r   r
   r   r   r%   Ú
isinstanceÚtupleÚallÚcallableÚ	TypeError)r'   r#   r#   r$   Úget_condition_filter#   s    
 ÿ

r2   c                 C  s<   |   |¡}| j|_| j|_| j|_t| dƒr8t| jƒ|_|S )NÚ	__notes__)ÚderiveÚ	__cause__Ú__context__Ú__traceback__ÚhasattrÚlistr3   )ÚselfZexcsZegr#   r#   r$   Ú_derive_and_copy_attributes5   s    

r;   c                      s`  e Zd ZdZdddddœ‡ fdd„Zddd	d
dœdd„Zdd
dœdd„Zeddœdd„ƒZeddœdd„ƒZ	e
dddœdd„ƒZe
dddœdd„ƒZe
dd dœd!d„ƒZd"ddœd#d„Ze
dd$dœd%d&„ƒZe
dd'dœd(d&„ƒZe
dd)dœd*d&„ƒZd+d,dœd-d&„Ze
d.d/d0œd1d2„ƒZe
d3d4d0œd5d2„ƒZd3d4d0œd6d2„Zddœd7d8„Zddœd9d:„Z‡  ZS );r   z/A combination of multiple unrelated exceptions.ztype[_BaseExceptionGroupSelf]ÚstrzSequence[_BaseExceptionT_co]r   )r"   Ú_BaseExceptionGroup__messageÚ_BaseExceptionGroup__exceptionsr   c                   sâ   t |tƒstdt|ƒ› �ƒ‚t |tƒs.tdƒ‚|s:tdƒ‚t|ƒD ]"\}}t |tƒsBtd|› d�ƒ‚qB| tkr„t	dd„ |D ƒƒr„t
} t| tƒrÄ|D ]0}t |tƒs’| t
kr²tdƒ‚q’td	| j›�ƒ‚q’tƒ  | ||¡}t|ƒ|_|S )
Nzargument 1 must be str, not z/second argument (exceptions) must be a sequencez9second argument (exceptions) must be a non-empty sequencezItem z4 of second argument (exceptions) is not an exceptionc                 s  s   | ]}t |tƒV  qd S r(   )r-   Ú	Exception)r*   r   r#   r#   r$   r,   X   s     z-BaseExceptionGroup.__new__.<locals>.<genexpr>z/Cannot nest BaseExceptions in an ExceptionGroupzCannot nest BaseExceptions in )r-   r<   r1   Útyper   Ú
ValueErrorÚ	enumerater   r   r/   r   r)   r?   Ú__name__ÚsuperÚ__new__r.   Ú_exceptions)r"   r=   r>   Úir   Úinstance©r!   r#   r$   rE   C   s:    

ÿ

ÿ

ÿ
ÿ
zBaseExceptionGroup.__new__ÚobjectÚNone)r=   r>   Úargsr   c                 G  s   t j| ||f|žŽ  d S r(   )r   Ú__init__)r:   r=   r>   rL   r#   r#   r$   rM   k   s    zBaseExceptionGroup.__init__)Únoter   c                 C  sF   t |tƒs&td|›dt|ƒj› d�ƒ‚t| dƒs6g | _| j |¡ d S )NzExpected a string, got note=z (type ú)r3   )r-   r<   r1   r@   rC   r8   r3   Úappend)r:   rN   r#   r#   r$   Úadd_notes   s    
ÿ
zBaseExceptionGroup.add_note©r   c                 C  s
   | j d S )Nr   )rL   ©r:   r#   r#   r$   Úmessage~   s    zBaseExceptionGroup.messagezGtuple[_BaseExceptionT_co | BaseExceptionGroup[_BaseExceptionT_co], ...]c                 C  s
   t | jƒS r(   )r.   rF   rS   r#   r#   r$   Ú
exceptions‚   s    zBaseExceptionGroup.exceptionsú1type[_ExceptionT] | tuple[type[_ExceptionT], ...]ú"ExceptionGroup[_ExceptionT] | None)Ú_BaseExceptionGroup__conditionr   c                 C  s   d S r(   r#   ©r:   rX   r#   r#   r$   Úsubgroupˆ   s    zBaseExceptionGroup.subgroupz9type[_BaseExceptionT] | tuple[type[_BaseExceptionT], ...]z*BaseExceptionGroup[_BaseExceptionT] | Nonec                 C  s   d S r(   r#   rY   r#   r#   r$   rZ   �   s    z>Callable[[_BaseExceptionT_co | _BaseExceptionGroupSelf], bool]z-BaseExceptionGroup[_BaseExceptionT_co] | Nonec                 C  s   d S r(   r#   rY   r#   r#   r$   rZ   ’   s    zztype[_BaseExceptionT] | tuple[type[_BaseExceptionT], ...] | Callable[[_BaseExceptionT_co | _BaseExceptionGroupSelf], bool]c                 C  s–   t |ƒ}d}|| ƒr| S g }| jD ]P}t|tƒrZ| |¡}|d k	rL| |¡ ||k	rrd}q"||ƒrn| |¡ q"d}q"|s|| S |rŽt| |ƒ}|S d S d S )NFT)r2   rU   r-   r   rZ   rP   r;   )r:   rX   r'   ÚmodifiedrU   r   rZ   Úgroupr#   r#   r$   rZ   ˜   s*    




zXtuple[ExceptionGroup[_ExceptionT] | None, BaseExceptionGroup[_BaseExceptionT_co] | None]c                 C  s   d S r(   r#   rY   r#   r#   r$   Úsplit¹   s    zBaseExceptionGroup.splitz`tuple[BaseExceptionGroup[_BaseExceptionT] | None, BaseExceptionGroup[_BaseExceptionT_co] | None]c                 C  s   d S r(   r#   rY   r#   r#   r$   r]   Á   s    zctuple[BaseExceptionGroup[_BaseExceptionT_co] | None, BaseExceptionGroup[_BaseExceptionT_co] | None]c                 C  s   d S r(   r#   rY   r#   r#   r$   r]   É   s    r&   a!  tuple[ExceptionGroup[_ExceptionT] | None, BaseExceptionGroup[_BaseExceptionT_co] | None] | tuple[BaseExceptionGroup[_BaseExceptionT] | None, BaseExceptionGroup[_BaseExceptionT_co] | None] | tuple[BaseExceptionGroup[_BaseExceptionT_co] | None, BaseExceptionGroup[_BaseExceptionT_co] | None]c           
      C  s´   t |ƒ}|| ƒr| d fS g }g }| jD ]`}t|tƒrh| |¡\}}|d k	rT| |¡ |d k	r†| |¡ q&||ƒr|| |¡ q&| |¡ q&d }|ršt| |ƒ}d }	|r¬t| |ƒ}	||	fS r(   )r2   rU   r-   r   r]   rP   r;   )
r:   rX   r'   Zmatching_exceptionsZnonmatching_exceptionsr   ZmatchingZnonmatchingZmatching_groupZnonmatching_groupr#   r#   r$   r]   Ò   s2    



 ÿzSequence[_ExceptionT]zExceptionGroup[_ExceptionT])Ú_BaseExceptionGroup__excsr   c                 C  s   d S r(   r#   ©r:   r^   r#   r#   r$   r4     s    zBaseExceptionGroup.derivezSequence[_BaseExceptionT]z#BaseExceptionGroup[_BaseExceptionT]c                 C  s   d S r(   r#   r_   r#   r#   r$   r4     s    c                 C  s   t | j|ƒS r(   )r   rT   r_   r#   r#   r$   r4     s    c                 C  s4   t | jƒdkrdnd}| j› dt | jƒ› d|› d�S )Né   Ú Úsz (z sub-exceptionrO   )ÚlenrF   rT   )r:   Úsuffixr#   r#   r$   Ú__str__  s    zBaseExceptionGroup.__str__c                 C  s&   | j j› d| jd ›d| jd ›d�S )Nú(r   z, r`   rO   )r!   rC   rL   rS   r#   r#   r$   Ú__repr__  s    zBaseExceptionGroup.__repr__)rC   Ú
__module__Ú__qualname__Ú__doc__rE   rM   rQ   ÚpropertyrT   rU   r   rZ   r]   r4   re   rg   Ú__classcell__r#   r#   rI   r$   r   @   s:   (!2c                      s¸   e Zd Zdddddœ‡ fdd„Zer°edd	œd
d„ƒZedddœdd„ƒZedddœdd„ƒZdddœ‡ fdd„Zedddœdd„ƒZ	edddœdd„ƒZ	ddddœ‡ fdd„Z	‡  Z
S )r   ztype[_ExceptionGroupSelf]r<   zSequence[_ExceptionT_co]r   )r"   Ú_ExceptionGroup__messageÚ_ExceptionGroup__exceptionsr   c                   s   t ƒ  | ||¡S r(   )rD   rE   )r"   rm   rn   rI   r#   r$   rE     s    zExceptionGroup.__new__z;tuple[_ExceptionT_co | ExceptionGroup[_ExceptionT_co], ...]rR   c                 C  s   d S r(   r#   rS   r#   r#   r$   rU   #  s    zExceptionGroup.exceptionsrV   rW   )Ú_ExceptionGroup__conditionr   c                 C  s   d S r(   r#   ©r:   ro   r#   r#   r$   rZ   (  s    zExceptionGroup.subgroupz6Callable[[_ExceptionT_co | _ExceptionGroupSelf], bool]z%ExceptionGroup[_ExceptionT_co] | Nonec                 C  s   d S r(   r#   rp   r#   r#   r$   rZ   -  s    zTtype[_ExceptionT] | tuple[type[_ExceptionT], ...] | Callable[[_ExceptionT_co], bool]c                   s   t ƒ  |¡S r(   )rD   rZ   rp   rI   r#   r$   rZ   2  s    zPtuple[ExceptionGroup[_ExceptionT] | None, ExceptionGroup[_ExceptionT_co] | None]c                 C  s   d S r(   r#   rp   r#   r#   r$   r]   :  s    zExceptionGroup.splitzStuple[ExceptionGroup[_ExceptionT_co] | None, ExceptionGroup[_ExceptionT_co] | None]c                 C  s   d S r(   r#   rp   r#   r#   r$   r]   A  s    )r:   ro   r   c                   s   t ƒ  |¡S r(   )rD   r]   rp   rI   r#   r$   r]   H  s    )rC   rh   ri   rE   r   rk   rU   r   rZ   r]   rl   r#   r#   rI   r$   r     s   )!Ú
__future__r   ÚsysÚcollections.abcr   r   Ú	functoolsr   Úinspectr   r   Útypingr   r	   r
   r   r   r   Úversion_infoZtyping_extensionsr   r   r   r?   r   r   r   r   r%   r2   r;   r   r   r#   r#   r#   r$   Ú<module>   s:    
   ÿ   ÿ
 Z