
    ^ho                         S r SSKJr  SSKJr  SSKrSSKrSSKrSSKJ	r	   " S S\5      r
 " S S	\5      r " S
 S\5      r " S S\5      rg)zTesting widget layout templates    )TestCase)mockN)LayoutPropertiesc                   Z    \ rS rSrSrS rS rS r\R                  " S5      S 5       r
Srg	)
TestTwoByTwoLayout   test layout templatesc                 l   [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " UUUUS9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " UUS	US9nUR                  R                  S
:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  b   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " S	UUUS9nUR                  R                  S:X  d   eUR
                  b   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " S	US	US9nUR                  R                  S:X  d   eUR
                  b   eUR                  R                  R                  S:X  d   eUR                  b   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " US	UUS9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  b   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " US	S	S	S9nUR                  R                  S:X  d   eUR
                  UL d   eUR
                  R                  R                  S:X  d   eUR                  b   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " S	US	S	S9nUR                  R                  S:X  d   eUR                  UL d   eUR                  R                  R                  S:X  d   eUR
                  b   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " S	S	S	S	S9nUR                  R                  b   eUR
                  b   eUR                  b   eUR                  b   eUR                  b   eUR                  5       S   (       a   e[         R                  " S	US	S	SS9nUR                  R                  S:X  d   eUR                  UL d   eUR                  R                  R                  S:X  d   eUR
                  b   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   eg	)z'test merging cells with missing widgetstop_left	top_rightbottom_leftbottom_right/"top-left top-right"
"bottom-left bottom-right"ztop-leftz	top-rightzbottom-leftzbottom-rightchildren   N,"top-left top-right"
"top-left bottom-right"   z2"bottom-left top-right"
"bottom-left bottom-right"z1"top-right top-right"
"bottom-right bottom-right"   z2"top-left bottom-right"
"bottom-left bottom-right"z'"top-left top-left"
"top-left top-left"   z+"top-right top-right"
"top-right top-right"F)r   r   r   r   merge)widgetsButtonTwoByTwoLayoutlayoutgrid_template_areasr   	grid_arear   r   r   len	get_state)selfbutton1button2button3button4boxs         h/home/james-whalen/.local/lib/python3.13/site-packages/ipywidgets/widgets/tests/test_widget_templates.pytest_merge_cells#TestTwoByTwoLayout.test_merge_cells   s
    ..".."..".."$$g/61829;
 zz-- 3O P 	P P||"",,
:::}}##--<<<%%//=@@@&&00NBBB3==?:./1444$$g/61529;
 zz-- 3L M 	M M||"",,
:::}}##--<<<&&&&&00NBBB3==?:./1444$$d/61829;
 zz-- 3O P 	P P||###}}##--<<<%%//=@@@&&00NBBB3==?:./1444$$d/61529;
 zz-- 3P Q 	Q Q||###}}##--<<<&&&&&00NBBB3==?:./1444$$g/31829;
 zz-- 3O P 	P P||"",,
:::}}$$$%%//=@@@&&00NBBB3==?:./1444 $$g/315268
 zz-- 3H I 	I I ||w&&&||"",,
:::}}$$$&&&'''3==?:./1444$$d/615268
 zz-- 3J K 	K K }}'''}}##--<<<||###&&&'''3==?:./1444$$d/315268
 zz--555||###}}$$$&&&'''==?:...$$d/61526+0	2 zz-- 3O P 	P P }}'''}}##--<<<||###&&&'''3==?:./1444    c                 8   [         R                  " SS9n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " X#XEUS9nUR                  R
                  S:X  d   eg)z6test whether layout options are passed down to GridBoxcenteralign_itemsr   r   r   r   r   N)r   Layoutr   r   r   r-   )r    r   r!   r"   r#   r$   r%   s          r&   test_keep_layout_options+TestTwoByTwoLayout.test_keep_layout_options   st     H5..".."..".."$$g18,24 zz%%111r)   c           
         [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " XX4SSSS9nUR                  R                  S:X  d   eUR                  R
                  S:X  d   eUR                  R                  S:X  d   e[         R                  " SSSS9n[         R                  " XX4US9nUR                  R                  S:X  d   eUR                  R
                  S:X  d   eUR                  R                  S:X  d   e[         R                  " SSSS9n[         R                  " XX4USS9nUR                  R                  S:X  d   eUR                  R
                  S:X  d   eUR                  R                  S:X  d   eg)	z\test whether the extra layout options of the template class are
passed down to Layout object10pxr+   )r   r   r   r   grid_gapjustify_contentr-   )r4   r5   r-   r.   30px)r   r   r   r   r   r4   N)r   r   r   r   r4   r5   r-   r/   )r    r!   r"   r#   r$   r%   r   s          r&   test_pass_layout_options+TestTwoByTwoLayout.test_pass_layout_options   s    ..".."..".."$$g18.4h19;
 zz""f,,,zz))X555zz%%111 ,46$$g18,2'
 zz""f,,,zz))X555zz%%111 ,46$$g18,2V'
 zz""f,,,zz))X555zz%%111r)   zipywidgets.Layout.send_statec                    [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " X$SUS9nSSKJn  UR                  5       n[        US   5      S:X  d   eUR                  R                  S:X  d   e[        R                  " US9UR                  R                  l        UR                  5         X6l        UR                  5       n[        US   5      S	:X  d   eUR                  R                  S
:X  d   eUR                  SS9  [         R                  " X$SUS9nUR                  R                  S:X  d   e[        R                  " US9UR                  R                  l        UR                  5         SUl        UR                  R                  S
:X  d   eUR                  SS9  g)z9test whether it's possible to add widget outside __init__Nr   r   )Kernelr   r   r   )specr   r   r   )keyF)r   r   r   ipykernel.kernelbaser:   r   r   r   r   r   	MagicMockcommkernel
reset_mockr   assert_called_withr   )	r    
send_stater!   r"   r#   r$   r%   r:   states	            r&   test_update_dynamically*TestTwoByTwoLayout.test_update_dynamically   s    ..".."..".."$$g15GM/5$%***zz-- 3L M 	M M "&V!<

!5$%***zz-- 3O P 	P P 	%%*?%@$$g15GMzz-- 3L M 	M M!%V!<

	zz-- 3O P 	P P%%*?%@r)    N)__name__
__module____qualname____firstlineno____doc__r'   r0   r7   r   patchrE   __static_attributes__rG   r)   r&   r   r      s7    B5H2(2V 
ZZ./%A 0%Ar)   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestAppLayout   r	   c                    [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " UUUUUS9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S	:X  d   e[         R                  " 5       nUR                  R                  b   eUR                  R                  b   eUR                  R                  b   e[        UR                  5       S   5      S:X  d   eg
)z!test creating with default values)footerheaderr+   left_sidebarright_sidebarQ"header header header"
"left-sidebar center right-sidebar"
"footer footer footer"rS   rT   r+   left-sidebarright-sidebarr      Nr   )r   r   	AppLayoutr   r   rS   r   rT   r+   rU   rV   r   r   grid_template_columnsgrid_template_rowsr    rS   rT   r+   rU   rV   r%   s          r&   test_create_with_defaults'TestAppLayout.test_create_with_defaults   s    !!!~~'(%'
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666&&00NBBB  ''11_DDD3==?:./1444 !zz--555zz//777zz,,4443==?:./1444r)   c                    [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " US9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " US9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUUS	9nUR                  R                  S
:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUUS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   e[         R                  " UUSUUS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUSSUS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  b   eUR                  R                  R                  S:X  d   eUR
                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUSSSS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  b   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUSS9nUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUUS9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUUS9nUR                  R                  S :X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " UUUS!9nUR                  R                  S":X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S:X  d   eUR                  b   eUR                  b   e[        UR                  5       S   5      S:X  d   e[         R                  " US9nUR                  R                  S:X  d   eUR
                  R                  R                  S:X  d   e[        UR                  5       S   5      S:X  d   eg)#z"test if cells are correctly merged)r+   zD"center center center"
"center center center"
"center center center"r+   r   r   )rU   zz"left-sidebar left-sidebar left-sidebar"
"left-sidebar left-sidebar left-sidebar"
"left-sidebar left-sidebar left-sidebar"rX   )rT   rS   rU   r+   zJ"header header header"
"left-sidebar center center"
"footer footer footer"rS   rT   r   )rT   rS   rV   r+   zK"header header header"
"center center right-sidebar"
"footer footer footer"rY   )rT   rS   r+   zD"header header header"
"center center center"
"footer footer footer"r   N)rT   rS   r+   rU   rV   z<"header header"
"left-sidebar right-sidebar"
"footer footer"z="header header"
"right-sidebar right-sidebar"
"footer footer"z"header"
"footer"r   F)rT   rS   r+   r   rW   )rS   r+   rU   rV   z:"left-sidebar center right-sidebar"
"footer footer footer")rT   r+   rU   rV   z:"header header header"
"left-sidebar center right-sidebar")r+   rU   rV   z#"left-sidebar center right-sidebar")r   r   r[   r   r   r+   r   r   r   rU   rS   rT   rV   r^   s          r&   test_merge_empty_cells$TestAppLayout.test_merge_empty_cells  s_
    !!!~~'( 
 zz-- 3K L 	L L zz  **h6663==?:./1444%
 zz-- 3] ^ 	^ ^ &&00NBBB3==?:./1444 %	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666&&00NBBB3==?:./1444'	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666  ''11_DDD3==?:./1444
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h6663==?:./1444 %'
 zz-- 3D E 	E E zz  **h666zz  **h666&&00NBBB  ''11_DDDzz!!!3==?:./1444 '
 zz-- 3D E 	E E zz  **h666zz  **h666'''  ''11_DDDzz!!!3==?:./1444 
 zz-- 3= > 	> >zz  **h666zz  **h666zz!!!'''  (((3==?:./1444
 	
 zz-- 3K L 	L L zz  **h666zz  **h666zz  **h666'''  (((3==?:./1444 %'	
 zz-- 3K L 	L Lzz  **h666&&00NBBB  ''11_DDDzz  **h666zz!!!3==?:./1444%'	
 zz-- 3X Y 	Y Yzz  **h666&&00NBBB  ''11_DDDzz  **h666zz!!!3==?:./1444%'
 zz--1VVVVzz  **h666&&00NBBB  ''11_DDDzz!!!zz!!!3==?:./1444 
 zz-- 3K L 	L L zz  **h6663==?:./1444r)   c                    [         R                  " 5       nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   e[        R                  " [
        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)N100px1frz2.5frz2.5z25%zthis is not correct size)r   r[   _size_to_csspytestraises	TypeErrorr    r%   s     r&   test_size_to_cssTestAppLayout.test_size_to_css  s    !(G333&%///(G333&'111&%///]]9%78 &%%s   #B>>
Cc                    [         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " UUUUUS9n[        R                  " [
        R                  5         / SQUl        S S S 5        [        R                  " [
        R                  5         SS/Ul        S S S 5        [        R                  " [
        R                  5         / SQUl        S S S 5        [        R                  " [
        R                  5         SS/Ul        S S S 5        UR                  R                  S:X  d   eUR                  R                  S:X  d   e/ SQUl        UR                  R                  S:X  d   eUR                  R                  S:X  d   e/ SQUl        UR                  R                  S:X  d   eUR                  R                  S	:X  d   eg ! , (       d  f       GNl= f! , (       d  f       GNH= f! , (       d  f       GN$= f! , (       d  f       N= f)
N)rT   rS   rU   rV   r+   )1fxro   ro   ro   ro   z1fr 3fr 1frz1fr 2fr 1fr)3frre      z3fr 100px 20fr)r   r   r   z3fr 3fr 1fr)r   r   r[   rh   ri   	traitlets
TraitErrorpane_widthspane_heightsr   r]   r\   r^   s          r&   test_set_pane_widths_heights*TestAppLayout.test_set_pane_widths_heights  s   !!!~~'(%&
 ]]9//0:CO 1]]9//0$enCO 1 ]]9//0;C 1]]9//0 %u~C 1 zz,,===zz//=@@@/zz,,0@@@@zz//=@@@#zz,,0@@@@zz//=@@@' 1000 1000s0   &
H
H'
H9
I
H$'
H69
I
IrG   N)
rH   rI   rJ   rK   rL   r_   rb   rl   rv   rN   rG   r)   r&   rP   rP      s    "5JV5p
9#Ar)   rP   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
TestGridspecLayouti(  ztest GridspecLayoutc                 X   [         R                  " [        R                  5         [        R
                  " 5       nS S S 5        [         R                  " [        R                  5         [        R
                  " SSS9nS S S 5        [        R
                  " SSS9nUR                  S:X  d   eUR                  S:X  d   e[        UR                  5      S:X  d   e[        UR                  S   5      S:X  d   e[        R
                  " SS5      nUR                  S:X  d   eUR                  S:X  d   e[         R                  " [        R                  5         [        R
                  " SS5      nS S S 5        g ! , (       d  f       GNC= f! , (       d  f       GN= f! , (       d  f       g = f)Nr   )n_rows	n_columnsrZ   r   r   r   )
rh   ri   rr   rs   r   GridspecLayoutr|   r}   r   _grid_template_areasrk   s     r&   	test_initTestGridspecLayout.test_init+  s:   ]]9//0((*C 1 ]]9//0((a@C 1 $$A;zzQ}}!!!3++,1113++A./1444$$Q*zzQ}}!!!]]9//0((A.C 10! 10 10 10s#   E7'F	F7
F	
F
F)c                    [         R                  " SS5      n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       n[         R                  " 5       nX!S'   UR                  R                  nX!R
                  ;   d   eUR                  R                  SR                  U5      :X  d   eX1S'   UR                  R                  nXg:w  d   eX1R
                  ;   d   eUR                  R                  SR                  UU5      :X  d   eXAS'   UR                  R                  nXh:w  d   eXx:w  d   eXAR
                  ;   d   eUR                  R                  SR                  UUUS	9:X  d   eXQS'   UR                  R                  n	Xi:w  d   eXy:w  d   eXQR
                  ;   d   eXAR
                  ;  d   eUR                  R                  S
R                  UUU	S9:X  d   eg )Nr   r   r   r   z"{} . ."
". . .")r{   r{   z"{} . ."
". . {}"r   r   z"{b1} . ."
"{b3} . {b2}")b1b2b3z"{b1} . ."
"{b4} . {b2}")r   r   b4)r   r~   r   r   r   r   r   format)
r    r%   r!   r"   r#   r$   button1_labelbutton2_labelbutton3_labelbutton4_labels
             r&   test_setitem_index%TestGridspecLayout.test_setitem_index?  s   $$Q*..".."..".."D	00,,&&&zz--1H1O1OP]1^^^^F00---,,&&&zz--1I1P1PQ^Q^2` ` 	` ` D	00------,,&&&zz--1P1W1W[h[h[h 2X 2j j 	j j
 D	00------,,&&&ll***zz--1P1W1W[h[h[h 2X 2j j 	j jr)   c                    [         R                  " SS5      n[         R                  " 5       nX!S S2S4'   [        UR                  5      S:X  d   eX!R                  ;   d   eUR
                  R                  nUR
                  R                  SR                  US9:X  d   e[         R                  " SS5      n[         R                  " 5       n[         R                  " 5       nX!S S2SS 24'   [        UR                  5      S:X  d   eX!R                  ;   d   eUR
                  R                  nUR
                  R                  SR                  US9:X  d   eXAS S2SS 24'   [        UR                  5      S:X  d   eXAR                  ;   d   eUR
                  R                  nUR
                  R                  SR                  US9:X  d   eg )Nr   r   r   r   z"{b1} . ."
"{b1} . .")r   z". {b1} {b1}"
". {b1} {b1}")	r   r~   r   r   r   r   r   r   r   )r    r%   r!   r   r"   r   s         r&   test_setitem_slices&TestGridspecLayout.test_setitem_slicesh  s   $$Q*.."BQBE
3<< A%%%,,&&&00zz--1M1T1TXe1T1ffff$$Q*..".."BQBF3<< A%%%,,&&&00zz--1S1Z1Z^k1Z1llll BQBF3<< A%%%,,&&&00zz--1S1Z1Z^k1Z1llllr)   c                 x    [         R                  " SS5      n[         R                  " 5       nX!S'   US   UL d   eg)ztest retrieving widgetr   r   r   N)r   r~   r   )r    r%   r!   s      r&   test_getitem_index%TestGridspecLayout.test_getitem_index  s;     $$Q*.."D	4yG###r)   c                    [         R                  " SS5      n[         R                  " 5       nX!SS2S4'   USS2S4   UL d   e[         R                  " SS5      n[         R                  " 5       n[         R                  " 5       nX!S'   X1S'   US   UL d   eUS   UL d   e[        R                  " [
        SS9   USS2S4   nSSS5        g! , (       d  f       g= f)	z#test retrieving widgets with slicesr   r   Nr   r   r   zThe slice spans)match)r   r~   r   rh   ri   rj   )r    r%   r!   r"   buttons        r&   test_getitem_slices&TestGridspecLayout.test_getitem_slices  s     $$Q*.."BQBE
2A2q5zg%%%$$Q*..".."D	D	4yW$$$4yW$$$]]9,=>!QZF ?>>s   9
C
CrG   N)rH   rI   rJ   rK   rL   r   r   r   r   r   rN   rG   r)   r&   ry   ry   (  s!    /('jRm>$ r)   ry   c                   V    \ rS rSrSr " S S\R                  \5      rS r	S r
S rSrg	)
TestLayoutPropertiesi  z!test mixin with layout propertiesc                   J    \ rS rSr\R
                  " \R                  SS9rSr	g)"TestLayoutProperties.DummyTemplatei  T)
allow_nonerG   N)
rH   rI   rJ   rK   rr   Instancer   WidgetlocationrN   rG   r)   r&   DummyTemplater     s    %%gnnFr)   r   c                     U R                  SS9nUR                  S:X  d   eUR                  R                  S:X  d   eSUl        UR                  S:X  d   eUR                  R                  S:X  d   eg)zDtest whether respective layout traits are updated when traits changez100%)widthautoN)r   r   r   r    templates     r&   #test_layout_updated_on_trait_change8TestLayoutProperties.test_layout_updated_on_trait_change  sr     %%F%3~~'''$$...~~'''$$...r)   c                     U R                  SS9nUR                  S:X  d   eUR                  R                  S:X  d   eSUl        UR                  S:X  d   eUR                  R                  S:X  d   eg )Ntopr,   z
flex-startbottomzflex-end)r   r-   r   r   s     r&   test_align_items_extra_options3TestLayoutProperties.test_align_items_extra_options  su    %%%%8##u,,,**l:::'##x///**j888r)   c                     U R                  5       n[        R                  R                   H  nX!l        UR                  U:X  a  M   e   [        R
                  " [        R                  5         SUl        S S S 5        g ! , (       d  f       g = f)Nzany default position)r   r   r-   valuesrh   ri   rr   rs   )r    prop_objprops      r&   test_validate_properties-TestLayoutProperties.test_validate_properties  sh    %%'$0077D#' ''4/// 8 ]]9//0#9H  100s   .A??
BrG   N)rH   rI   rJ   rK   rL   r   GridBoxr   r   r   r   r   rN   rG   r)   r&   r   r     s)    +G)9 G	/9:r)   r   )rL   unittestr   r   rh   rr   
ipywidgetsr   #ipywidgets.widgets.widget_templatesr   r   rP   ry   r   rG   r)   r&   <module>r      sW    !      @gA gATpAH pAd	|  | ~#:8 #:r)   