
    d/                        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                                        }|                                dk    | _        t
          j        dk    p| j        }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forkwin32d   zcannot find name for semaphorezcreated semlock with handle %sc                 8    | j                                          d S N)_semlock_after_fork)objs    -  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/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is_fork_ctxsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsregister_after_forknameresource_trackerr   Finalize_cleanup)
selfkindvaluemaxvaluectx
unlink_nowislr   r   s
             r   __init__zSemLock.__init__2   s   ;*6688C//11V;\W,@0@
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   r0   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r1   s    r   r+   zSemLock._make_methodsZ   s    },},r   c                 4    | j                                         S r   )r   	__enter__r?   s    r   rA   zSemLock.__enter__^   s    }&&(((r   c                       | j         j        | S r   )r   __exit__r1   argss     r   rC   zSemLock.__exit__a   s    %t}%t,,r   c                    t          j        |            | j        }t          j        dk    r,t          j                                        |j                  }n| j        rt          d          |j        }||j
        |j        |j        fS )Nr   zA SemLock created in a fork context is being shared with a process in a spawn context. This is not supported. Please use the same context to create multiprocessing objects and Process.)r
   assert_spawningr   r#   r$   get_spawning_popenduplicate_for_childr*   r"   RuntimeErrorr2   r4   r-   )r1   r8   hs      r   __getstate__zSemLock.__getstate__d   s    %%%]<7""*,,@@KKAA K" $J K K K 	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+   r1   states     r   __setstate__zSemLock.__setstate__r   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_namew   s6    !133;KHHHw}---/ 	/r   N)__name__
__module____qualname__tempfile_RandomNameSequencerX   r9   staticmethodr0   r+   rA   rC   rL   rQ   r'   rY   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r5   )r   r9   	SEMAPHORESEM_VALUE_MAXr1   r3   r5   s      r   r9   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   rh   	Exception	__class__rZ   r1   r3   s     r   __repr__zSemaphore.__repr__   s[    	M,,..EE 	 	 	EEE	#'>#:#:#:EEEBB    ++Nr	   )rZ   r[   r\   r9   ri   rr   rY   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 rb   r   r9   rd   rf   s      r   r9   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 )Nrk   rl   rm   z, maxvalue=rn   )r   rh   ro   rp   rZ   r4   rq   s     r   rr   zBoundedSemaphore.__repr__   sp    	M,,..EE 	 	 	EEE	 '''0F0F0FH 	Hrs   Nrt   rZ   r[   r\   r9   rr   rY   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	   rc   rw   r1   r5   s     r   r9   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SomeOtherProcessrk   rl   z(owner=rn   )r   _is_miner   rU   r-   	threadingcurrent_threadrh   _countro   rp   rZ   )r1   r-   s     r   rr   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 Nry   rY   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 r|   )r   r9   RECURSIVE_MUTEXr}   s     r   r9   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   )rk   rk   rl   (, rn   )r   r   r   rU   r-   r   r   r   rh   ro   rp   rZ   )r1   r-   counts      r   rr   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%Nry   rY   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+   )r1   lockr5   s      r   r9   zCondition.__init__   sj    (SYY[[
"}}Q//MM!,,"}}Q//r   c                 ^    t          j        |            | j        | j        | j        | j        fS r   )r
   rG   r   r   r   r   r?   s    r   rL   zCondition.__getstate__   s2    %%%
D0!4#79 	9r   c                 d    |\  | _         | _        | _        | _        |                                  d S r   )r   r   r   r   r+   rO   s     r   rQ   zCondition.__setstate__   s6    49	2T)		D0r   c                 4    | j                                         S r   )r   rA   r?   s    r   rA   zCondition.__enter__   s    z##%%%r   c                       | j         j        | S r   )r   rC   rD   s     r   rC   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 )Nrk   rl   r   r   rn   )r   r   rh   r   ro   rp   rZ   r   )r1   num_waiterss     r   rr   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   )r1   timeoutr   r7   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%   )r1   nressleepersr7   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   )r1   	predicater   resultendtimewaittimes         r   wait_forzCondition.wait_for0  s     	Mn&&0GGGH 	!""T^%5%55q==IIhY[[F  	! r   r   rt   )rZ   r[   r\   r9   rL   rQ   rA   rC   r+   rr   r   r   r   r   rY   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   r9   zEvent.__init__H  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_setL  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.setS  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.clearY  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   )r1   r   s     r   r   z
Event.wait]  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   unsetrl   z at z#x >)r   typer\   id)r1   
set_statuss     r   rr   zEvent.__repr__i  sK    "kkmm8UU
K4::*KK4KKKjKKKKr   r   )
rZ   r[   r\   r9   r   r   r   r   strrr   rY   r   r   r   r   F  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	   )BufferWrapperr7   r   )structheapr   calcsizer   rQ   _stater   )	r1   partiesactionr   r5   r   r   wrapperconds	            r   r9   zBarrier.__init__r  s{    ''''''- 4 4q 899}}7FGT7CDDDr   c                     |\  | _         | _        | _        | _        | _        | j                                                            d          | _        d S )Nr7   )_parties_action_timeoutr   _wrappercreate_memoryviewcast_arrayrO   s     r   rQ   zBarrier.__setstate__{  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   rL   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   rq   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   rq   s     r   r   zBarrier._count  r   r   )NN)
rZ   r[   r\   r9   rQ   rL   propertyr   setterr   rY   r   r   r   r   p  s           B B B
+ + +   X ]  ]   X ]  ]  r   r   )__all__r   r#   r]   r&   r    r
   r   r   r   r   ImportErrorlistr%   r   rd   re   objectr   r   r   r   r   r   r   rY   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L/ L/ L/ L/ L/f L/ L/ L/d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