U
    -ey                     @   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dgZ	ej
dkZej
dkZdd Ze jd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZddddZdd Zdd  Zd!d" Zd#d$ Zejd%e d&d' Zejd%e d(d) Zejd%e d*d+ Z ejd%e d,d- Z!dS ).    Nsystemjemallocmimalloclinuxwin32c                  c   s,   t jV  t  D ]} tt |  dV  qd S )NZ_memory_pool)padefault_memory_poolsupported_memory_backendsgetattr)backend r   Z/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pyarrow/tests/test_memory.pysupported_factories$   s    r   c                 c   sP   t jd| gt  | d}| d }d}t||ks:tz
dV  W 5 d}X dS )z>
    Temporarily allocate *nbytes* from the given *pool*.
       x)typeZmemory_pool   N)r   arraybinarybufferslenAssertionError)poolnbytesZarrbufr   r   r   allocate_bytes*   s    
r   c              	   C   sv   |   }|  }t| d2 |   |d ks0t|  }|  |ksHtW 5 Q R X |   |ksbt|  |ksrtdS )z+
    Check allocation stats on *pool*.
       N)bytes_allocatedZ
max_memoryr   r   )r   allocated_beforeZmax_mem_beforeZnew_max_memoryr   r   r   check_allocated_bytes;   s    r   c               	   C   s>   t  } t| d" t|  |  t  ks0tW 5 Q R X d S )Ni   )r   r   r   r   r   Ztotal_allocated_bytesr   r   r   r   r   test_default_allocated_bytesI   s    r    c                  C   sB   t t  } t|  t| }| d k	s.t~ | d ks>td S N)r   proxy_memory_poolr   r   weakrefrefr   )r   wrr   r   r   test_proxy_memory_poolP   s    
r&   c                 C   s\   t t  }t| |  \}}|dks.t|ddks@t|d|dksXtd S )N z	Allocate:r   zFree:)r   Zlogging_memory_poolr   r   Z
readouterrr   count)Zcapfdr   outerrr   r   r   test_logging_memory_poolY   s    r+   c               	   C   st   t  } t | }t | zF| }td d | |d ksFtW 5 Q R X | |ks`tW 5 t |  X d S )Nr   )r   r   r"   Zset_memory_poolr   r   r   )old_poolr   r   r   r   r   test_set_memory_poolb   s    

r-   c                  C   s   t  } | jtkstd S r!   )r   r   backend_namepossible_backendsr   r   r   r   r   test_default_backend_nameo   s    r0   c                  C   s   t  } |   d S r!   )r   r   Zrelease_unusedr   r   r   r   test_release_unusedt   s    r1   Fexpect_warningc                C   s   d|d}t tj}| |d< tjtjd|g|dtjd}|jdkr\t	|j
tj
d |  |j
 }|rt|d	ksztd
|  d|d kstnt|dkstd S )Nzpif 1:
        import pyarrow as pa

        pool = pa.default_memory_pool()
        assert pool.backend_name in z, pool.backend_name
        ZARROW_DEFAULT_MEMORY_POOL-cTenvuniversal_newlinesstderrr   file   zUnsupported backend '')dictosenviron
subprocessrunsys
executablePIPE
returncodeprintr8   check_returncode
splitlinesr   r   )nameexpectedr3   coder6   resZerrlinesr   r   r   check_env_vary   s    
 

rM   c                   C   s>   t ddg trt ddg tr,t ddg t dtdd d S )Nr   r   r   ZnonexistentTr2   )rM   should_have_jemallocshould_have_mimallocr/   r   r   r   r   test_env_var   s    rP   c                     sL   t   dd fdd
} | tjd | tjdt d | tjdt d d S )NF)can_failc                   sJ   |r(z
|  }W q. t k
r$   Y d S X n|  }|j|ks<t | d S r!   )NotImplementedErrorr.   r   add)factoryrI   rQ   r   Zspecific_poolsr   r   check   s    

z)test_specific_memory_pools.<locals>.checkr   r   r   )setr   Zsystem_memory_poolZjemalloc_memory_poolrN   Zmimalloc_memory_poolrO   )rV   r   rU   r   test_specific_memory_pools   s    rX   c                  C   s8   t  } d| ksttr$d| ks$ttr4d| ks4td S )Nr   r   r   )r   r	   r   rN   rO   )backendsr   r   r   test_supported_memory_backends   s    rZ   c                 C   sN   d|  d}t tj}||d< tjtjd|g|dtjd}t|j	tj	d |S )z
    Run a piece of code making an invalid memory write with the
    ARROW_DEBUG_MEMORY_POOL environment variable set to a specific value.
    a  if 1:
        import ctypes
        import pyarrow as pa
        # ARROW-16873: some Python installs enable faulthandler by default,
        # which could dump a spurious stack trace if the following crashes
        import faulthandler
        faulthandler.disable()

        pool = pa.z()
        buf = pa.allocate_buffer(64, memory_pool=pool)

        # Write memory out of bounds
        ptr = ctypes.cast(buf.address, ctypes.POINTER(ctypes.c_ubyte))
        ptr[64] = 0

        del buf
        ZARROW_DEBUG_MEMORY_POOLr4   Tr5   r9   )
r=   r>   r?   r@   rA   rB   rC   rD   rF   r8   )pool_factoryZ	env_valuerK   r6   rL   r   r   r   run_debug_memory_pool   s    
 r\   r[   c                 C   sJ   t | jd}tjdkr*|jtj ks8tn|jdks8td|jksFtd S )Nabortposixr   Wrong size on deallocation)	r\   __name__r>   rI   rE   signalSIGABRTr   r8   r[   rL   r   r   r   test_debug_memory_pool_abort   s
    
rd   c                 C   sJ   t | jd}tjdkr*|jtj ks8tn|jdks8td|jksFtd S )NZtrapr^   r   r_   )	r\   r`   r>   rI   rE   ra   SIGTRAPr   r8   rc   r   r   r   test_debug_memory_pool_trap   s
    
rf   c                 C   s&   t | jd}|  d|jks"td S )Nwarnr_   )r\   r`   rG   r8   r   rc   r   r   r   test_debug_memory_pool_warn   s    rh   c                 C   s@   t | jd}tjdkr&|jdks.tn|  |jdks<td S )Nr'   r^   r   )r\   r`   r>   rI   rE   r   rG   r8   rc   r   r   r   test_debug_memory_pool_disabled   s
    
ri   )"
contextlibr>   ra   r@   rB   r#   Zpyarrowr   Zpytestr/   platformrN   rO   r   contextmanagerr   r   r    r&   r+   r-   r0   r1   rM   rP   rX   rZ   r\   markZparametrizerd   rf   rh   ri   r   r   r   r   <module>   sB   



			

	
	
