o ?OgH@s ddgZddlmZddlZddlZddlZddlZddlZddlZej dkr/ddl Z dZ nddl Z dZ dd l mZejejBZd Ze rHd Znd Zd dZGdddZdZGdddZdS) SharedMemory ShareableList)partialNntFT)resource_trackerz/psm_Zwnsm_cCs$ tttd}tt|}|S)N)_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXsecretsZ token_hex)nbytesnamerD/opt/alt/python310/lib64/python3.10/multiprocessing/shared_memory.py_make_filename(src@seZdZ dZdZdZdZejZ dZ e rdndZ dddZ d d Zd d Zd dZeddZeddZeddZddZddZdS)rNiTFrc Csx|dkstd|rttjB|_|dkrtd|dur&|jtj@s&tdtr|durL t}z tj ||j|j d|_ Wn t yFYq,w||_ n|jrSd|n|}tj ||j|j d|_ ||_ z|ro|rot|j |t|j }|j}t|j ||_Wn ty|wt|j dn|r |durtn|}ttjtjtj|d ?d @|d @|}z1t}|tjkr|durt tj t!tj |tjWt"|qtjd ||d |_Wt"|nt"|w||_ n?||_ t#tj$d |}zt%|tj$ddd}Wt"|nt"|wz t&|}Wt'|nt'|wtjd ||d |_||_(t)|j|_*dS)Nrz!'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 lr)ZtagnameF)+ ValueError_O_CREXosO_RDWR_flagsO_EXCL _USE_POSIXr _posixshmemZshm_open_mode_fdFileExistsError_name_prepend_leading_slash ftruncatefstatst_sizemmap_mmapOSErrorunlinkrregister_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ GetLastErrorZERROR_ALREADY_EXISTSerrnoZEEXISTstrerrorZ CloseHandleZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySizeZUnmapViewOfFile_size memoryview_buf) selfrcreatesizeZstatsZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Ks         zSharedMemory.__init__cCs$z|WdStyYdSwN)closer*r3rrr__del__s  zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__rr5r9rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r;__name__rr5r9rrr__repr__szSharedMemory.__repr__cC |jSr7)r2r9rrrbufzSharedMemory.bufcCs0 |j}tr|jr|jdr|jdd}|S)Nrr)r#rr$ startswith)r3Z reported_namerrrrs   zSharedMemory.namecCrAr7)r0r9rrrr5rCzSharedMemory.sizecCsb |jdur|jd|_|jdur|jd|_tr-|jdkr/t|jd|_dSdSdS)Nrr)r2releaser)r8rr!rr9rrrr8s      zSharedMemory.closecCs2 tr|jrt|jt|jddSdSdS)Nr)rr#rZ shm_unlinkr unregisterr9rrrr+s   zSharedMemory.unlink)NFr)r? __module__ __qualname__r#r!r)r2rrrr rr$r6r:r<r@propertyrBrr5r8r+rrrrr2s*  n     utf8c @seZdZ edededededdjdiZ dZ dd d d d d d d d Z e ddZ d5ddddZddZddZddZddZddZddZdd Zd!d"Zed#d$Zed%d&Zed'd(Zed)d*Zed+d,Zed-d.Zed/d0Zd1d2Zd3d4Z e!e"j#Z$dS)6rqdzxxxxxxx?z%dsNzxxxxxx?xcCs|Sr7rvaluerrrzShareableList.cCs|dtSN)rstripdecode _encodingrNrrrrPscCs |dSrR)rTrNrrrrPs cCsdSr7r)Z_valuerrrrPrQ)rrr cCs8 t|ttdjfs dSt|trdSt|trdSdS)Nrrr rW) isinstancestrbytesr;rNrrr_extract_recreation_codes  z&ShareableList._extract_recreation_codercs|dus|durc|p d}fdd|D}t|_d}dg_|D]}||ddkr.jnt|dd7}j|q"fdd|D}tdjd |j j }t |d |d _ nt |_ |durttjdjj jdjgjRtjd |j jjgfd d |DRtjj j jjgfdd |DRtjj j jjg|RdSt_ttjj jd_dS)NrcsPg|]$}t|ttfsjt|njt|jt|jdfqS)r)rXrYrZ_types_mappingtype _alignmentr .0itemr9rr -s  z*ShareableList.__init__..rrscsg|]}|qSr)r[r`r9rrrc?s rKT)r4r5c3s(|]}t|tr|n|VqdSr7)rXrYencoderav_encrr Zs&z)ShareableList.__init__..c3s|]}|VqdSr7)rfrgrirrrk`srM)r _list_len_allocated_offsetsr_intappendstructZcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrV pack_intorB_offset_data_start_offset_packing_formats_offset_back_transform_codeslist unpack_from)r3ZsequencerZ_formatsoffsetfmtZ_recreation_codesZrequested_sizer)rjr3rr6*s  &    zShareableList.__init__cCsl |dkr|n||j}||jks|jdkrtdtd|jj|j|dd}|d}|t }|S)Nr Requested position out of range.8srMrS) rl IndexErrorrpr{rurBrxrTrUrV)r3positionrhr} fmt_as_strrrr_get_packing_formatss   z!ShareableList._get_packing_formatcCsH ||jks |jdkrtdtd|jj|j|d}|j|}|S)Nrr~b)rlrrpr{rurBry_back_transforms_mapping)r3rtransform_codeZtransform_functionrrr_get_back_transforms z!ShareableList._get_back_transformcCsj ||jks |jdkrtdtd|jj|j|d|t| |}td|jj|j ||dS)Nrr~rrMr) rlrrprvrurBrxrfrVr[ry)r3rrrOrrrr!_set_packing_format_and_transforms   z/ShareableList._set_packing_format_and_transformcCsr|dkr|n||j}z|j|j|}t|||jj|\}Wn ty-tdw| |}||}|S)Nrzindex out of range) rlrwrmrpr{rrurBrr)r3rr|rhZback_transformrrr __getitem__s  zShareableList.__getitem__c Cs|dkr|n||j}z|j|}|j|}||}Wn ty'tdwt|ttfs9|jt |}|}n0|j|d|}t|trL| t n|}t ||krXt d|ddkra|}n|jt|f}||||t||jj||dS)Nrzassignment index out of rangerz(bytes/str item exceeds available storagerrd)rlrmrwrrrXrYrZr]r^rfrVr rrrprvrurB) r3rrOZ item_offsetr|Zcurrent_formatZ new_formatZ encoded_valueZallocated_lengthrrr __setitem__s:      zShareableList.__setitem__cCst|j|jjddfS)Nr\r)rr;rurr9rrrr<zShareableList.__reduce__cCstd|jjddS)NrKr)rpr{rurBr9rrr__len__rzShareableList.__len__cCs"|jjdt|d|jjdS)Nr=z, name=r>)r;r?rzrurr9rrrr@s"zShareableList.__repr__cs dfddtjDS)Nrec3s|]}|VqdSr7)r)rair9rrrks  z'ShareableList.format..)rrrangerlr9rr9rformatszShareableList.formatcCs d|jdS)NrKrrlr9rrrrqsz#ShareableList._format_size_metainfocC d|jS)Nrrr9rrrrs z&ShareableList._format_packing_metainfocCr)Nrrr9rrrrtrz*ShareableList._format_back_transform_codescCs|jddS)Nr rMrr9rrrrwsz ShareableList._offset_data_startcCs|j|jdS)Nr)rwrmr9rrrrxz%ShareableList._offset_packing_formatscCs|j|jdS)NrM)rxrlr9rrrryrz*ShareableList._offset_back_transform_codescs tfdd|DS)Nc3s|]}|kVqdSr7r)raentryrNrrrk sz&ShareableList.count..)sum)r3rOrrNrcountszShareableList.countcCs2 t|D] \}}||kr|Sqt|d)Nz not in this container) enumerater)r3rOrrrrrindex s zShareableList.indexr7)%r?rGrHrnfloatboolrYrZr;r]r_r staticmethodr[r6rrrrrr<rr@rIrrqrsrtrwrxryrr classmethodtypes GenericAlias__class_getitem__rrrrrsV  I!        )__all__ functoolsrr(rr.rpr rrr-rrrerO_CREATrrr r rrrVrrrrrs2     F