HEX
Server: Apache
System: Linux bd12.noc223.com 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: handcraf (1693)
PHP: 8.1.28
Disabled: NONE
Upload Files
File: //opt/alt/python312/lib64/python3.12/test/test_capi/__pycache__/test_watchers.cpython-312.pyc
�

}h�e�L��&�ddlZddlmZmZddlmZmZejd�ZGd�dej�Z
Gd�dej�ZGd	�d
ej�ZGd�dej�Z
ed
k(rej�yy)�N)�contextmanager�	ExitStack)�catch_unraisable_exception�
import_helper�	_testcapic���eZdZdZdZdZefd�Zd�Zeefd��Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z y)�TestDictWatchersr��c�,�tj|�S�N)r�add_dict_watcher��self�kinds  �C/opt/alt/python312/lib64/python3.12/test/test_capi/test_watchers.py�add_watcherzTestDictWatchers.add_watcher����)�)�$�/�/�c�.�tj|�yr
)r�clear_dict_watcher�r�
watcher_ids  r�
clear_watcherzTestDictWatchers.clear_watcher����$�$�Z�0rc#�K�|j|�}	|��|j|�y#|j|�wxYw�wr
�rr�rr�wids   r�watcherzTestDictWatchers.watcher�<�������t�$��	$��I����s�#��D���s�#���A�+�A�>�Ac�P�tj�}|j||�yr
)r�get_dict_watcher_events�assertEqual�r�expected�actuals   r�
assert_eventszTestDictWatchers.assert_eventss ���2�2�4�������*rc�0�tj||�yr
)r�
watch_dict�rr�ds   r�watchzTestDictWatchers.watch#������S�!�$rc�0�tj||�yr
)r�unwatch_dictr,s   r�unwatchzTestDictWatchers.unwatch&������s�A�&rc��i}|j�5}|j||�d|d<|jdg�ddd�y#1swYyxYw)N�bar�foo�new:foo:bar�r r.r)�rr-rs   r�test_set_new_itemz"TestDictWatchers.test_set_new_item)sN����
�\�\�^�	0�s��J�J�s�A���A�e�H����
��/�	0�	0�	0�s�*A�Ac��ddi}|j�5}|j||�d|d<|jdg�ddd�y#1swYyxYw)Nr6r5�bazzmod:foo:bazr8r9s   r�test_set_existing_itemz'TestDictWatchers.test_set_existing_item0sR��
�E�N��
�\�\�^�	0�s��J�J�s�A���A�e�H����
��/�	0�	0�	0�s�*A�Ac���i}ddi}|j�5}|j||�|j|�|jdg�ddd�y#1swYyxYw)Nr6r5�clone)r r.�updater))rr-�d2rs    r�
test_clonezTestDictWatchers.test_clone7sY�����U�^��
�\�\�^�	*�s��J�J�s�A��
�H�H�R�L�����y�)�	*�	*�	*�s�6A�Ac�~�i}|j�5}d|d<|jg�ddd�y#1swYyxYw)Nr5r6)r r)r9s   r�test_no_event_if_not_watchedz-TestDictWatchers.test_no_event_if_not_watched?s>����
�\�\�^�	#�s��A�e�H����r�"�	#�	#�	#�s�3�<c��ddi}|j�5}|j||�|d=|jdg�ddd�y#1swYyxYw�Nr6r5zdel:foor8r9s   r�test_delzTestDictWatchers.test_delEsP��
�E�N��
�\�\�^�	,�s��J�J�s�A���%�����	�{�+�	,�	,�	,�s�(A�Ac��ddi}|j�5}|j||�|jd�|jdg�ddd�y#1swYyxYwrF)r r.�popr)r9s   r�test_popzTestDictWatchers.test_popLsT��
�E�N��
�\�\�^�	,�s��J�J�s�A��
�E�E�%�L����	�{�+�	,�	,�	,�s�6A�Ac��ddi}|j�5}|j||�|j�|jdg�ddd�y#1swYyxYw)Nr6r5�clear)r r.rLr)r9s   r�
test_clearzTestDictWatchers.test_clearSsR��
�E�N��
�\�\�^�	*�s��J�J�s�A��
�G�G�I�����y�)�	*�	*�	*�s�5A�Ac��ddi}|j�5}|j||�~|jdg�ddd�y#1swYyxYw)Nr6r5�deallocr8r9s   r�test_dealloczTestDictWatchers.test_deallocZsL��
�E�N��
�\�\�^�	,�s��J�J�s�A������	�{�+�	,�	,�	,�s�&A�A
c���i}|j�5}|j||�d|d<|j||�d|d<|jdg�ddd�y#1swYyxYw)Nr5r6r<�hmmr7)r r.r2r)r9s   r�test_unwatchzTestDictWatchers.test_unwatchase����
�\�\�^�	0�s��J�J�s�A���A�e�H��L�L��a� ��A�e�H����
��/�	0�	0�	0�s�AA�A&c��i}|j|j��5}|j||�t�5}d|d<|j	d|j
j�|jt|j
j�d�ddd�|jg�ddd�y#1swY�#xYw#1swYyxYw)N�rr5r6z0PyDict_EVENT_ADDED watcher callback for <dict at�boom!)r �ERRORr.r�assertIn�
unraisable�objectr%�str�	exc_valuer)�rr-r�cms    r�
test_errorzTestDictWatchers.test_errorjs�����
�\�\�t�z�z�\�
*�		#�c��J�J�s�A��+�-�
H�� ��%���
�
�F��M�M�(�(��� � ��R�]�]�%<�%<�!=�w�G�

H�
���r�"�		#�		#�
H�
H��		#�		#�s#�C�AB9�C�9C	�>C�Cc�,�i}|j|j��5}|j||�t�5}~|j	t|jj�d�ddd�ddd�y#1swY�xYw#1swYyxYw)NrUrV)r rWr.rr%r[rYr\r]s    r�test_dealloc_errorz#TestDictWatchers.test_dealloc_errorws�����
�\�\�t�z�z�\�
*�	H�c��J�J�s�A��+�-�
H���� � ��R�]�]�%<�%<�!=�w�G�
H�	H�	H�
H�
H��	H�	H�s"�B
�1A>�-B
�>B	�B
�
Bc�:�i}i}|j�5}|j|j��5}|j||�|j||�d|d<d|d<|jddg�ddd�ddd�y#1swY�xYw#1swYyxYw)NrUr5r6r<rRr7�second)r �SECONDr.r))r�d1rA�wid1�wid2s     r�test_two_watchersz"TestDictWatchers.test_two_watcherss���
��
��
�\�\�^�	>�t����4�;�;��/�
>�4��
�
�4��$��
�
�4��$�!��5�	�!��5�	��"�"�M�8�#<�=�
>�	>�	>�
>�
>��	>�	>�s#�B�AB�4B�B	�
B�Bc���|j�5}|jtd�5|j|d�ddd�ddd�y#1swY�xYw#1swYyxYw�NzCannot watch non-dictionaryr
�r �assertRaisesRegex�
ValueErrorr.�rrs  r�test_watch_non_dictz$TestDictWatchers.test_watch_non_dict�s[��
�\�\�^�	#�s��'�'�
�4R�S�
#��
�
�3��"�
#�	#�	#�
#�
#��	#�	#��!�A�A�A�A	�A�A!c��i}|jtd�5|jd|�ddd�|jtd�5|jd|�ddd�y#1swY�;xYw#1swYyxYw�NzInvalid dict watcher ID -1���zInvalid dict watcher ID 8��rlrmr.�rr-s  r�"test_watch_out_of_range_watcher_idz3TestDictWatchers.test_watch_out_of_range_watcher_id�st����
�
#�
#�J�0M�
N�	��J�J�r�1��	�
�
#�
#�J�0L�
M�	��J�J�q�!��	�	�	�	��	�	���A&�
A2�&A/�2A;c��i}|jtd�5|jd|�ddd�y#1swYyxYw�NzNo dict watcher set for ID 1r
rurvs  r� test_watch_unassigned_watcher_idz1TestDictWatchers.test_watch_unassigned_watcher_id�s;����
�
#�
#�J�0O�
P�	��J�J�q�!��	�	�	���5�>c���|j�5}|jtd�5|j|d�ddd�ddd�y#1swY�xYw#1swYyxYwrj�r rlrmr2rns  r�test_unwatch_non_dictz&TestDictWatchers.test_unwatch_non_dict�s[��
�\�\�^�	%�s��'�'�
�4R�S�
%����S�!�$�
%�	%�	%�
%�
%��	%�	%�rpc��i}|jtd�5|jd|�ddd�|jtd�5|jd|�ddd�y#1swY�;xYw#1swYyxYwrr�rlrmr2rvs  r�$test_unwatch_out_of_range_watcher_idz5TestDictWatchers.test_unwatch_out_of_range_watcher_id�st����
�
#�
#�J�0M�
N�	 ��L�L��Q��	 �
�
#�
#�J�0L�
M�	��L�L��A��	�	�	 �	 ��	�	�rxc��i}|jtd�5|jd|�ddd�y#1swYyxYwrzr�rvs  r�"test_unwatch_unassigned_watcher_idz3TestDictWatchers.test_unwatch_unassigned_watcher_id�s;����
�
#�
#�J�0O�
P�	��L�L��A��	�	�	�r|c���|jtd�5|jd�ddd�|jtd�5|jd�ddd�y#1swY�:xYw#1swYyxYwrr�rlrmr�rs r�"test_clear_out_of_range_watcher_idz3TestDictWatchers.test_clear_out_of_range_watcher_id�so��
�
#�
#�J�0M�
N�	#����r�"�	#�
�
#�
#�J�0L�
M�	"����q�!�	"�	"�	#�	#��	"�	"�s�A"�A.�"A+�.A7c�|�|jtd�5|jd�ddd�y#1swYyxYwrzr�r�s r� test_clear_unassigned_watcher_idz1TestDictWatchers.test_clear_unassigned_watcher_id��6��
�
#�
#�J�0O�
P�	"����q�!�	"�	"�	"���2�;N)!�__name__�
__module__�__qualname__�EVENTSrWrdrrrr r)r.r2r:r=rBrDrGrJrMrPrSr_rarhrorwr{rr�r�r�r��rrr	r	s���
�F�
�E�
�F�%�0�1��!�$��$�+�%�'�0�0�*�#�,�,�*�,�0�#�H�	>�#�
��
%�
��
"�"rr	c��eZdZdZdZdZdZefd�Zd�Ze	efd��Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�TestTypeWatchersrr
rrtc�,�tj|�Sr
)r�add_type_watcherrs  rrzTestTypeWatchers.add_watcher�rrc�.�tj|�yr
)r�clear_type_watcherrs  rrzTestTypeWatchers.clear_watcher�rrc#�K�|j|�}	|��|j|�y#|j|�wxYw�wr
rrs   rr zTestTypeWatchers.watcher�r!r"c�P�tj�}|j||�yr
)r�get_type_modified_eventsr%r&s   rr)zTestTypeWatchers.assert_events�s ���3�3�5�������*rc�0�tj||�yr
)r�
watch_type�rr�ts   rr.zTestTypeWatchers.watch�r/rc�0�tj||�yr
)r�unwatch_typer�s   rr2zTestTypeWatchers.unwatch�r3rc��Gd�d�}|j�5}|j||�d|_|j|g�ddd�y#1swYyxYw)Nc��eZdZy)�+TestTypeWatchers.test_watch_type.<locals>.CN�r�r�r�r�rr�Cr����rr�r5�r r.r6r)�rr�rs   r�test_watch_typez TestTypeWatchers.test_watch_type�sL���
�
�\�\�^�	$�s��J�J�s�A���A�E�����s�#�	$�	$�	$�s�,A�Ac���Gd�d�}|j�5}|j||�d|_d|_|j	|g�ddd�y#1swYyxYw)Nc��eZdZy)�2TestTypeWatchers.test_event_aggregation.<locals>.CNr�r�rrr�r��r�rr�r5r<)r r.r6r5r)r�s   r�test_event_aggregationz'TestTypeWatchers.test_event_aggregation�sS���
�
�\�\�^�	$�s��J�J�s�A���A�E��A�E�����s�#�	$�	$�	$�s�3A�A c��Gd�d�}|j�5}|j||�d|_|j|jd�d|_|j||g�ddd�y#1swYyxYw)Nc��eZdZy)�:TestTypeWatchers.test_lookup_resets_aggregation.<locals>.CNr�r�rrr�r��r�rr�r5r<)r r.r6r%r5r)r�s   r�test_lookup_resets_aggregationz/TestTypeWatchers.test_lookup_resets_aggregation�si���
�
�\�\�^�	'�s��J�J�s�A���A�E����Q�U�U�E�*��A�E�����1�v�&�	'�	'�	'�s�AA4�4A=c�F�Gd�d�}|j�5}|j||�d|_|j|jd�|j	|g�|j||�d|_|j	|g�ddd�y#1swYyxYw)Nc��eZdZy)�-TestTypeWatchers.test_unwatch_type.<locals>.CNr�r�rrr�r��r�rr�r5r<)r r.r6r%r)r2r5r�s   r�test_unwatch_typez"TestTypeWatchers.test_unwatch_type�s����
�
�\�\�^�	$�s��J�J�s�A���A�E����Q�U�U�E�*�����s�#��L�L��a� ��A�E�����s�#�	$�	$�	$�s�A3B�B c�l�Gd�d�}|j�5}|j�5}|j||�d|_|j|jd�|j	|g�ddd�d|_|j	|g�ddd�y#1swY�+xYw#1swYyxYw)Nc��eZdZy)�.TestTypeWatchers.test_clear_watcher.<locals>.CNr�r�rrr�r��r�rr�r5r<)r r.r6r%r)r5)rr��_rs    r�test_clear_watcherz#TestTypeWatchers.test_clear_watcher�s����
�
�\�\�^�	$�q�����
(�3��
�
�3��"����� � �����.��"�"�A�3�'�	
(�
�A�E�����s�#�	$�	$�
(�
(��	$�	$�s#�B*�AB�4!B*�B'	�#B*�*B3c���Gd�d�}Gd�d|�}|j�5}|j||�d|_|j|g�ddd�y#1swYyxYw)Nc��eZdZy)�4TestTypeWatchers.test_watch_type_subclass.<locals>.CNr�r�rrr�r�r�rr�c��eZdZy)�4TestTypeWatchers.test_watch_type_subclass.<locals>.DNr�r�rr�Dr�
r�rr�r5r�)rr�r�rs    r�test_watch_type_subclassz)TestTypeWatchers.test_watch_type_subclasssT���
����
�\�\�^�	$�s��J�J�s�A���A�E�����s�#�	$�	$�	$�s�,A�A$c��Gd�d�}|j|j��5}|j||�t�5}d|_|j|jj|�|jt|jj�d�ddd�|jg�ddd�y#1swY�#xYw#1swYyxYw)Nc��eZdZy)�&TestTypeWatchers.test_error.<locals>.CNr�r�rrr�r�r�rr�rUr5rV)r rWr.rr6�assertIsrYrZr%r[r\r))rr�rr^s    rr_zTestTypeWatchers.test_errors����
�
�\�\�t�z�z�\�
*�	#�c��J�J�s�A��+�-�
H������
�
�b�m�m�2�2�A�6�� � ��R�]�]�%<�%<�!=�w�G�
H�
���r�"�
	#�	#�
H�
H��	#�	#�s$�C�AC�!C�C	�C�Cc��Gd�d�}Gd�d�}|j�5}|j|j��5}|j||�|j||�|j||�d|_d|_|j
||gg�ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��eZdZy)�.TestTypeWatchers.test_two_watchers.<locals>.C1Nr�r�rr�C1r�r�rr�c��eZdZy)�.TestTypeWatchers.test_two_watchers.<locals>.C2Nr�r�rr�C2r�r�rr�rUr5r<)r �WRAP�assertNotEqualr.r6rRr))rr�r�rfrgs     rrhz"TestTypeWatchers.test_two_watcherss�������
�\�\�^�	/�t����4�9�9��-�
/���#�#�D�$�/��
�
�4��$��
�
�4��$��������"�"�B���:�.�

/�	/�	/�
/�
/��	/�	/�s$�B8�AB,�B8�,B5	�1B8�8Cc�8�Gd�d�}t�5}d}||jdz
kr2|j|j��}||jdz
kr�2|j	||�d|_|j
|g�ddd�y#1swYyxYw)Nc��eZdZy)�-TestTypeWatchers.test_all_watchers.<locals>.CNr�r�rrr�r�*r�rr�rsr
r5)r�TYPE_MAX_WATCHERS�
enter_contextr r.r6r))rr��stack�last_wids    r�test_all_watchersz"TestTypeWatchers.test_all_watchers)s����
�
�[�	$�E��H��T�3�3�a�7�7� �.�.�t�|�|�~�>���T�3�3�a�7�7��J�J�x��#��A�E�����s�#�	$�	$�	$�s�AB�+B�Bc���|j�5}|jtd�5|j|d�ddd�ddd�y#1swY�xYw#1swYyxYw�NzCannot watch non-typer
rkrns  r�test_watch_non_typez$TestTypeWatchers.test_watch_non_type5s[��
�\�\�^�	#�s��'�'�
�4L�M�
#��
�
�3��"�
#�	#�	#�
#�
#��	#�	#�rpc� �Gd�d�}|jtd�5|jd|�ddd�|jtd�5|j|j|�ddd�y#1swY�ExYw#1swYyxYw)Nc��eZdZy)�>TestTypeWatchers.test_watch_out_of_range_watcher_id.<locals>.CNr�r�rrr�r�;r�rr��Invalid type watcher ID -1rs�Invalid type watcher ID 8)rlrmr.r��rr�s  rrwz3TestTypeWatchers.test_watch_out_of_range_watcher_id:sz���
�
�
#�
#�J�0M�
N�	��J�J�r�1��	�
�
#�
#�J�0L�
M�	2��J�J�t�-�-�q�1�	2�	2�	�	��	2�	2���A8�B�8B�B
c��Gd�d�}|jtd�5|jd|�ddd�y#1swYyxYw)Nc��eZdZy)�<TestTypeWatchers.test_watch_unassigned_watcher_id.<locals>.CNr�r�rrr�r�Br�rr��No type watcher set for ID 1r
rur�s  rr{z1TestTypeWatchers.test_watch_unassigned_watcher_idAs;���
�
�
#�
#�J�0O�
P�	��J�J�q�!��	�	�	��	�=�Ac���|j�5}|jtd�5|j|d�ddd�ddd�y#1swY�xYw#1swYyxYwr�r~rns  r�test_unwatch_non_typez&TestTypeWatchers.test_unwatch_non_typeFs[��
�\�\�^�	%�s��'�'�
�4L�M�
%����S�!�$�
%�	%�	%�
%�
%��	%�	%�rpc� �Gd�d�}|jtd�5|jd|�ddd�|jtd�5|j|j|�ddd�y#1swY�ExYw#1swYyxYw)Nc��eZdZy)�@TestTypeWatchers.test_unwatch_out_of_range_watcher_id.<locals>.CNr�r�rrr�r�Lr�rr�r�rsr�)rlrmr2r�r�s  rr�z5TestTypeWatchers.test_unwatch_out_of_range_watcher_idKsz���
�
�
#�
#�J�0M�
N�	 ��L�L��Q��	 �
�
#�
#�J�0L�
M�	4��L�L��/�/��3�	4�	4�	 �	 ��	4�	4�r�c��Gd�d�}|jtd�5|jd|�ddd�y#1swYyxYw)Nc��eZdZy)�>TestTypeWatchers.test_unwatch_unassigned_watcher_id.<locals>.CNr�r�rrr�r�Sr�rr�r�r
r�r�s  rr�z3TestTypeWatchers.test_unwatch_unassigned_watcher_idRs;���
�
�
#�
#�J�0O�
P�	��L�L��A��	�	�	�r�c��|jtd�5|jd�ddd�|jtd�5|j|j�ddd�y#1swY�DxYw#1swYyxYw)Nr�rsr�)rlrmrr�r�s rr�z3TestTypeWatchers.test_clear_out_of_range_watcher_idWsu��
�
#�
#�J�0M�
N�	#����r�"�	#�
�
#�
#�J�0L�
M�	7����t�5�5�6�	7�	7�	#�	#��	7�	7�s�A,�A8�,A5�8Bc�|�|jtd�5|jd�ddd�y#1swYyxYw)Nr�r
r�r�s rr�z1TestTypeWatchers.test_clear_unassigned_watcher_id]r�r�c��|jtd�5t�5}t|jdz�D]!}|j|j
���#	ddd�ddd�y#1swY�xYw#1swYyxYw)Nzno more type watcher IDsr
)rl�RuntimeErrorr�ranger�r�r )rr�r�s   r�test_no_more_ids_availablez+TestTypeWatchers.test_no_more_ids_availableas|��
�
#�
#�L�2M�
N�	8���
8���t�5�5��9�:�8�A��'�'�����7�8�
8�	8�	8�
8�
8��	8�	8�s"�A=�=A1� A=�1A:	�6A=�=BN) r�r�r��TYPESrWr�r�rrrr r)r.r2r�r�r�r�r�r�r_rhr�r�rwr{r�r�r�r�r�r�r�rrr�r��s���
�E�
�E��D���$�0�1�� �$��$�+�%�'�$�$�	'�	$�$�$�#�
/�
$�#�
2��
%�
4��
7�"�8rr�c�F�eZdZed��Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zy	)
�TestCodeObjectWatchersc#�K�tj|�}	|��tj|�y#tj|�wxYw�wr
)r�add_code_watcher�clear_code_watcher)r�
which_watcherrs   r�code_watcherz#TestCodeObjectWatchers.code_watcheris<�����(�(��7��	.��I��(�(��-��I�(�(��-���A
�3�A
�A
�
A
c�,�|j|tjd��|j|tjd��|j|tjd��|j|tjd��y)Nrr
)r%r�#get_code_watcher_num_created_events�%get_code_watcher_num_destroyed_events)r�
exp_created_0�exp_destroyed_0�
exp_created_1�exp_destroyed_1s     r�assert_event_countsz*TestCodeObjectWatchers.assert_event_countsqs~������9�H�H��K�	M�����Y�L�L�Q�O�	Q�����9�H�H��K�	M�����Y�L�L�Q�O�	Qrc��|jdddd�tjddd�}|jdddd�~|jdddd�|jd�5|jdddd�tjddd�}|jdddd�~|jdddd�|jd�5|jdddd�tjddd�}|jdddd�~|jdddd�ddd�ddd�tjddd�}|jdddd�~|jdddd�y#1swY�RxYw#1swY�VxYw)	Nr�
test_watchers�dummy1�dummy2r
�dummy3r�dummy4)rr�
code_newemptyr�)r�co1�co2�co3�co4s     r�"test_code_object_events_dispatchedz9TestCodeObjectWatchers.test_code_object_events_dispatched|s���� � ��A�q�!�,��%�%�o�x��C��� � ��A�q�!�,��� � ��A�q�!�,��
�
�q�
!�
	5��$�$�Q��1�a�0��)�)�/�8�Q�G�C��$�$�Q��1�a�0���$�$�Q��1�a�0��"�"�1�%�
5��(�(��A�q�!�4��-�-�o�x��K���(�(��A�q�!�4���(�(��A�q�!�4�
5�
	5� �%�%�o�x��C��� � ��A�q�!�,��� � ��A�q�!�,�
5�
5��
	5�
	5�s&�&A&E>�AE2�!E>�2E;	�7E>�>Fc�l�|jd�5t�5}tjddd�}|j	|j
jd|���|j	t|j
j�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�dummy0rz*PY_CODE_EVENT_CREATE watcher callback for rV)	r�rrrr%rYrZr[r\)rr^�cos   rr_z!TestCodeObjectWatchers.test_error�s���
�
�
�q�
!�	H�+�-�
H���,�,�_�h��J��� � ��M�M�(�(�@���G��� � ��R�]�]�%<�%<�!=�w�G�
H�	H�	H�
H�
H��	H�	H�s#�B*�A0B�
B*�B'	�#B*�*B3c��tjddd�}|jd�5t�5}~|j	t|jj�d�ddd�ddd�y#1swY�xYw#1swYyxYw)NrrrrrV)rrr�rr%r[rYr\)rrr^s   rraz)TestCodeObjectWatchers.test_dealloc_error�s���
�
$�
$�_�h��
B��
�
�
�q�
!�	H�+�-�
H���� � ��R�]�]�%<�%<�!=�w�G�
H�	H�	H�
H�
H��	H�	H�s"�B�1A6�%B�6A?	�;B�Bc��|jtd�5tjd�ddd�|jtd�5tjd�ddd�y#1swY�>xYw#1swYyxYw)NzInvalid code watcher ID -1rszInvalid code watcher ID 8rt�rlrmrr�r�s rr�z9TestCodeObjectWatchers.test_clear_out_of_range_watcher_id��o��
�
#�
#�J�0M�
N�	-��(�(��,�	-�
�
#�
#�J�0L�
M�	,��(�(��+�	,�	,�	-�	-��	,�	,���A*�A6�*A3�6A?c��|jtd�5tjd�ddd�y#1swYyxYw)NzNo code watcher set for ID 1r
rr�s rr�z7TestCodeObjectWatchers.test_clear_unassigned_watcher_id��6��
�
#�
#�J�0O�
P�	,��(�(��+�	,�	,�	,���6�?c��|jtd�5tj�ddd�y#1swYyxYw)Nz"no more code watcher IDs available)rlr�r�allocate_too_many_code_watchersr�s r�test_allocate_too_many_watchersz6TestCodeObjectWatchers.test_allocate_too_many_watchers�s4��
�
#�
#�L�2W�
X�	8��5�5�7�	8�	8�	8���5�>N)r�r�r�rr�rrr_rar�r�rr�rrr�r�hs;���.��.�	Q�-�B	H�H�,�,�8rr�c�F�eZdZed��Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zy	)
�TestFuncWatchersc#�K�tj|�}	d��tj|�y#tj|�wxYw�wr
)r�add_func_watcher�clear_func_watcher)r�funcrs   rrzTestFuncWatchers.add_watcher�s:�����(�(��.��	.���(�(��-��I�(�(��-�r�c�2��g��fd�}|j|�5d�}|jtj|df��t	|�}|j
j}||_|jtj||f��d}||_|jtj||f��d}tj||�|jtj||f��ddi}||_|jtj||f��ddi}tj||�|jtj||f��g�~|jtj|df��ddd�y#1swYyxYw)Nc�(���j|�yr
��append)�args�eventss �rr z=TestFuncWatchers.test_func_events_dispatched.<locals>.watcher�s����M�M�$�rc��yr
r�r�rr�myfuncz<TestFuncWatchers.test_func_events_dispatched.<locals>.myfunc�s��r)�{)��rr.r/)rrXr�PYFUNC_EVENT_CREATE�id�test_func_events_dispatched�__code__�PYFUNC_EVENT_MODIFY_CODE�__defaults__�PYFUNC_EVENT_MODIFY_DEFAULTS�set_func_defaults_via_capi�__kwdefaults__�PYFUNC_EVENT_MODIFY_KWDEFAULTS�set_func_kwdefaults_via_capi�PYFUNC_EVENT_DESTROY)rr r-�	myfunc_id�new_code�new_defaults�new_kwdefaultsr+s       @rr2z,TestFuncWatchers.test_func_events_dispatched�st�����	 ��
�
�g�
&�	U�
��M�M�9�8�8�&�$�G��P��6�
�I��7�7�@�@�H�&�F�O��M�M�9�=�=�v�x�P�RX�Y�!�L�".�F���M�M�9�A�A�6�<�X�Z`�a�!�L��0�0���F��M�M�9�A�A�6�<�X�Z`�a�$�c�]�N�$2�F�!��M�M�9�C�C�V�^�\�^d�e�$�c�]�N��2�2�6�>�J��M�M�9�C�C�V�^�\�^d�e��F���M�M�9�9�9�9�d�K�V�T�;	U�	U�	U�s�E*F
�
Fc�0���g��fd�}g��fd�}|j|�5|j|�5d�}tj|df}|j|��|j|��ddd�ddd�y#1swY�xYw#1swYyxYw)Nc�(���j|�yr
r()r*�events0s �r�
first_watcherz>TestFuncWatchers.test_multiple_watchers.<locals>.first_watcher������N�N�4� rc�(���j|�yr
r()r*�events1s �r�second_watcherz?TestFuncWatchers.test_multiple_watchers.<locals>.second_watcher�rDrc��yr
r�r�rrr-z7TestFuncWatchers.test_multiple_watchers.<locals>.myfunc����r)rrr0rX)rrCrGr-�eventrBrFs     @@r�test_multiple_watchersz'TestFuncWatchers.test_multiple_watchers�s������	!���	!��
�
�m�
,�	.��!�!�.�1�
.��#�6�6���E���
�
�e�W�-��
�
�e�W�-�

.�	.�	.�
.�
.��	.�	.�s"�B�;B�/B�B		�B�Bc���Gd�dt���fd�}|j|�5t�5}d�}|j|jj
d|���ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��eZdZy)�;TestFuncWatchers.test_watcher_raises_error.<locals>.MyErrorNr�r�rr�MyErrorrN����rrOc����d���Nztesting 123r��r*rOs �rr z;TestFuncWatchers.test_watcher_raises_error.<locals>.watcher�����-�(�(rc��yr
r�r�rrr-z:TestFuncWatchers.test_watcher_raises_error.<locals>.myfuncrIrz-PyFunction_EVENT_CREATE watcher callback for )�	Exceptionrrr%rYrZ)rr r^r-rOs    @r�test_watcher_raises_errorz*TestFuncWatchers.test_watcher_raises_error�s����	�i�	�	)��
�
�g�
&�	�+�-�
���� � ��M�M�(�(�C�F�:�N��	
�	�	�
�
��	�	�s"�A<�-A0�A<�0A9	�5A<�<Bc���Gd�dt���fd�}d�}|j|�5t�5}~|j|jj
��ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��eZdZy)�CTestFuncWatchers.test_dealloc_watcher_raises_error.<locals>.MyErrorNr�r�rrrOrZrPrrOc����d��rRr�rSs �rr zCTestFuncWatchers.test_dealloc_watcher_raises_error.<locals>.watcherrTrc��yr
r�r�rrr-zBTestFuncWatchers.test_dealloc_watcher_raises_error.<locals>.myfuncs��r)rVrr�assertIsInstancerYr\)rr r-r^rOs    @r�!test_dealloc_watcher_raises_errorz2TestFuncWatchers.test_dealloc_watcher_raises_errors����	�i�	�	)�	��
�
�g�
&�	H�+�-�
H����%�%�b�m�m�&=�&=�w�G�
H�	H�	H�
H�
H��	H�	H�s"�A:�(A.�A:�.A7	�3A:�:Bc��|jtd�5tjd�ddd�|jtd�5tjd�ddd�y#1swY�>xYw#1swYyxYw)Nzinvalid func watcher ID -1rszinvalid func watcher ID 8rt�rlrmrr$r�s rr�z3TestFuncWatchers.test_clear_out_of_range_watcher_idrrc��|jtd�5tjd�ddd�y#1swYyxYw)Nzno func watcher set for ID 1r
r`r�s rr�z1TestFuncWatchers.test_clear_unassigned_watcher_id%rrc��|jtd�5tj�ddd�y#1swYyxYw)Nzno more func watcher IDs)rlr�r�allocate_too_many_func_watchersr�s rrz0TestFuncWatchers.test_allocate_too_many_watchers)s4��
�
#�
#�L�2M�
N�	8��5�5�7�	8�	8�	8�rN)r�r�r�rrr2rKrWr^r�r�rr�rrr!r!�s:���.��.�"U�H.�$�"H� ,�,�8rr!�__main__)�unittest�
contextlibrr�test.supportrr�
import_moduler�TestCaser	r�r�r!r��mainr�rr�<module>rks����0�B�
(�M�'�'��4�	�i"�x�(�(�i"�Xn8�x�(�(�n8�bT8�X�.�.�T8�nl8�x�(�(�l8�^�z���H�M�M�O�r