o
    gG                     @   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ddlZej	dkr/ddl
Z
dZnddlZdZejejB ZdZerBd	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   S/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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   sd  |dkst d|rttjB | _|dkrt d|d u r&| jtj@ s&t dtr|d u rK	 t }ztj	|| j| j
d| _W n	 tyF   Y q,w || _qb| jrRd| n|}tj	|| j| j
d| _|| _z|rn|rnt| j| t| j}|j}t| j|| _W n ty   |    w dd	lm} || jd
 n|r	 |d u rt n|}ttjtjtj|d? d@ |d@ |}z1t }|tjkr|d urttj t!tj |tjW t"| qtjd||d| _W t"| nt"| w || _q'|| _t#tj$d|}zt%|tj$ddd}	W t"| nt"| w 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=TrueT)mode/   )registershared_memory    l    r   )ZtagnameF)*
ValueError_O_CREXosO_RDWR_flagsO_EXCL
_USE_POSIXr   _posixshmem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GetLastErrorZERROR_ALREADY_EXISTSerrnoEEXISTstrerrorZCloseHandleZ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__J   s   



zSharedMemory.__init__c                 C   s$   z|    W d S  ty   Y d S w N)closer+   r5   r   r   r   __del__   s
   zSharedMemory.__del__c                 C   s   | j | jd| jffS )NF)	__class__r   r7   r;   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   r7   r;   r   r   r   __repr__   s   zSharedMemory.__repr__c                 C      	 | j S r9   )r4   r;   r   r   r   buf      zSharedMemory.bufc                 C   s0   	 | j }tr| jr| j dr| j dd  }|S )Nr   r   )r$   r   r%   
startswith)r5   Zreported_namer   r   r   r      s   
zSharedMemory.namec                 C   rC   r9   )r2   r;   r   r   r   r7      rE   zSharedMemory.sizec                 C   sb   	 | j d ur| j   d | _ | jd ur| j  d | _tr-| jdkr/t| j d| _d S d S d S )Nr   r   )r4   releaser*   r:   r   r"   r   r;   r   r   r   r:      s   




zSharedMemory.closec                 C   s<   	 t r| jrddlm} t| j || jd d S d S d S )Nr   )
unregisterr   )r   r$   r-   rH   r   
shm_unlink)r5   rH   r   r   r   r,      s   
zSharedMemory.unlink)NFr   )rA   
__module____qualname__r$   r"   r*   r4   r   r   r   r!   r   r%   r8   r<   r>   rB   propertyrD   r   r7   r:   r,   r   r   r   r   r   1   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 e!e"j#Z$dS )6r   qdzxxxxxxx?z%dsNzxxxxxx?x   c                 C   s   | S r9   r   valuer   r   r   <lambda>      zShareableList.<lambda>c                 C   s   |  dtS N    )rstripdecode	_encodingrQ   r   r   r   rS     s    c                 C   s
   |  dS rU   )rW   rQ   r   r   r   rS     s   
 c                 C   s   d S r9   r   )_valuer   r   r   rS     rT   )r   r   r      c                 C   s8   	 t | ttd jfsdS t | trdS t | trdS dS )Nr   r   r   r[   )
isinstancestrbytesr=   rQ   r   r   r   _extract_recreation_code  s   

z&ShareableList._extract_recreation_coder   c                   s  |d u s|d urc|pd}fdd|D }t |_d}dg_|D ]}||d dkr.jnt|d d 7 }j| q"fdd|D }tdj d		| j
 j }t|d
|d_nt|_|d urt tjdj jjdjgjR   tjd		|jjjg fdd|D R   tjj
jjjg fdd|D R   tjjjjjg|R   d S t _ttjjjd_d S )Nr   c                    sP   g | ]$}t |ttfs jt| n jt|  jt| j d   f qS )r   )r\   r]   r^   _types_mappingtype
_alignmentr	   .0itemr;   r   r   
<listcomp>+  s    z*ShareableList.__init__.<locals>.<listcomp>r   r   sc                    s   g | ]}  |qS r   )r_   rd   r;   r   r   rg   =  s    
rN    T)r6   r7   c                 3   s(    | ]}t |tr| n|V  qd S r9   )r\   r]   encodere   v_encr   r   	<genexpr>X  s   & z)ShareableList.__init__.<locals>.<genexpr>c                 3   s    | ]}|  V  qd S r9   )rj   rk   rm   r   r   ro   ^  s    rP   )r	   	_list_len_allocated_offsetsrc   intappendstructcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesr   shmrY   	pack_intorD   _offset_data_start_offset_packing_formats_offset_back_transform_codeslistunpack_from)r5   Zsequencer   Z_formatsoffsetfmtZ_recreation_codesZrequested_sizer   )rn   r5   r   r8   (  s   

&



zShareableList.__init__c                 C   sl   	 |dkr|n|| j  }|| j ks| j dk rtdtd| jj| j|d  d }|d}|t	}|S )Nr    Requested position out of range.8srP   rV   )
rp   
IndexErrorrt   r   rz   rD   r}   rW   rX   rY   )r5   positionrl   r   
fmt_as_strr   r   r   _get_packing_formatq  s   

z!ShareableList._get_packing_formatc                 C   sH   	 || j ks| j dk rtdtd| jj| j| d }| j| }|S )Nr   r   b)rp   r   rt   r   rz   rD   r~   _back_transforms_mapping)r5   r   transform_codeZtransform_functionr   r   r   _get_back_transform  s   
z!ShareableList._get_back_transformc                 C   sj   	 || j ks| j dk rtdtd| jj| j|d  |t | 	|}td| jj| j
| | d S )Nr   r   r   rP   r   )rp   r   rt   r{   rz   rD   r}   rj   rY   r_   r~   )r5   r   r   rR   r   r   r   r   !_set_packing_format_and_transform  s    
z/ShareableList._set_packing_format_and_transformc                 C   sr   |dkr|n|| j  }z| j| j|  }t| || jj|\}W n ty-   tdw | 	|}||}|S )Nr   zindex out of range)
rp   r|   rq   rt   r   r   rz   rD   r   r   )r5   r   r   rl   Zback_transformr   r   r   __getitem__  s   

zShareableList.__getitem__c           	      C   s   |dkr|n|| j  }z| j| }| j| }| |}W n ty'   tdw t|ttfs9| jt	| }|}n0| j|d  | }t|trL|
tn|}t||krXtd|d dkra|}n| jt |f }| ||| t|| jj|| d S )Nr   zassignment index out of ranger   z(bytes/str item exceeds available storager   rh   )rp   rq   r|   r   r   r\   r]   r^   ra   rb   rj   rY   r	   r   r   rt   r{   rz   rD   )	r5   r   rR   Zitem_offsetr   Zcurrent_formatZ
new_formatZencoded_valueZallocated_lengthr   r   r   __setitem__  s:   

zShareableList.__setitem__c                 C   s   t | j| jjddfS )Nr`   r   )r   r=   rz   r   r;   r   r   r   r>        zShareableList.__reduce__c                 C   s   t d| jjdd S )NrN   r   )rt   r   rz   rD   r;   r   r   r   __len__  r   zShareableList.__len__c                 C   s"   | j j dt|  d| jjdS )Nr?   z, name=r@   )r=   rA   r   rz   r   r;   r   r   r   rB     s   "zShareableList.__repr__c                    s    	 d  fddt jD S )Nri   c                 3   s    | ]}  |V  qd S r9   )r   )re   ir;   r   r   ro     s    

z'ShareableList.format.<locals>.<genexpr>)rw   rangerp   r;   r   r;   r   format  s   zShareableList.formatc                 C   s   	 d| j d  S )NrN   r   rp   r;   r   r   r   rv     s   z#ShareableList._format_size_metainfoc                 C      	 d| j  S )Nr   r   r;   r   r   r   rx        
z&ShareableList._format_packing_metainfoc                 C   r   )Nr   r   r;   r   r   r   ry     r   z*ShareableList._format_back_transform_codesc                 C   s   | j d d S )Nr   rP   r   r;   r   r   r   r|     s   z ShareableList._offset_data_startc                 C   s   | j | jd  S )Nr   )r|   rq   r;   r   r   r   r}        z%ShareableList._offset_packing_formatsc                 C   s   | j | jd  S )NrP   )r}   rp   r;   r   r   r   r~     r   z*ShareableList._offset_back_transform_codesc                    s   	 t  fdd| D S )Nc                 3   s    | ]} |kV  qd S r9   r   )re   entryrQ   r   r   ro     s    z&ShareableList.count.<locals>.<genexpr>)sum)r5   rR   r   rQ   r   count  s   zShareableList.countc                 C   s2   	 t | D ]\}}||kr|  S qt|d)Nz not in this container)	enumerater   )r5   rR   r   r   r   r   r   index
  s   zShareableList.indexr9   )%rA   rJ   rK   rr   floatboolr]   r^   r=   ra   rc   r   staticmethodr_   r8   r   r   r   r   r   r>   r   rB   rL   r   rv   rx   ry   r|   r}   r~   r   r   classmethodtypesGenericAlias__class_getitem__r   r   r   r   r      sV    
I!







)__all__	functoolsr   r)   r   r/   rt   r   r   r   r.   r   r   O_CREATr   r   r   r
   r   r   rY   r   r   r   r   r   <module>   s0    

 E