
    ei&                     2   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                  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'e
j                  jA                  d e             d        Z(y)     N)util)systemjemallocmimallocr   r   c                 (    t        t        |  d      S )N_memory_pool)getattrpabackend_names    [/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/pyarrow/tests/test_memory.pybackend_factoryr   &   s    2,|455    c               #   |   K   t         j                   t        j                         D ]  } t        |         y wN)r
   default_memory_poolsupported_memory_backendsr   r   s    r   supported_factoriesr   *   s5     

 
  446 ,l++,s   :<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"   0   sa     
 ((D6M?$
GC ++-
C
Cs8vds   AA%A A%A""A%c                    | j                         }| j                         }| j                         }t        | d      5  | j                         |dz   k(  sJ | j                         }| j                         |k\  sJ | j                         }||kD  sJ ||dz   k  sJ 	 ddd       | j                         |k(  sJ | j                         k(  sJ | j                         k(  sJ y# 1 sw Y   IxY w)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	" B##%)9C)????* N222 $ 4 4 6$'====$'='AAAAB !%5555??...!%::::B Bs   AC%%C.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_bytesr2   T   s[    !!#D	d	# Dd###%)A)A)CCCCD D Ds   3AA'c                      t        j                  t        j                               } t        |        t	        j
                  |       } |       J ~  |       J y 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                    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_poolrA   d   sx    !!""8"8":;D$!HC"9999[!A%%%99[!SYYw%7777r   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   r4   set_memory_poolr&   r"   )old_poolr   r)   s      r   test_set_memory_poolrE   m   s    %%'H)Dt%//1D#& 	D'')-=-CCCC	D##%)9999
8$		D 	D 	8$s$    B6 B*6B6 *B3/B6 6Cc                  T    t        j                         } | j                  t        v sJ y r   )r
   r   r   possible_backendsr1   s    r   test_default_backend_namerH   z   s%    !!#D 1111r   c                  L    t        j                         } | j                          y r   )r
   r   release_unusedr1   s    r   test_release_unusedrK      s    !!#Dr   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   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'+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}!!!r   c                  X    t         D ]  } t        | | g        t        dt        d       y )NnonexistentTrL   )mandatory_backendsrj   rG   r   s    r   test_env_varrn      s*    * 4l\N34-!24Hr   c                  Z    ddd} t         D ]  } | t        |      ||t        v        y )NF)can_failc                h    |r		  |        }n |        }|j                  |k(  sJ y # t         $ r Y y w xY wr   )NotImplementedErrorr   )factoryre   rp   r   s       r   checkz)test_memory_pool_factories.<locals>.check   sB    y 9D  D(((	 ' s   % 	11)rG   r   rm   )rt   r   s     r   test_memory_pool_factoriesru      s5    ). ) * ?ol+\#+==	??r   c                      t        j                         } t        |       t        t              k\  sJ t        |       t        t              k  sJ y r   )r
   r   setrm   rG   )backendss    r   test_supported_memory_backendsry      s@    ++-Hx=C 23333x=C 1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~      ss    
  . !	D" rzz
C%.C!"
..#..$53,0JC	#**3::&Jr   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__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                     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   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                 p    t        | j                  d      }|j                          d|j                  v sJ y )Nwarnr   )r~   r   rc   rT   r   s     r   test_debug_memory_pool_warnr      s2    
 5 5v
>C'3::555r   c                 6   t         j                  dk  rt        j                  d       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 )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cjj   r   c                     t        | dd       y )Nnoner:   r   r|   s    r   test_debug_memory_pool_noner     s    $\62>r   c                     t        | dd       y )Nr:   r   r   s    r   test_debug_memory_pool_emptyr     s    $\2r:r   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Br   c                 B   d| j                    d}t        j                  t        j                  d|gddt        j
                  t        j
                        }t        j                  dk(  r5t        j                         s |j                  j                         dk7  sJ y y y )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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   ru   ry   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   