a DOgG@sddgZddlmZddlZddlZddlZddlZddlZddlZej dkr\ddl Z dZ n ddl Z dZ ej ejBZdZe rd Znd Zd d ZGd ddZdZGdddZdS) SharedMemory ShareableList)partialNntFTz/psm_Zwnsm_cCs"tttd}tt|}|S)N)_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXsecretsZ token_hex)nbytesnamerB/opt/alt/python39/lib64/python3.9/multiprocessing/shared_memory.py_make_filename'src@seZdZdZdZdZdZejZ dZ e r*dndZ dddZ d d Zd d Zd dZeddZeddZeddZddZddZdS)rNiTFrc Cs|dkstd|r0ttjB|_|dkr0td|durL|jtj@sLtdtrD|durt}ztj ||j|j d|_ Wnt yYqZYn0||_ qqZn.|jrd|n|}tj ||j|j d|_ ||_ z<|r|rt|j |t|j }|j}t|j ||_Wnty&|Yn0ddlm}||j d n*|r |durZtn|}ttjtjtj|d ?d @|d @|}zjt}|tjkr|durt tj t!tj |tjnWt"|qJtjd ||d |_Wt"|n t"|0||_ qnqJnb||_ t#tj$d|}z"t%|tj$ddd} Wt"|n t"|0t&| }tjd ||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=True)mode/)register shared_memory lr)ZtagnameF)* ValueError_O_CREXosO_RDWR_flagsO_EXCL _USE_POSIXr _posixshmemZshm_open_mode_fdFileExistsError_name_prepend_leading_slash ftruncatefstatst_sizemmap_mmapOSErrorunlinkresource_trackerr_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ GetLastErrorZERROR_ALREADY_EXISTSerrnoZEEXISTstrerrorZ CloseHandleZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySize_size memoryview_buf) selfr createsizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Js             zSharedMemory.__init__cCs$z |WntyYn0dSN)closer*r3rrr__del__s  zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__r r5r9rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r;__name__r r5r9rrr__repr__szSharedMemory.__repr__cCs|jSr7)r2r9rrrbufszSharedMemory.bufcCs.|j}tr*|jr*|jdr*|jdd}|S)Nrr)r#rr$ startswith)r3Z reported_namerrrr s   zSharedMemory.namecCs|jSr7)r0r9rrrr5szSharedMemory.sizecCsX|jdur|jd|_|jdur4|jd|_trT|jdkrTt|jd|_dS)Nrr)r2releaser)r8rr!rr9rrrr8s     zSharedMemory.closecCs2tr.|jr.ddlm}t|j||jddS)Nr) unregisterr)rr#r,rDrZ shm_unlink)r3rDrrrr+s   zSharedMemory.unlink)NFr)r? __module__ __qualname__r#r!r)r2rrrr rr$r6r:r<r@propertyrAr r5r8r+rrrrr1s&  l     utf8c @seZdZedededededdjdiZ 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 _encodingrLrrrrNrOcCs |dSrP)rRrLrrrrNrOcCsdSr7r)Z_valuerrrrNrO)rrrcCs:t|ttdjfsdSt|tr$dSt|tr2dSdSdS)NrrrrU) isinstancestrbytesr;rLrrr_extract_recreation_codes  z&ShareableList._extract_recreation_coder cs|dus|dur|pd}fdd|D}t|_d}dg_|D]6}||ddkr\jnt|dd7}j|qDfdd|D}tdjd |j j }t |d |d _ n t |_ |durttjdjj jdjgjRtjd |j jjgfd d |DRtjj j jjgfdd |DRtjj j jjg|Rn$t_ttjj jd_dS)NrcsPg|]H}t|ttfs$jt|n&jt|jt|jdfqS)r)rVrWrX_types_mappingtype _alignmentr .0itemr9rr +s   z*ShareableList.__init__..rrscsg|]}|qSr)rYr^r9rrra=srIT)r4r5c3s&|]}t|tr|n|VqdSr7)rVrWencoder_v_encrr XrOz)ShareableList.__init__..c3s|]}|VqdSr7)rdrergrrri^rOrK)r _list_len_allocated_offsetsr]intappendstructZcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrT pack_intorA_offset_data_start_offset_packing_formats_offset_back_transform_codeslist unpack_from)r3Zsequencer Z_formatsoffsetfmtZ_recreation_codesZrequested_sizer)rhr3rr6(s  &     zShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdtd|jj|j|dd}|d}|t }|S)Nr Requested position out of range.8srKrQ) rj IndexErrorrnryrsrArvrRrSrT)r3positionrfr{ fmt_as_strrrr_get_packing_formatqs   z!ShareableList._get_packing_formatcCsF||jks|jdkrtdtd|jj|j|d}|j|}|S)Nrr|b)rjr~rnryrsrArw_back_transforms_mapping)r3rtransform_codeZtransform_functionrrr_get_back_transforms z!ShareableList._get_back_transformcCsh||jks|jdkrtdtd|jj|j|d|t| |}td|jj|j ||dS)Nrr|r}rKr) rjr~rnrtrsrArvrdrTrYrw)r3rrrMrrrr!_set_packing_format_and_transforms  z/ShareableList._set_packing_format_and_transformcCsv|dkr |n||j}z.|j|j|}t|||jj|\}Wnty^tdYn0| |}||}|S)Nrzindex out of range) rjrurkrnryrrsrAr~r)r3rrzrfZback_transformrrr __getitem__s   zShareableList.__getitem__c Cs|dkr |n||j}z"|j|}|j|}||}WntyRtdYn0t|ttfsv|jt |}|}n`|j|d|}t|tr| t n|}t ||krt d|ddkr|}n|jt|f}||||t||jj||dS)Nrzassignment index out of rangerz(bytes/str item exceeds available storagerrb)rjrkrurr~rVrWrXr[r\rdrTr rrrnrtrsrA) r3rrMZ item_offsetrzZcurrent_formatZ new_formatZ encoded_valueZallocated_lengthrrr __setitem__s8      zShareableList.__setitem__cCst|j|jjddfS)NrZr)rr;rsr r9rrrr<szShareableList.__reduce__cCstd|jjddS)NrIr)rnryrsrAr9rrr__len__szShareableList.__len__cCs"|jjdt|d|jjdS)Nr=z, name=r>)r;r?rxrsr r9rrrr@szShareableList.__repr__csdfddtjDS)Nrcc3s|]}|VqdSr7)r)r_ir9rrrisz'ShareableList.format..)rprangerjr9rr9rformatszShareableList.formatcCsd|jdS)NrIrrjr9rrrrosz#ShareableList._format_size_metainfocCs d|jS)Nr}rr9rrrrqsz&ShareableList._format_packing_metainfocCs d|jS)Nrrr9rrrrrsz*ShareableList._format_back_transform_codescCs|jddS)NrrKrr9rrrrusz ShareableList._offset_data_startcCs|j|jdS)Nr)rurkr9rrrrvsz%ShareableList._offset_packing_formatscCs|j|jdS)NrK)rvrjr9rrrrwsz*ShareableList._offset_back_transform_codescstfdd|DS)Nc3s|]}|kVqdSr7r)r_entryrLrrrirOz&ShareableList.count..)sum)r3rMrrLrcountszShareableList.countcCs4t|D]\}}||kr|Sqt|ddS)Nz not in this container) enumerater)r3rMrrrrrindex s zShareableList.index)N)%r?rErFrlfloatboolrWrXr;r[r]r staticmethodrYr6rrrrrr<rr@rGrrorqrrrurvrwrr classmethodtypes GenericAlias__class_getitem__rrrrrsR I!        )__all__ functoolsrr(rr.rnr rr r-rrO_CREATrrrr rrrTrrrrrs,    E