o
    xi8                     @   s  d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ ddlmZ G d	d
 d
eZG dd de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"eej#egd+d,d- Zd.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(d8d9 Z)d:d; Z*d<d= Z+d>d? Z,d@dA Z-dBdC Z.dDdE Z/eej0gd+dFdG Z0dHdI Z1dJdK Z2dLdM Z3dNdO Z4dPdQ Z5dRdS Z6dTdU Z7dVdU Z7dWdX Z8dYdZ Z9d[d\ Z:d]d^ Z;d_d` Z<dadb Z=dcdd Z>dedf Z?dgdh Z@diS )j    )sleep)raisesfixture)Event)Promiseis_thenable	promisifypromise_for_dict)Future)Thread   )assert_exceptionc                   @      e Zd Zdd Zdd ZdS )DelayedFulfillc                 C       || _ || _|| _t|  d S N)delaypromisevaluer   __init__)selfdpv r   _/home/ubuntu/.local/lib/python3.10/site-packages/wandb/vendor/promise-2.3.0/tests/test_extra.pyr         zDelayedFulfill.__init__c                 C      t | j | j| j d S r   )r   r   r   
do_resolver   r   r   r   r   run      
zDelayedFulfill.runN__name__
__module____qualname__r   r    r   r   r   r   r          r   c                   @   r   )DelayedRejectionc                 C   r   r   )r   r   reasonr   r   )r   r   r   rr   r   r   r       r   zDelayedRejection.__init__c                 C   r   r   )r   r   r   	do_rejectr(   r   r   r   r   r    &   r!   zDelayedRejection.runNr"   r   r   r   r   r'      r&   r'   c                   @   s    e Zd ZdddZdddZdS )	FakeThenPromiseTc                 C   s
   || _ d S r   r   )r   r   r   r   r   r   ,   s   
zFakeThenPromise.__init__Nc                 C   s   | j rtdd S )Nz FakeThenPromise raises in 'then')r   	Exception)r   sfr   r   r   then/   s   zFakeThenPromise.then)T)NN)r#   r$   r%   r   r0   r   r   r   r   r+   +   s    
r+   c                 C      t  }t||| }|  |S r   )r   r   start)r   dtimer   tr   r   r   df4      r5   c                 C   r1   r   )r   r'   r2   )r(   r3   r   r4   r   r   r   dr<   r6   r7   c                  C   s(   t d} | js
J |  dksJ d S )N   )r   	fulfilledis_fulfilledget)r   r   r   r   test_fulfilledE   s   

r<   c                  C   s^   t td} | jsJ tt}|   W d    n1 sw   Y  t|jdks-J d S )NzStatic rejected)r   rejectedr-   is_rejectedr   r;   strr   )r   exc_infor   r   r   test_rejectedK   s   


rA   c                  C   sF   t  } tt}| |  |   W d    d S 1 sw   Y  d S r   )r   r   	TypeErrorr   r;   )r   excinfor   r   r   test_fulfill_selfT   s
   


"rD   c                  C   st   dd } t  }||  |d t  }||  |t  tt}|  W d    d S 1 s3w   Y  d S )Nc                 S      J r   r   r   r   r   r   throws]      ztest_exceptions.<locals>.throws   )r   r0   r   catchr*   r-   r   r;   )rG   p1p2rC   r   r   r   test_exceptions\   s   




"rM   c                  C   sb   dd } t d| }tt}|  W d    n1 sw   Y  |jd jjt	ks/J d S )Nc                 S   rE   r   r   rF   r   r   r   rG   m   rH   z6test_thrown_exceptions_have_stacktrace.<locals>.throwsa
r   resolver0   r   AssertionErrorr;   	tracebackpathstrpath__file__)rG   p3
assert_excr   r   r   &test_thrown_exceptions_have_stacktracel   s   

rY   c                  C   sp   dd } dd }t d| |}tt}|  W d    n1 s&w   Y  |jd jjt	ks6J d S )Nc                 S   rE   r   r   rF   r   r   r   rG   x   rH   z:test_thrown_exceptions_preserve_stacktrace.<locals>.throwsc                 S      d S r   r   rF   r   r   r   after_throws{   rH   z@test_thrown_exceptions_preserve_stacktrace.<locals>.after_throwsrN   rO   rP   )rG   r[   rW   rX   r   r   r   *test_thrown_exceptions_preserve_stacktracew   s   

r\   c                  C   s&   t  } | d |   | jsJ d S NrI   )r   r   _waitr:   rK   r   r   r   test_wait_if   s   
r`   c                  C   s2   t  } | d |  }| jsJ d|ksJ d S r]   )r   r   r;   r:   )rK   r   r   r   r   test_get_if   s
   

ra   c                  C   s   t  } t  }t | |g}| jsJ |jsJ |jsJ | d |   | js*J |js/J |js4J |d |  |  | jsFJ |jsKJ |jsPJ d|  ksXJ d| ks`J d| d ksjJ d| d kstJ d S NrI   
   r   r   r   all
is_pendingr   r^   r:   r;   rK   rL   plr   r   r   test_promise_all_when   s*   










ri   c                  C   s   t  } t  }t | d|ddg}| jsJ |jsJ |jsJ | d |   | js-J |js2J |js7J |d |  |  | jsIJ |jsNJ |jsSJ d|  ks[J d| kscJ | g dksmJ d S )N    FTrI   rc   )rI   rj   rc   FTrd   rg   r   r   r   $test_promise_all_when_mixed_promises   s(   










rk   c                  C   s&   t g d} |  g dksJ d S )N)rc   rj   FT)r   re   r;   )rh   r   r   r   $test_promise_all_when_if_no_promises   s   rl   c                  C   sf  t  } t  }t | |g}t | g}t g }|  | js!J |js&J |js+J |js0J |js5J | d |   |  | jsGJ |jsLJ |jsQJ |jsVJ |d |  |  |  | jslJ |jsqJ |jsvJ |js{J d|  ksJ d| ksJ d| d ksJ d| d ksJ d| d ksJ g | ksJ d S rb   )r   re   r^   rf   r:   r   r;   )rK   rL   pd1pd2pd3r   r   r   test_promise_all_if   s@   















rp   )paramsc                 C      | j S r   paramrequestr   r   r   r	        r	   c                 C   s`  t  }t  }||d}| |}| d|i}| i }|jsJ |js#J |js(J |js-J |  |js6J |d |  |  |jsHJ |jsMJ |jsRJ |jsWJ |d |  |  |jsiJ |jsnJ |jssJ |jsxJ d| ksJ d| ksJ d| d ksJ d| d ksJ d| d ksJ i | ksJ d S )NrN   brN   rI   rc   ry   )r   rf   r^   r:   r   r;   )r	   rK   rL   r   rm   rn   ro   r   r   r   test_dict_promise_when  s@   















rz   c                 C   s   t  }t  }||d}| |}|jsJ |jsJ |jsJ |d |  |js,J |js1J |js6J |d |  |jsDJ |jsIJ d S )Nrx   rI   rc   )r   rf   r   r^   r:   )r	   rK   rL   r   pdr   r   r   test_dict_promise_if=  s    









r|   c                     s   dg t   fdd}  fdd}fdd}t  }|| | || | || |d t   d d	ks>J t  dg t  }|| | || | |d | |t  t   d d
kslJ d S )Nr   c                        d  d7  < d S Nr   r   r   _counterr   r   incZ     ztest_done.<locals>.incc                        d  d8  < d S r~   r   r   r   r   r   dec]  r   ztest_done.<locals>.decc                    s     d  d S r   r   r   r)   r   r   end`  s   ztest_done.<locals>.endr8      )r   doner   waitr*   r-   )r   r   r   r   r   r   r)   r   	test_doneV  s*   



r   c                     s  dg  fdd}  fdd}t  }t  |  || |fg || |f| |f| |dfddg |d	 t   d d	ksGJ t  }t  |  || g || |fg || |f| |dd fd
dfg |td t   d dksJ d S )Nr   c                    r}   r~   r   r   r   r   r   r   |  r   ztest_done_all.<locals>.incc                    r   r~   r   r   r   r   r   r     r   ztest_done_all.<locals>.decsuccessfailurec                    
     d S r   r   r   r   r   r   <lambda>     
 ztest_done_all.<locals>.<lambda>r8   c                    r   r   r   r   r   r   r   r     r   zUh oh!r   )r   done_allr   r   r*   r-   )r   r   r   r   r   r   test_done_ally  s>   



r   c                  C   s  t  } dd dd fdd dd dg}|  | dd g | dd d	d fg | | }| d
 dd |D g dksCJ t  } dd dd fdd dd dg}|  | dd dd fg | | }| t  dd |D g dksJ d S )Nc                 S      | |  S r   r   xr   r   r   r         ztest_then_all.<locals>.<lambda>c                 S      dS Nr   r   r   r   r   r   r         c                 S      | |  S r   r   r   r   r   r   r     r   c                 S   r   Nr   r   r   r   r   r   r     r   r   c                 S      | S r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   r8   c                 S      g | ]}|  qS r   r;   .0r)   r   r   r   
<listcomp>      z!test_then_all.<locals>.<listcomp>)r8      r      c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   )r   r   r   )r   then_allr   r*   r-   )r   handlersresultsr   r   r   test_then_all  s4   
r   c                  C   s*   t dd } |  dksJ | jsJ d S )Nc                 S      | dS Nr   r   rQ   rejectr   r   r   r     r   z!test_do_resolve.<locals>.<lambda>r   )r   r;   r:   r_   r   r   r   test_do_resolve  s   r   c                  C   s0   dd } t | }|jrJ t|jdksJ d S )Nc                 S   s   t d)NFails)r-   r   r   r   r   r        z,test_do_resolve_fail_on_call.<locals>.raisesr   )r   r:   r?   r(   )r   rK   r   r   r   test_do_resolve_fail_on_call  s   
r   c                  C   sL   t dd } | dd dd dd }| tksJ |js$J d S )Nc                 S   r   r   r   r   r   r   r   r     r   ztest_catch.<locals>.<lambda>c                 S   s   d|  S r   r   )r   r   r   r   r     r   c                 S   r   r   r   er   r   r   r     r   c                 S   s   t | S r   )typer   r   r   r   r     r   )r   r0   rJ   r;   ZeroDivisionErrorr:   )rK   rL   r   r   r   
test_catch  s   "r   c                  C      t  } t| s	J d S r   )r   r   r   r   r   r   test_is_thenable_promise     r   c                  C   s   t  } t| r	J d S r   )r+   r   r   r   r   r   test_is_thenable_then_object  r   r   c                  C   r   r   )r
   r   r   r   r   r   test_is_thenable_future  r   r   c                   C   s   t t rJ d S r   )r   objectr   r   r   r   test_is_thenable_simple_object  s   r   c                 C   rr   r   rs   ru   r   r   r   rQ     rw   rQ   c                 C   s   t  }| ||ksJ d S r   )r   )rQ   r   r   r   r   test_resolve_promise  s   r   c                 C   s$   t dd}| |}t|tsJ d S )NFr,   )r+   
isinstancer   )rQ   r   r   r   r   r   test_resolve_then_object  s   
r   c                 C   s@   t  }| |}|jsJ |d | dksJ |jsJ d S r   )r
   rf   
set_resultr;   r:   rQ   futurer   r   r   r   test_resolve_future  s   

r   c                 C   sB   t  }| |}|jsJ |td |jsJ t|jtd d S )NzFuture rejected)r
   rf   set_exceptionr-   r>   r   r(   r   r   r   r   test_resolve_future_rejected
  s   

r   c                 C   s0   t  }| |}t|tsJ | |ksJ d S r   )r   r   r   r;   )rQ   valpromisedr   r   r   test_resolve_object  s   r   c                  C   sP   G dd dt } t  }|d | |}t|| sJ | | ks&J d S )Nc                   @   s   e Zd ZdS )z0test_resolve_promise_subclass.<locals>.MyPromiseN)r#   r$   r%   r   r   r   r   	MyPromise  s    r   rc   )r   r   rQ   r   r;   )r   r   m_pr   r   r   test_resolve_promise_subclass  s   

r   c                  C   s(   t  } t| dtt| ksJ d S )Nz<Promise at {} pending>)r   reprformathexidr   r   r   r   test_promise_repr_pending&  s   "r   c                  C   B   ddi} t | }|  t|dtt|t| ksJ d S Nr   r   z!<Promise at {} fulfilled with {}>r   r9   r^   r   r   r   r   r   r   r   r   r   r   +     

c                  C   r   r   r   r   r   r   r   test_promise_repr_fulfilled4  r   r   c                  C   sB   t d} t| }|  t|dtt|t| ksJ d S )NzError!z <Promise at {} rejected with {}>)r-   r   r=   r^   r   r   r   r   )errr   r   r   r   test_promise_repr_rejected=  r   r   c                     s2   dd   fdd} t | }|ddksJ d S )Nc                 S   s   | d S r   r   )resultr   r   r   by_twoG  r   z!test_promise_loop.<locals>.by_twoc                    s    | t d fdd d S )Nr   c                    s   t |  S r   r   rQ   r0   rF   r   r   r   r   K  s    z5test_promise_loop.<locals>.executor.<locals>.<lambda>r   r   r   r   r   executorJ  s    z#test_promise_loop.<locals>.executorg?r   )r   r;   )r   r   r   r   r   test_promise_loopF  s   r   c                 C   s2   G dd dt }| }| |}| dksJ d S )Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z0test_resolve_future_like.<locals>.CustomThenablec                 S   s   |d d S NTr   )r   r/   r   r   r   add_done_callbackS  s   zBtest_resolve_future_like.<locals>.CustomThenable.add_done_callbackc                 S   r   r   r   r   r   r   r   r   V  rH   z5test_resolve_future_like.<locals>.CustomThenable.donec                 S   rZ   r   r   r   r   r   r   	exceptionY  rH   z:test_resolve_future_like.<locals>.CustomThenable.exceptionc                 S   r   r   r   r   r   r   r   r   \  rH   z7test_resolve_future_like.<locals>.CustomThenable.resultN)r#   r$   r%   r   r   r   r   r   r   r   r   CustomThenableR  s
    r   T)r   r;   )rQ   r   instancer   r   r   r   test_resolve_future_likeQ  s   r   c                 C   s   | | S r   r   rx   r   r   r   sum_functione  r   r   c                 C   s4   t t}|dd}t|tsJ | dksJ d S )Nr   r      )r   r   r   r   r;   )rQ   promisified_funcr   r   r   r    test_promisify_function_resolvedi  s   
r   c                 C   s   t t}|d d }t|tsJ tt}|  W d    n1 s#w   Y  tt}td d  W d    n1 s<w   Y  t|jt|jksMJ d S r   )	r   r   r   r   r   r-   r;   r?   r   )rQ   r   r   exc_info_promiser@   r   r   r    test_promisify_function_rejectedq  s   



r   c                     sx   ddi t d} t fdd}|dd }|dd } d |  |  |  |j| ks3J |j| ks:J d S )	Nr   FzOoops!c                    s     d|iS )Npromise1_reject)updater   contextr   r   r     s    z.test_promises_with_only_then.<locals>.<lambda>c                 S   rZ   r   r   r   r   r   r   r     r   c                 S   rZ   r   r   r   r   r   r   r     r   r   )RuntimeErrorr   r0   r^   r(   )errorpromise1promise2promise3r   r   r   test_promises_with_only_then  s   
r   c                  C   s*   t d} t| tsJ |  dksJ d S r   )r   r   r   r;   r   r   r   r   Dtest_promises_promisify_still_works_but_deprecated_for_non_callables  s   r   N)Atimer   pytestr   r   	threadingr   r   r   r   r   r	   free_promise_for_dictconcurrent.futuresr
   r   utilsr   r   r'   r+   r5   r7   r<   rA   rD   rM   rY   r\   r`   ra   ri   rk   rl   rp   for_dictrz   r|   r   r   r   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sr   			$
##*%	
					