U e5dDã@sªddgZddlmZddlZddlZddlZddlZddlZejdkrTddl Z dZ n ddl Z dZ ej ej BZdZe rzd Znd Zd d „ZGd d„dƒZdZGdd„dƒZdS)Ú SharedMemoryÚ ShareableListé)ÚpartialNÚntFTéz/psm_Zwnsm_cCs"tttƒd}tt |¡}|S)Né)Ú_SHM_SAFE_NAME_LENGTHÚlenÚ_SHM_NAME_PREFIXÚsecretsZ token_hex)ÚnbytesÚname©rú5/usr/lib64/python3.8/multiprocessing/shared_memory.pyÚ_make_filename&src@sˆeZdZdZdZdZdZejZ dZ e r*dndZ ddd„Z d d „Zd d „Zd d„Zedd„ƒZedd„ƒZedd„ƒZdd„Zdd„ZdS)rNéÿÿÿÿi€TFrc Csl|dkstdƒ‚|r0ttjB|_|dkr0tdƒ‚|dkrL|jtj@sLtdƒ‚t�rH|dkr tƒ}ztj ||j|j d�|_ Wnt k r’YqZYnX||_ qÎqZn.|jr®d|n|}tj ||j|j d�|_ ||_ z<|ræ|ræt |j |¡t |j ¡}|j}t |j |¡|_Wn tk �r*| ¡‚YnXddlm}||j d ƒ�n|�rþ|dk�r^tƒn|}t tjtjtj|d ?d @|d @|¡}zXt ¡}|tjk�rÌ|dk �rÄt t j!t "t j!¡|tjƒ‚nW¢�qNtjd ||d �|_W5t |¡X||_ �qV�qNnX||_ t #tj$d|¡}zt %|tj$ddd¡} W5t |¡Xt &| ¡}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é lÿÿr)ZtagnameF)*Ú ValueErrorÚ_O_CREXÚosÚO_RDWRÚ_flagsÚO_EXCLÚ _USE_POSIXrÚ _posixshmemZshm_openÚ_modeÚ_fdÚFileExistsErrorÚ_nameÚ_prepend_leading_slashÚ ftruncateÚfstatÚst_sizeÚmmapÚ_mmapÚOSErrorÚunlinkÚresource_trackerrÚ_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ CloseHandleZ GetLastErrorZERROR_ALREADY_EXISTSÚerrnoZEEXISTÚstrerrorZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySizeÚ_sizeÚ memoryviewÚ_buf) Úselfr ÚcreateÚsizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrrÚ__init__Is¦ ý  ý   ú   ü  ýû  zSharedMemory.__init__cCs&z | ¡Wntk r YnXdS©N)Úcloser*©r3rrrÚ__del__µs zSharedMemory.__del__cCs|j|jd|jffS)NF)Ú __class__r r5r9rrrÚ __reduce__»s ýþzSharedMemory.__reduce__cCs|jj›d|j›d|j›d�S)Nú(z, size=ú))r;Ú__name__r r5r9rrrÚ__repr__ÅszSharedMemory.__repr__cCs|jSr7)r2r9rrrÚbufÈszSharedMemory.bufcCs.|j}tr*|jr*|j d¡r*|jdd…}|S)Nrr)r#rr$Ú startswith)r3Z reported_namerrrr Ís   zSharedMemory.namecCs|jSr7)r0r9rrrr5ÖszSharedMemory.sizecCsX|jdk r|j ¡d|_|jdk r4|j ¡d|_trT|jdkrTt |j¡d|_dS)Nrr)r2Úreleaser)r8rr!rr9rrrr8Ûs     zSharedMemory.closecCs2tr.|jr.ddlm}t |j¡||jdƒdS)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+rrrrr0s&  l     Úutf8c @s eZdZedededededdjdiZ dZ dd „d d „d d „d d „d œZ e dd„ƒZ d5ddœdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZed-d.„ƒZed/d0„ƒZd1d2„Zd3d4„Z dS)6rÚqÚdzxxxxxxx?z%dsNzxxxxxx?xécCs|Sr7r©ÚvaluerrrÚ ózShareableList.cCs| d¡ t¡S©Nó)ÚrstripÚdecodeÚ _encodingrLrrrrN rOcCs | d¡SrP)rRrLrrrrN rOcCsdSr7r)Z_valuerrrrN rO)rrrécCs:t|ttdjfƒsdSt|tƒr$dSt|tƒr2dSdSdS)NrrrrU)Ú isinstanceÚstrÚbytesr;rLrrrÚ_extract_recreation_codes  z&ShareableList._extract_recreation_code©r csr|dk rv‡fdd„|Dƒ}t|ƒˆ_t‡fdd„|Dƒƒˆ_‡fdd„|Dƒ}t dˆjd |¡ˆjˆj ¡}nd}|dk r–|dkr–t |ƒˆ_ nt |d |d �ˆ_ |dk �rNt ‰tj dˆjˆj jd ˆjfˆjžŽtj d |¡ˆj jˆjf‡fd d„|DƒžŽtj ˆjˆj jˆjf‡fd d„|DƒžŽtj ˆj ˆj jˆjf|žŽn tˆƒˆ_t ˆjˆj jd¡ˆ_dS)NcsPg|]H}t|ttfƒs$ˆjt|ƒn&ˆjt|ƒˆjt|ƒˆjdf‘qS)r)rVrWrXÚ_types_mappingÚtypeÚ _alignmentr ©Ú.0Úitemr9rrÚ s ü ÿ ÿz*ShareableList.__init__..c3s0|](}|ddkrˆjnt|dd…ƒVqdS)rÚsN)r]Úint)r_Úfmtr9rrÚ *sÿz)ShareableList.__init__..csg|]}ˆ |¡‘qSr)rYr^r9rrra.srIÚrKT)r4r5rc3s&|]}t|tƒr| ˆ¡n|VqdSr7)rVrWÚencode©r_Úv©Ú_encrrreMsc3s|]}| ˆ¡VqdSr7)rgrhrjrrreSs)r Ú _list_lenÚtupleÚ_allocated_bytesÚstructZcalcsizeÚ_format_size_metainfoÚjoinÚ_format_packing_metainfoÚ_format_back_transform_codesrÚshmrTÚ pack_intorAÚ_offset_data_startÚ_offset_packing_formatsÚ_offset_back_transform_codesÚ unpack_from)r3Zsequencer Z_formatsZ_recreation_codesZrequested_sizer)rkr3rr6sz ú  þ  ÿÿþýÿ  üûýüýüýü ýzShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdƒ‚t d|jj|j|d¡d}| d¡}| t ¡}|S)Nrú Requested position out of range.Ú8srKrQ) rlÚ IndexErrorroryrtrArwrRrSrT)r3ÚpositionrirdÚ fmt_as_strrrrÚ_get_packing_formatds ýü  z!ShareableList._get_packing_formatcCs\|dkr |n||j}||jks*|jdkr2tdƒ‚t d|jj|j|¡d}|j|}|S)NrrzÚb)rlr|roryrtrArxÚ_back_transforms_mapping)r3r}Útransform_codeZtransform_functionrrrÚ_get_back_transformtsýü z!ShareableList._get_back_transformcCs~|dkr |n||j}||jks*|jdkr2tdƒ‚t d|jj|j|d| t¡¡|  |¡}t d|jj|j ||¡dS)Nrrzr{rKr€) rlr|rorurtrArwrgrTrYrx)r3r}r~rMr‚rrrÚ!_set_packing_format_and_transform„s  ü üz/ShareableList._set_packing_format_and_transformcCsjz6|jt|jd|…ƒ}t | |¡|jj|¡\}Wntk rRtdƒ‚YnX|  |¡}||ƒ}|S)Nzindex out of range) rvÚsumrnroryrrtrAr|rƒ)r3r}ÚoffsetriZback_transformrrrÚ __getitem__›sÿý  zShareableList.__getitem__cCsæz&|jt|jd|…ƒ}| |¡}Wntk rBtdƒ‚YnXt|ttfƒsf|jt |ƒ}|}nZt|tƒrz|  t ¡n|}t |ƒ|j|kr˜t dƒ‚|ddkrª|}n|jt|j|f}| |||¡t ||jj||¡dS)Nzassignment index out of rangez(bytes/str item exceeds available storagerrb)rvr…rnrr|rVrWrXr[r\rgrTr rr„rorurtrA)r3r}rMr†Zcurrent_formatZ new_formatZ encoded_valuerrrÚ __setitem__¬s6ÿÿ ÿ ÿýzShareableList.__setitem__cCst|j|jjd�dfS)NrZr)rr;rtr r9rrrr<ÊszShareableList.__reduce__cCst d|jjd¡dS)NrIr)roryrtrAr9rrrÚ__len__ÍszShareableList.__len__cCs"|jj›dt|ƒ›d|jj›d�S)Nr=z, name=r>)r;r?Úlistrtr r9rrrr@ÐszShareableList.__repr__csd ‡fdd„tˆjƒDƒ¡S)Nrfc3s|]}ˆ |¡VqdSr7)r)r_Úir9rrreÖsz'ShareableList.format..)rqÚrangerlr9rr9rÚformatÓsÿzShareableList.formatcCs |j›d�S)NrI©rlr9rrrrpÚsz#ShareableList._format_size_metainfocCs d|jS)Nr{rŽr9rrrrrßsz&ShareableList._format_packing_metainfocCs d|jS)Nr€rŽr9rrrrsäsz*ShareableList._format_back_transform_codescCs|jddS)NrrKrŽr9rrrrvész ShareableList._offset_data_startcCs|jt|jƒSr7)rvr…rnr9rrrrwísz%ShareableList._offset_packing_formatscCs|j|jdS)NrK)rwrlr9rrrrxñsz*ShareableList._offset_back_transform_codescst‡fdd„|DƒƒS)Nc3s|]}ˆ|kVqdSr7r)r_ÚentryrLrrreøsz&ShareableList.count..)r…)r3rMrrLrÚcountõszShareableList.countcCs4t|ƒD]\}}||kr|Sqt|›d�ƒ‚dS)Nz not in this container)Ú enumerater)r3rMr}r�rrrÚindexús zShareableList.index)N)!r?rErFrcÚfloatÚboolrWrXr;r[r]r�Ú staticmethodrYr6rrƒr„r‡rˆr<r‰r@rGr�rprrrsrvrwrxr�r’rrrrrös\ úü F       )Ú__all__Ú functoolsrr(rr.ror r r-rrÚO_CREATrrrr rrrTrrrrrÚs*    E