o
    €¨ÊhÂ#  ã                   @   sì   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZmZ dgZejd  dkZejd	krQG d
d„ dƒZnG dd„ dƒZdd„ Zdd„ Ze
 ee¡ G dd„ dƒZG dd„ dƒZdS )é    Né   )Úcontext)Ú	reduction)Úutil)Ú	_billiardÚwin32ÚBufferWrapperé   r   c                   @   s,   e Zd Ze ¡ Zdd„ Zdd„ Zdd„ ZdS )ÚArenac                 C   s„   || _ tdƒD ]!}dt ¡ t| jƒf }tjd||d�}t ¡ dkr$ n| 	¡  qt
dƒ}tj|_|‚|| _|| _| j | jf| _d S )Néd   z	pym-%d-%séÿÿÿÿ©Útagnamer   zCannot find name for new mmap)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapr   ÚGetLastErrorÚcloseÚIOErrorÚerrnoÚEEXISTÚnameÚbufferÚ_state)Úselfr   Úir   ÚbufÚexc© r"   ú?/var/www/html/env/lib/python3.10/site-packages/billiard/heap.pyÚ__init__'   s   
úArena.__init__c                 C   s   t  | ¡ | jS ©N)r   Úassert_spawningr   ©r   r"   r"   r#   Ú__getstate__8   s   
zArena.__getstate__c                 C   s,   | \| _ | _| _tjd| j | jd�| _d S )Nr   r   )r   r   r   r   r   )r   Ústater"   r"   r#   Ú__setstate__<   s   zArena.__setstate__N)	Ú__name__Ú
__module__Ú__qualname__ÚtempfileÚ_RandomNameSequencer   r$   r)   r+   r"   r"   r"   r#   r
   #   s
    r
   c                   @   s   e Zd Zddd„ZdS )r
   r   c                 C   sD  || _ || _|dkr—trptjdt ¡ f t ¡ d�\| _}t 	|¡ t 
| tj| jf¡ tj| jddd��2}d}||krOd| }t|| ƒD ]}| |¡ qF~| d||  ¡ | ¡ |ks`J ‚W d   ƒ n1 sjw   Y  n'tjdt ¡ f t ¡ d�\| _}t 	|¡ t 
| tj| jf¡ t | j|¡ t | j| j ¡| _d S )	Nr   zpym-%d-)ÚprefixÚdirÚwbF)Úclosefdi   ó    )r   ÚfdÚPY3r/   Úmkstempr   r   r   Úget_temp_dirÚunlinkÚFinalizer   ÚioÚopenr   ÚwriteÚtellÚ	ftruncater   r   )r   r   r6   r   ÚfÚbsÚzerosÚ_r"   r"   r#   r$   G   s:   þ
ø€
þ
r%   N)r   )r,   r-   r.   r$   r"   r"   r"   r#   r
   E   s    c                 C   s(   | j dkr	tdƒ‚t| jt | j ¡ffS )Nr   zCArena is unpicklable becauseforking was enabled when it was created)r6   Ú
ValueErrorÚrebuild_arenar   r   ÚDupFd)Úar"   r"   r#   Úreduce_arenaf   s   
rI   c                 C   s   t | | ¡ ƒS r&   )r
   Údetach)r   Údupfdr"   r"   r#   rF   l   s   rF   c                   @   sZ   e Zd ZdZejfdd„Zedd„ ƒZdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚHeapé   c                 C   sJ   t  ¡ | _t ¡ | _|| _g | _i | _i | _	i | _
tƒ | _g | _g | _d S r&   )r   r   Ú_lastpidÚ	threadingÚLockÚ_lockÚ_sizeÚ_lengthsÚ_len_to_seqÚ_start_to_blockÚ_stop_to_blockÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocks)r   r   r"   r"   r#   r$   z   s   


zHeap.__init__c                 C   s   |d }| | | @ S ©Nr   r"   )ÚnÚ	alignmentÚmaskr"   r"   r#   Ú_roundup‡   s   zHeap._roundupc           	      C   sÀ   t  | j|¡}|t| jƒkr5|  t| j|ƒtj¡}|  jd9  _t	 
d|¡ t|ƒ}| j |¡ |d|fS | j| }| j| }| ¡ }|sM| j|= | j|= |\}}}| j||f= | j||f= |S )Né   z"allocating a new mmap of length %dr   )ÚbisectÚbisect_leftrS   Úlenr_   ÚmaxrR   r   ÚPAGESIZEr   Úinfor
   rY   ÚappendrT   ÚpoprU   rV   )	r   r   r   ÚlengthÚarenaÚseqÚblockÚstartÚstopr"   r"   r#   Ú_malloc�   s"   



zHeap._mallocc           	      C   sæ   |\}}}z	| j ||f }W n	 ty   Y nw |  |¡\}}z	| j||f }W n	 ty1   Y nw |  |¡\}}|||f}|| }z
| j|  |¡ W n tyb   |g| j|< t | j|¡ Y nw || j||f< || j ||f< d S r&   )	rV   ÚKeyErrorÚ_absorbrU   rT   rg   ra   ÚinsortrS   )	r   rl   rj   rm   rn   Ú
prev_blockrD   Ú
next_blockri   r"   r"   r#   Ú_free£   s.   
ÿÿ
þz
Heap._freec                 C   s^   |\}}}| j ||f= | j||f= || }| j| }| |¡ |s+| j|= | j |¡ ||fS r&   )rU   rV   rT   ÚremoverS   )r   rl   rj   rm   rn   ri   rk   r"   r"   r#   rq   Á   s   


zHeap._absorbc                 C   s>   	 z| j  ¡ }W n
 ty   Y d S w | j |¡ |  |¡ qr&   )rZ   rh   Ú
IndexErrorrX   rv   ru   ©r   rl   r"   r"   r#   Ú_free_pending_blocksÐ   s   ÿ
úzHeap._free_pending_blocksc                 C   sj   t  ¡ | jks	J ‚| j d¡s| j |¡ d S z|  ¡  | j 	|¡ |  
|¡ W | j ¡  d S | j ¡  w )NF)r   r   rN   rQ   ÚacquirerZ   rg   ry   rX   rv   ru   Úreleaserx   r"   r"   r#   ÚfreeÚ   s   z	Heap.freec                 C   sÄ   d|  krt jk sJ ‚ J ‚t ¡ | jkr|  ¡  | j�; |  ¡  |  t	|dƒ| j
¡}|  |¡\}}}|| }||k rD|  |||f¡ |||f}| j |¡ |W  d   ƒ S 1 s[w   Y  d S )Nr   r   )ÚsysÚmaxsizer   r   rN   r$   rQ   ry   r_   rd   Ú
_alignmentro   ru   rX   Úadd)r   r   rj   rm   rn   Únew_stoprl   r"   r"   r#   Úmallocó   s   
$÷zHeap.mallocN)r,   r-   r.   r   r   re   r$   Ústaticmethodr_   ro   ru   rq   ry   r|   r‚   r"   r"   r"   r#   rL   v   s    

rL   c                   @   s2   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c                 C   sN   d|  krt jk sJ ‚ J ‚tj |¡}||f| _tj| tjj|fd� d S )Nr   )Úargs)	r}   r~   r   Ú_heapr‚   r   r   r;   r|   )r   r   rl   r"   r"   r#   r$     s   
zBufferWrapper.__init__c                 C   s4   | j \\}}}}t |j¡\}}||ksJ ‚|| S r&   )r   r   Úaddress_of_bufferr   )r   rj   rm   rn   r   Úaddressri   r"   r"   r#   Úget_address  s   zBufferWrapper.get_addressc                 C   s
   | j d S r[   )r   r(   r"   r"   r#   Úget_size  s   
zBufferWrapper.get_sizec                 C   s&   | j \\}}}}t|jƒ||| … S r&   )r   Ú
memoryviewr   )r   rj   rm   rn   r   r"   r"   r#   Úcreate_memoryview  s   zBufferWrapper.create_memoryviewN)	r,   r-   r.   rL   r…   r$   rˆ   r‰   r‹   r"   r"   r"   r#   r     s    )ra   r   r<   r   r   r}   rO   r/   Ú r   r   r   Ú_extr   r   Ú__all__Úversion_infor7   Úplatformr
   rI   rF   ÚregisterrL   r   r"   r"   r"   r#   Ú<module>   s.   	
"! 