
    g"                     :   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	Z	e	j                  j                  Zg dZej                  dk(  xr  ej                         dk(  Zej                  dk(  Zd Ze j$                  d        Zd Zd	 Zd
 Zd Zd Zd Zd ZdddZd Zd Zd Zd Ze	j                  jA                  d e             d        Z!e	j                  jA                  d e             d        Z"e	j                  jA                  d e             d        Z#d Z$e	j                  jA                  d e             d        Z%e	j                  jA                  d e             d        Z&e	j                  jA                  d e             d        Z'y)    N)systemjemallocmimalloclinuxx86_64win32c               #      K   t         j                   t        j                         D ]  } t        t         |  d        y w)N_memory_pool)padefault_memory_poolsupported_memory_backendsgetattr)backends    N/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_memory.pysupported_factoriesr   &   s9     

 
  //1bWI\233 2s   AAc              #      K   t        j                  d|z  gt        j                         |       }|j                         d   }d}t	        |      |k(  sJ 	 d d}y# d}w xY ww)z>
    Temporarily allocate *nbytes* from the given *pool*.
       x)typememory_pool   N)r   arraybinarybufferslen)poolnbytesarrbufs       r   allocate_bytesr   ,   sa     
 ((D6M?$
GC ++-
C
Cs8vds   AA%A A%A""A%c                 V   | j                         }| j                         }t        | d      5  | j                         |dz   k(  sJ | j                         }| j                         |k\  sJ 	 ddd       | j                         |k(  sJ | j                         k(  sJ y# 1 sw Y   4xY w)z+
    Check allocation stats on *pool*.
       N)bytes_allocated
max_memoryr   )r   allocated_beforemax_mem_beforenew_max_memorys       r   check_allocated_bytesr'   =   s     ++-__&N	c	"##%)9C)????* N222 
# !%5555??... 
#	"s   >BB(c                      t        j                         } t        | d      5  t        |        | j	                         t        j
                         k(  sJ 	 d d d        y # 1 sw Y   y xY w)Ni   )r   r   r   r'   r"   total_allocated_bytesr   s    r   test_default_allocated_bytesr+   K   sN    !!#D	d	#d###%)A)A)CCCC 
$	#	#s   3AA'c                      t        j                  t        j                               } t        |        t	        j
                  |       } |       J ~  |       J y N)r   proxy_memory_poolr   r'   weakrefref)r   wrs     r   test_proxy_memory_poolr2   R   sN     6 6 89D$	T	B44<<    c                    t        j                  t        j                               }t        |       | j	                         \  }}|dk(  sJ |j                  d      dkD  sJ |j                  d      |j                  d      k(  sJ y )N z	Allocate:r   zFree:)r   logging_memory_poolr   r'   
readouterrcount)capfdr   outerrs       r   test_logging_memory_poolr<   [   sx    !!""8"8":;D$!HC"9999[!A%%%99[!SYYw%7777r3   c                     t        j                         } t        j                  |       }t        j                  |       	 |j	                         }t        d d      5  |j	                         |dz   k(  sJ 	 d d d        |j	                         |k(  sJ 	 t        j                  |        y # 1 sw Y   5xY w# t        j                  |        w xY w)Nr!   )r   r   r.   set_memory_poolr"   r   )old_poolr   r$   s      r   test_set_memory_poolr@   d   s    %%'H)Dt%//1D#&'')-=-CCCC '##%)9999
8$	 '& 	8$s$    B6 B*6B6 *B3/B6 6Cc                  T    t        j                         } | j                  t        v sJ y r-   )r   r   backend_namepossible_backendsr*   s    r   test_default_backend_namerD   q   s%    !!#D 1111r3   c                  L    t        j                         } | j                          y r-   )r   r   release_unusedr*   s    r   test_release_unusedrG   v   s    !!#Dr3   Fexpect_warningc                    d|d}t        t        j                        }| |d<   t        j                  t
        j                  d|g|dt        j                        }|j                  dk7  r5t        |j                  t
        j                         |j                          |j                  j                         }|rBt        |      d	v sJ t        |      d
k(  rd|  d|d   v sJ d|d   v sJ d|  d|d
   v sJ y y t        |      dk(  sJ y )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   rS   zUnsupported backend ''zInitGoogleLogging())dictosenviron
subprocessrunsys
executablePIPE
returncodeprintrP   check_returncode
splitlinesr   )nameexpectedrI   coderN   reserrliness          r   check_env_varrf   {   s   % &.L 1		D rzz
C'+C#$
..#..$53,0JC
~~cjjszz*zz$$&H8}&&&x=A*4&2hqkAAA )HQK777*4&2hqkAAA	 B 8}!!!r3   c                      t        ddg       t        rt        ddg       t        rt        ddg       t        dt        d       y )Nr   r   r   nonexistentTrH   )rf   should_have_jemallocshould_have_mimallocrC    r3   r   test_env_varrl      s9    (XJ'j:,/j:,/-!24Hr3   c                      t               ddfd
}  | t        j                  d        | t        j                  dt                 | t        j
                  dt                y )NF)can_failc                    |r		  |        }n |        }|j                  |k(  sJ j                  |       y # t         $ r Y y w xY wr-   )NotImplementedErrorrB   add)factoryra   rn   r   specific_poolss       r   checkz)test_specific_memory_pools.<locals>.check   sQ    y 9D  D(((4  ' s   7 	AAr   r   r   )setr   system_memory_pooljemalloc_memory_poolri   mimalloc_memory_poolrj   )rt   rs   s    @r   test_specific_memory_poolsry      sT    UN). 	! 
"

*	"
!
!:++-	"
!
!:++-r3   c                  j    t        j                         } d| v sJ t        rd| v sJ t        rd| v sJ y y )Nr   r   r   )r   r   ri   rj   )backendss    r   test_supported_memory_backendsr|      sE    ++-HxX%%%X%%% r3   c                    d|  d}t        t        j                        }||d<   t        j                  t
        j                  d|g|dt        j                        }t        |j                  t
        j                         |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_POOLrL   TrM   rQ   )
rU   rV   rW   rX   rY   rZ   r[   r\   r^   rP   )pool_factory	env_valuerc   rN   rd   s        r   run_debug_memory_poolr      ss    
  . !	D" rzz
C%.C!"
..#..$53,0JC	#**3::&Jr3   r   c                     t        | j                  d      }t        j                  dk(  r |j                  t
        j                   k(  sJ |j                  dk7  sJ d|j                  v sJ y )Nabortposixr   Wrong size on deallocation)r   __name__rV   ra   r]   signalSIGABRTrP   r   rd   s     r   test_debug_memory_pool_abortr      s\    
 5 5w
?C	ww'~~&..000~~"""'3::555r3   c                     t        | j                  d      }t        j                  dk(  r |j                  t
        j                   k(  sJ |j                  dk7  sJ d|j                  v sJ y )Ntrapr   r   r   )r   r   rV   ra   r]   r   SIGTRAPrP   r   s     r   test_debug_memory_pool_trapr      s\    
 5 5v
>C	ww'~~&..000~~"""'3::555r3   c                 p    t        | j                  d      }|j                          d|j                  v sJ y )Nwarnr   )r   r   r_   rP   r   s     r   test_debug_memory_pool_warnr      s2    
 5 5v
>C'3::555r3   c                     t        | j                  |      }t        j                  dk(  r|j                  dk  sJ |j                          |dk(  r|j                  dk(  sJ y ||j                  v sJ y )Nr   r   r5   )r   r   rV   ra   r]   r_   rP   )r   r   msgrd   s       r    check_debug_memory_pool_disabledr      sk    
 5 5y
AC 
ww'~~"""
byzzRcjj   r3   c                     t        | dd       y )Nnoner5   r   r   s    r   test_debug_memory_pool_noner     s    $\62>r3   c                     t        | dd       y )Nr5   r   r   s    r   test_debug_memory_pool_emptyr     s    $\2r:r3   c                 .    d}d| d}t        | ||       y )Nsome_arbitrary_valuez,Invalid value for ARROW_DEBUG_MEMORY_POOL: 'z4'. Valid values are 'abort', 'trap', 'warn', 'none'.r   )r   r   r   s      r   test_debug_memory_pool_unknownr     s,    &I
6yk B< 	<  %\9cBr3   )(
contextlibrV   platformr   rX   rZ   r/   pyarrowr   pytestmark	processes
pytestmarkrC   machineri   rj   r   contextmanagerr   r'   r+   r2   r<   r@   rD   rG   rf   rl   ry   r|   r   parametrizer   r   r   r   r   r   r   rk   r3   r   <module>r      s  $  	    
   [[""
6 /R4DH4D4D4F(4R ||w. 4   /D8
%2

 5: "8I-*&< )<)>?6 @6 )<)>?6 @6 )<)>?6 @6! )<)>?? @? )<)>?; @; )<)>?C @Cr3   