
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aD  ã                   @   sª   d dgZ ddlmZ ddlZddlZddlZddlZddlZejdkrTddl	Z	dZ
nddlZdZ
ejejB ZdZe
rzd	Znd
Zdd„ ZG dd „ d ƒZdZG dd„ dƒZdS )ÚSharedMemoryÚShareableListé    )ÚpartialNÚntFTé   z/psm_Zwnsm_c                  C   s"   t ttƒ d } tt | ¡ }|S )Né   )Ú_SHM_SAFE_NAME_LENGTHÚlenÚ_SHM_NAME_PREFIXÚsecretsZ	token_hex)ÚnbytesÚname© r   úB/opt/alt/python38/lib64/python3.8/multiprocessing/shared_memory.pyÚ_make_filename&   s    r   c                   @   sˆ   e Zd ZdZdZdZdZejZ	dZ
er*dndZddd„Zd	d
„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zdd„ ZdS )r   Néÿÿÿÿi€  TFr   c           
   	   C   sl  |dkst dƒ‚|r0ttjB | _|dkr0t dƒ‚|d krL| jtj@ sLt dƒ‚t�rH|d kr tƒ }ztj	|| j| j
d�| _W n tk
r’   Y qZY nX || _qÎqZn.| jr®d| n|}tj	|| j| j
d�| _|| _z<|ræ|ræt | j|¡ t | j¡}|j}t | j|¡| _W n  tk
�r*   |  ¡  ‚ Y nX ddlm} || jd	ƒ �n|�rþ|d k�r^tƒ n|}t tjtjtj|d
? d@ |d@ |¡}zXt ¡ }|tjk�rÌ|d k	�rÄtt j!t "t j!¡|tjƒ‚nW ¢�qNtjd||d�| _W 5 t |¡ X || _�qV�qNnX|| _t #tj$d|¡}zt %|tj$ddd¡}	W 5 t |¡ X t &|	¡}tjd||d�| _|| _'t(| jƒ| _)d S )Nr   z!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=True)Úmodeú/é   )ÚregisterÚshared_memoryé    l   ÿÿ r   )ZtagnameF)*Ú
ValueErrorÚ_O_CREXÚosÚO_RDWRÚ_flagsÚO_EXCLÚ
_USE_POSIXr   Ú_posixshmemZshm_openÚ_modeÚ_fdÚFileExistsErrorÚ_nameÚ_prepend_leading_slashÚ	ftruncateÚfstatÚst_sizeÚmmapÚ_mmapÚOSErrorÚunlinkÚresource_trackerr   Ú_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZCloseHandleZGetLastErrorZERROR_ALREADY_EXISTSÚerrnoZEEXISTÚstrerrorZOpenFileMappingZFILE_MAP_READZMapViewOfFileZVirtualQuerySizeÚ_sizeÚ
memoryviewÚ_buf)
Úselfr   ÚcreateÚsizeZstatsr   Z	temp_nameZh_mapZlast_error_codeZp_bufr   r   r   Ú__init__I   s¦    ý
ý
ú

ü
ýû
zSharedMemory.__init__c                 C   s&   z|   ¡  W n tk
r    Y nX d S ©N)Úcloser*   ©r3   r   r   r   Ú__del__µ   s    zSharedMemory.__del__c                 C   s   | j | jd| jffS )NF)Ú	__class__r   r5   r9   r   r   r   Ú
__reduce__»   s    ýþzSharedMemory.__reduce__c                 C   s   | j j› d| j›d| j› d�S )Nú(z, size=ú))r;   Ú__name__r   r5   r9   r   r   r   Ú__repr__Å   s    zSharedMemory.__repr__c                 C   s   | j S r7   )r2   r9   r   r   r   ÚbufÈ   s    zSharedMemory.bufc                 C   s.   | j }tr*| jr*| j  d¡r*| j dd … }|S )Nr   r   )r#   r   r$   Ú
startswith)r3   Zreported_namer   r   r   r   Í   s
    
zSharedMemory.namec                 C   s   | j S r7   )r0   r9   r   r   r   r5   Ö   s    zSharedMemory.sizec                 C   sX   | j d k	r| j  ¡  d | _ | jd k	r4| j ¡  d | _trT| jdkrTt | j¡ d| _d S )Nr   r   )r2   Úreleaser)   r8   r   r!   r   r9   r   r   r   r8   Û   s    



zSharedMemory.closec                 C   s2   t r.| jr.ddlm} t | j¡ || jdƒ d S )Nr   )Ú
unregisterr   )r   r#   r,   rD   r   Z
shm_unlink)r3   rD   r   r   r   r+   è   s    
zSharedMemory.unlink)NFr   )r?   Ú
__module__Ú__qualname__r#   r!   r)   r2   r   r   r   r    r   r$   r6   r:   r<   r@   ÚpropertyrA   r   r5   r8   r+   r   r   r   r   r   0   s&   
l



Úutf8c                   @   s  e Zd ZedededededdjdiZ	dZ
dd	„ d
d	„ dd	„ dd	„ dœZedd„ ƒZd5ddœdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZd1d2„ Zd3d4„ Z dS )6r   ÚqÚdzxxxxxxx?z%dsNzxxxxxx?xé   c                 C   s   | S r7   r   ©Úvaluer   r   r   Ú<lambda>
  ó    zShareableList.<lambda>c                 C   s   |   d¡ t¡S ©Nó    )ÚrstripÚdecodeÚ	_encodingrL   r   r   r   rN     rO   c                 C   s
   |   d¡S rP   )rR   rL   r   r   r   rN     rO   c                 C   s   d S r7   r   )Z_valuer   r   r   rN     rO   )r   r   r   é   c                 C   s:   t | ttd jfƒsdS t | tƒr$dS t | tƒr2dS dS d S )Nr   r   r   rU   )Ú
isinstanceÚstrÚbytesr;   rL   r   r   r   Ú_extract_recreation_code  s    

z&ShareableList._extract_recreation_code©r   c                   sr  |d k	rv‡fdd„|D ƒ}t |ƒˆ_t‡fdd„|D ƒƒˆ_‡fdd„|D ƒ}t dˆj d |¡ ˆj ˆj	 ¡}nd}|d k	r–|d kr–t
|ƒˆ_nt
|d	|d
�ˆ_|d k	�rNt‰ tjdˆj ˆjjdˆjfˆjžŽ  tjd |¡ˆjjˆjf‡ fdd„|D ƒžŽ  tjˆjˆjjˆjf‡ fdd„|D ƒžŽ  tjˆj	ˆjjˆjf|žŽ  n t ˆƒˆ_t ˆjˆjjd¡ˆ_d S )Nc                    sP   g | ]H}t |ttfƒs$ˆ jt|ƒ n&ˆ jt|ƒ ˆ jt|ƒˆ j d   f ‘qS )r   )rV   rW   rX   Ú_types_mappingÚtypeÚ
_alignmentr	   ©Ú.0Úitemr9   r   r   Ú
<listcomp>   s   üÿÿz*ShareableList.__init__.<locals>.<listcomp>c                 3   s0   | ](}|d  dkrˆ j nt|dd … ƒV  qdS )r   ÚsN)r]   Úint)r_   Úfmtr9   r   r   Ú	<genexpr>*  s   ÿz)ShareableList.__init__.<locals>.<genexpr>c                    s   g | ]}ˆ   |¡‘qS r   )rY   r^   r9   r   r   ra   .  s    rI   Ú rK   T)r4   r5   r   c                 3   s&   | ]}t |tƒr| ˆ ¡n|V  qd S r7   )rV   rW   Úencode©r_   Úv©Ú_encr   r   re   M  s     c                 3   s   | ]}|  ˆ ¡V  qd S r7   )rg   rh   rj   r   r   re   S  s     )r	   Ú	_list_lenÚtupleÚ_allocated_bytesÚstructZcalcsizeÚ_format_size_metainfoÚjoinÚ_format_packing_metainfoÚ_format_back_transform_codesr   ÚshmrT   Ú	pack_intorA   Ú_offset_data_startÚ_offset_packing_formatsÚ_offset_back_transform_codesÚunpack_from)r3   Zsequencer   Z_formatsZ_recreation_codesZrequested_sizer   )rk   r3   r   r6     sz    
ú
þ

ÿÿþýÿ
üûýüýüýü
ýzShareableList.__init__c                 C   sj   |dkr|n|| j  }|| j ks*| j dk r2tdƒ‚t d| jj| j|d  ¡d }| d¡}| t	¡}|S )Nr   ú Requested position out of range.Ú8srK   rQ   )
rl   Ú
IndexErrorro   ry   rt   rA   rw   rR   rS   rT   )r3   Úpositionri   rd   Ú
fmt_as_strr   r   r   Ú_get_packing_formatd  s    ýü

z!ShareableList._get_packing_formatc                 C   s\   |dkr|n|| j  }|| j ks*| j dk r2tdƒ‚t d| jj| j| ¡d }| j| }|S )Nr   rz   Úb)rl   r|   ro   ry   rt   rA   rx   Ú_back_transforms_mapping)r3   r}   Útransform_codeZtransform_functionr   r   r   Ú_get_back_transformt  s    ýü
z!ShareableList._get_back_transformc                 C   s~   |dkr|n|| j  }|| j ks*| j dk r2tdƒ‚t d| jj| j|d  | t¡¡ |  	|¡}t d| jj| j
| |¡ d S )Nr   rz   r{   rK   r€   )rl   r|   ro   ru   rt   rA   rw   rg   rT   rY   rx   )r3   r}   r~   rM   r‚   r   r   r   Ú!_set_packing_format_and_transform„  s     ü
üz/ShareableList._set_packing_format_and_transformc                 C   sj   z6| j t| jd |… ƒ }t |  |¡| jj|¡\}W n tk
rR   tdƒ‚Y nX |  	|¡}||ƒ}|S )Nzindex out of range)
rv   Úsumrn   ro   ry   r   rt   rA   r|   rƒ   )r3   r}   Úoffsetri   Zback_transformr   r   r   Ú__getitem__›  s    ÿý

zShareableList.__getitem__c                 C   sæ   z&| j t| jd |… ƒ }|  |¡}W n tk
rB   tdƒ‚Y nX t|ttfƒsf| jt	|ƒ }|}nZt|tƒrz| 
t¡n|}t|ƒ| j| kr˜tdƒ‚|d dkrª|}n| jt | j| f }|  |||¡ t || jj||¡ d S )Nzassignment index out of rangez(bytes/str item exceeds available storager   rb   )rv   r…   rn   r   r|   rV   rW   rX   r[   r\   rg   rT   r	   r   r„   ro   ru   rt   rA   )r3   r}   rM   r†   Zcurrent_formatZ
new_formatZencoded_valuer   r   r   Ú__setitem__¬  s6    ÿÿÿÿýzShareableList.__setitem__c                 C   s   t | j| jjd�dfS )NrZ   r   )r   r;   rt   r   r9   r   r   r   r<   Ê  s    zShareableList.__reduce__c                 C   s   t  d| jjd¡d S )NrI   r   )ro   ry   rt   rA   r9   r   r   r   Ú__len__Í  s    zShareableList.__len__c                 C   s"   | j j› dt| ƒ› d| jj›d�S )Nr=   z, name=r>   )r;   r?   Úlistrt   r   r9   r   r   r   r@   Ð  s    zShareableList.__repr__c                    s   d  ‡ fdd„tˆ jƒD ƒ¡S )Nrf   c                 3   s   | ]}ˆ   |¡V  qd S r7   )r   )r_   Úir9   r   r   re   Ö  s    z'ShareableList.format.<locals>.<genexpr>)rq   Úrangerl   r9   r   r9   r   ÚformatÓ  s    ÿzShareableList.formatc                 C   s   | j › d�S )NrI   ©rl   r9   r   r   r   rp   Ú  s    z#ShareableList._format_size_metainfoc                 C   s
   d| j  S )Nr{   rŽ   r9   r   r   r   rr   ß  s    z&ShareableList._format_packing_metainfoc                 C   s
   d| j  S )Nr€   rŽ   r9   r   r   r   rs   ä  s    z*ShareableList._format_back_transform_codesc                 C   s   | j d d S )Nr   rK   rŽ   r9   r   r   r   rv   é  s    z ShareableList._offset_data_startc                 C   s   | j t| jƒ S r7   )rv   r…   rn   r9   r   r   r   rw   í  s    z%ShareableList._offset_packing_formatsc                 C   s   | j | jd  S )NrK   )rw   rl   r9   r   r   r   rx   ñ  s    z*ShareableList._offset_back_transform_codesc                    s   t ‡ fdd„| D ƒƒS )Nc                 3   s   | ]}ˆ |kV  qd S r7   r   )r_   ÚentryrL   r   r   re   ø  s     z&ShareableList.count.<locals>.<genexpr>)r…   )r3   rM   r   rL   r   Úcountõ  s    zShareableList.countc                 C   s4   t | ƒD ]\}}||kr|  S qt|›d�ƒ‚d S )Nz not in this container)Ú	enumerater   )r3   rM   r}   r�   r   r   r   Úindexú  s    
zShareableList.index)N)!r?   rE   rF   rc   ÚfloatÚboolrW   rX   r;   r[   r]   r�   ÚstaticmethodrY   r6   r   rƒ   r„   r‡   rˆ   r<   r‰   r@   rG   r�   rp   rr   rs   rv   rw   rx   r�   r’   r   r   r   r   r   ö   s\         úü
F






)Ú__all__Ú	functoolsr   r(   r   r.   ro   r   r   r-   r   r   ÚO_CREATr   r   r   r
   r   r   rT   r   r   r   r   r   Ú<module>   s*   

 E