
    z-Ph&                     b   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 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                             d e                      d             Z!e
j                             d e                      d             Z"e
j                             d e                      d             Z#d Z$e
j                             d e                      d             Z%e
j                             d e                      d             Z&e
j                             d e                      d             Z'e
j                             d e                      d             Z(dS )     N)util)systemjemallocmimallocr   r   c                 2    t          t          |  d          S )N_memory_pool)getattrpabackend_names    Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_memory.pybackend_factoryr   &   s    2,444555    c               #   t   K   t           j        V  t          j                    D ]} t          |           V  d S N)r
   default_memory_poolsupported_memory_backendsr   r   s    r   supported_factoriesr   *   sN      

    466 , ,l++++++, ,r   c              #      K   t          j        d|z  gt          j                    |           }|                                d         }d}t	          |          |k    sJ 	 dV  d}dS # d}w xY 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"   0   s~      
 (D6M?$
G
G
GC ++--
C
Cs88vd



s   !A) )A-c                 P   |                                  }|                                 }|                                 }t          | d          5  |                                  |dz   k    sJ |                                 }|                                 |k    sJ |                                 }||k    sJ ||dz   k     sJ 	 ddd           n# 1 swxY w Y   |                                  |k    sJ |                                 |k    sJ |                                 |k    sJ 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_afters         r   check_allocated_bytesr.   A   s    ++--__&&N!1133	c	"	" B B##%%)9C)?????**  N2222 $ 4 4 6 6$'=====$'='AAAAAAB B B B B B B B B B B B B B B !!%55555??....!!%:::::::s   A3CCCc                      t          j                    } t          | d          5  t          |            |                                 t          j                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Ni   )r
   r   r"   r.   r&   total_allocated_bytesr   s    r   test_default_allocated_bytesr2   T   s    !##D	d	#	# D Dd#####%%)A)C)CCCCCCD D D D D D D D D D D D D D D D D Ds   ;A--A14A1c                      t          j        t          j                              } t          |            t	          j        |           } |            J ~  |            J d S r   )r
   proxy_memory_poolr   r.   weakrefref)r   wrs     r   test_proxy_memory_poolr8   [   s`     6 8 899D$	T		B244244<<<<<r   c                 >   t          j        t          j                              }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errs       r   test_logging_memory_poolrA   d   s    !""8":":;;D$!!HC"999999[!!A%%%%99[!!SYYw%7%7777777r   c                     t          j                    } t          j        |           }t          j        |           	 |                                }t          d d          5  |                                |dz   k    sJ 	 d d d            n# 1 swxY w Y   |                                |k    sJ 	 t          j        |            d S # t          j        |            w xY w)Nr$   )r
   r   r4   set_memory_poolr&   r"   )old_poolr   r)   s      r   test_set_memory_poolrE   m   s3   %''H))Dt%//11D#&& 	D 	D''))-=-CCCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D##%%)999999
8$$$$$8$$$$s/   $C !B C BC BC Cc                  L    t          j                    } | j        t          v sJ d S r   )r
   r   r   possible_backendsr1   s    r   test_default_backend_namerH   z   s+    !##D 1111111r   c                  T    t          j                    } |                                  d S r   )r
   r   release_unusedr1   s    r   test_release_unusedrK      s(    !##Dr   Fexpect_warningc                6   d|d}t          t          j                  }| |d<   t          j        t
          j        d|g|dt          j                  }|j        dk    r4t          |j
        t
          j
                   |                                 |j
                                        }|rVt          |          d	v sJ t          |          d
k    rd|  d|d         v sJ d S d|d         v sJ d|  d|d
         v sJ d S t          |          dk    sJ 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   rW   zUnsupported backend ''zInitGoogleLogging())dictosenviron
subprocessrunsys
executablePIPE
returncodeprintrT   check_returncode
splitlinesr   )nameexpectedrM   coderR   reserrliness          r   check_env_varrj      s_    &.	  D rz

C'+C#$
.#.$53,0J J JC
~cjsz****z$$&&H 
"8}}&&&&x==A24222hqkAAAAAA )HQK777724222hqkAAAAAA8}}!!!!!!r   c                  j    t           D ]} t          | | g           t          dt          d           d S )NnonexistentTrL   )mandatory_backendsrj   rG   r   s    r   test_env_varrn      sB    * 4 4l\N3333-!24HHHHHHr   c                  j    ddd} t           D ]$} | t          |          ||t          v           %d S )NF)can_failc                r    |r	  |             }n# t           $ r Y d S w xY w |             }|j        |k    sJ d S r   )NotImplementedErrorr   )factoryre   rp   r   s       r   checkz)test_memory_pool_factories.<locals>.check   se     	wyy&    799D D((((((s   
 
)rG   r   rm   )rt   r   s     r   test_memory_pool_factoriesru      sl    ). ) ) ) ) ) * ? ?ol++\#+==	? 	? 	? 	? 	?? ?r   c                      t          j                    } t          |           t          t                    k    sJ t          |           t          t                    k    sJ d S r   )r
   r   setrm   rG   )backendss    r   test_supported_memory_backendsry      sV    +--Hx==C 2333333x==C 122222222r   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_POOLrP   TrQ   rU   )
rY   rZ   r[   r\   r]   r^   r_   r`   rb   rT   )pool_factory	env_valuerg   rR   rh   s        r   run_debug_memory_poolr~      s    
    D" rz

C%.C!"
.#.$53,0J J JC	#*3:&&&&Jr   r|   c                     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)r~   __name__rZ   re   ra   signalSIGABRTrT   r|   rh   s     r   test_debug_memory_pool_abortr      sg    
 5w
?
?C	w'~&.00000~""""'3:555555r   c                     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trapr   r   r   )r~   r   rZ   re   ra   r   SIGTRAPrT   r   s     r   test_debug_memory_pool_trapr      sg    
 5v
>
>C	w'~&.00000~""""'3:555555r   c                 n    t          | j        d          }|                                 d|j        v sJ d S )Nwarnr   )r~   r   rc   rT   r   s     r   test_debug_memory_pool_warnr      s?    
 5v
>
>C'3:555555r   c                    t           j        dk     rt          j        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 sJ d S )Nl        z!Test may fail on 32-bit platformsr   r   r:   )r^   maxsizepytestskipr~   r   rZ   re   ra   rc   rT   )r|   r}   msgrh   s       r    check_debug_memory_pool_disabledr      s    
{U7888
 5y
A
AC 
w'~"""""
byyzRcj      r   c                 (    t          | dd           d S )Nnoner:   r   r|   s    r   test_debug_memory_pool_noner     s    $\62>>>>>r   c                 (    t          | dd           d S )Nr:   r   r   s    r   test_debug_memory_pool_emptyr     s    $\2r:::::r   c                 8    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   )r|   r}   r   s      r   test_debug_memory_pool_unknownr     s<    &I	<y 	< 	< 	<  %\9cBBBBBr   c                    d| j          d}t          j        t          j        d|gddt          j        t          j                  }t          j        dk    r2t          j                    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()
        rP   T)rt   rS   stdoutrT   linuxr:   )r   r\   r]   r^   r_   r`   platformr   running_on_musllinuxrT   strip)r|   rg   rh   s      r   test_print_statsr     s      (  D .#.$5T,0 *1 1 1C |wt'@'B'Bz!!R'''' ''r   ))
contextlibrZ   r   r\   r^   r5   pyarrowr
   pyarrow.testsr   r   mark	processes
pytestmarkrG   rm   r   r   contextmanagerr"   r.   r2   r8   rA   rE   rH   rK   rj   rn   ru   ry   r~   parametrizer   r   r   r   r   r   r   r    r   r   <module>r      s>  $     				      



            ["
666  
+ 6 6 6, , ,    ; ; ;&D D D  8 8 8
% 
% 
%2 2 2
  
 5: " " " " "8I I I? ? ? 3 3 3  < )<)<)>)>??6 6 @?6 )<)<)>)>??6 6 @?6 )<)<)>)>??6 6 @?6! ! !" )<)<)>)>??? ? @?? )<)<)>)>??; ; @?; )<)<)>)>??C C @?C )<)<)>)>??( ( @?( ( (r   