Ë
    Èš§j'  ã                   ó0  — 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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   c                 ó(   — t        t        | › d�«      S )NÚ_memory_pool)ÚgetattrÚpa©Úbackend_names    ú\C:\Users\Luka\AppData\Local\Temp\pip-target-o84fipzb\lib\python\pyarrow/tests/test_memory.pyÚbackend_factoryr   $   s   € Ü”2˜,˜ |Ð4Ó5Ð5ó    c                  óŠ   — t         j                  g} | t        j                  «       D �cg c]  }t        |«      ‘Œ c}z   S c c}w ©N)r
   Údefault_memory_poolÚsupported_memory_backendsr   )Ú	factoriesÚbns     r   Úsupported_factoriesr   (   s=   € Ü×'Ñ'Ð(€IØ´b×6RÑ6RÔ6TÓUÑ6T°œ¨Õ+Ð6TÑUÑUÐUùÒUs   ©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   è ø€ ô
 �(‰(�D˜6‘M�?¬¯©«À$Ô
G€Cð �+‰+‹-˜Ñ
€CØ
€CÜˆs‹8�vÒÐÐðÛà‰øˆ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_bytesr0   >   sý   € ð ×+Ñ+Ó-ÐØ—_‘_Ó&€NØ!×1Ñ1Ó3ÐÜ	˜˜cÕ	"Ø×#Ñ#Ó%Ð)9¸CÑ)?Ò?Ð?Ð?ØŸ™Ó*ˆØ�‰Ó  NÒ2Ð2Ð2Ø $× 4Ñ 4Ó 6ÐØ$Ð'=Ò=Ð=Ð=Ø$Ð'=ÀÑ'AÒAÐAÑA÷ 
#ð ×ÑÓ!Ð%5Ò5Ð5Ð5Ø�?‰?Ó Ò.Ð.Ð.Ø×ÑÓ!Ð%:Ò:Ð:Ñ:÷ 
#Ð	"ú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$   r0   r(   Útotal_allocated_bytes©r    s    r   Útest_default_allocated_bytesr4   Q   sN   € Ü×!Ñ!Ó#€DÜ	˜˜dÕ	#Ü˜dÔ#Ø×#Ñ#Ó%¬×)AÑ)AÓ)CÒCÐCÑC÷ 
$×	#Ñ	#ús   ¡3AÁA'c                  ó¸   — t        j                  t        j                  «       «      } t        | «       t	        j
                  | «      } |«       €J ‚~  |«       �J ‚y r   )r
   Úproxy_memory_poolr   r0   ÚweakrefÚref)r    Úwrs     r   Útest_proxy_memory_poolr:   X   sN   € Ü×Ñ¤× 6Ñ 6Ó 8Ó9€DÜ˜$ÔÜ	�‰�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   r0   Ú
readouterrÚcount)Úcapfdr    ÚoutÚerrs       r   Útest_logging_memory_poolrC   a   sx   € Ü×!Ñ!¤"×"8Ñ"8Ó":Ó;€DÜ˜$ÔØ×ÑÓ!�H€CˆØ�"Š9Ðˆ9Ø�9‰9�[Ó! AÒ%Ð%Ð%Ø�9‰9�[Ó! S§Y¡Y¨wÓ%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   r6   Úset_memory_poolr(   r$   )Úold_poolr    r+   s      r   Útest_set_memory_poolrG   j   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   r   Úpossible_backendsr3   s    r   Útest_default_backend_namerJ   w   s%   € Ü×!Ñ!Ó#€DØ×ÑÔ 1Ñ1Ð1Ñ1r   c                  óL   — t        j                  «       } | j                  «        y r   )r
   r   Úrelease_unusedr3   s    r   Útest_release_unusedrM   |   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   rY   zUnsupported backend 'Ú'zInitGoogleLogging())ÚdictÚosÚenvironÚ
subprocessÚrunÚsysÚ
executableÚPIPEÚ
returncodeÚprintrV   Úcheck_returncodeÚ
splitlinesr   )ÚnameÚexpectedrO   ÚcoderT   ÚresÚerrliness          r   Úcheck_env_varrl   �   s  € ð%ð &. Lð 1	ð	€Dô Œr�z‰zÓ
€CØ'+€CÐ#Ñ$Ü
�.‰.œ#Ÿ.™.¨$°Ð5¸3Ø,0¼¿¹ôJ€Cà
‡~�~˜ÒÜˆc�j‰jœsŸz™zÕ*Ø×ÑÔØ�z‰z×$Ñ$Ó&€HÙÜ�8‹} Ñ&Ð&Ð&Üˆx‹=˜AÒà*¨4¨&°Ð2°h¸q±kÑAÐAÐAð )¨H°Q©KÑ7Ð7Ð7Ø*¨4¨&°Ð2°h¸q±kÑAÐAÑAð	 Bô �8‹} Ò!Ð!Ñ!r   c                  óX   — t         D ]  } t        | | g«       Œ t        dt        d¬«       y )NÚnonexistentTrN   )Úmandatory_backendsrl   rI   r   s    r   Útest_env_varrp   �   s%   € ß*ˆÜ�l \ NÕ3ð +ä�-Ô!2À4Ö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   )Úfactoryrg   rr   r    s       r   Úcheckz)test_memory_pool_factories.<locals>.check¤   sB   € ÙðÙ“y‘ñ “9ˆDØ× Ñ  DÒ(Ð(Ñ(øô	 'ò Ùðús   „% ¥	1°1)rI   r   ro   )rv   r   s     r   Útest_memory_pool_factoriesrw   £   s0   € Ø).ô )÷ *ˆÙŒo˜lÓ+¨\Ø#Ô+=Ð=ö	?ñ *r   c                  ó    — t        j                  «       } t        | «      t        t        «      k\  sJ ‚t        | «      t        t        «      k  sJ ‚y r   )r
   r   Úsetro   rI   )Úbackendss    r   Útest_supported_memory_backendsr{   ³   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_POOLrR   TrS   rW   )
r[   r\   r]   r^   r_   r`   ra   rb   rd   rV   )Úpool_factoryÚ	env_valueri   rT   rj   s        r   Úrun_debug_memory_poolr€   ¹   ss   € ð
ð  �.ð !	ð€Dô" Œr�z‰zÓ
€CØ%.€CÐ!Ñ"Ü
�.‰.œ#Ÿ.™.¨$°Ð5¸3Ø,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__r\   rg   rc   ÚsignalÚSIGABRTrV   ©r~   rj   s     r   Útest_debug_memory_pool_abortr‰   ×   s\   € ä
 × 5Ñ 5°wÓ
?€CÜ	‡w�w�'ÒØ�~‰~¤&§.¡. Ò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…   r\   rg   rc   r†   ÚSIGTRAPrV   rˆ   s     r   Útest_debug_memory_pool_trapr�   á   s\   € ä
 × 5Ñ 5°vÓ
>€CÜ	‡w�w�'ÒØ�~‰~¤&§.¡. Ò0Ð0Ð0à�~‰~ Ò"Ð"Ð"Ø'¨3¯:©:Ñ5Ð5Ñ5r   c                 óp   — t        | j                  d«      }|j                  «        d|j                  v sJ ‚y )NÚwarnr„   )r€   r…   re   rV   rˆ   s     r   Útest_debug_memory_pool_warnr�   ë   s2   € ä
 × 5Ñ 5°vÓ
>€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…   r\   rg   rc   re   rV   )r~   r   Úmsgrj   s       r   Ú check_debug_memory_pool_disabledr–   ò   s„   € Ü
‡{�{�UÒä�‰Ð7Ô8Ü
 × 5Ñ 5°yÓ
A€Cô 
‡w�w�'ÒØ�~‰~ Ò"Ð"Ð"à×ÑÔØ
ˆb‚yØ�z‰z˜RÒÐÑà�c—j‘jÑ Ð Ñ r   c                 ó   — t        | dd«       y )NÚnoner<   ©r–   ©r~   s    r   Útest_debug_memory_pool_noner›     s   € ä$ \°6¸2Õ>r   c                 ó   — t        | dd«       y )Nr<   r™   rš   s    r   Útest_debug_memory_pool_emptyr�     s   € ä$ \°2°rÕ: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à
6°y°kð B<ð 	<ð ô % \°9¸cÕ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()
        rR   T)rv   rU   ÚstdoutrV   Úlinuxr<   )r…   r^   r_   r`   ra   rb   Úplatformr   Úrunning_on_musllinuxrV   Ústrip)r~   ri   rj   s      r   Útest_print_statsr§     s�   € ðð  ×(Ñ(Ð)ð *	ð€Dô �.‰.œ#Ÿ.™.¨$°Ð5¸TØ,0¼¿¹Ü *§¡ô1€Cô ‡|�|�wÒ¤t×'@Ñ'@Ô'Bà�z‰z×ÑÓ! RÒ'Ð'Ñ'ð (CÐr   ))Ú
contextlibr\   r†   r^   r`   r7   Úpyarrowr
   Úpyarrow.testsr   r“   ÚmarkÚ	processesÚ
pytestmarkrI   ro   r   r   Úcontextmanagerr$   r0   r4   r:   rC   rG   rJ   rM   rl   rp   rw   r{   r€   Úparametrizer‰   r�   r�   r–   r›   r�   r    r§   © r   r   Ú<module>r±      sÔ  ðó$ Û 	Û Û Û 
Û ã Ý ã à�[‰[×"Ñ"€
â6Ð Ø�ZÐ ò6òVð
 ×Ññó ðò ;ò&Dòò8ò
%ò2ò
ð
 5:ô "ò8Iò?ò 3òð< ‡�×Ñ˜Ñ)<Ó)>Ó?ñ6ó @ð6ð ‡�×Ñ˜Ñ)<Ó)>Ó?ñ6ó @ð6ð ‡�×Ñ˜Ñ)<Ó)>Ó?ñ6ó @ð6ò!ð" ‡�×Ñ˜Ñ)<Ó)>Ó?ñ?ó @ð?ð ‡�×Ñ˜Ñ)<Ó)>Ó?ñ;ó @ð;ð ‡�×Ñ˜Ñ)<Ó)>Ó?ñCó @ðCð ‡�×Ñ˜Ñ)<Ó)>Ó?ñ(ó @ñ(r   