
    z%ij                        d dl mZ  ej                  d      Zd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dl	mZ  ej                  d        G d	 d
      Zej!                         D  ci c]  \  } }| |j"                  j$                   c}} Z ej(                  eej*                  e      \  ZZ G d d      Zej!                         D  ci c]  \  } }| |j"                  j2                   c}} Z ej(                  eee      \  ZZ G d d      Z ej(                  ee      \  ZZd Z e!dk(  r ejD                          yyc c}} w c c}} w )    )util	importlibN)support)threading_helper)
lock_testsT)modulec                   D    e Zd Z ed       ZdZdZdZdZdZ	dZ
dZdZd Zy)ModuleLockAsRLockTestsc                 $    | j                  d      S )N	some_lockLockType)clss    R/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_importlib/test_locks.py<lambda>zModuleLockAsRLockTests.<lambda>   s    s||K'@     Nc                 ~    t         j                         D ]&  }|j                  j                  j	                          ( y N)initvalues
_bootstrap_blocking_onclear)self	splitinits     r   tearDownzModuleLockAsRLockTests.tearDown$   s/     	6I  --335	6r   )__name__
__module____qualname__classmethodlocktypetest__is_ownedtest_try_acquiretest_try_acquire_contended	test_withtest_timeouttest_release_save_unacquired	test_reprtest_locked_reprr    r   r   r
   r
      s@    @AH N!%IL#' I6r   r
   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)DeadlockAvoidanceTestsc                     	 t        j                         | _        t        j                  d       y # t
        $ r
 d | _        Y y w xY w)Ngư>)sysgetswitchintervalold_switchintervalr   setswitchintervalAttributeErrorr   s    r   setUpzDeadlockAvoidanceTests.setUp4   s=    	+&)&;&;&=D#%%h/ 	+&*D#	+s   .1 AAc                 \    | j                    t        j                  | j                          y y r   )r0   r.   r1   r3   s    r   r   zDeadlockAvoidanceTests.tearDown;   s'    "".!!$"9"9: /r   c                    	
 d}t        |      D cg c]  } j                  t        |             }}t        |      D cg c]  }||   ||dz   |z     f c}	|r|}n|dz
  }t        j                  |      g 
 fd	
fd}t        j                  ||      j                           j                  t        
      |       
S c c}w c c}w )N
      c                 R    	 | j                          y# j                  $ r Y yw xY w)zOTry to acquire the lock. Return True on success,
            False on deadlock.TF)acquireDeadlockError)lockr   s    r   _acquirezDDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>._acquireJ   s0      %% s    &&c                      j                         \  } } |       }j                           |      }j                  ||f       |r|j                          |r| j                          y y r   )popwaitappendrelease)abrarbr=   barrierpairsresultss       r   fz=DeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.fT   sZ    99;DAq!BLLN!BNNB8$				 r   )
ranger   str	threadingBarrierr   Bunchwait_for_finishedassertEquallen)r   create_deadlockNLOCKSilocksNTHREADSrJ   r=   rG   rH   rI   s   `      @@@@r   run_deadlock_avoidance_testz2DeadlockAvoidanceTests.run_deadlock_avoidance_test?   s    05f>1s1v&>>:?-HQ%(E1Q3,/0HHzH##H-			 	H%779Wx0? ?Hs   !CCc                     | j                  d      }|j                  d      }| j                  |d       | j                  |j                  d      t	        |      |z
         y )NTTFr8   TT)rX   countassertGreaterEqualrQ   rR   )r   rI   nb_deadlockss      r   test_deadlockz$DeadlockAvoidanceTests.test_deadlockb   sT    2248 }}]3a0|4c'l\6QRr   c                     | j                  d      }| j                  |j                  d      d       | j                  |j                  d      t        |             y )NFrZ   r   r[   )rX   rQ   r\   rR   )r   rI   s     r   test_no_deadlockz'DeadlockAvoidanceTests.test_no_deadlockk   sH    2259}5q9|4c'lCr   N)r   r   r   r4   r   rX   r_   ra   r*   r   r   r,   r,   2   s    +;!FSDr   r,   )r   r;   c                   (    e Zd Zed        Zd Zd Zy)LifetimeTestsc                 .    | j                   j                  S r   )r   r   r3   s    r   	bootstrapzLifetimeTests.bootstrap}   s    yy###r   c                    d}| j                  || j                  j                         | j                  j                  |      }| j	                  || j                  j                         t        j                  |      }~t        j                          | j                  || j                  j                         | j                   |              y )Nxyzzy)
assertNotInre   _module_locks_get_module_lockassertInweakrefrefr   
gc_collectassertIsNone)r   namer<   wrs       r   test_lock_lifetimez LifetimeTests.test_lock_lifetime   s    t~~;;<~~..t4dDNN889[[t~~;;<"$r   c                     t        j                          | j                  dt        | j                  j
                        | j                  j
                         y )Nr   )r   rn   rQ   rR   re   ri   r3   s    r   test_all_lockszLifetimeTests.test_all_locks   s<    C < <=55	7r   N)r   r   r   propertyre   rr   rt   r*   r   r   rc   rc   {   s    $ $	 7r   rc   )r   c                  t    t        j                         } t        j                  t         j                  g|   y r   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler|      s*    "224K.@@O;Or   __main__)#test.test_importlibr   	test_utilimport_importlibr   r.   rM   rx   rl   testr   test.supportr   r   requires_working_threadingr
   itemsr   _ModuleLock
LOCK_TYPES	test_both
RLockTestsFrozen_ModuleLockAsRLockTestsSource_ModuleLockAsRLockTestsr,   _DeadlockErrorDEADLOCK_ERRORSFrozen_DeadlockAvoidanceTestsSource_DeadlockAvoidanceTestsrc   Frozen_LifetimeTestsSource_LifetimeTestsr|   r   main)kindr   s   00r   <module>r      si   1!y!!+. 
     )  ,  + +4 86 60 &*ZZ\3!$	 I((444 3

 Y/1F1F",.
<D <D@ +/**,8&tY --<<< 8
 Y/",'687 72 YT2P
 zHMMO g3P8s   +!E!E