
    ;eH                         	 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dd	lmZ ej        ej        z  Zd
ZerdZndZd Z G d d           ZdZ G d d          ZdS )SharedMemoryShareableList    )partialNntFT   )resource_tracker   z/psm_wnsm_c                  ~    	 t           t          t                    z
  dz  } t          t          j        |           z   }|S )N   )_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXsecrets	token_hex)nbytesnames     4/usr/lib/python3.11/multiprocessing/shared_memory.py_make_filenamer   (   s7    <#c*:&;&;;AFg/777DK    c                       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Zd Zd	 Zd
 Zed             Zed             Zed             Zd Zd ZdS )r   Ni  TFr   c                 x   |dk    st          d          |r.t          t          j        z  | _        |dk    rt          d          |#| j        t          j        z  st          d          t          r*|O	 t                      }	 t          j	        || j        | j
                  | _        n# t          $ r Y Cw xY w|| _        n;| j        rd|z   n|}t          j	        || j        | j
                  | _        || _        	 |r|rt          j        | j        |           t          j        | j                  }|j        }t%          j        | j        |          | _        n## t(          $ r |                                   w xY wt-          j        | j        d           n|r#	 |t                      n|}t1          j        t0          j        t0          j        t0          j        |d	z	  d
z  |d
z  |          }	 t1          j                    }|t0          j        k    rZ|Bt          t>          j         t          j!        t>          j                   |t0          j                  	 t1          j"        |           t%          j        d||          | _        t1          j"        |           n# t1          j"        |           w xY w|| _        n|| _        t1          j#        t0          j$        d|          }	 t1          j%        |t0          j$        ddd          }t1          j"        |           n# t1          j"        |           w xY w	 t1          j&        |          }t1          j'        |           n# t1          j'        |           w xY wt%          j        d||          | _        || _(        tS          | 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/shared_memory    l    r   )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unlinkr   register_winapiCreateFileMappingINVALID_HANDLE_VALUENULLPAGE_READWRITEGetLastErrorERROR_ALREADY_EXISTSerrnoEEXISTstrerrorCloseHandleOpenFileMappingFILE_MAP_READMapViewOfFileVirtualQuerySizeUnmapViewOfFile_size
memoryview_buf)	selfr   createsizestats	temp_nameh_maplast_error_codep_bufs	            r   __init__zSharedMemory.__init__K   s   qyy@AAA 	Y!BI-DKqyy !WXXX<bi 7<EFFF _	? |)++D!#.#7  K!%$ $ $
 + ! ! ! !!%DJ%)%@JsTzzd&/K  
 "
 1d 1L4000**}!Ytx66

    %dj/BBBB  6?48L 0 0 0dI $54.z1z)! E3*1*>*@*@*g.JJJ#/&5$)L$&K$=$=$($+$@	'" '" !" !)  +E2222 &*Yr4%K%K%K
+E2222+E2222!*DJ "
  /) 
	/#1- E '....G'....3"3E::D+E2222G+E2222!Yr4>>>

tz**			sJ   &B, ,
B98B9 AE  E>4A'J" 1J" "J8+"L" "L8<M% %M;c                 R    	 |                                   d S # t          $ r Y d S w xY wN)closer2   rH   s    r   __del__zSharedMemory.__del__   s:    	JJLLLLL 	 	 	DD	s    
&&c                 .    | j         | j        d| j        ffS )NF)	__class__r   rJ   rT   s    r   
__reduce__zSharedMemory.__reduce__   s#    N		
 	
r   c                 @    | j         j         d| j        d| j         dS )N(z, size=))rW   __name__r   rJ   rT   s    r   __repr__zSharedMemory.__repr__   s*    .)LLDILL	LLLLr   c                     	 | j         S rR   )rG   rT   s    r   bufzSharedMemory.buf   s    >yr   c                     	 | j         }t          r0| j        r)| j                             d          r| j         dd          }|S )Nr   r   )r+   r%   r,   
startswith)rH   reported_names     r   r   zSharedMemory.name   sK    >
 	/$5 	/z$$S)) / $
122r   c                     	 | j         S rR   )rE   rT   s    r   rJ   zSharedMemory.size   s    zr   c                    	 | j          | j                                          d | _         | j         | j                                         d | _        t          r-| j        dk    r$t          j        | j                   d| _        d S d S d S )Nr   r   )rG   releaser1   rS   r%   r)   r!   rT   s    r   rS   zSharedMemory.close   s    	09 IDI:!JDJ 	$(a--HTXDHHH	 	--r   c                     	 t           r<| j        r7t          j        | j                   t	          j        | j        d           d S d S d S )Nr   )r%   r+   r&   
shm_unlinkr   
unregisterrT   s    r   r3   zSharedMemory.unlink   sb    	'
  	E$* 	E"4:...'
ODDDDD	E 	E 	E 	Er   )NFr   )r\   
__module____qualname__r+   r)   r1   rG   r!   r"   r#   r(   r%   r,   rP   rU   rX   r]   propertyr_   r   rJ   rS   r3    r   r   r   r   2   s       B  E
CEDYFE%/:TTUl+ l+ l+ l+\  
 
 
M M M   X   X   X  E E E E Er   utf8c                   j   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Zed             Zd!dddZd Zd Zd Zd Zd Zd Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zd  Z  e!e"j#                  Z$dS )"r   qdzxxxxxxx?z%dsNzxxxxxx?x   c                     | S rR   rl   values    r   <lambda>zShareableList.<lambda>  s     r   c                 \    |                      d                              t                    S N    )rstripdecode	_encodingrs   s    r   ru   zShareableList.<lambda>  s     g..55i@@ r   c                 ,    |                      d          S rw   )ry   rs   s    r   ru   zShareableList.<lambda>  s    g.. r   c                     d S rR   rl   )_values    r   ru   zShareableList.<lambda>  s    $ r   )r   r   r      c                     	 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bytesrW   rs   s    r   _extract_recreation_codez&ShareableList._extract_recreation_code  s\    	2 %#udn!=>> 	1s## 	1u%% 	11r   r   c                L    |||pd} fd|D             }t          |           _        d}dg _        |D ]I}||d         dk    r j        nt	          |d d                   z  } j                            |           J fd|D             }t          j        d j        z   d	                    |          z    j
        z    j        z             }t          |d	|
           _        nt          |           _        |t          t          j        d j        z    j        j        d j        g j        R   t          j        d	                    |           j        j         j        gfd|D             R   t          j         j
         j        j         j        gfd|D             R   t          j         j         j        j         j        g|R   d S t                      _        t)          t          j         j         j        j        d                     _        d S )Nrl   c                     g | ]v}t          |t          t          f          sj        t	          |                   n=j        t	          |                   j        t          |          j        z  d z   z  fz  wS )r   )r   r   r   _types_mappingtype
_alignmentr   .0itemrH   s     r   
<listcomp>z*ShareableList.__init__.<locals>.<listcomp>-  s        	 &dS%L99#DJJ//,T$ZZ83t99+G!+KL<   r   r   r   sc                 :    g | ]}                     |          S rl   )r   r   s     r   r   z*ShareableList.__init__.<locals>.<listcomp>?  s4     ! ! !8<--d33! ! !r   ro    T)rI   rJ   c              3   p   K   | ]0}t          |t                    r|                              n|V  1d S rR   )r   r   encoder   v_encs     r   	<genexpr>z)ShareableList.__init__.<locals>.<genexpr>Z  s@      PP!Jq#$6$6=!((4...APPPPPPr   c              3   B   K   | ]}|                               V  d S rR   )r   r   s     r   r   z)ShareableList.__init__.<locals>.<genexpr>`  s-      33Q!((4..333333r   rq   )r   	_list_len_allocated_offsetsr   intappendstructcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesr   shmr{   	pack_intor_   _offset_data_start_offset_packing_formats_offset_back_transform_codeslistunpack_from)	rH   sequencer   _formatsoffsetfmt_recreation_codesrequested_sizer   s	   `       @r   rP   zShareableList.__init__*  s   <8/~2H    %  H !]]DNF ()cD# 7 7SW^^$//S"XN'..v6666! ! ! !@H! ! ! $_d00!!"-. 12 N $DNKKKDHH#D))DHDd00	
 )    !!' QPPPxPPP	    -, 4333(333	    11 $	      !YYDN&*".HL ' 'D###r   c                 6   	 |dk    r|n	|| j         z   }|| j         k    s| j         dk     rt          d          t          j        d| j        j        | j        |dz  z             d         }|                    d          }|                    t                    }|S )Nr    Requested position out of range.8srq   rx   )
r   
IndexErrorr   r   r   r_   r   ry   rz   r{   )rH   positionr   r   
fmt_as_strs        r   _get_packing_formatz!ShareableList._get_packing_formats  s    H'1}}88(T^2K&&DNQ,>,>?@@@HL(8a<7
 
 	
 hhwZZ	**
r   c                     	 || j         k    s| j         dk     rt          d          t          j        d| j        j        | j        |z             d         }| j        |         }|S )Nr   r   b)r   r   r   r   r   r_   r   _back_transforms_mapping)rH   r   transform_codetransform_functions       r   _get_back_transformz!ShareableList._get_back_transform  st    C&&DNQ,>,>?@@@+HL-8
 
 	
 ":>J!!r   c                 V   	 || j         k    s| j         dk     rt          d          t          j        d| j        j        | j        |dz  z   |                    t                               | 	                    |          }t          j        d| j        j        | j
        |z   |           d S )Nr   r   r   rq   r   )r   r   r   r   r   r_   r   r   r{   r   r   )rH   r   r   rt   r   s        r   !_set_packing_format_and_transformz/ShareableList._set_packing_format_and_transform  s    	? &&DNQ,>,>?@@@HL(8a<7i((		
 	
 	
 66u==HL-8		
 	
 	
 	
 	
r   c                 <   |dk    r|n	|| j         z   }	 | j        | j        |         z   }t          j        |                     |          | j        j        |          \  }n# t          $ r t          d          w xY w| 	                    |          } ||          }|S )Nr   zindex out of range)
r   r   r   r   r   r   r   r_   r   r   )rH   r   r   r   back_transforms        r   __getitem__zShareableList.__getitem__  s    '1}}88(T^2K	3,t/Fx/PPF%((22 DQQ
  	3 	3 	31222	3 11(;;N1s   A
A A9c                    |dk    r|n	|| j         z   }	 | j        |         }| j        |z   }|                     |          }n# t          $ r t	          d          w xY wt          |t          t          f          s| j        t          |                   }|}n| j        |dz            |z
  }t          |t                    r|
                    t                    n|}t          |          |k    rt          d          |d         dk    r|}n| j        t                   |fz  }|                     |||           t          j        || j        j        ||           d S )Nr   zassignment index out of ranger   z(bytes/str item exceeds available storager   r   )r   r   r   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   r   r_   )	rH   r   rt   item_offsetr   current_format
new_formatencoded_valueallocated_lengths	            r   __setitem__zShareableList.__setitem__  s   '1}}88(T^2K	>1(;K,{:F!55h??NN 	> 	> 	><===	> %#u.. 	,T%[[9J!MM#6x!|D{R !+5# 6 6BU\\)444<A =!!$444 !KLLLb!S((+

!05$9 
 	..	
 	
 	

 	TX\6=IIIIIs   ,A Ac                 F    t          | j        | j        j                  dfS )Nr   rl   )r   rW   r   r   rT   s    r   rX   zShareableList.__reduce__  s     t~DHM:::B>>r   c                 N    t          j        d| j        j        d          d         S )Nro   r   )r   r   r   r_   rT   s    r   __len__zShareableList.__len__  s     !#tx|Q77::r   c                 Z    | j         j         dt          |            d| j        j        dS )NrZ   z, name=r[   )rW   r\   r   r   r   rT   s    r   r]   zShareableList.__repr__  s0    .)QQDJJQQtx}QQQQr   c                 l     	 d                      fdt           j                  D                       S )Nr   c              3   B   K   | ]}                     |          V  d S rR   )r   )r   irH   s     r   r   z'ShareableList.format.<locals>.<genexpr>  sB       
 
,-D$$Q''
 
 
 
 
 
r   )r   ranger   rT   s   `r   formatzShareableList.format  sL    Gww 
 
 
 
16t~1F1F
 
 
 
 
 	
r   c                     	 d| j         dz   z  S )Nro   r   r   rT   s    r   r   z#ShareableList._format_size_metainfo  s    Hdnq())r   c                     	 d| j         z  S )Nr   r   rT   s    r   r   z&ShareableList._format_packing_metainfo  s    Hdn$$r   c                     	 d| j         z  S )Nr   r   rT   s    r   r   z*ShareableList._format_back_transform_codes  s    HT^##r   c                     | j         dz   dz  S )Nr   rq   r   rT   s    r   r   z ShareableList._offset_data_start  s     "a''r   c                 ,    | j         | j        d         z   S )Nr   )r   r   rT   s    r   r   z%ShareableList._offset_packing_formats  s    &)@)DDDr   c                 &    | j         | j        dz  z   S )Nrq   )r   r   rT   s    r   r   z*ShareableList._offset_back_transform_codes  s    +dnq.@@@r   c                 <    	 t          fd| D                       S )Nc              3   $   K   | ]
}|k    V  d S rR   rl   )r   entryrt   s     r   r   z&ShareableList.count.<locals>.<genexpr>
  s'      44e5E>444444r   )sum)rH   rt   s    `r   countzShareableList.count  s)    M4444t444444r   c                 f    	 t          |           D ]\  }}||k    r|c S t          |d          )Nz not in this container)	enumerater   )rH   rt   r   r   s       r   indexzShareableList.index  sT    	:  ) 	A 	AOHe~~  ???@@@r   rR   )%r\   ri   rj   r   floatboolr   r   rW   r   r   r   staticmethodr   rP   r   r   r   r   r   rX   r   r]   rk   r   r   r   r   r   r   r   r   r   classmethodtypesGenericAlias__class_getitem__rl   r   r   r   r      s$       *& 	SsjUu
N J@@..	      \Gd G G G G GR   " " "
 
 
,  "J J JB? ? ?; ; ;R R R 
 
 X
 * * X* % % X% $ $ X$ ( ( X(
 E E XE A A XA5 5 5
A A A $E$677r   )__all__	functoolsr   r0   r!   r<   r   r   r   r   r5   r%   r&   r   r   O_CREATr$   r    r   r   r   r   r{   r   rl   r   r   <module>r      sX   O
-        				    7d??NNNJJJ      
*ry
       BE BE BE BE BE BE BE BEJ 	]8 ]8 ]8 ]8 ]8 ]8 ]8 ]8 ]8 ]8r   