o
    ^iE                     @   s  d Z ddlmZ ddlZddlmZ ddlmZ ddlZddl	Z
ddlmZmZ ddl	mZmZmZmZmZmZ dd	 ZG d
d deZdedededededdfddZg ae 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*d0d1 Z+d2d3 Z,d4d5 Z-d6d7 Z.d8d9 Z/d:d; Z0d<d= Z1d>d? Z2d@dA Z3dBdC Z4dDdE Z5dFdG Z6dHdI Z7dJdK Z8dLdM Z9dNdO Z:dPdQ Z;dRdS Z<dTdU Z=dVdW Z>dXdY Z?dZd[ Z@d\d] ZAd^d_ ZBd`da ZCdbdc ZDddde ZEdS )fzTest interact and interactive.    )patchN)EnumOrderedDict)
TraitErrorFloat)interactinteract_manualinteractiveinteractionOutputWidgetc                  K      d S N kwargsr   r   d/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/ipywidgets/widgets/tests/test_interaction.pyf      r   c                   @   s   e Zd ZdZdZdZdS )Colorr         N)__name__
__module____qualname__redgreenbluer   r   r   r   r      s    r   abcdereturnc                 C   r   r   r   r   r    r!   r"   r#   r   r   r   g!   r   r&   c                   C   s   g a d S r   )	displayedr   r   r   r   clear_display&   s   r(   c                  G   s   t |  d S r   )r'   extend)argsr   r   r   record_display+   s   r+   c                 K   s   |  D ]D\}}|dkr| j|u sJ qt| |}||ks)J d| jj|||t|ttfrHt|}t|}||u sHJ d| jj|||qdS )z$Check a single widget against a dictclsz{}.{} = {!r} != {!r}ztype({}.{}) = {!r} != {!r}N)	items	__class__getattrformatr   
isinstanceintfloattype)wr"   attrexpectedvaluetvter   r   r   check_widget2   s   
  r;   c                 K   sZ   i }| j D ]}t|ts|||j< q| D ]\}}||v s J t|| fi | qdS )z*Check that widgets are created as expectedN)childrenr1   r   descriptionr-   r;   )	containerto_checkwidgetsr5   keyr"   r   r   r   check_widget_childrenA   s   


rB   c                  C   0   d} t t| d}|jd }t|tjd| d d S Nhellor   r   r   r,   r=   r8   r
   r   r<   r;   r@   Textr   r!   r5   r   r   r   test_single_value_stringN      

rK   c                  C   s6   dD ]} t t| d}|jd }t|tjd| d qd S )N)TFrF   r   r   rG   )r
   r   r<   r;   r@   CheckboxrJ   r   r   r   test_single_value_boolX   s   
rN   c                  C   sr   dD ]4} | sd}d}n| dkr|  }d|  }nd|  }|  }t t| d}|jd }t|tjd| ||dd	d
 qd S )N)g      @      ?g              rP   rO   r      rF   r   皙?Tr,   r=   r8   minmaxstepreadout)r
   r   r<   r;   r@   FloatSliderr   expected_minexpected_maxr!   r5   r   r   r   test_single_value_floatb   s*   

r\   c                  C   s   dD ]=} | sd}d}n| dkr|  }d|  }nd|  }|  }t t| d}t|jdks-J |jd }t|tjd| ||ddd	 qd S )
N)r      r   r   r   rQ   rF   r   r   TrS   )r
   r   lenr<   r;   r@   	IntSliderrY   r   r   r   test_single_value_inty   s,   

ra   c                  C   s^   g d} | d }t t| d}t|jdksJ ttj|t| t| t| d}t||d d S )N)rE   thereguyr   lisr   r,   r8   options_options_labels_options_values	r
   r   r_   r<   dictr@   DropdowntuplerB   valuesfirstr!   r"   r   r   r   test_list_str   s   rq   c                  C   sh   g d} | d }t t| d}t|jdksJ ttj|t| tdd | D t| d}t||d d S )NrQ   r   r   r   rd   r   c                 s   s    | ]}t |V  qd S r   )str).0vr   r   r   	<genexpr>   s    z test_list_int.<locals>.<genexpr>rf   rj   rn   r   r   r   test_list_int   s   rw   c                  C   sZ   g d} | d d }t t| d}t|jdksJ ttj|t| ddd}t||d d S 	N)rQ   ,  )r   d   )r      r   r   rd   r   312rz   r{   r|   rf   rj   rn   r   r   r   test_list_tuple   s   r   c               	   C   sL   dD ]!} t t t|  tt| d}W d    n1 sw   Y  qd S )N)r   )tup)pytestraises
ValueErrorprintr
   r   )badr!   r   r   r   test_list_tuple_invalid   s   r   c               
   C   sz   t ddt ddt dfD ].} tt| d}|jd }t tjdtt|  | t	| 
 t	|  d}t|fi | qd S )	Nr]   rF   r    )r   r    r!   r"   r   r"   )r,   r=   r8   rg   rh   ri   )rk   r
   r   r<   r@   rl   nextiterro   rm   keysr;   )r"   r!   r5   checkr   r   r   	test_dict   s   


r   c                  C   sj   ddl m}  g d}|d d }| |}tt|d}t|jdks#J ttj||ddd	}t	||d d S )
Nr   r   ry   r   rd   r   r}   r   rf   )
collectionsr   r
   r   r_   r<   rk   r@   rl   rB   )r   r-   rp   ro   r!   r"   r   r   r   test_ordereddict   s   r   c                  C   sV   dd } t |  }tt|  d}t|jdksJ ttj|dddd}t||d d S )Nc                   s   s    dV  dV  dV  d S )NrQ   r   r   r   r   r   r   r   yield_values   s   
z#test_iterable.<locals>.yield_valuesrd   r   rr   r}   rf   )	r   r
   r   r_   r<   rk   r@   rl   rB   )r   rp   r!   r"   r   r   r   test_iterable   s   
r   c                  C   s^   g d} | d d }t tt| d}t|jdksJ ttj|t| ddd}t	||d d S rx   )
r
   r   r   r_   r<   rk   r@   rl   rm   rB   rn   r   r   r   test_iterable_tuple   s   r   c                  C   s   ddl m}  ddlm} G dd d| }g d}|d d }||}tt|d}t|jd	ks1J tt	j
|t|d
dd}t||d d S )Nr   )Mappingr   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z!test_mapping.<locals>.TestMappingc                 S   s
   || _ d S r   ro   )selfro   r   r   r   __init__  s   
z*test_mapping.<locals>.TestMapping.__init__c                 S      t r   NotImplementedErrorr   r   r   r   __getitem__	  r   z-test_mapping.<locals>.TestMapping.__getitem__c                 S   r   r   r   r   r   r   r   __len__  r   z)test_mapping.<locals>.TestMapping.__len__c                 S   r   r   r   r   r   r   r   __iter__  r   z*test_mapping.<locals>.TestMapping.__iter__c                 S   s   | j S r   r   r   r   r   r   r-     s   z'test_mapping.<locals>.TestMapping.itemsN)r   r   r   r   r   r   r   r-   r   r   r   r   TestMapping  s    r   ry   r   rd   r   r}   r   rf   )collections.abcr   r   r   r
   r   r_   r<   rk   r@   rl   rm   rB   )r   r   r   r-   rp   ro   r!   r"   r   r   r   test_mapping  s    r   c                 C   sr   t tdt tdddd }W d    n1 sw   Y  ttdks(J td jd }t|t	j
dd d S )	Ndisplayr]   rF   c                 S   r   r   r   rF   r   r   r   foo"     z!test_decorator_kwarg.<locals>.foor   r   r,   r8   r   objectr   r+   r   r_   r'   r<   r;   r@   r`   r(   r   r5   r   r   r   test_decorator_kwarg   s   
r   c                 C   s   G dd d}| }t tdt t|jdd}W d    n1 s#w   Y  ttdks0J td jd }t	|t
jdd	 d S )
Nc                   @   s   e Zd Zdd ZdS )z)test_interact_instancemethod.<locals>.Fooc                 S   s   t | d S r   )r   )r   xr   r   r   show.     z.test_interact_instancemethod.<locals>.Foo.showN)r   r   r   r   r   r   r   r   Foo-  s    r   r   )r   
   r   r   r   r]   r   )r   r   r   r+   r   r   r_   r'   r<   r;   r@   r`   )r(   r   r   r&   r5   r   r   r   test_interact_instancemethod,  s   
r   c                 C   sn   t tdt tddd}W d    n1 sw   Y  ttdks&J td jd }t|t	j
dd d S )	Nr   defaultc                 S   r   r   r   rF   r   r   r   r   >  r   z#test_decorator_no_call.<locals>.foor   r   r   r   r   r   r   r+   r   r_   r'   r<   r;   r@   rI   r   r   r   r   test_decorator_no_call<  s   
r   c                 C   sr   ddd}t tdt t|}W d    n1 sw   Y  ttdks(J td jd }t|t	j
dd d S )	Nr   c                 S   r   r   r   rF   r   r   r   r   I  r   ztest_call_interact.<locals>.foor   r   r   r   r   r   r(   r   ifoor5   r   r   r   test_call_interactH  s   


r   c                 C   s   d	dd}t tdt t|}W d    n1 sw   Y  ttdks(J td jd }t|t	j
dd t tdt d|_W d    n1 sLw   Y  ttdksYJ d S )
Nr   c                 S   r   r   r   rF   r   r   r   r   U  r   z<test_call_interact_on_trait_changed_none_return.<locals>.foor   r   r   r   calledr   r   r   r   r+   r   r_   r'   r<   r;   r@   rI   r8   r   r   r   r   /test_call_interact_on_trait_changed_none_returnT  s   

r   c                 C   sv   d
dd}t tdt t|dd}W d    n1 sw   Y  ttdks*J td jd }t|t	j
dd	 d S )Nr   c                 S   r   r   r   rF   r   r   r   r   d  r   z&test_call_interact_kwargs.<locals>.foor   r   rF   r   r   r   r   r   r   r   r   r   test_call_interact_kwargsc  s   

r   c                    s   i  t tdt td fdd	}W d   n1 sw   Y  ttdks*J td jd }t|t	j
dd	 |d
}|d
ksCJ  d d
ksKJ t tdt d|_W d   n1 s`w   Y   d dksmJ ttdksuJ |jtd ks~J dS )z*test calling @interact decorated functionsr   r   c                       |  d< | S Nr   r   rF   r   r   r   r   s     z0test_call_decorated_on_trait_change.<locals>.fooNr   r   r   r   rE   r   r   rQ   r   r   r(   r   r5   r   r   r   r   #test_call_decorated_on_trait_changeo  s(   r   c                    s  i  t tdt tddd fdd	}W d   n1 s w   Y  ttdks-J td	 jd
 }t|t	j
dd |d}|dksFJ  d dksNJ t tdt d|_W d   n1 scw   Y   d dkspJ ttdksxJ |jtd ksJ dS )z3test calling @interact(foo=bar) decorated functionsr   kwargrF   r   c                    r   r   r   rF   r   r   r   r     r   z7test_call_decorated_kwargs_on_trait_change.<locals>.fooNr   r   r   r   rE   r   r   rQ   r   r   r   r   r   r   r   *test_call_decorated_kwargs_on_trait_change  s(   r   c                  C   sF   t ttddd} t| jdksJ | jd }t|tjddd d S )Nr]   text)r   r    r   r   r    r,   r8   r=   )r
   r   r@   fixedr_   r<   r;   rI   r!   r5   r   r   r   
test_fixed  s   

r   c                  C   s,   t tdd} | jd }t|tjddd d S )Nr   r    r   r    r   rH   r   r   r   r   test_default_description  s   

r   c                     s\   i   fdd} t | tjdddd}|jd }t|tjddd d	|_ d
d	iks,J d S )Nc                     s        |  d S r   )clearupdater   r   r   r   record_kwargs  s   z.test_custom_description.<locals>.record_kwargsr   r   )r8   r=   r   r   r   zdifferent textr    )r
   r@   rI   r<   r;   r8   )r   r!   r5   r   r   r   test_custom_description  s   
r   c                  C   sR   G dd dt } tjtdd tt|  d W d   dS 1 s"w   Y  dS )z9 Test that passing in a non-value widget raises an error c                   @   s   e Zd ZdZe ZdS )z2test_raises_on_non_value_widget.<locals>.BadWidgetz+ A widget that contains a `value` traitlet N)r   r   r   __doc__r   r8   r   r   r   r   	BadWidget  s    
r   z.* not a ValueWidget.*)matchr   N)r   r   r   	TypeErrorr
   r   )r   r   r   r   test_raises_on_non_value_widget  s   "r   c                  C   s.   t jddt} | jd }t|tjd d S )NTmanualr   )r,   )r   rg   widgetr   r<   r;   r@   Buttonr   r   r   r   test_interact_manual_button  s   
r   c                  C   s>   d} dd }t jdd|ddj}d|jd _| dksJ d S )	Nr   c                 S   s   |d7 }d S )Nr   r   )testarg	callcountr   r   r   calltest  r   z-test_interact_manual_nocall.<locals>.calltestTr   r]   )r   r   )r   rg   r   r<   r8   )r   r   r!   r   r   r   test_interact_manual_nocall  s
   r   c                  C   s(   t t} |   tt} |   d S r   )r   r   r   r   r	   )r5   r   r   r   test_interact_call  s   

r   c                  C   s   dd } t jddjdd| ddj}|jdksJ tjdd dd| }|jdks/J t dd jdd| j}|jdksCJ d S )Nc                 S      | S r   r   r   r   r   r   r     r   z test_interact_options.<locals>.fFr   T   r   )r   rg   r   r   r	   )r   r5   r   r   r   test_interact_options  s   r   c                   C   s<   t t tjdd W d    d S 1 sw   Y  d S )Nr   )r   )r   r   r   r   rg   r   r   r   r   test_interact_options_bad  s   "r   c                  C   s  t j} | dddd}t|| dddd d|_d|_t|| dddd d|_d|_d|_d	|_t|| dddd d
|_t|| d
ddd d|_t|| dddd d|_t|| dddd t	t
 d|_W d    n1 snw   Y  t	t
 d|_W d    n1 sw   Y  | dddd}t|dddd | dddd}t|dd t	t
 | ddd W d    d S 1 sw   Y  d S )N)r      r      r8   rT   rU   r,   r8   rT   rU   rQ   )r   rQ   r   r   )r   r   )r]   r   )r   r      r   rT   rU   r8   r{   r|   )}      r8   r   rT   rU   )r@   IntRangeSliderr;   upperrU   rT   lowerr8   r   r   r   )irswr5   r   r   r   test_int_range_logic  s<   "r   c                  C   sP  t j} | dddd}t|| dddd d|_d|_d|_d|_t|| dddd d|_t|| dddd d	|_t|| d	ddd d|_t|| d
ddd t	t
 d|_W d    n1 s_w   Y  t	t
 d|_W d    n1 sww   Y  | dddd}t|ddd t	t
 | ddd W d    d S 1 sw   Y  d S )N)皙?皙?rP   333333?r   r   r   r   )rP   rR   )g      ?r   )r   r   gffffff?gr   rQ   )g@g      @r   g       @g      @r   rR   )r@   FloatRangeSliderr;   rT   rU   r   r   r8   r   r   r   )frswr5   r   r   r   test_float_range_logic  s2   "r   c                  C   sF  t j} |  }t|t d tt d|_W d    n1 s w   Y  t|t d | dgdgd}t|| ddd tt |jd |_W d    n1 sRw   Y  t|dd |jd	 |_t|d
dd d|_t|dd ddi|_t|ddid d|_tt d|_W d    n1 sw   Y  t|dd d S )Nr   )r   r   r   r   )rg   r8   )r   )r   )r,   r8   rg   )r   r   )r   r   r   )r   r   )rg   )	r@   SelectMultipler;   rm   r   r   r   r8   rg   )smwr5   r   r   r   test_multiple_selection5  s0   
r   c                  C   rC   rD   )r
   rk   r<   r;   r@   rI   rJ   r   r   r   test_interact_noinspect\  rL   r   c                     s\   ddl m}  ddlm  G  fddd| }| }tdd |d}|  |jd	ks,J d S )
Nr   )ValueWidgetUnicodec                       s"   e Zd Z dZ  Zdd ZdS )z*test_get_interact_value.<locals>.TheAnswer	TheAnswerc                 S   s   dS )N*   r   r   r   r   r   get_interact_valuem  r   z=test_get_interact_value.<locals>.TheAnswer.get_interact_valueN)r   r   r   _model_namer=   r  r   r   r   r   r  j  s    r  c                 S   r   r   r   ru   r   r   r   <lambda>p  s    z)test_get_interact_value.<locals>.<lambda>r  r  )ipywidgets.widgetsr   	traitletsr   r
   r   result)r   r  r5   r!   r   r   r   test_get_interact_valueg  s   r
  c                  C   s   ddl m} m} dd l}dd l}|  }|jdd}ttj	tj
tjtdd}||}W d    n1 s;w   Y  ||| d S )Nr   )r`   r   T)drop_defaultsz../../zstate.schema.json)r  r`   r   json
jsonschemaget_manager_stateopenospathjoindirnamerealpath__file__loadvalidate)r`   r   r  r  sstater   schemar   r   r   test_state_schemat  s   &r  c                  C   sp   t t} t| jdksJ t| dtjidtjidtjidtj	itj
tjtjtjddtjtjtjfdd d S )Nr   r,   )r   r   r   )r,   rg   rh   ri   r%   )r
   r&   r_   r<   rB   r@   rI   rM   IntText	FloatTextrl   r   r   r   r   )r!   r   r   r   test_type_hints~  s"   
r  )Fr   unittest.mockr   r  enumr   r   r   r   
ipywidgetsr@   r  r   r   r   r	   r
   r   r   r   r   r   rs   boolr2   r3   r&   r'   fixturer(   r+   r;   rB   rK   rN   r\   ra   rq   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r   r   r   r   <module>   sn    "



	
"'
