a  zeG@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)nbytesnamerQ/opt/bitninja-python-dojo/embedded/lib/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_EXISTSerrnoEEXISTstrerrorZ CloseHandleZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySize_size memoryview_buf) selfr createsizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Js             zSharedMemory.__init__cCs$z |WntyYn0dSN)closer*r4rrr__del__s  zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__r r6r:rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r<__name__r r6r:rrr__repr__szSharedMemory.__repr__cCs|jSr8)r3r:rrrbufszSharedMemory.bufcCs.|j}tr*|jr*|jdr*|jdd}|S)Nrr)r#rr$ startswith)r4Z reported_namerrrr s   zSharedMemory.namecCs|jSr8)r1r:rrrr6szSharedMemory.sizecCsX|jdur|jd|_|jdur4|jd|_trT|jdkrTt|jd|_dS)Nrr)r3releaser)r9rr!rr:rrrr9s     zSharedMemory.closecCs2tr.|jr.ddlm}t|j||jddS)Nr) unregisterr)rr#r,rErZ shm_unlink)r4rErrrr+s   zSharedMemory.unlink)NFr)r@ __module__ __qualname__r#r!r)r3rrrr rr$r7r;r=rApropertyrBr r6r9r+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|Sr8rvaluerrrzShareableList.cCs|dtSN)rstripdecode _encodingrMrrrrOrPcCs |dSrQ)rSrMrrrrOrPcCsdSr8r)_valuerrrrOrP)rrrcCs:t|ttdjfsdSt|tr$dSt|tr2dSdSdS)NrrrrW) isinstancestrbytesr<rMrrr_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)rXrYrZ_types_mappingtype _alignmentr .0itemr:rr +s   z*ShareableList.__init__..rrscsg|]}|qSr)r[r`r:rrrc=srJT)r5r6c3s&|]}t|tr|n|VqdSr8)rXrYencoderav_encrr XrPz)ShareableList.__init__..c3s|]}|VqdSr8)rfrgrirrrk^rPrL)r _list_len_allocated_offsetsr_intappendstructcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrU pack_intorB_offset_data_start_offset_packing_formats_offset_back_transform_codeslist unpack_from)r4Zsequencer Z_formatsoffsetfmtZ_recreation_codesZrequested_sizer)rjr4rr7(s  &     zShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdtd|jj|j|dd}|d}|t }|S)Nr Requested position out of range.8srLrR) rl IndexErrorrpr|rvrBryrSrTrU)r4positionrhr~ fmt_as_strrrr_get_packing_formatqs   z!ShareableList._get_packing_formatcCsF||jks|jdkrtdtd|jj|j|d}|j|}|S)Nrrb)rlrrpr|rvrBrz_back_transforms_mapping)r4rtransform_codeZtransform_functionrrr_get_back_transforms z!ShareableList._get_back_transformcCsh||jks|jdkrtdtd|jj|j|d|t| |}td|jj|j ||dS)NrrrrLr) rlrrprwrvrBryrfrUr[rz)r4rrrNrrrr!_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) rlrxrmrpr|rrvrBrr)r4rr}rhZback_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 storagerrd)rlrmrxrrrXrYrZr]r^rfrUr rrrprwrvrB) r4rrNZ item_offsetr}Zcurrent_formatZ new_formatZ encoded_valueZallocated_lengthrrr __setitem__s8      zShareableList.__setitem__cCst|j|jjddfS)Nr\r)rr<rvr r:rrrr=szShareableList.__reduce__cCstd|jjddS)NrJr)rpr|rvrBr:rrr__len__szShareableList.__len__cCs"|jjdt|d|jjdS)Nr>z, name=r?)r<r@r{rvr r:rrrrAszShareableList.__repr__csdfddtjDS)Nrec3s|]}|VqdSr8)r)rair:rrrksz'ShareableList.format..)rsrangerlr:rr:rformatszShareableList.formatcCsd|jdS)NrJrrlr:rrrrrsz#ShareableList._format_size_metainfocCs d|jS)Nrrr:rrrrtsz&ShareableList._format_packing_metainfocCs d|jS)Nrrr:rrrrusz*ShareableList._format_back_transform_codescCs|jddS)NrrLrr:rrrrxsz ShareableList._offset_data_startcCs|j|jdS)Nr)rxrmr:rrrrysz%ShareableList._offset_packing_formatscCs|j|jdS)NrL)ryrlr:rrrrzsz*ShareableList._offset_back_transform_codescstfdd|DS)Nc3s|]}|kVqdSr8r)raentryrMrrrkrPz&ShareableList.count..)sum)r4rNrrMrcountszShareableList.countcCs4t|D]\}}||kr|Sqt|ddS)Nz not in this container) enumerater)r4rNrrrrrindex s zShareableList.index)N)%r@rFrGrnfloatboolrYrZr<r]r_r staticmethodr[r7rrrrrr=rrArHrrrrtrurxryrzrr classmethodtypes GenericAlias__class_getitem__rrrrrsR I!        )__all__ functoolsrr(rr.rpr rr r-rrO_CREATrrrr rrrUrrrrrs,    E