
    h-                        g d Z ddl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	 	 ddlm
Z
mZ n# e$ r  ed          w xY w e ed	                    \  ZZej
        j        Z G d
 de          Z
 G d de
          Z G d de          Z G d de
          Z G d de
          Z G d de          Z G d de          Z G d dej                  ZdS ))LockRLock	SemaphoreBoundedSemaphore	ConditionEvent    N   )context)process)util)SemLock
sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.   c                   |    e Zd Z ej                    Zd Zed             Zd Z	d Z
d Zd Zd Zed             Zd	S )
r   c                   |t           j                                        }|                                }t          j        dk    p|dk    }t          d          D ]E}	 t          j        |||| 	                                |          x}| _
         n# t          $ r Y Bw xY wt          d          t          j        d|j        z             |                                  t          j        dk    rd }	t          j        | |	           | j
        j        Kddlm}
  |
| j
        j        d	           t          j        | t          j        | j
        j        fd
           d S d S )Nwin32forkd   zcannot find name for semaphorezcreated semlock with handle %sc                 8    | j                                          d S N)_semlock_after_fork)objs    2/usr/lib/python3.11/multiprocessing/synchronize.pyr   z%SemLock.__init__.<locals>._after_forkG   s    ((*****    r	   )register	semaphorer   )exitpriority)r
   _default_contextget_contextget_start_methodsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsregister_after_forknameresource_trackerr   Finalize_cleanup)selfkindvaluemaxvaluectxr,   
unlink_nowislr   r   s              r   __init__zSemLock.__init__2   s   ;*6688C##%%\W,>
s 
	D 
	DA%5%=%4??+<+<&  &   T]  #   
 ""BCCC
3bi?@@@<7""+ + +$T;777=) 322222HT]'555M$ 04=3E2G'(* * * * * * *)s   1B
BBc                 H    ddl m} t          |             || d           d S )Nr	   )
unregisterr   )r-   r:   r   )r,   r:   s     r   r/   zSemLock._cleanupT   s:    0000004
4%%%%%r   c                 J    | j         j        | _        | j         j        | _        d S r   )r   acquirereleaser0   s    r   r*   zSemLock._make_methodsZ   s    },},r   c                 4    | j                                         S r   )r   	__enter__r>   s    r   r@   zSemLock.__enter__^   s    }&&(((r   c                       | j         j        | S r   )r   __exit__r0   argss     r   rB   zSemLock.__exit__a   s    %t}%t,,r   c                     t          j        |            | j        }t          j        dk    r,t          j                                        |j                  }n|j        }||j        |j	        |j
        fS )Nr   )r
   assert_spawningr   r"   r#   get_spawning_popenduplicate_for_childr)   r1   r3   r,   )r0   r7   hs      r   __getstate__zSemLock.__getstate__d   sc    %%%]<7""*,,@@KKAA	A27BK11r   c                     t          j        j        | | _        t	          j        d|d         z             |                                  d S )Nz recreated blocker with handle %rr   )r%   r   _rebuildr   r   r(   r*   r0   states     r   __setstate__zSemLock.__setstate__m   sF    (095A
5a@AAAr   c                  v    t          j                    j        d         dt          t          j                  S )N	semprefix-)r   current_process_confignextr   _rand r   r   r&   zSemLock._make_namer   s6    !133;KHHHw}---/ 	/r   N)__name__
__module____qualname__tempfile_RandomNameSequencerV   r8   staticmethodr/   r*   r@   rB   rJ   rO   r&   rW   r   r   r   r   .   s        (H(**E *  *  *D & & \&
- - -) ) )- - -2 2 2  
 / / \/ / /r   r   c                   "    e Zd ZddZd Zd ZdS )r   r	   c                L    t          j        | t          |t          |           d S Nr4   )r   r8   	SEMAPHORESEM_VALUE_MAXr0   r2   r4   s      r   r8   zSemaphore.__init__}   s$    y%CHHHHHHr   c                 4    | j                                         S r   )r   
_get_valuer>   s    r   	get_valuezSemaphore.get_value   s    }'')))r   c                     	 | j                                         }n# t          $ r d}Y nw xY wd| j        j        d|dS )Nunknown<(value=)>)r   rf   	Exception	__class__rX   r0   r2   s     r   __repr__zSemaphore.__repr__   s[    	M,,..EE 	 	 	EEE	#'>#:#:#:EEEBB    ++Nr	   )rX   rY   rZ   r8   rg   rp   rW   r   r   r   r   {   sO        I I I I* * *C C C C Cr   r   c                       e Zd ZddZd ZdS )r   r	   c                B    t          j        | t          |||           d S r`   r   r8   rb   rd   s      r   r8   zBoundedSemaphore.__init__   s$    y%C@@@@@@r   c                     	 | j                                         }n# t          $ r d}Y nw xY wd| j        j        d|d| j         j        dS )Nri   rj   rk   z, maxvalue=rl   )r   rf   rm   rn   rX   r3   ro   s     r   rp   zBoundedSemaphore.__repr__   sp    	M,,..EE 	 	 	EEE	 '''0F0F0FH 	Hrq   Nrr   rX   rY   rZ   r8   rp   rW   r   r   r   r      s@        A A A AH H H H Hr   r   c                       e Zd Zd Zd ZdS )r   c                B    t          j        | t          dd|           d S Nr	   ra   ru   r0   r4   s     r   r8   zLock.__init__   s$    y!QC888888r   c                    	 | j                                         rSt          j                    j        }t          j                    j        dk    r|dt          j                    j        z   z  }nB| j                                         dk    rd}n"| j                                         dk    rd}nd}n# t          $ r d}Y nw xY wd	| j
        j        d
|dS )N
MainThread|r	   Noner   SomeOtherThreadSomeOtherProcessri   rj   z(owner=rl   )r   _is_miner   rS   r,   	threadingcurrent_threadrf   _countrm   rn   rX   )r0   r,   s     r   rp   zLock.__repr__   s    	}%%'' 	*.005+--2lBBC)":"<"<"AAAD))++q00%%''!++() 	 	 	DDD	#'>#:#:#:DDDAAs   B.B1 1C ?C Nrw   rW   r   r   r   r      s7        9 9 9B B B B Br   r   c                       e Zd Zd Zd ZdS )r   c                B    t          j        | t          dd|           d S rz   )r   r8   RECURSIVE_MUTEXr{   s     r   r8   zRLock.__init__   s$    1#>>>>>>r   c                    	 | j                                         rlt          j                    j        }t          j                    j        dk    r|dt          j                    j        z   z  }| j                                         }nK| j                                         dk    rd\  }}n(| j                                         dk    rd\  }}nd\  }}n# t          $ r d\  }}Y nw xY wd	| j
        j        d
|d|dS )Nr}   r~   r	   )r   r   r   )r   nonzero)r   r   )ri   ri   rj   (, rl   )r   r   r   rS   r,   r   r   r   rf   rm   rn   rX   )r0   r,   counts      r   rp   zRLock.__repr__   s   	/}%%'' 
<.005+--2lBBC)":"<"<"AAAD,,..))++q00'ee%%''!++:ee;e 	/ 	/ 	/.KD%%%	/!%!8!8!8$$$FFs   CC C%$C%Nrw   rW   r   r   r   r      s7        ? ? ?G G G G Gr   r   c                   X    e Zd ZddZd Zd Zd Zd Zd Zd Z	dd	Z
ddZd ZddZdS )r   Nc                    |p|                                 | _        |                    d          | _        |                    d          | _        |                    d          | _        |                                  d S Nr   )r   _lockr   _sleeping_count_woken_count_wait_semaphorer*   )r0   lockr4   s      r   r8   zCondition.__init__   sj    (SYY[[
"}}Q//MM!,,"}}Q//r   c                 ^    t          j        |            | j        | j        | j        | j        fS r   )r
   rF   r   r   r   r   r>   s    r   rJ   zCondition.__getstate__   s2    %%%
D0!4#79 	9r   c                 d    |\  | _         | _        | _        | _        |                                  d S r   )r   r   r   r   r*   rM   s     r   rO   zCondition.__setstate__   s6    49	2T)		D0r   c                 4    | j                                         S r   )r   r@   r>   s    r   r@   zCondition.__enter__   s    z##%%%r   c                       | j         j        | S r   )r   rB   rC   s     r   rB   zCondition.__exit__   s    "tz"D))r   c                 J    | j         j        | _        | j         j        | _        d S r   )r   r<   r=   r>   s    r   r*   zCondition._make_methods   s    z)z)r   c                     	 | j         j                                        | j        j                                        z
  }n# t          $ r d}Y nw xY wd| j        j        d| j        d|dS )Nri   rj   r   r   rl   )r   r   rf   r   rm   rn   rX   r   )r0   num_waiterss     r   rp   zCondition.__repr__   s    	$/8CCEE,5@@BBCKK 	$ 	$ 	$#KKK	$!%!8!8!8$***kkkRRs   =A   AAc                 h   | j         j                                        s
J d            | j                                         | j         j                                        }t          |          D ]}| j                                          	 | j                            d|          | j	                                         t          |          D ]}| j                                          S # | j	                                         t          |          D ]}| j                                          w xY w)Nz,must acquire() condition before using wait()T)
r   r   r   r   r=   r   r$   r   r<   r   )r0   timeoutr   r6   s       r   waitzCondition.wait   s@   z"++-- 	> 	>=	> 	> 	> 	$$&&& 
#**,,u 	! 	!AJ    		%'//g>> %%''' 5\\ % %
""$$$$% %%''' 5\\ % %
""$$$$%s   C+ +AD1r	   c                    | j         j                                        s
J d            | j                            d          r
J d            | j                            d          r@| j                            d          }|s
J d            | j                            d          @d}||k     rX| j                            d          r>| j                                         |dz  }||k     r| j                            d          >|rbt          |          D ]}| j                                         | j                            d          r	 | j                            d          d S d S d S )Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falser   r	   )	r   r   r   r   r<   r   r   r=   r$   )r0   nressleepersr6   s        r   notifyzCondition.notify  s   z"++--BB/BBBB'//  	* 	*)	* 	* 	* ''.. 	8&..u55C 8 8 7 8 8 8 ''.. 	8
 llt3;;EBBl ((***MH llt3;;EBBl  	8__ , ,!))++++ &..u55  &..u55   	 	
 r   c                 F    |                      t          j                   d S )N)r   )r   r"   maxsizer>   s    r   
notify_allzCondition.notify_all(  s    ck"""""r   c                      |            }|r|S |t          j                    |z   }nd }d }|s@||t          j                    z
  }|dk    rn!|                     |            |            }|@|S r   )time	monotonicr   )r0   	predicater   resultendtimewaittimes         r   wait_forzCondition.wait_for+  s     	Mn&&0GGGH 	!""T^%5%55q==IIhY[[F  	! r   r   rr   )rX   rY   rZ   r8   rJ   rO   r@   rB   r*   rp   r   r   r   r   rW   r   r   r   r      s           9 9 9
  
& & &* * ** * *S S S% % % %.   4# # #     r   r   c                   :    e Zd Zd Zd Zd Zd Zd	dZdefdZ	dS )
r   c                    |                     |                                          | _        |                    d          | _        d S r   )r   r   _condr   _flagr{   s     r   r8   zEvent.__init__C  s4    ]]388::..
]]1%%


r   c                     | j         5  | j                            d          r'| j                                         	 d d d            dS 	 d d d            dS # 1 swxY w Y   d S NFT)r   r   r<   r=   r>   s    r   is_setzEvent.is_setG  s    Z 	 	z!!%(( 
""$$$	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   5A
AAAc                     | j         5  | j                            d           | j                                         | j                                          d d d            d S # 1 swxY w Y   d S NF)r   r   r<   r=   r   r>   s    r   setz	Event.setN  s    Z 	$ 	$Ju%%%J   J!!###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AA""A&)A&c                 z    | j         5  | j                            d           d d d            d S # 1 swxY w Y   d S r   )r   r   r<   r>   s    r   clearzEvent.clearT  s    Z 	& 	&Ju%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   044Nc                 f   | j         5  | j                            d          r| j                                         n| j                             |           | j                            d          r'| j                                         	 d d d            dS 	 d d d            dS # 1 swxY w Y   d S r   )r   r   r<   r=   r   )r0   r   s     r   r   z
Event.waitX  s   Z 		 		z!!%(( )
""$$$$
(((z!!%(( 
""$$$		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   BB&B&&B*-B*returnc                     |                                  rdnd}dt          |           j         dt          |           dd| dS )Nr   unsetrj   z at z#x >)r   typerZ   id)r0   
set_statuss     r   rp   zEvent.__repr__d  sK    "kkmm8UU
K4::*KK4KKKjKKKKr   r   )
rX   rY   rZ   r8   r   r   r   r   strrp   rW   r   r   r   r   A  s        & & &  $ $ $& & &
 
 
 
L# L L L L L Lr   r   c                       e Zd Zd	dZd Zd Zed             Zej        d             Zed             Z	e	j        d             Z	dS )
BarrierNc                    dd l }ddlm}  ||                    d          dz            }|                                }|                     |||||f           d| _        d| _        d S )Nr   r	   )BufferWrapperr6   r   )structheapr   calcsizer   rO   _stater   )	r0   partiesactionr   r4   r   r   wrapperconds	            r   r8   zBarrier.__init__m  s{    ''''''- 4 4q 899}}7FGT7CDDDr   c                     |\  | _         | _        | _        | _        | _        | j                                                            d          | _        d S )Nr6   )_parties_action_timeoutr   _wrappercreate_memoryviewcast_arrayrM   s     r   rO   zBarrier.__setstate__v  sF    &+	$dm	T]m5577<<SAAr   c                 B    | j         | j        | j        | j        | j        fS r   )r   r   r   r   r   r>   s    r   rJ   zBarrier.__getstate__{  s"    t|T]
DM+ 	+r   c                     | j         d         S r   r   r>   s    r   r   zBarrier._state      {1~r   c                     || j         d<   d S r   r   ro   s     r   r   zBarrier._state      Ar   c                     | j         d         S Nr	   r   r>   s    r   r   zBarrier._count  r   r   c                     || j         d<   d S r   r   ro   s     r   r   zBarrier._count  r   r   )NN)
rX   rY   rZ   r8   rO   rJ   propertyr   setterr   rW   r   r   r   r   k  s           B B B
+ + +   X ]  ]   X ]  ]  r   r   )__all__r   r"   r[   r%   r    r
   r   r   r   r   ImportErrorlistr$   r   rb   rc   objectr   r   r   r   r   r   r   rW   r   r   <module>r      s         



                        
4444444444 4 4 4
+ 3 4 4 44 "T%%((^^  (6G/ G/ G/ G/ G/f G/ G/ G/ZC C C C C C C C&H H H H Hy H H H"B B B B B7 B B B2G G G G GG G G G4i i i i i i i i^%L %L %L %L %LF %L %L %LT" " " " "i " " " " "s	   5 A