
    daf                     f   d dl Z d dlZddlmZ ddlmZ ddlmZmZ ej                  Z	g dZ
e j                  e j                  e j                  e j                  e j                  e j                   e j"                  e j$                  e j&                  e j(                  e j*                  e j,                  e j.                  e j0                  dZd Zd	 Zd
 ZddddZddddZd ZddZ d Z!d Z"d Z#dZ$i Z% ejL                         Z' G d de(      Z) G d de)      Z* G d de)      Z+ G d de+      Z,y)    N   )heap)get_context)	reductionassert_spawning)RawValueRawArrayValueArraycopysynchronized)cubBhHiIlLqQfdc                 p    t        j                  |       }t        j                  |      }t	        | |d       S N)ctypessizeofr   BufferWrapperrebuild_ctype)type_sizewrappers      7/root/Python-3.12.4/Lib/multiprocessing/sharedctypes.py
_new_valuer&   '   s/    ==D  &G..    c                     t         j                  | |       }t        |      }t        j                  t        j
                  |      dt        j                  |              |j                  |  |S )z>
    Returns a ctypes object allocated from shared memory
    r   )typecode_to_typegetr&   r   memset	addressofr   __init__)typecode_or_typeargsr"   objs       r%   r   r   ,   sY       !13CDE
U
C
MM&""3'FMM#,>?CLL$Jr'   c                 @   t         j                  | |       }t        |t              rO||z  }t	        |      }t        j                  t        j                  |      dt        j                  |             |S |t        |      z  }t	        |      } |j                  |  |S )z=
    Returns a ctypes array allocated from shared memory
    r   )r)   r*   
isinstanceintr&   r   r+   r,   r   lenr-   )r.   size_or_initializerr"   r0   results        r%   r	   r	   6   s       !13CDE%s+++f&&s+Qc0BC
/00E",-r'   T)lockctxc                    t        | g| }|du r|S |dv r|xs
 t               }|j                         }t        |d      st	        d|z        t        |||      S )z6
    Return a synchronization wrapper for a Value
    FTNacquire%r has no method 'acquire'r8   )r   r   RLockhasattrAttributeErrorr   )r.   r7   r8   r/   r0   s        r%   r
   r
   F   si     #
+d
+Cu}
|"[]yy{4#9D@AATs++r'   c                    t        | |      }|du r|S |dv r|xs
 t               }|j                         }t        |d      st	        d|z        t        |||      S )z9
    Return a synchronization wrapper for a RawArray
    Fr:   r;   r<   r=   )r	   r   r>   r?   r@   r   )r.   r5   r7   r8   r0   s        r%   r   r   T   sg     #%8
9Cu}
|"[]yy{4#9D@AATs++r'   c                 ^    t        t        |             }| t        j                  |      d<   |S )Nr   )r&   typer   pointer)r0   new_objs     r%   r   r   b   s(    c#G!$FNN7ANr'   c                 >   |xs
 t               }t        | t        j                        rt	        | ||      S t        | t        j
                        r6| j                  t        j                  u rt        | ||      S t        | ||      S t        |       }	 t        |   } || ||      S # t        $ rn |j                  D cg c]  }|d   	 nc c}w }}|D ci c]  }|t        |       nc c}w }}d|j                  z   }	t        |	t         f|      x}t        |<   Y w xY w)Nr   Synchronized)r   r2   r   _SimpleCDatarG   r   _type_c_charSynchronizedStringSynchronizedArrayrC   class_cacheKeyError_fields_make_property__name__SynchronizedBase)
r0   r7   r8   clssclsfieldnamesnamer   	classnames
             r%   r   r   g   s   

C#v**+Cs++	C	&::&%c455 dC003i	Ns#D Cs##  	N+.<<8%U1X88E87<=t}T**==A=&5I&*97G6I1&MMD;s#		Ns*   	B% %D<C	DC('2DDc                     t        |        t        | t        j                        r)t        | j
                  | j                  | j                  ffS t        t        |       | j                  d ffS r   )	r   r2   r   r   r!   rI   _wrapper_length_rC   )r0   s    r%   reduce_ctyper\      sP    C#v||$szz3<<FFFtCy#,,===r'   c                     || |z  } t         j                  | t               |j                         }| j	                  |      }||_        |S r   )_ForkingPicklerregisterr\   create_memoryviewfrom_bufferrZ   )r"   r$   lengthbufr0   s        r%   r!   r!      sK    UL1

#
#
%C


C
 CCLJr'   c                     	 t         |    S # t        $ r- i }t        t        | fdz  z  |       ||    t         | <   ||    cY S w xY w)N   )
prop_cacherN   exectemplate)rW   r   s     r%   rP   rP      sR    $ X$#Q'T7
4w	s    3A Az
def get%s(self):
    self.acquire()
    try:
        return self._obj.%s
    finally:
        self.release()
def set%s(self, value):
    self.acquire()
    try:
        self._obj.%s = value
    finally:
        self.release()
%s = property(get%s, set%s)
c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
rR   Nc                     || _         |r|| _        n%|xs t        d      }|j                         | _        | j                  j                  | _        | j                  j
                  | _        y )NT)force)_obj_lockr   r>   r;   release)selfr0   r7   r8   s       r%   r-   zSynchronizedBase.__init__   sQ    	DJ040CDJzz))zz))r'   c                 6    | j                   j                         S r   )rm   	__enter__ro   s    r%   rq   zSynchronizedBase.__enter__   s    zz##%%r'   c                 4     | j                   j                  | S r   )rm   __exit__)ro   r/   s     r%   rt   zSynchronizedBase.__exit__   s    "tzz""D))r'   c                 T    t        |        t        | j                  | j                  ffS r   )r   r   rl   rm   rr   s    r%   
__reduce__zSynchronizedBase.__reduce__   s"    dii444r'   c                     | j                   S r   rl   rr   s    r%   get_objzSynchronizedBase.get_obj   s    yyr'   c                     | j                   S r   )rm   rr   s    r%   get_lockzSynchronizedBase.get_lock   s    zzr'   c                 N    dt        |       j                  d| j                  dS )N<z wrapper for >)rC   rQ   rl   rr   s    r%   __repr__zSynchronizedBase.__repr__   s    (,T
(;(;TYYGGr'   NN)
rQ   
__module____qualname__r-   rq   rt   rv   ry   r{   r    r'   r%   rR   rR      s&    *&*5Hr'   rR   c                       e Zd Z ed      Zy)rG   valueN)rQ   r   r   rP   r   r   r'   r%   rG   rG      s    '"Er'   rG   c                   *    e Zd Zd Zd Zd Zd Zd Zy)rL   c                 ,    t        | j                        S r   )r4   rl   rr   s    r%   __len__zSynchronizedArray.__len__   s    499~r'   c                 P    | 5  | j                   |   cd d d        S # 1 sw Y   y xY wr   rx   )ro   r   s     r%   __getitem__zSynchronizedArray.__getitem__   s%     	 99Q<	  	  	    %c                 P    | 5  || j                   |<   d d d        y # 1 sw Y   y xY wr   rx   )ro   r   r   s      r%   __setitem__zSynchronizedArray.__setitem__   s'     	! DIIaL	! 	! 	!   %c                 P    | 5  | j                   || cd d d        S # 1 sw Y   y xY wr   rx   )ro   startstops      r%   __getslice__zSynchronizedArray.__getslice__   s(     	)99U4(	) 	) 	)r   c                 P    | 5  || j                   || d d d        y # 1 sw Y   y xY wr   rx   )ro   r   r   valuess       r%   __setslice__zSynchronizedArray.__setslice__   s*     	+$*DIIeD!	+ 	+ 	+r   N)rQ   r   r   r   r   r   r   r   r   r'   r%   rL   rL      s     !)+r'   rL   c                   ,    e Zd Z ed      Z ed      Zy)rK   r   rawN)rQ   r   r   rP   r   r   r   r'   r%   rK   rK      s    '"E

Cr'   rK   r   )-r   weakref r   r   contextr   r   ForkingPicklerr^   __all__rJ   c_wcharc_bytec_ubytec_shortc_ushortc_intc_uintc_longc_ulong
c_longlongc_ulonglongc_floatc_doubler)   r&   r   r	   r
   r   r   r   r\   r!   rP   rh   rf   WeakKeyDictionaryrM   objectrR   rG   rL   rK   r   r'   r%   <module>r      s#       /**
L 
							!3!3	 /
  )-$ , :>4 ,
$2>  
'g'')Hv H@## #+( +,* r'   