<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    e5d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   5/usr/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   Ni  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rt }ztj	|| j| j
d| _W n tk
r   Y qZY nX || _qqZn.| jrd| n|}tj	|| j| j
d| _|| _z<|r|rt| 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	rt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rt
|_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rt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