Ë
    ìmxi„&  ã                   ó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    úP/home/htdocs/ttos/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   è ø€ ô
 �(‰(�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_bytesr.   A   s  € ð ×+Ñ+Ó-ÐØ—_‘_Ó&€NØ!×1Ñ1Ó3ÐÜ	˜˜cÓ	"ñ BØ×#Ñ#Ó%Ð)9¸CÑ)?Ò?Ð?Ð?ØŸ™Ó*ˆØ�‰Ó  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Ó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   r.   Ú
readouterrÚcount)Úcapfdr   ÚoutÚerrs       r   Útest_logging_memory_poolrA   d   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   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ô Œ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ÚnonexistentTrL   )Úmandatory_backendsrj   rG   r   s    r   Útest_env_varrn       s*   € Ü*ò 4ˆÜ�l \ NÕ3ð4ä�-Ô!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   )Úfactoryre   rp   r   s       r   Úcheckz)test_memory_pool_factories.<locals>.check§   sB   € ÙðÙ“y‘ñ “9ˆDØ× Ñ  DÒ(Ð(Ñ(øô	 'ò Ùðús   „% ¥	1°1)rG   r   rm   )rt   r   s     r   Útest_memory_pool_factoriesru   ¦   s5   € Ø).ô )ô *ò ?ˆÙŒo˜lÓ+¨\Ø#Ô+=Ð=ö	?ñ?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ô" Œ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__rZ   re   ra   ÚsignalÚSIGABRTrT   ©r|   rh   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ƒ   rZ   re   ra   r„   ÚSIGTRAPrT   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ƒ   rc   rT   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ƒ   rZ   re   ra   rc   rT   )r|   r}   Úmsgrh   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()
        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ô �.‰.œ#Ÿ.™.¨$°Ð5¸TØ,0¼¿¹Ü *§¡ô1€Cô ‡|�|�wÒ¤t×'@Ñ'@Ô'Bà�z‰z×ÑÓ! 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   