o
    @c                     @   s:  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 jdZdd	 Zd
d Zdd ZdddddZdddddZdd Zd'ddZ dd Z!dd Z"dd Z#dZ$i Z%e& Z'G dd  d e(Z)G d!d" d"e)Z*G d#d$ d$e)Z+G d%d& d&e+Z,dS )(    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                 C   s    t | }t|}t| |d S N)ctypessizeofr   BufferWrapperrebuild_ctype)type_sizewrapper r#   ZC:\Users\Chris\AppData\Local\Programs\Python\Python310\lib\multiprocessing\sharedctypes.py
_new_value'   s   

r%   c                 G   s<   t | | }t|}tt|dt| |j|  |S )z>
    Returns a ctypes object allocated from shared memory
    r   )typecode_to_typegetr%   r   memset	addressofr   __init__)typecode_or_typeargsr    objr#   r#   r$   r   ,   s
   
r   c                 C   sf   t | | }t|tr"|| }t|}tt|dt| |S |t	| }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    r-   resultr#   r#   r$   r   6   s   

r   T)lockctxc                G   sZ   t | g|R  }|du r|S |dv r|pt }| }t|ds&td| t|||dS )z6
    Return a synchronization wrapper for a Value
    FTNacquire%r has no method 'acquire'r4   )r   r   RLockhasattrAttributeErrorr   )r+   r3   r4   r,   r-   r#   r#   r$   r	   F   s   

r	   c                C   sT   t | |}|du r|S |dv r|pt }| }t|ds#td| t|||dS )z9
    Return a synchronization wrapper for a RawArray
    Fr5   r6   r7   r8   )r   r   r9   r:   r;   r   )r+   r1   r3   r4   r-   r#   r#   r$   r
   T   s   


r
   c                 C   s   t t| }| t|d< |S )Nr   )r%   typer   pointer)r-   Znew_objr#   r#   r$   r   b   s   r   c                 C   s   t | tr	J d|pt }t | tjrt| ||S t | tjr2| jtju r,t	| ||S t
| ||S t| }zt| }W n( tyd   dd |jD }dd |D }d|j }t|tf| }t|< Y nw || ||S )Nzobject already synchronizedc                 S   s   g | ]}|d  qS )r   r#   ).0fieldr#   r#   r$   
<listcomp>v   s    z synchronized.<locals>.<listcomp>c                 S   s   i | ]}|t |qS r#   )make_property)r>   namer#   r#   r$   
<dictcomp>w   s    z synchronized.<locals>.<dictcomp>Synchronized)r.   SynchronizedBaser   r   _SimpleCDatarD   r
   _type_c_charSynchronizedStringSynchronizedArrayr<   class_cacheKeyError_fields___name__)r-   r3   r4   clssclsnamesr   	classnamer#   r#   r$   r   g   s$   

r   c                 C   s<   t |  t| tjrt| j| j| jffS tt| | jd ffS r   )	r   r.   r   r
   r   rG   _wrapper_length_r<   )r-   r#   r#   r$   reduce_ctype   s   rU   c                 C   s8   |d ur| | } t | t | }| |}||_|S r   )_ForkingPicklerregisterrU   create_memoryviewfrom_bufferrS   )r    r"   lengthbufr-   r#   r#   r$   r      s   
r   c                 C   sJ   zt |  W S  ty$   i }tt| fd  | ||  t | < ||   Y S w )N   )
prop_cacherL   exectemplate)rB   r   r#   r#   r$   rA      s   
rA   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                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )rE   Nc                 C   sB   || _ |r	|| _n|ptdd}| | _| jj| _| jj| _d S )NT)force)_obj_lockr   r9   r6   release)selfr-   r3   r4   r#   r#   r$   r*      s   

zSynchronizedBase.__init__c                 C   s
   | j  S r   )rb   	__enter__rd   r#   r#   r$   re         
zSynchronizedBase.__enter__c                 G   s   | j j| S r   )rb   __exit__)rd   r,   r#   r#   r$   rh      s   zSynchronizedBase.__exit__c                 C   s   t |  t| j| jffS r   )r   r   ra   rb   rf   r#   r#   r$   
__reduce__   s   zSynchronizedBase.__reduce__c                 C      | j S r   ra   rf   r#   r#   r$   get_obj      zSynchronizedBase.get_objc                 C   rj   r   )rb   rf   r#   r#   r$   get_lock   rm   zSynchronizedBase.get_lockc                 C   s   dt | j| jf S )Nz<%s wrapper for %s>)r<   rN   ra   rf   r#   r#   r$   __repr__   s   zSynchronizedBase.__repr__NN)
rN   
__module____qualname__r*   re   rh   ri   rl   rn   ro   r#   r#   r#   r$   rE      s    

rE   c                   @   s   e Zd ZedZdS )rD   valueN)rN   rq   rr   rA   rs   r#   r#   r#   r$   rD      s    rD   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rJ   c                 C   s
   t | jS r   )r0   ra   rf   r#   r#   r$   __len__   rg   zSynchronizedArray.__len__c                 C   s2   |  | j | W  d    S 1 sw   Y  d S r   rk   )rd   r   r#   r#   r$   __getitem__   s   $zSynchronizedArray.__getitem__c                 C   s4   |  || j |< W d    d S 1 sw   Y  d S r   rk   )rd   r   rs   r#   r#   r$   __setitem__   s   "zSynchronizedArray.__setitem__c                 C   s6   |  | j || W  d    S 1 sw   Y  d S r   rk   )rd   startstopr#   r#   r$   __getslice__   s   $zSynchronizedArray.__getslice__c                 C   s8   |  || j ||< W d    d S 1 sw   Y  d S r   rk   )rd   rw   rx   valuesr#   r#   r$   __setslice__   s   "zSynchronizedArray.__setslice__N)rN   rq   rr   rt   ru   rv   ry   r{   r#   r#   r#   r$   rJ      s    rJ   c                   @   s   e Zd ZedZedZdS )rI   rs   rawN)rN   rq   rr   rA   rs   r|   r#   r#   r#   r$   rI      s    rI   rp   )-r   weakref r   r   contextr   r   ForkingPicklerrV   __all__rH   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   rU   r   rA   r_   r]   WeakKeyDictionaryrK   objectrE   rD   rJ   rI   r#   r#   r#   r$   <module>   s@   	

	 