ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3

  \e                 @   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	dddd	d
dg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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j$ 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fdc             C   s    t j| }tj|}t| |d S )N)ctypessizeofr   ZBufferWrapperrebuild_ctype)type_sizewrapper r   4/usr/lib64/python3.6/multiprocessing/sharedctypes.py
_new_value&   s    

r!   c             G   s<   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   objr   r   r    r   +   s
    
c             C   sj   t j| | }t|trD|| }t|}tjtj|dtj| |S |t	| }t|}|j
|  |S dS )z=
    Returns a ctypes array allocated from shared memory
    r   N)r"   r#   
isinstanceintr!   r   r$   r%   r   lenr&   )r'   size_or_initializerr   r)   resultr   r   r    r   5   s    

T)lockctxc            G   sX   t | f| }|dkr|S |dkr4|p*t }|j }t|dsJtd| t|||dS )z6
    Return a synchronization wrapper for a Value
    FTNacquirez'%r' has no method 'acquire')r0   )TN)r   r   RLockhasattrAttributeErrorr   )r'   r/   r0   r(   r)   r   r   r    r	   E   s    

c            C   sT   t | |}|dkr|S |dkr0|p&t }|j }t|dsFtd| t|||dS )z9
    Return a synchronization wrapper for a RawArray
    FTNr1   z'%r' has no method 'acquire')r0   )TN)r   r   r2   r3   r4   r   )r'   r-   r/   r0   r)   r   r   r    r
   S   s    


c             C   s   t t| }| tj|d< |S )Nr   )r!   typer   Zpointer)r)   Znew_objr   r   r    r   a   s    c             C   s   t | t std|pt }t | tjr6t| ||S t | tjrf| jtj	krZt
| ||S t| ||S t| }yt| }W nV tk
r   dd |jD }tdd |D }d|j }t|tf| }t|< Y nX || ||S d S )Nzobject already synchronizedc             S   s   g | ]}|d  qS )r   r   ).0Zfieldr   r   r    
<listcomp>u   s    z synchronized.<locals>.<listcomp>c             s   s   | ]}|t |fV  qd S )N)make_property)r6   namer   r   r    	<genexpr>v   s    zsynchronized.<locals>.<genexpr>Synchronized)r*   SynchronizedBaseAssertionErrorr   r   Z_SimpleCDatar;   r
   _type_c_charSynchronizedStringSynchronizedArrayr5   class_cacheKeyErrorZ_fields_dict__name__)r)   r/   r0   clssclsnamesr   Z	classnamer   r   r    r   f   s"    

c             C   s@   t |  t| tjr(t| j| j| jffS tt| | jd ffS d S )N)	r   r*   r   r
   r   r>   _wrapperZ_length_r5   )r)   r   r   r    reduce_ctype   s    rJ   c             C   s8   |d k	r| | } t j| t |j }| j|}||_|S )N)_ForkingPicklerregisterrJ   Zcreate_memoryviewZfrom_bufferrI   )r   r   ZlengthZbufr)   r   r   r    r      s    
r   c             C   sJ   yt |  S  tk
rD   i }tt| fd  | ||  t | < ||  S X d S )N   )
prop_cacherC   exectemplate)r9   r   r   r   r    r8      s    r8   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 )r<   Nc             C   sB   || _ |r|| _n|ptdd}|j | _| jj| _| jj| _d S )NT)Zforce)_obj_lockr   r2   r1   release)selfr)   r/   r0   r   r   r    r&      s    

zSynchronizedBase.__init__c             C   s
   | j j S )N)rR   	__enter__)rT   r   r   r    rU      s    zSynchronizedBase.__enter__c             G   s   | j j| S )N)rR   __exit__)rT   r(   r   r   r    rV      s    zSynchronizedBase.__exit__c             C   s   t |  t| j| jffS )N)r   r   rQ   rR   )rT   r   r   r    
__reduce__   s    zSynchronizedBase.__reduce__c             C   s   | j S )N)rQ   )rT   r   r   r    get_obj   s    zSynchronizedBase.get_objc             C   s   | j S )N)rR   )rT   r   r   r    get_lock   s    zSynchronizedBase.get_lockc             C   s   dt | j| jf S )Nz<%s wrapper for %s>)r5   rE   rQ   )rT   r   r   r    __repr__   s    zSynchronizedBase.__repr__)NN)
rE   
__module____qualname__r&   rU   rV   rW   rX   rY   rZ   r   r   r   r    r<      s   

r<   c               @   s   e Zd ZedZdS )r;   valueN)rE   r[   r\   r8   r]   r   r   r   r    r;      s   r;   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rA   c             C   s
   t | jS )N)r,   rQ   )rT   r   r   r    __len__   s    zSynchronizedArray.__len__c          	   C   s   |  | j | S Q R X d S )N)rQ   )rT   r   r   r   r    __getitem__   s    zSynchronizedArray.__getitem__c          
   C   s   |  || j |< W d Q R X d S )N)rQ   )rT   r   r]   r   r   r    __setitem__   s    zSynchronizedArray.__setitem__c          
   C   s   |  | j || S Q R X d S )N)rQ   )rT   startstopr   r   r    __getslice__   s    zSynchronizedArray.__getslice__c             C   s"   |  || j ||< W d Q R X d S )N)rQ   )rT   ra   rb   valuesr   r   r    __setslice__   s    zSynchronizedArray.__setslice__N)rE   r[   r\   r^   r_   r`   rc   re   r   r   r   r    rA      s
   rA   c               @   s   e Zd ZedZedZdS )r@   r]   rawN)rE   r[   r\   r8   r]   rf   r   r   r   r    r@      s   r@   )NN)+r   weakref r   r   contextr   r   ZForkingPicklerrK   __all__r?   Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"   r!   r   r   r	   r
   r   r   rJ   r   r8   rP   rN   WeakKeyDictionaryrB   objectr<   r;   rA   r@   r   r   r   r    <module>
   s:   

 