
    neB                        d Z ddlmZ ddl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lmZmZ d	 Zg a ej.                         d
        Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d  Z.d! Z/d" Z0d# Z1d$ Z2d% Z3d& Z4d' Z5d( Z6d) Z7d* Z8d+ Z9d, Z:d- Z;d. Z<d/ Z=d0 Z>d1 Z?y)2zTest interact and interactive.    )patchNOrderedDict)
TraitErrorFloat)interactinteract_manualinteractiveinteractionOutputWidget   )setupteardownc                       y N )kwargss    K/usr/lib/python3/dist-packages/ipywidgets/widgets/tests/test_interaction.pyfr      s        c                      g a y r   )	displayedr   r   r   clear_displayr      s	     Ir   c                  .    t         j                  |        y r   )r   extend)argss    r   record_displayr   !   s    Tr   c                    |j                         D ]  \  }}|dk(  r| j                  |u rJ t        | |      }||k(  s-J dj                  | j                  j                  |||             t        |t        t        f      sqt        |      }t        |      }||u rJ dj                  | j                  j                  |||              y)z$Check a single widget against a dictclsz{}.{} = {!r} != {!r}ztype({}.{}) = {!r} != {!r}N)	items	__class__getattrformat__name__
isinstanceintfloattype)wdattrexpectedvaluetvtes          r   check_widgetr1   (   s    '') ih5=;;(***At$EH$p&<&C&CAKKDXDXZ^`ego&pp$ %#u.%[(^Rxh!=!D!DQ[[EYEY[_aceg!hhxir   c                     i }| j                   D ]"  }t        |t              r|||j                  <   $ |j	                         D ]  \  }}||v sJ t        ||   fi |  y)z*Check that widgets are created as expectedN)childrenr&   r   descriptionr!   r1   )	containerto_checkwidgetsr*   keyr+   s         r   check_widget_childrenr9   7   so     G '!V$%&GAMM"' .." (Qg~~WS\'Q'(r   c                      d} t        t        |       }|j                  d   }t        |t        j
                  d|        y Nhelloar   r>   r    r4   r.   r
   r   r3   r1   r7   Textr>   cr*   s      r   test_single_value_stringrD   D   s7    AAA	

1ALLr   c                      dD ]?  } t        t        |       }|j                  d   }t        |t        j
                  d|        A y )N)TFr=   r   r>   r?   )r
   r   r3   r1   r7   CheckboxrB   s      r   test_single_value_boolrG   N   sC     
QJJqMQ  	

r   c                      dD ]`  } | sd}d}n| dkD  r	|  }d| z  }nd| z  }|  }t        t        |       }|j                  d   }t        |t        j
                  d| ||dd	
       b y )N)g      @      ?g              rJ   rI   r      r=   r>   皙?Tr    r4   r.   minmaxstepreadout)r
   r   r3   r1   r7   FloatSliderr>   expected_minexpected_maxrC   r*   s        r   test_single_value_floatrV   X   s    # 
LLU2LQ3LQ3L2LQJJqMQ##	

r   c                     dD ]z  } | sd}d}n| dkD  r	|  }d| z  }nd| z  }|  }t        t        |       }t        |j                        dk(  sJ |j                  d   }t	        |t
        j                  d| ||dd	       | y )
N)r      r   r   r   rK   r=      r>   TrM   )r
   r   lenr3   r1   r7   	IntSliderrS   s        r   test_single_value_intr]   o   s     
LLU2LQ3LQ3L2LQ1::!###JJqMQ!!	

r   c            	          g d} | d   }t        t        |       }t        |j                        dk(  sJ t	        t
        j                  |t        |       t        |       t        |             }t        ||       y )N)r<   thereguyr   lisrZ   r    r.   options_options_labels_options_values	r
   r   r[   r3   dictr7   Dropdowntupler9   valuesfirstrC   r+   s       r   test_list_strrn      si    &F1IEA6"Aqzz?afff	A !#r   c            	         g d} | d   }t        t        |       }t        |j                        dk(  sJ t	        t
        j                  |t        |       t        d | D              t        |             }t        ||       y )NrK   r   rZ   r   ra   rZ   c              3   2   K   | ]  }t        |        y wr   )str).0vs     r   	<genexpr>z test_list_int.<locals>.<genexpr>   s     5c!f5s   rc   rg   rk   s       r   test_list_intrv      sp    F1IEA6"Aqzz?af5f55f	A !#r   c                      g d} | d   d   }t        t        |       }t        |j                        dk(  sJ t	        t
        j                  |t        |       dd      }t        ||       y 	N)rK   ,  )r   d   )rZ      r   r   ra   rZ   312rz   r{   r|   rc   rg   rk   s       r   test_list_tupler      se    +F1IaLEA6"Aqzz?af''	A !#r   c                      dD ]@  } t        j                  t              5  t        |        t	        t
        |       }d d d        B y # 1 sw Y   MxY w)N)r   )tup)pytestraises
ValueErrorprintr
   r   )badrC   s     r   test_list_tuple_invalidr      sN     ( ]]:& 	(#JA3'A	( 	((	( 	(s   AA	c                  |   t        d      t        ddt               fD ]  } t        t        |       }|j                  d   }t        t        j
                  dt        t        | j                                     | t        | j                               t        | j                                     }t        |fi |  y )	NrX   r=   b)r>   r   rC   )r+   r   r+   )r    r4   r.   rd   re   rf   )rh   r
   r   r3   r7   ri   nextiterrl   rj   keysr1   )r+   rC   r*   checks       r   	test_dictr      s    q	qC4  ! QJJqM  tAHHJ'(!!&&(O!!((*-
 	Q % !r   c                      ddl m}  g d}|d   d   } | |      }t        t        |      }t	        |j
                        dk(  sJ t        t        j                  ||dd	      }t        ||       y )
Nr   r   ry   r   ra   rZ   r}   r   rc   )
collectionsr   r
   r   r[   r3   rh   r7   ri   r9   )r   r!   rm   rl   rC   r+   s         r   test_ordereddictr      sn    '*E!HQKEFA6"Aqzz?a''	A !#r   c                      d } t         |              }t        t         |              }t        |j                        dk(  sJ t        t        j                  |ddd      }t        ||       y )Nc               3   $   K   d d d y w)NrK   r   rZ   r   r   r   r   yield_valuesz#test_iterable.<locals>.yield_values   s     s   ra   rZ   rp   r}   rc   )	r   r
   r   r[   r3   rh   r7   ri   r9   )r   rm   rC   r+   s       r   test_iterabler      sd      EA<>*Aqzz?a'!	A !#r   c                      g d} | d   d   }t        t        t        |             }t        |j                        dk(  sJ t        t        j                  |t        |       dd      }t        ||       y rx   )
r
   r   r   r[   r3   rh   r7   ri   rj   r9   rk   s       r   test_iterable_tupler      si    +F1IaLEA4<(Aqzz?af''	A !#r   c                     ddl m}  ddlm}  G d d|       }g d}|d   d   } ||      }t	        t
        |      }t        |j                        d	k(  sJ t        t        j                  |t        |      d
d      }t        ||       y )Nr   )Mappingr   c                   *    e Zd Zd Zd Zd Zd Zd Zy)!test_mapping.<locals>.TestMappingc                     || _         y r   rl   )selfrl   s     r   __init__z*test_mapping.<locals>.TestMapping.__init__   s	     DKr   c                     t         r   NotImplementedErrorr   s    r   __getitem__z-test_mapping.<locals>.TestMapping.__getitem__       %%r   c                     t         r   r   r   s    r   __len__z)test_mapping.<locals>.TestMapping.__len__  r   r   c                     t         r   r   r   s    r   __iter__z*test_mapping.<locals>.TestMapping.__iter__  r   r   c                     | j                   S r   r   r   s    r   r!   z'test_mapping.<locals>.TestMapping.items  s    ;;r   N)r%   
__module____qualname__r   r   r   r   r!   r   r   r   TestMappingr      s    	!	&	&	&	r   r   ry   r   ra   rZ   r}   r   rc   )collections.abcr   r   r   r
   r   r[   r3   rh   r7   ri   rj   r9   )r   r   r   r!   rm   rl   rC   r+   s           r   test_mappingr      s    ''
g 
 +E!HQKEFA6"Aqzz?ae''	A !#r   c                    t        j                  t        dt              5  t	        d      d        }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d       y # 1 sw Y   PxY w)NdisplayrX   r=   c                      y r   r   r=   s    r   fooz!test_decorator_kwarg.<locals>.foo      r   r   r   r    r.   r   objectr   r   r   r[   r   r3   r1   r7   r\   r   r   r*   s      r   test_decorator_kwargr     s{    	k9n	= 	A	 
	 y>Q!a A s   BBc                 H    G d d      } |       }t        j                  t        dt              5  t	        |j
                  d      }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d	       y # 1 sw Y   PxY w)
Nc                       e Zd Zd Zy))test_interact_instancemethod.<locals>.Fooc                     t        |       y r   )r   )r   xs     r   showz.test_interact_instancemethod.<locals>.Foo.show$  s	    !Hr   N)r%   r   r   r   r   r   r   Foor   #  s    	r   r   r   )r   
   r   r   r   rX   r   )r   r   r   r   r   r   r[   r   r3   r1   r7   r\   )r   r   r   gr*   s        r   test_interact_instancemethodr   "  s      	A	k9n	= 'QVVv&'y>Q!a A	' 's   BB!c                    t        j                  t        dt              5  t        dd       }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d       y # 1 sw Y   PxY w)Nr   defaultc                      y r   r   r=   s    r   r   z#test_decorator_no_call.<locals>.foo4  r   r   r   r   r   r   r   r   r   r   r   r[   r   r3   r1   r7   rA   r   s      r   test_decorator_no_callr   2  su    	k9n	= 		 
	 y>Q!a ALL s   A==Bc                    dd}t        j                  t        dt              5  t	        |      }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d       y # 1 sw Y   PxY w)Nr   c                      y r   r   r=   s    r   r   ztest_call_interact.<locals>.foo?      r   r   r   r   r   r   r   r   r   ifoor*   s       r   test_call_interactr   >  so    	k9n	= }y>Q!a ALL	 s   A??Bc                    dd}t        j                  t        dt              5  t	        |      }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d       t        j                  t        dt              5  d|_        d d d        t        t              dk(  sJ y # 1 sw Y   xY w# 1 sw Y   *xY w)	Nr   c                      y r   r   r=   s    r   r   z<test_call_interact_on_trait_changed_none_return.<locals>.fooK  r   r   r   r   r   r   calledr   r   r   r   r   r   r[   r   r3   r1   r7   rA   r.   r   s       r   /test_call_interact_on_trait_changed_none_returnr   J  s    	k9n	= }y>Q!a ALL 
k9n	= y>Q  s   CCCCc                    dd}t        j                  t        dt              5  t	        |d      }d d d        t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d       y # 1 sw Y   PxY w)	Nc                      y r   r   r=   s    r   r   z&test_call_interact_kwargs.<locals>.fooZ  r   r   r   r   r=   r   r   r   r   r   r   s       r   test_call_interact_kwargsr   Y  st    	k9n	= #r"#y>Q!a A	# #s   BB
c                 0   i t        j                  t        dt              5  t        dfd	       }ddd       t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d        d	      }|d	k(  sJ d
   d	k(  sJ t        j                  t        dt              5  d|_        ddd       d
   dk(  sJ t        t              dk(  sJ |j                  t        d   k(  sJ y# 1 sw Y   xY w# 1 sw Y   LxY w)z*test calling @interact decorated functionsr   r   c                     | d<   | S Nr>   r   r>   r+   s    r   r   z0test_call_decorated_on_trait_change.<locals>.fooi      AcFHr   NrZ   r   r   r   r<   r>   r   rK   r   r   r   r   r*   r>   r+   s       @r   #test_call_decorated_on_trait_changer   e  s   
A	k9n	= 		 
	
 y>Q!a ALL
 	GA<<S6W 
k9n	= S6Xy>Q77im###+ " s   D 9D D	Dc                 <   i t        j                  t        dt              5  t	        d      dfd	       }ddd       t        t              dk(  sJ t        d   j                  d   }t        |t        j                  d	        d
      }|d
k(  sJ d   d
k(  sJ t        j                  t        dt              5  d|_        ddd       d   dk(  sJ t        t              dk(  sJ |j                  t        d   k(  sJ y# 1 sw Y   xY w# 1 sw Y   LxY w)z3test calling @interact(foo=bar) decorated functionsr   kwargr=   c                     | d<   | S r   r   r   s    r   r   z7test_call_decorated_kwargs_on_trait_change.<locals>.foo  r   r   NrZ   r   r   r   r<   r>   r   rK   r   r   r   r   s       @r   *test_call_decorated_kwargs_on_trait_changer     s   
A	k9n	= 	G		 
	
 y>Q!a ALL
 	GA<<S6W 
k9n	= S6Xy>Q77im###+ " s   D?DDDc                      t        t        t        j                  d      d      } t	        | j
                        dk(  sJ | j
                  d   }t        |t        j                  dd       y )NrX   text)r>   r   rZ   r   r   r    r.   r4   )r
   r   r7   fixedr[   r3   r1   rA   rC   r*   s     r   
test_fixedr     sS    Aq)V4Aqzz?a	

1ALLr   c                  ~    t        t        d      } | j                  d   }t        |t        j
                  dd       y )Nr   r   r   r   r   r@   r   s     r   test_default_descriptionr     s2    A A	

1ALLr   c                      i fd} t        | t        j                  dd            }|j                  d   }t	        |t        j                  dd       d|_        d	dik(  sJ y )
Nc                  H    j                          j                  |        y r   )clearupdate)r   r+   s    r   record_kwargsz.test_custom_description.<locals>.record_kwargs  s    			r   r   r   )r.   r4   r   r   r   zdifferent textr   )r
   r7   rA   r3   r1   r.   )r   rC   r*   r+   s      @r   test_custom_descriptionr     sg    
A 	MW\\E%RSA	

1ALL
 AG&''''r   c                       G d dt               } t        j                  t        d      5  t	        t
         |               ddd       y# 1 sw Y   yxY w)z9 Test that passing in a non-value widget raises an error c                       e Zd ZdZ e       Zy)2test_raises_on_non_value_widget.<locals>.BadWidgetz+ A widget that contains a `value` traitlet N)r%   r   r   __doc__r   r.   r   r   r   	BadWidgetr     s    9r   r   z.* not a ValueWidget.*)matchr   N)r   r   r   	TypeErrorr
   r   )r   s    r   test_raises_on_non_value_widgetr     s@    F  
y(@	A &A%& & &s   AAc                      t        j                  d      j                  t              } | j                  d   }t        |t        j                         y )NTmanualr   )r    )r   rd   widgetr   r3   r1   r7   Buttonr   s     r   test_interact_manual_buttonr    s8    %,,Q/A	

1A'r   c                      d} d } t        j                  d      |d      j                  }d|j                  d   _        | dk(  sJ y )Nr   c                     dz  }y )Nr   r   )testarg	callcounts     r   calltestz-test_interact_manual_nocall.<locals>.calltest  s    Q	r   Tr   rX   )r  r   )r   rd   r  r3   r.   )r  r	  rC   s      r   test_interact_manual_nocallr
    sG    I%%h:AAAAJJqM>>r   c                      t        j                  t              } | j                          t	        j                  t              } | j                          y r   )r   r  r   r   r	   )r*   s    r   test_interact_callr    s2    AHHJq!AHHJr   c                     d }  t        j                  d      j                  d      | d      j                  }|j                  dk(  sJ  t	        j                  d      j                         d      j                  |       }|j                  dk(  sJ   t        d             j                  d      |       j                  }|j                  dk(  sJ y )Nc                     | S r   r   r   s    r   r   z test_interact_options.<locals>.f  s    r   Fr   T   r   )r   rd   r  r  r	   )r   r*   s     r   test_interact_optionsr    s    ;&..d.;ADKKA88t7u-557"=DDQGA88u-2   -a077A88tr   c                      t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nr   )r   )r   r   r   r   rd   r   r   r   test_interact_options_badr    s1    	z	" $U#$ $ $s	   :Ac                      t         j                  }  | ddd      }t        || ddd       d|_        d|_        t        || ddd       d|_        d|_        d|_        d	|_        t        || ddd       d
|_        t        || d
dd       d|_        t        || ddd       d|_        t        || ddd       t        j                  t              5  d|_        d d d        t        j                  t              5  d|_        d d d         | ddd      }t        |ddd        | ddd      }t        |d       t        j                  t              5   | dd       d d d        y # 1 sw Y   xY w# 1 sw Y   txY w# 1 sw Y   y xY w)N)rZ      r      r.   rN   rO   r    r.   rN   rO   rK   )rZ   rK   rZ   r  )r   r   )rX   r  )rZ   r     r   rN   rO   r.   r{   r|   )}      r.   r   rN   rO   )r7   IntRangeSliderr1   upperrO   rN   lowerr.   r   r   r   )irswr*   s     r   test_int_range_logicr"    sp   !!D6qa(AFq9AGAEFq9AEAEAGAGFq9AGFq9AGFq9AGFq9	z	" 	z	"  	(Aq/#Z0A*%	z	"     s$   E,=E8F,E58FFc                     t         j                  }  | ddd      }t        || ddd       d|_        d|_        d|_        d|_        t        || ddd       d|_        t        || ddd       d	|_        t        || d	dd       d|_        t        || d
dd       t        j                  t              5  d|_        d d d        t        j                  t              5  d|_        d d d         | ddd      }t        |dd       t        j                  t              5   | dd       d d d        y # 1 sw Y   xxY w# 1 sw Y   [xY w# 1 sw Y   y xY w)N)皙?皙?rJ   333333?r  r  r$  r%  )rJ   rL   )g      ?r&  )r$  r&  gffffff?grZ   rK   )g@g      @r  g       @g      @r  rL   )r7   FloatRangeSliderr1   rN   rO   r   r  r.   r   r   r   )frswr*   s     r   test_float_range_logicr)    s8   ##D8,AH""=AEAEAGAGH""=AGH""=AGH""=AGH""=	z	" 	z	"  	,A#	z	"     s$   6D5E!E5D>E
Ec                     t         j                  }  |        }t        |t                      t	        j
                  t              5  d|_        d d d        t        |t                       | dgdg      }t        || dd       t	        j
                  t              5  |j                  dz   |_        d d d        t        |d       |j                  d	z   |_        t        |d
d       d|_        t        |d       ddi|_        t        |ddi       d|_        t	        j
                  t              5  d|_        d d d        t        |d       y # 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   0xY w)Nr  )rZ   r   r   r   )rd   r.   )r   )r+  )r    r.   rd   )rZ   rZ   )r+  r,  r   )r   rZ   )rd   )	r7   SelectMultipler1   rj   r   r   r   r.   rd   )smwr*   s     r   test_multiple_selectionr/  +  s;   

 
 C 	A%'" 
z	" %'" 	VHQC(A4; 
z	" !''D.!$ 		I%AIO26 AG&! AAIQqE" AI	z	" D"; ! !$ s$   EE"7E.E"E+.E7c                      d} t        t        |       }|j                  d   }t        |t        j
                  d|        y r;   )r
   rh   r3   r1   r7   rA   rB   s      r   test_interact_noinspectr1  R  s7    ADAA	

1ALLr   c                      ddl m}  ddlm  G fdd|       } |       }t	        d |      }|j                          |j                  dk(  sJ y )	Nr   )ValueWidgetUnicodec                   6    e Zd Z W  d      Z W         Zd Zy)*test_get_interact_value.<locals>.TheAnswer	TheAnswerc                      y)N*   r   r   s    r   get_interact_valuez=test_get_interact_value.<locals>.TheAnswer.get_interact_valuec  s    r   N)r%   r   r   _model_namer4   r;  r4  s   r   r8  r7  `  s    k*i	r   r8  c                     | S r   r   rt   s    r   <lambda>z)test_get_interact_value.<locals>.<lambda>f  s    a r   r>  r:  )ipywidgets.widgetsr3  	traitletsr5  r
   r   result)r3  r8  r*   rC   r5  s       @r   test_get_interact_valuerC  ]  sC    .!K 
 	AK1%AHHJ88r>>r   c            	         ddl m} m} dd l}dd l} |        } |j
                  d      }t        t        j                  j                  t        j                  j                  t        j                  j                  t                    dd            5 }|j                  |      }d d d        |j                  |       y # 1 sw Y   xY w)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   rF  rG  sstater   schemas           r   test_state_schemarU  j  s    4A$F$$48E	bggll277??277+;+;H+EFRef	g kl1v& s   C  C	)@r   unittest.mockr   rJ  r   r   r   
ipywidgetsr7   rA  r   r   r   r	   r
   r   r   r   utilsr   r   r   r   fixturer   r   r1   r9   rD   rG   rV   r]   rn   rv   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/  r1  rC  rU  r   r   r   <module>rZ     s   %  	 #   '5 5 #	 	 i
(

.
0$$$(!"$ $"$$:
 


$4$8( &(

$D:%#N'r   