o
    x¡·i4  ã                   @   s  d dl mZ ddlmZ d dlmZ G dd„ dƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!d=d>„ Z"d?S )@é    )ÚPromiseé   )Úassert_exception)ÚEventc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚCounterz@
    A helper class with some side effects
    we can test.
    c                 C   s
   d| _ d S )Nr   ©Úcount©Úself© r   ú^/home/ubuntu/.local/lib/python3.10/site-packages/wandb/vendor/promise-2.3.0/tests/test_spec.pyÚ__init__   s   
zCounter.__init__c                 C   s   |  j d7  _ d S )Nr   r   r	   r   r   r   Útick   s   zCounter.tickc                 C   s   | j S ©Nr   r	   r   r   r   Úvalue   s   zCounter.valueN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   
   s
    r   c                  C   s8   t ƒ } |  ¡ }t ƒ }| ¡ }|  d¡ | tdƒ¡ dS )z9
    Test that the arguments to 'then' are optional.
    é   zHow dare you!N)r   ÚthenÚ
do_resolveÚ	do_rejectÚ	Exception)Úp1Úp2Úp3Úp4r   r   r   Ú
test_3_2_1   s   
r   c                     sZ   i ‰ dddi g g} ‡ fdd„}| D ]}||ƒ q| D ]}t ˆ t|ƒ tdt|ƒ ƒ qdS )zX
    That that the first argument to 'then' is ignored if it
    is not a function.
    NFr   c                    sD   ‡fdd„‰ t  tdtˆƒ ƒ¡}| ˆ‡ ‡fdd„¡}| ¡  d S )Nc                    ó   |ˆ | < d S r   r   ©ÚkÚr©Úresultsr   r   Úfoo0   ó   z2test_3_2_1_1.<locals>.testNonFunction.<locals>.fooúError: c                    ó   ˆ t ˆƒ| ƒS r   ©Ústr©r"   ©r%   ÚnonFunctionr   r   Ú<lambda>4   ó    z7test_3_2_1_1.<locals>.testNonFunction.<locals>.<lambda>)r   Úrejectr   r*   r   Ú_wait©r-   r   r   r#   r,   r   ÚtestNonFunction/   s   z%test_3_2_1_1.<locals>.testNonFunctionr'   )r   r*   r   ©ÚnonFunctionsr3   Úvr   r#   r   Útest_3_2_1_1'   ó   
ÿr7   c                     sZ   i ‰ dddi g g} ‡ fdd„}| D ]}||ƒ q| D ]}dt |ƒ ˆ t |ƒ ks*J ‚qdS )zY
    That that the second argument to 'then' is ignored if it
    is not a function.
    NFr   c                    s@   ‡fdd„‰ t  dtˆƒ ¡}| ‡ ‡fdd„ˆ¡}| ¡  d S )Nc                    r   r   r   r    r#   r   r   r%   G   r&   z2test_3_2_1_2.<locals>.testNonFunction.<locals>.foor'   c                    r(   r   r)   r+   r,   r   r   r.   K   r/   z7test_3_2_1_2.<locals>.testNonFunction.<locals>.<lambda>)r   Úresolver*   r   r1   r2   r#   r,   r   r3   F   s   z%test_3_2_1_2.<locals>.testNonFunctionr'   r)   r4   r   r#   r   Útest_3_2_1_2>   r8   r:   c                     sH   t ƒ ‰ dd„ ‰t d¡} |  ‡ ‡fdd„¡}| ¡  dˆ  ¡ ks"J ‚dS )úV
    The first argument to 'then' must be called when a promise is
    fulfilled.
    c                 S   ó   | dksJ ‚|  ¡  d S ©Nr   ©r   ©r6   Úcr   r   r   Úcheck]   ó   ztest_3_2_2_1.<locals>.checkr   c                    ó
   ˆ| ˆ ƒS r   r   ©r6   ©r@   rA   r   r   r.   b   ó   
 ztest_3_2_2_1.<locals>.<lambda>r   N©r   r   r9   r   r1   r   ©r   r   r   rE   r   Útest_3_2_2_1U   s   
rI   c                     s`   t ƒ ‰ t d¡} |  ‡ fdd„¡}| ¡  z|  d¡ J ‚ ty%   Y nw dˆ  ¡ ks.J ‚dS )ú>
    Make sure callbacks are never called more than once.
    r   c                    ó   ˆ   ¡ S r   r>   rD   ©r@   r   r   r.   n   ó    ztest_3_2_2_2.<locals>.<lambda>Fr   N)r   r   r9   r   r1   r   ÚAssertionErrorr   rH   r   rL   r   Útest_3_2_2_2g   s   

þrO   c                     sb   t ƒ ‰ t ƒ ‰t tdƒ¡} |  ‡ fdd„‡fdd„¡}| ¡  dˆ  ¡ ks'J ‚dˆ ¡ ks/J ‚dS )zJ
    Make sure fulfilled callback never called if promise is rejected
    ÚErrorc                    rK   r   r>   rD   ©Úcfr   r   r.   ‚   rM   ztest_3_2_2_3.<locals>.<lambda>c                    rK   r   r>   r+   ©Úcrr   r   r.   ‚   rM   r   r   N©r   r   r0   r   r   r1   r   rH   r   ©rR   rT   r   Útest_3_2_2_3z   s   rW   c                     sN   t ƒ ‰ dd„ ‰t tdƒ¡} |  d‡ ‡fdd„¡}| ¡  dˆ  ¡ ks%J ‚dS )zV
    The second argument to 'then' must be called when a promise is
    rejected.
    c                 S   s   t | tdƒ | ¡  d S )NrP   )r   r   r   )r"   r@   r   r   r   rA      rB   ztest_3_2_3_1.<locals>.checkrP   Nc                    rC   r   r   r+   rE   r   r   r.   •   rF   ztest_3_2_3_1.<locals>.<lambda>r   rU   rH   r   rE   r   Útest_3_2_3_1ˆ   s   rX   c                     sj   t ƒ ‰ t tdƒ¡} |  d‡ fdd„¡}| ¡  z	|  tdƒ¡ J ‚ ty*   Y nw dˆ  ¡ ks3J ‚dS )rJ   rP   Nc                    rK   r   r>   rD   rL   r   r   r.   ¡   rM   ztest_3_2_3_2.<locals>.<lambda>Fr   )	r   r   r0   r   r   r1   r   rN   r   rH   r   rL   r   Útest_3_2_3_2š   s   þrY   c                     s^   t ƒ ‰ t ƒ ‰t d¡} |  ‡ fdd„‡fdd„¡}| ¡  dˆ ¡ ks%J ‚dˆ  ¡ ks-J ‚dS )zJ
    Make sure rejected callback never called if promise is fulfilled
    r   c                    rK   r   r>   rD   rQ   r   r   r.   µ   rM   ztest_3_2_3_3.<locals>.<lambda>c                    rK   r   r>   r+   rS   r   r   r.   µ   rM   r   r   NrG   rH   r   rV   r   Útest_3_2_3_3­   s   
rZ   c                     ó‚   dd„ ‰ t  d¡} g ‰|  ‡ ‡fdd„¡}|  ‡ ‡fdd„¡}| ¡  | ¡  dtˆƒks/J ‚dˆd ks7J ‚d	ˆd
 ks?J ‚dS )ú„
    Then can be called multiple times on the same promise
    and callbacks must be called in the order of the
    then calls.
    c                 S   ó   |   |¡ d S r   ©Úappend©Úlr6   r   r   r   ÚaddÂ   ó   ztest_3_2_5_1_when.<locals>.addé   c                    ó
   ˆ ˆdƒS ©Nr   r   rD   ©rb   Úorderr   r   r.   Ç   rF   z#test_3_2_5_1_when.<locals>.<lambda>c                    re   ©Nr   r   rD   rg   r   r   r.   È   rF   r   r   r   r   N©r   r9   r   r1   Úlen©r   r   r   r   rg   r   Útest_3_2_5_1_when»   ó   
rm   c                     r[   )r\   c                 S   r]   r   r^   r`   r   r   r   rb   ×   rc   ztest_3_2_5_1_if.<locals>.addrd   c                    re   rf   r   rD   rg   r   r   r.   Ü   rF   z!test_3_2_5_1_if.<locals>.<lambda>c                    re   ri   r   rD   rg   r   r   r.   Ý   rF   r   r   r   r   Nrj   rl   r   rg   r   Útest_3_2_5_1_ifÐ   rn   ro   c                     óŠ   dd„ ‰ t  tdƒ¡} g ‰|  d‡ ‡fdd„¡}|  d‡ ‡fdd„¡}| ¡  | ¡  dtˆƒks3J ‚d	ˆd
 ks;J ‚dˆd ksCJ ‚dS )r\   c                 S   r]   r   r^   r`   r   r   r   rb   ì   rc   ztest_3_2_5_2_when.<locals>.addrP   Nc                    re   rf   r   rD   rg   r   r   r.   ñ   rF   z#test_3_2_5_2_when.<locals>.<lambda>c                    re   ri   r   rD   rg   r   r   r.   ò   rF   rd   r   r   r   r   ©r   r0   r   r   r1   rk   rl   r   rg   r   Útest_3_2_5_2_whenå   ó   rr   c                     rp   )r\   c                 S   r]   r   r^   r`   r   r   r   rb     rc   ztest_3_2_5_2_if.<locals>.addrP   Nc                    re   rf   r   rD   rg   r   r   r.     rF   z!test_3_2_5_2_if.<locals>.<lambda>c                    re   ri   r   rD   rg   r   r   r.     rF   rd   r   r   r   r   rq   rl   r   rg   r   Útest_3_2_5_2_ifú   rs   rt   c                  C   sZ   t  d¡} |  dd„ ¡}| ¡ dksJ ‚t  tdƒ¡}| ddd„ ¡}d| ¡ ks+J ‚dS )zœ
    Promises returned by then must be fulfilled when the promise
    they are chained from is fulfilled IF the fulfillment value
    is not a promise.
    r   c                 S   s   | |  S r   r   rD   r   r   r   r.     rM   ztest_3_2_6_1.<locals>.<lambda>é   rP   Nc                 S   s   dS r=   r   r+   r   r   r   r.     ó    )r   r9   r   Úgetr0   r   ©r   Úpfr   Úprr   r   r   Útest_3_2_6_1  s   
r{   c                  C   óz   dd„ } t  d¡}| | ¡}| ¡  |jsJ ‚t|jtdƒ t  t	dƒ¡}| d| ¡}| ¡  |js4J ‚t|jtdƒ dS )úh
    Promises returned by then must be rejected when any of their
    callbacks throw an exception.
    c                 S   ó   t dƒ‚©NúException Message©rN   rD   r   r   r   Úfail%  ó   ztest_3_2_6_2_when.<locals>.failr   r€   rP   N©
r   r9   r   r1   Úis_rejectedr   ÚreasonrN   r0   r   ©r‚   r   ry   r   rz   r   r   r   Útest_3_2_6_2_when  ó   



rˆ   c                  C   r|   )r}   c                 S   r~   r   r   rD   r   r   r   r‚   ;  rƒ   ztest_3_2_6_2_if.<locals>.failr   r€   rP   Nr„   r‡   r   r   r   Útest_3_2_6_2_if5  r‰   rŠ   c                     s  t ƒ } t ƒ ‰‡fdd„}|  |¡}ˆjsJ ‚|jsJ ‚|  d¡ ˆ d¡ ˆ ¡  ˆjs.J ‚dˆ ¡ ks6J ‚| ¡  |js?J ‚d| ¡ ksGJ ‚t ƒ }t ƒ ‰ | ‡ fdd„¡}ˆ js[J ‚|js`J ‚| d¡ ˆ  tdƒ¡ ˆ  ¡  ˆ j	suJ ‚t
ˆ jtdƒ | ¡  |j	s…J ‚t
|jtdƒ dS )	z¸
    Testing return of pending promises to make
    sure they are properly chained.
    This covers the case where the root promise
    is fulfilled after the chaining is defined.
    c                    ó   ˆ S r   r   rD   ©Úpendingr   r   Úp1_resolvedV  s   z0test_3_2_6_3_when_fulfilled.<locals>.p1_resolvedé
   r   c                    r‹   r   r   r+   ©Úbadr   r   r.   h  rv   z-test_3_2_6_3_when_fulfilled.<locals>.<lambda>rP   N)r   r   Ú
is_pendingr   r1   Úis_fulfilledrw   Ú_reject_callbackr   r…   r   r†   )r   rŽ   ry   r   rz   r   ©r‘   r   r   Útest_3_2_6_3_when_fulfilledK  s6   











r–   c                     sæ   t ƒ } |  d¡ t ƒ ‰ˆ d¡ |  ‡fdd„¡}ˆ ¡  ˆjs"J ‚dˆ ¡ ks*J ‚| ¡  |js3J ‚d| ¡ ks;J ‚t ƒ }| d¡ t ƒ ‰ ˆ  tdƒ¡ | ‡ fdd„¡}ˆ  ¡  tˆ j	tdƒ | ¡  |j
sjJ ‚t|j	tdƒ dS )z¹
    Testing return of pending promises to make
    sure they are properly chained.
    This covers the case where the root promise
    is fulfilled before the chaining is defined.
    r   r   c                    r‹   r   r   r+   rŒ   r   r   r.     rv   z+test_3_2_6_3_if_fulfilled.<locals>.<lambda>rP   c                    r‹   r   r   r+   r   r   r   r.     rv   N)r   r   r   r1   r“   rw   r   r   r   r†   r…   rx   r   r•   r   Útest_3_2_6_3_if_fulfilledu  s*   





r—   c                     s  t ƒ } t ƒ ‰|  d‡fdd„¡}ˆjsJ ‚|jsJ ‚|  tdƒ¡ ˆ d¡ ˆ ¡  ˆjs/J ‚dˆ ¡ ks7J ‚d| ¡ ks?J ‚t ƒ }t ƒ ‰ | d‡ fdd„¡}ˆ jsTJ ‚|jsYJ ‚| tdƒ¡ ˆ  tdƒ¡ ˆ  ¡  ˆ j	spJ ‚t
ˆ jtdƒ | ¡  |j	s€J ‚t
|jtdƒ dS )z·
    Testing return of pending promises to make
    sure they are properly chained.
    This covers the case where the root promise
    is rejected after the chaining is defined.
    Nc                    r‹   r   r   r+   rŒ   r   r   r.   Ÿ  rv   z,test_3_2_6_3_when_rejected.<locals>.<lambda>rP   r   c                    r‹   r   r   r+   r   r   r   r.   «  rv   Ú	Assertion)r   r   r’   r   r   r   r1   r“   rw   r…   r   r†   ©r   rz   r   r   r•   r   Útest_3_2_6_3_when_rejected•  s0   







rš   c                     sü   t ƒ } |  tdƒ¡ t ƒ ‰ˆ d¡ |  d‡fdd„¡}ˆ ¡  ˆjs%J ‚dˆ ¡ ks-J ‚| ¡  |js6J ‚d| ¡ ks>J ‚t ƒ }| tdƒ¡ t ƒ ‰ ˆ  tdƒ¡ | d‡ fdd„¡}ˆ  ¡  ˆ jseJ ‚t	ˆ j
tdƒ | ¡  |jsuJ ‚t	|j
tdƒ dS )z¸
    Testing return of pending promises to make
    sure they are properly chained.
    This covers the case where the root promise
    is rejected before the chaining is defined.
    rP   r   Nc                    r‹   r   r   r+   rŒ   r   r   r.   Ä  rv   z*test_3_2_6_3_if_rejected.<locals>.<lambda>r˜   c                    r‹   r   r   r+   r   r   r   r.   Ð  rv   )r   r   r   r   r   r1   r“   rw   r…   r   r†   r™   r   r•   r   Útest_3_2_6_3_if_rejected¸  s,   




r›   c                  C   sP   t ƒ } |  d¡}|  d¡ d|  ¡ ksJ ‚| ¡  |jsJ ‚d| ¡ ks&J ‚dS )zY
    Handles the case where the arguments to then
    are not functions or promises.
    r   r   N)r   r   r   rw   r1   r“   rH   r   r   r   Útest_3_2_6_4_pendingÙ  ó   


rœ   c                  C   sP   t ƒ } |  d¡ |  d¡}d|  ¡ ksJ ‚| ¡  |jsJ ‚d| ¡ ks&J ‚dS )úa
    Handles the case where the arguments to then
    are values, not functions or promises.
    r   r   N)r   r   r   rw   r1   r“   rH   r   r   r   Útest_3_2_6_4_fulfilledç  r   rŸ   c                  C   sR   t ƒ } |  dd¡}|  tdƒ¡ t| jtdƒ | ¡  |js J ‚t|jtdƒ dS )rž   Nr   rP   )r   r   r   r   r   r†   r1   r…   rH   r   r   r   Útest_3_2_6_5_pendingõ  s   
r    c                  C   sR   t ƒ } |  tdƒ¡ |  dd¡}t| jtdƒ | ¡  |js J ‚t|jtdƒ dS )rž   rP   Nr   )r   r   r   r   r   r†   r1   r…   rH   r   r   r   Útest_3_2_6_5_rejected  s   
r¡   c                  C   s    t dd„ ƒ} |  ¡ dksJ ‚dS )rž   c                 S   s   | t  d¡ƒS )NT©r   r9   )r9   r0   r   r   r   r.     r/   z'test_chained_promises.<locals>.<lambda>TN)r   rw   )r   r   r   r   Útest_chained_promises  s   r£   c                     sP   t ƒ ‰ dd„ ‰tƒ } |  ‡ ‡fdd„¡}|  d¡ t |¡ dˆ  ¡ ks&J ‚dS )r;   c                 S   r<   r=   r>   r?   r   r   r   rA   "  rB   z*test_promise_resolved_after.<locals>.checkc                    rC   r   r   rD   rE   r   r   r.   '  rF   z-test_promise_resolved_after.<locals>.<lambda>r   r   N)r   r   r   r   Úwaitr   rH   r   rE   r   Útest_promise_resolved_after  s   

r¥   c                  C   sD   t  d ¡} |  dd„ ¡}tƒ }dd„ }| |¡}| ¡ dks J ‚d S )Nc                 S   ó
   t  d¡S )NÚXr¢   )Úxr   r   r   r.   0  rF   z2test_promise_follows_indifentely.<locals>.<lambda>c                 S   s   t  d ¡}| dd„ ¡}|S )Nc                 S   r¦   ©NÚBr¢   rD   r   r   r   r.   6  rF   zBtest_promise_follows_indifentely.<locals>.b_then.<locals>.<lambda>©r   r9   r   )r6   r@   Údr   r   r   Úb_then3  s   
z0test_promise_follows_indifentely.<locals>.b_thenrª   )r   r9   r   r   rw   )ÚaÚbÚer­   Úpromiser   r   r   Ú test_promise_follows_indifentely.  s   

r²   c                  C   sD   t  t  d¡t  d ¡ t j¡ dd„ ¡g¡} |  ¡ ddgks J ‚d S )NÚAc                 S   s   t  d ¡ dd„ ¡S )Nc                 S   r¦   r©   r¢   rD   r   r   r   r.   D  rF   zHtest_promise_all_follows_indifentely.<locals>.<lambda>.<locals>.<lambda>r«   rD   r   r   r   r.   D  s    z6test_promise_all_follows_indifentely.<locals>.<lambda>rª   )r   Úallr9   r   rw   )Úpromisesr   r   r   Ú$test_promise_all_follows_indifentely>  s   
üÿ	r¶   N)#r±   r   Úutilsr   Ú	threadingr   r   r   r7   r:   rI   rO   rW   rX   rY   rZ   rm   ro   rr   rt   r{   rˆ   rŠ   r–   r—   rš   r›   rœ   rŸ   r    r¡   r£   r¥   r²   r¶   r   r   r   r   Ú<module>   s@   * #!	