3 Õì2a ã@sÆddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dgZ ej dkrvddl Z Gdd„deƒZn,Gd d„deƒZd d „Zd d „ZejeeƒGdd„deƒZGdd„deƒZdS)éNé)Ú reductionÚassert_spawning)ÚutilÚ BufferWrapperÚwin32c@s,eZdZejƒZdd„Zdd„Zdd„ZdS)ÚArenacCsz||_xTtdƒD]@}dtjƒt|jƒf}tjd||d�}tjƒdkrHP|j ƒqWt dƒ‚||_ ||_ |j|j f|_ dS)Nédz pym-%d-%sr)ÚtagnamerzCannot find name for new mmapéÿÿÿÿ)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapÚ_winapiZ GetLastErrorÚcloseÚFileExistsErrorÚnameÚbufferÚ_state)Úselfr ÚirÚbuf©rú)/opt/alt/python36/lib64/python3.6/heap.pyÚ__init__"s  zArena.__init__cCst|ƒ|jS)N)rr)rrrrÚ __getstate__1szArena.__getstate__cCs,|\|_|_|_tjd|j|jd�|_dS)Nr)r r )r rrrr)rÚstaterrrÚ __setstate__5szArena.__setstate__N) Ú__name__Ú __module__Ú __qualname__ÚtempfileZ_RandomNameSequencerrrr!rrrrrsrc@seZdZddd„ZdS)rrc CsÌ||_||_|d kr¶tjdtjƒtjƒd�\|_}tj|ƒtj |tj |jfƒt |jddd��N}d }||kršd|}xt ||ƒD]}|j |ƒq†W~|j d||ƒWdQRXtj|j|jƒ|_dS) Nrzpym-%d-)ÚprefixÚdirÚwbF)Úclosefdiór i)r Úfdr%ZmkstemprrrZ get_temp_dirÚunlinkÚFinalizerÚopenr Úwriterr)rr r+rÚfÚbsZzerosÚ_rrrr@s"  zArena.__init__Nr )r )r"r#r$rrrrrr>scCs(|jdkrtdƒ‚t|jtj|jƒffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r+Ú ValueErrorÚ rebuild_arenar rZDupFd)ÚarrrÚ reduce_arenaSs r6cCst||jƒƒS)N)rÚdetach)r Zdupfdrrrr4Ysr4c@sZeZdZdZejfdd„Zedd„ƒZdd„Z dd „Z d d „Z d d „Z dd„Z dd„ZdS)ÚHeapécCsJtjƒ|_tjƒ|_||_g|_i|_i|_ i|_ t ƒ|_ g|_ g|_dS)N)rrÚ_lastpidÚ threadingZLockÚ_lockÚ_sizeÚ_lengthsÚ _len_to_seqÚ_start_to_blockÚ_stop_to_blockÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocks)rr rrrrfs  z Heap.__init__cCs|d}|||@S)Nrr)ÚnZ alignmentÚmaskrrrÚ_roundupssz Heap._roundupc CsÀtj|j|ƒ}|t|jƒkrj|jt|j|ƒtjƒ}|jd9_t j d|ƒt |ƒ}|j j |ƒ|d|fS|j|}|j|}|jƒ}|sš|j|=|j|=|\}}}|j||f=|j||f=|S)Néz"allocating a new mmap of length %dr)ÚbisectZ bisect_leftr>ÚlenrHÚmaxr=rÚPAGESIZErÚinforrDÚappendr?Úpopr@rA) rr rÚlengthÚarenaÚseqÚblockÚstartÚstoprrrÚ_mallocys"        z Heap._mallocc Csì|\}}}y|j||f}Wntk r0YnX|j|ƒ\}}y|j||f}Wntk rfYnX|j|ƒ\}}|||f}||}y|j|j|ƒWn.tk rÊ|g|j|<tj|j|ƒYnX||j||f<||j||f<dS)N) rAÚKeyErrorÚ_absorbr@r?rOrJZinsortr>) rrTrRrUrVZ prev_blockr2Z next_blockrQrrrÚ_free�s(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j|ƒ|sV|j|=|jj|ƒ||fS)N)r@rAr?Úremover>)rrTrRrUrVrQrSrrrrY­s      z Heap._absorbc CsFx@y|jjƒ}Wntk r&PYnX|jj|ƒ|j|ƒqWdS)N)rErPÚ IndexErrorrCr[rZ)rrTrrrÚ_free_pending_blocks¼s zHeap._free_pending_blocksc CsN|jjdƒs|jj|ƒn0z"|jƒ|jj|ƒ|j|ƒWd|jjƒXdS)NF) r<ÚacquirerErOr]rCr[rZÚrelease)rrTrrrÚfreeÆs  z Heap.freec CsŽtjƒ|jkr|jƒ|j�h|jƒ|jt|dƒ|jƒ}|j |ƒ\}}}||}||krj|j |||fƒ|||f}|j j |ƒ|SQRXdS)Nr) rrr:rr<r]rHrLÚ _alignmentrWrZrCÚadd)rr rRrUrVZnew_stoprTrrrÚmallocÞs  z Heap.mallocN)r"r#r$rarrMrÚ staticmethodrHrWrZrYr]r`rcrrrrr8bs  r8c@s"eZdZeƒZdd„Zdd„ZdS)rcCs0tjj|ƒ}||f|_tj|tjj|fd�dS)N)Úargs)rÚ_heaprcrrr-r`)rr rTrrrrös  zBufferWrapper.__init__cCs&|j\\}}}}t|jƒ|||…S)N)rÚ memoryviewr)rrRrUrVr rrrÚcreate_memoryviewüszBufferWrapper.create_memoryviewN)r"r#r$r8rfrrhrrrrròs)rJrrÚsysr%r;ÚcontextrrÚrÚ__all__ÚplatformrÚobjectrr6r4Úregisterr8rrrrrÚ s$