
    <>i&                     4   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
r
\
R                  R                  r/ SQrSS/rS rS r\ R$                  S 5       rS	 rS
 rS rS rS rS rS rSS.S jrS rS rS rS r\
R                  RA                  S\" 5       5      S 5       r!\
R                  RA                  S\" 5       5      S 5       r"\
R                  RA                  S\" 5       5      S 5       r#S r$\
R                  RA                  S\" 5       5      S 5       r%\
R                  RA                  S\" 5       5      S 5       r&\
R                  RA                  S\" 5       5      S 5       r'\
R                  RA                  S\" 5       5      S 5       r(g)     N)util)systemjemallocmimallocr   r   c                 (    [        [        U  S35      $ )N_memory_pool)getattrpabackend_names    X/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/test_memory.pybackend_factoryr   &   s    2,|455    c               #      #    [         R                  v   [         R                  " 5        H  n [        U 5      v   M     g 7fN)r
   default_memory_poolsupported_memory_backendsr   r   s    r   supported_factoriesr   *   s/     

 
  446l++ 7s   =?c              #      #    [         R                  " SU-  /[         R                  " 5       U S9nUR                  5       S   nSn[	        U5      U:X  d   e Sv   Sng! Snf = f7f)z6
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?$
GC ++-
C
Cs8vds   AA%A A%A""A%c                    U R                  5       nU R                  5       nU R                  5       n[        U S5         U R                  5       US-   :X  d   eU R                  5       nU R                  5       U:  d   eU R                  5       nXS:  d   eXSS-   :  d   e SSS5        U R                  5       U:X  d   eU R                  5       W:X  d   eU R                  5       W:X  d   eg! , (       d  f       NQ= f)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	c	"##%)9C)????* N222 $ 4 4 6$===$'AAAA 
# !%5555??...!%:::: 
#	"s   A!C**
C8c                      [         R                  " 5       n [        U S5         [        U 5        U R	                  5       [         R
                  " 5       :X  d   e S S S 5        g ! , (       d  f       g = f)Ni   )r
   r   r"   r.   r&   total_allocated_bytesr   s    r   test_default_allocated_bytesr2   T   sN    !!#D	d	#d###%)A)A)CCCC 
$	#	#s   5A!!
A/c                      [         R                  " [         R                  " 5       5      n [        U 5        [        R
                  " U 5      nU" 5       c   eA U" 5       b   eg r   )r
   proxy_memory_poolr   r.   weakrefref)r   wrs     r   test_proxy_memory_poolr8   [   sN     6 6 89D$	T	B44<<r   c                    [         R                  " [         R                  " 5       5      n[        U5        U R	                  5       u  p#US:X  d   eUR                  S5      S:  d   eUR                  S5      UR                  S5      :X  d   eg )N z	Allocate:r   zFree:)r
   logging_memory_poolr   r.   
readouterrcount)capfdr   outerrs       r   test_logging_memory_poolrA   d   sv    !!""8"8":;D$!HC"9999[!A%%%99[!SYYw%7777r   c                     [         R                  " 5       n [         R                  " U 5      n[         R                  " U5         UR	                  5       n[        S S5         UR	                  5       US-   :X  d   e S S S 5        UR	                  5       U:X  d   e [         R                  " U 5        g ! , (       d  f       N<= f! [         R                  " U 5        f = f)Nr$   )r
   r   r4   set_memory_poolr&   r"   )old_poolr   r)   s      r   test_set_memory_poolrE   m   s    %%'H)Dt%//1D#&'')-=-CCCC '##%)9999
8$	 '& 	8$s$   C B0:C 0
B>:C Cc                  Z    [         R                  " 5       n U R                  [        ;   d   eg r   )r
   r   r   possible_backendsr1   s    r   test_default_backend_namerH   z   s%    !!#D 1111r   c                  N    [         R                  " 5       n U R                  5         g r   )r
   r   release_unusedr1   s    r   test_release_unusedrK      s    !!#Dr   Fexpect_warningc                6   SU< S3n[        [        R                  5      nXS'   [        R                  " [
        R                  SU/US[        R                  S9nUR                  S:w  a2  [        UR                  [
        R                  S9  UR                  5         UR                  R                  5       nU(       aK  [        U5      S	;   d   e[        U5      S
:X  a  SU  S3US   ;   d   eg SUS   ;   d   eSU  S3US
   ;   d   eg [        U5      S:X  d   eg )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   % &.L 1		D rzz
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8}!!!r   c                  T    [          H  n [        X /5        M     [        S[        SS9  g )NnonexistentTrL   )mandatory_backendsrj   rG   r   s    r   test_env_varrn      s#    *lN3 +-!24Hr   c                  \    SS.S jn [          H  nU " [        U5      UU[        ;  S9  M     g )NF)can_failc                v    U(       a	   U " 5       nOU " 5       nUR                  U:X  d   eg ! [          a     g f = fr   )NotImplementedErrorr   )factoryre   rp   r   s       r   check)test_memory_pool_factories.<locals>.check   sB    y 9D  D(((	 ' s   + 
88)rG   r   rm   )rt   r   s     r   test_memory_pool_factoriesrv      s0    ). ) *ol+\#+==	? *r   c                      [         R                  " 5       n [        U 5      [        [        5      :  d   e[        U 5      [        [        5      ::  d   eg r   )r
   r   setrm   rG   )backendss    r   test_supported_memory_backendsrz      s@    ++-Hx=C 23333x=C 12222r   c                     SU  S3n[        [        R                  5      nXS'   [        R                  " [
        R                  SU/US[        R                  S9n[        UR                  [
        R                  S9  U$ )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      sq    
  . !	D" rzz
C%.!"
..#..$53,0JC	#**3::&Jr   r}   c                     [        U R                  S5      n[        R                  S:X  a"  UR                  [
        R                  * :X  d   eOUR                  S:w  d   eSUR                  ;   d   eg )Nabortposixr   Wrong size on deallocation)r   __name__rZ   re   ra   signalSIGABRTrT   r}   rh   s     r   test_debug_memory_pool_abortr      s\    
 5 5w
?C	ww'~~&..000~~"""'3::555r   c                     [        U R                  S5      n[        R                  S:X  a"  UR                  [
        R                  * :X  d   eOUR                  S:w  d   eSUR                  ;   d   eg )Ntrapr   r   r   )r   r   rZ   re   ra   r   SIGTRAPrT   r   s     r   test_debug_memory_pool_trapr      s\    
 5 5v
>C	ww'~~&..000~~"""'3::555r   c                 t    [        U R                  S5      nUR                  5         SUR                  ;   d   eg )Nwarnr   )r   r   rc   rT   r   s     r   test_debug_memory_pool_warnr      s2    
 5 5v
>C'3::555r   c                 F   [         R                  S:  a  [        R                  " S5        [	        U R
                  U5      n[        R                  S:X  a  UR                  S::  d   eOUR                  5         US:X  a  UR                  S:X  d   eg X#R                  ;   d   eg )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
 5 5y
AC 
ww'~~"""
byzzRjj   r   c                     [        U SS5        g )Nnoner:   r   r}   s    r   test_debug_memory_pool_noner     s    $\62>r   c                     [        U SS5        g )Nr:   r   r   s    r   test_debug_memory_pool_emptyr     s    $\2r:r   c                 ,    SnSU S3n[        XU5        g )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< 	<  %\cBr   c                 N   SU R                    S3n[        R                  " [        R                  SU/SS[        R
                  [        R
                  S9n[        R                  S:X  a<  [        R                  " 5       (       d!  UR                  R                  5       S:w  d   eg g g )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 *1C ||wt'@'@'B'Bzz!R''' (C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   rv   rz   r   parametrizer   r   r   r   r   r   r   r    r   r   <module>r      s  $  	   
    [[""
6  
+ 6,   ;&D8
%2

 5: "8I? 3< )<)>?6 @6 )<)>?6 @6 )<)>?6 @6!" )<)>?? @? )<)>?; @; )<)>?C @C )<)>?( @(r   