o
    Gh&                     @   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m	Z	 d dl
Z
e
jjZg dZddgZdd 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#d-d. Z$e
j d&e d/d0 Z%e
j d&e d1d2 Z&e
j d&e d3d4 Z'e
j d&e d5d6 Z(dS )7    N)util)systemjemallocmimallocr   r   c                 C   s   t t|  dS )N_memory_pool)getattrpabackend_name r   Z/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/pyarrow/tests/test_memory.pybackend_factory&   s   r   c                  c   s&    t jV  t  D ]} t| V  q	d S N)r   default_memory_poolsupported_memory_backendsr   r	   r   r   r   supported_factories*   s
   r   c                 c   sT    t jd| gt  | d}| d }d}t||ksJ zdV  W d}dS d}w )z>
    Temporarily allocate *nbytes* from the given *pool*.
       x)typememory_pool   N)r   arraybinarybufferslen)poolnbytesarrbufr   r   r   allocate_bytes0   s   r   c                 C   s   |   }|  }|  }t| d0 |   |d ksJ |  }|  |ks(J |  }||ks2J ||d k s:J W d   n1 sDw   Y  |   |ksQJ |  |ksYJ |  |ksaJ dS )z+
    Check allocation stats on *pool*.
          N)bytes_allocated
max_memorynum_allocationsr   )r   allocated_beforemax_mem_beforenum_allocations_beforenew_max_memorynum_allocations_afterr   r   r   check_allocated_bytesA   s   r)   c                  C   sT   t  } t| d t|  |  t  ksJ W d    d S 1 s#w   Y  d S )Ni   )r   r   r   r)   r!   total_allocated_bytesr   r   r   r   test_default_allocated_bytesT   s
   "r,   c                  C   sB   t t  } t|  t| }| d usJ ~ | d u sJ d S r   )r   proxy_memory_poolr   r)   weakrefref)r   wrr   r   r   test_proxy_memory_pool[   s   
r1   c                 C   s\   t t  }t| |  \}}|dksJ |ddks J |d|dks,J d S )N z	Allocate:r   zFree:)r   logging_memory_poolr   r)   
readouterrcount)capfdr   outerrr   r   r   test_logging_memory_poold   s   r9   c               	   C   s   t  } t | }t | z3| }td d | |d ks#J W d    n1 s-w   Y  | |ks:J W t |  d S t |  w )Nr   )r   r   r-   set_memory_poolr!   r   )old_poolr   r$   r   r   r   test_set_memory_poolm   s   

r<   c                  C   s   t  } | jtv sJ d S r   )r   r   r
   possible_backendsr+   r   r   r   test_default_backend_namez   s   r>   c                  C   s   t  } |   d S r   )r   r   release_unusedr+   r   r   r   test_release_unused   s   r@   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
 }|rgt|d	v s=J t|d
krQd|  d|d v sOJ d S d|d v sYJ d|  d|d
 v seJ d S t|dksoJ d S )Nzpif 1:
        import pyarrow as pa

        pool = pa.default_memory_pool()
        assert pool.backend_name in z, pool.backend_name
        ARROW_DEFAULT_MEMORY_POOL-cTenvuniversal_newlinesstderrr   file)   r   rK   zUnsupported backend ''zInitGoogleLogging())dictosenviron
subprocessrunsys
executablePIPE
returncodeprintrH   check_returncode
splitlinesr   )nameexpectedrB   coderF   reserrlinesr   r   r   check_env_var   s&   


r^   c                  C   s(   t D ]} t| | g qtdtdd d S )NnonexistentTrA   )mandatory_backendsr^   r=   r	   r   r   r   test_env_var   s   ra   c                  C   s2   dddd} t D ]}| t|||tvd q	d S )NF)can_failc                S   s<   |rz|  }W n t y   Y d S w |  }|j|ksJ d S r   )NotImplementedErrorr
   )factoryrY   rb   r   r   r   r   check   s   
z)test_memory_pool_factories.<locals>.check)r=   r   r`   )re   r
   r   r   r   test_memory_pool_factories   s   

rf   c                  C   s4   t  } t| ttksJ t| ttksJ d S r   )r   r   setr`   r=   )backendsr   r   r   test_supported_memory_backends   s   ri   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
        ARROW_DEBUG_MEMORY_POOLrD   TrE   rI   )
rM   rN   rO   rP   rQ   rR   rS   rT   rV   rH   )pool_factory	env_valuer[   rF   r\   r   r   r   run_debug_memory_pool   s   
rm   rk   c                 C   J   t | jd}tjdkr|jtj ksJ n|jdksJ d|jv s#J d S )Nabortposixr   Wrong size on deallocation)rm   __name__rN   rY   rU   signalSIGABRTrH   rk   r\   r   r   r   test_debug_memory_pool_abort   
   
rv   c                 C   rn   )Ntraprp   r   rq   )rm   rr   rN   rY   rU   rs   SIGTRAPrH   ru   r   r   r   test_debug_memory_pool_trap   rw   rz   c                 C   s&   t | jd}|  d|jv sJ d S )Nwarnrq   )rm   rr   rW   rH   ru   r   r   r   test_debug_memory_pool_warn   s   r|   c                 C   sn   t jdk r
td t| j|}tjdkr|jdksJ n|	  |dkr.|j
dks,J d S ||j
v s5J d S )Nl        z!Test may fail on 32-bit platformsrp   r   r2   )rR   maxsizepytestskiprm   rr   rN   rY   rU   rW   rH   )rk   rl   msgr\   r   r   r    check_debug_memory_pool_disabled   s   


r   c                 C   s   t | dd d S )Nnoner2   r   rk   r   r   r   test_debug_memory_pool_none     r   c                 C   s   t | dd d S )Nr2   r   r   r   r   r   test_debug_memory_pool_empty  r   r   c                 C   s    d}d| d}t | || d S )Nsome_arbitrary_valuez,Invalid value for ARROW_DEBUG_MEMORY_POOL: 'z4'. Valid values are 'abort', 'trap', 'warn', 'none'.r   )rk   rl   r   r   r   r   test_debug_memory_pool_unknown  s   
r   c                 C   s^   d| j  d}tjtjd|gddtjtjd}tjdkr)t s+|j	
 dks-J d S d S d S )Nz6if 1:
        import pyarrow as pa

        pool = pa.z]()
        buf = pa.allocate_buffer(64, memory_pool=pool)
        pool.print_stats()
        rD   T)re   rG   stdoutrH   linuxr2   )rr   rP   rQ   rR   rS   rT   platformr   running_on_musllinuxrH   strip)rk   r[   r\   r   r   r   test_print_stats  s   r   ))
contextlibrN   rs   rP   rR   r.   pyarrowr   pyarrow.testsr   r~   mark	processes
pytestmarkr=   r`   r   r   contextmanagerr   r)   r,   r1   r9   r<   r>   r@   r^   ra   rf   ri   rm   parametrizerv   rz   r|   r   r   r   r   r   r   r   r   r   <module>   sV   
		
	
	



	