o
    HXh~U                     @   s\  	 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Zd dl	Z	d dlm
Z
 G dd dZG dd deZG dd deZG d	d
 d
ZG dd dZG dd dZG dd de jeeZG dd de jeeZG dd de jeeZG dd de jeeZG dd de jeeZG dd de jeeZG dd de jZedkre   dS dS )    N)import_helperc                   @   s   e Zd ZdZedd Zedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8S )9AbstractMemoryTests   abcdefc                 C   s   | j S N)source_bytesself r	   >/opt/python-3.10.19/usr/lib/python3.10/test/test_memoryview.py_source   s   zAbstractMemoryTests._sourcec                 C   s   t d | j| jgS r   )filterro_typerw_typer   r	   r	   r
   _types   s   zAbstractMemoryTests._typesc                    s$  || j }t|}| | |  d td |  d t |  d td |  d td |  d td | t	 fdd | t	 fd	d | t	 fd
d | t	 fdd | t
 fdd | t
 fdd | t
 fdd d  | t|| d S )Nr      a      fic                          d S )N   r	   r	   mr	   r
   <lambda>)       z=AbstractMemoryTests.check_getitem_with_type.<locals>.<lambda>c                      r   )Nr	   r	   r   r	   r
   r   *   r   c                      s
    t j S r   sysmaxsizer	   r   r	   r
   r   +   s   
 c                      s    t j  S r   r   r	   r   r	   r
   r   ,   s    c                      s    d  S r   r	   r	   r   r	   r
   r   .   r   c                      r   )N        r	   r	   r   r	   r
   r   /   r   c                      r   )Nar	   r	   r   r	   r
   r   0   r   )r   r   getrefcount_viewassertEqualordassertIsInstanceintassertRaises
IndexError	TypeError)r   tpboldrefcountr	   r   r
   check_getitem_with_type   s"   


z+AbstractMemoryTests.check_getitem_with_typec                 C   s   | j D ]}| | qd S r   )r   r,   )r   r)   r	   r	   r
   test_getitem4   s   
z AbstractMemoryTests.test_getitemc                    sJ   | j D ]}|| j}| | | t  fddtt D  qd S )Nc                    s   g | ]} | qS r	   r	   ).0ir   r	   r
   
<listcomp><       z1AbstractMemoryTests.test_iter.<locals>.<listcomp>)r   r   r!   r"   listrangelen)r   r)   r*   r	   r   r
   	test_iter8   s
   


(zAbstractMemoryTests.test_iterc                    s   | j s| d |  | j}t|}| |  fdd}| t|d | t|d | t|td d  | 	t|| d S )Nno read-only type to testc                    s   |  d< d S )Nr   r	   )valuer   r	   r
   setitemD   s   z:AbstractMemoryTests.test_setitem_readonly.<locals>.setitemr   A   )
r   skipTestr   r   r    r!   r&   r(   
memoryviewr"   )r   r*   r+   r8   r	   r   r
   test_setitem_readonly>   s   


z)AbstractMemoryTests.test_setitem_readonlyc              	      s  | j s| d | j |  | j}t|}| | td d< | |d d dd< | |d d dd	< | |d
 d dd< | |d
 d d d < | |d  dd  dd	< | |d d d d <  dd	  dd< | |d  fdd}| t	|dd | t	|dd | t	|tj
d | t	|tj
 d | t|dd | t|dd | t|tddddfd | t|dtdddfd | t|dd | t|dd tdddtdddf}| t||d  jdkrtnt}| ||dd | ||dd | t|tddd | t|tddd d  | t|| d S )Nno writable type to test   1r   s   1bcdef   0   s   0bcdefs   12   s   012def    r      r   s   cdedefs   ababcfc                    s   | | < d S r   r	   )keyr7   r   r)   r	   r
   r8   e   s   z:AbstractMemoryTests.test_setitem_writable.<locals>.setitemr   r   r   r   )r   r   cs   ab)r   r:   r   r   r    r!   r#   _check_contentsr&   r'   r   r(   sliceNotImplementedErrorformat
ValueErrorr"   )r   r*   r+   r8   Zslicesexcr	   rE   r
   test_setitem_writableL   sR   


z)AbstractMemoryTests.test_setitem_writablec              	   C   s   | j D ]>}|| j}| |}| t |d= W d    n1 s"w   Y  | t |dd= W d    n1 s<w   Y  qd S )Nr@      )r   r   r!   r&   r(   r   r)   r*   r   r	   r	   r
   test_delitem   s   


z AbstractMemoryTests.test_delitemc                    sX    j D ]&} | j}| }d fdddD } ||  |t qd S )NrB   c                 3   s     | ]}  t|gV  qd S r   )getitem_typebytes)r.   rF   r   r	   r
   	<genexpr>   s    
z3AbstractMemoryTests.test_tobytes.<locals>.<genexpr>r   )r   r!   r   tobytesjoinr"   r$   rR   )r   r)   r   r*   Zexpectedr	   r   r
   test_tobytes   s   
z AbstractMemoryTests.test_tobytesc                 C   s8   | j D ]}| || j}| }| |td qd S )Nr   )r   r!   r   tolistr"   r2   )r   r)   r   lr	   r	   r
   test_tolist   s
   
zAbstractMemoryTests.test_tolistc                    s  | j D ]}| || j| j D ]8}| |dk | |dk | |dk | |dk | |dk | |dk q| k | d d  k | dd d d  k | dd k | dk | dk | dk | dk dfD ]. | t fdd	 | t fd
d	 | t fdd	 | t fdd	 qqd S )Nr   s   abcdes   abcde1r   r   r   Zabcdefc                      s    k S r   r	   r	   rF   r   r	   r
   r      r   z2AbstractMemoryTests.test_compare.<locals>.<lambda>c                      s    kS r   r	   r	   rZ   r	   r
   r      r   c                      s    kS r   r	   r	   rZ   r	   r
   r      r   c                      s    kS r   r	   r	   rZ   r	   r
   r      r   )r   r!   r   
assertTrueZassertFalser&   r(   )r   r)   Ztp_compr	   rZ   r
   test_compare   s0   

z AbstractMemoryTests.test_comparec                 C   s   |  || j}| |j| j | |j| j | |jd | |jd | t|d | |j| jf | |j	d |S )Nr@   )r   r   r	   )
r!   r   r"   rJ   itemsizendimshaper4   strides
suboffsets)r   r)   r   r	   r	   r
   check_attributes_with_type   s   z.AbstractMemoryTests.check_attributes_with_typec                 C   .   | j s| d | | j }| |jd d S )Nr6   T)r   r:   rb   r"   readonlyr   r   r	   r	   r
   test_attributes_readonly      
z,AbstractMemoryTests.test_attributes_readonlyc                 C   rc   )Nr=   F)r   r:   rb   r"   rd   re   r	   r	   r
   test_attributes_writable   rg   z,AbstractMemoryTests.test_attributes_writablec                 C   s~   | j D ]9}|| j}t|}| |}t|}t|d}| |||d | t|| d }| t|| qd S )Nzutf-8)	r   r   r   r    r!   strrG   encoder"   )r   r)   r*   r+   r   Zoldviewrefcountsr	   r	   r
   test_getbuffer   s   





z"AbstractMemoryTests.test_getbufferc           	      C   s   | j D ]q}t|tsqG dd d}G dd d|}G dd d}||d}| |}| }||_||_t|}d  } }}t	  | 
| d u |  ||d}| }||_||_t|}d  }}t	  | 
| d u |  qd S )Nc                   @      e Zd Zdd ZdS )z+AbstractMemoryTests.test_gc.<locals>.MyViewc                 S   s   t || _d S r   )r;   r   )r   baser	   r	   r
   __init__      z4AbstractMemoryTests.test_gc.<locals>.MyView.__init__N)__name__
__module____qualname__ro   r	   r	   r	   r
   MyView   s    rt   c                   @      e Zd ZdS )z-AbstractMemoryTests.test_gc.<locals>.MySourceNrq   rr   rs   r	   r	   r	   r
   MySource       rw   c                   @   ru   )z-AbstractMemoryTests.test_gc.<locals>.MyObjectNrv   r	   r	   r	   r
   MyObject   rx   ry      abc)r   
isinstancetyper!   r   oweakrefrefgcZcollectr[   x)	r   r)   rt   rw   ry   r*   r   r}   wrr	   r	   r
   test_gc   s0   




zAbstractMemoryTests.test_gcc              	   C   s  |  td}| t| W d    n1 sw   Y  | |  W d    n1 s-w   Y  | |  W d    n1 sCw   Y  | |d  W d    n1 sYw   Y  | d|d< W d    n1 sow   Y  | t| W d    n1 sw   Y  | |j W d    n1 sw   Y  | |j W d    n1 sw   Y  | |j W d    n1 sw   Y  | |j	 W d    n1 sw   Y  | |j
 W d    n1 sw   Y  | |j W d    n	1 sw   Y  | | W d    n	1 sw   Y  W d    n	1 s*w   Y  | dt| | dt| | || | |t|| j | ||| j d S )NZreleasedr      xzreleased memory)assertRaisesRegexrK   rR   rT   rW   r4   rJ   r]   r^   rd   r_   r`   ZassertInri   reprr"   ZassertNotEqualr;   r   )r   r   r)   checkr	   r	   r
   _check_released  s0   ,,,,,,*****,z#AbstractMemoryTests._check_releasedc              	   C   s   | j D ]E}|| j}| |}|}| || W d    n1 s"w   Y  | || | |}| |  W d    n1 sCw   Y  qd S r   )r   r   r!   assertIsr   release)r   r)   r*   r   cmr	   r	   r
   test_contextmanager  s   




z'AbstractMemoryTests.test_contextmanagerc                 C   sL   | j D ] }|| j}| |}|  | || |  | || qd S r   )r   r   r!   r   r   rO   r	   r	   r
   test_release%  s   


z AbstractMemoryTests.test_releasec                 C   sJ   | j }|d u r| d || j}| |}td}| t|j| d S )Nr6   s   ZZZZ)	r   r:   r   r!   ioBytesIOr&   r(   readinto)r   r)   r*   r   r/   r	   r	   r
   test_writable_readonly/  s   



z*AbstractMemoryTests.test_writable_readonlyc                 C   s   |  t| ji  d S r   )r&   r(   r!   r   r	   r	   r
   test_getbuf_fail:     z$AbstractMemoryTests.test_getbuf_failc                 C   s   | j }|d u r| d || j}| |}| t|td |  | t|td | |}|  | tt| d S )Nr6   r   )	r   r:   r   r!   r"   hashr   r&   rK   rO   r	   r	   r
   	test_hash=  s   



zAbstractMemoryTests.test_hashc                 C   s>   | j }|d u r| d || j}| |}| tt| d S )Nr=   )r   r:   r   r!   r&   rK   r   rO   r	   r	   r
   test_hash_writableO  s   


z&AbstractMemoryTests.test_hash_writablec                    s|   | j D ]8}|| j}| |}g  |f fdd	}t||}| | | ~tj  | | d  |  d | qd S )Nc                    s     | d S r   )append)r   r*   Lr	   r
   callback^  rp   z2AbstractMemoryTests.test_weakref.<locals>.callbackr   )	r   r   r!   r~   r   r   testsupport
gc_collect)r   r)   r*   r   r   r   r	   r   r
   test_weakrefX  s   



z AbstractMemoryTests.test_weakrefc              	   C   sj   | j D ]/}|| j}| |}tt| }| tt|| | tt|t|d d d  qd S )Nr   )r   r   r!   r2   reversedrW   r"   )r   r)   r*   r   Zaslistr	   r	   r
   test_reversedg  s   


$z!AbstractMemoryTests.test_reversedc                 C   sl   | j D ]0}|| j}| |}| }| |j | t|j | | |  |	  |  qd S r   )
r   r   r!   
toreadonlyr[   rd   r;   r"   rW   r   )r   r)   r*   r   Zmmr	   r	   r
   test_toreadonlyo  s   



z#AbstractMemoryTests.test_toreadonlyc                 C   s   t  dg d}t|}|d}|d}|dd }t|}~| |d d | |d d | |jd | |jd |d}| |d d | |d d | |jd | |jd d S )NH)   r   r   r   Br   rC   r   I)arrayr;   castr"   rJ   )r   r   r   r   r*   rF   d_r	   r	   r
   test_issue22668z  s    


z#AbstractMemoryTests.test_issue22668N) rq   rr   rs   r   propertyr   r   r,   r-   r5   r<   rM   rP   rV   rY   r\   rb   rf   rh   rl   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r      s>    

4	
&
	r   c                   @   s    e Zd ZeZeZeZdZdZ	dS )BaseBytesMemoryTestsr@   r   N)
rq   rr   rs   rR   r   	bytearrayr   rQ   r]   rJ   r	   r	   r	   r
   r     s    r   c                   @   sT   e Zd ZdZdd Zdd ZedjZdZe	
ddd Ze	
d	d
d ZdS )BaseArrayMemoryTestsNc                 C   s   t  dt|S Nr/   )r   r2   r   r*   r	   r	   r
   r     s    zBaseArrayMemoryTests.<lambda>c                 C   s   t  dt| S r   )r   r2   rT   r   r	   r	   r
   r     r1   r/   z/XXX test should be adapted for non-byte buffersc                 C      d S r   r	   r   r	   r	   r
   rl        z#BaseArrayMemoryTests.test_getbufferz:XXX NotImplementedError: tolist() only supports byte viewsc                 C   r   r   r	   r   r	   r	   r
   rY     r   z BaseArrayMemoryTests.test_tolist)rq   rr   rs   r   r   rQ   r   r]   rJ   unittestskiprl   rY   r	   r	   r	   r
   r     s    
r   c                   @   s   e Zd Zdd Zdd ZdS )BaseMemoryviewTestsc                 C   s   t |S r   r;   )r   objr	   r	   r
   r!     s   zBaseMemoryviewTests._viewc                 C   s   |  ||| d S r   r"   r   r)   r   contentsr	   r	   r
   rG     r   z#BaseMemoryviewTests._check_contentsN)rq   rr   rs   r!   rG   r	   r	   r	   r
   r     s    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	BaseMemorySliceTests   XabcdefYc                 C   s   t |}|dd S Nr@      r   r   r   r   r	   r	   r
   r!     s   zBaseMemorySliceTests._viewc                 C      |  |dd || d S r   r   r   r	   r	   r
   rG        z$BaseMemorySliceTests._check_contentsc                 C   sF   | j D ]}t|| j}t|}|dd  | t|| qd S )Nr@   rC   )r   r;   r   r   r    r"   )r   r)   r   r+   r	   r	   r
   	test_refs  s   

zBaseMemorySliceTests.test_refsN)rq   rr   rs   r   r!   rG   r   r	   r	   r	   r
   r     s
    r   c                   @   s    e Zd ZdZdd Zdd ZdS )BaseMemorySliceSliceTestsr   c                 C   s   t |}|d d dd  S )Nr   r@   r   r   r	   r	   r
   r!     s   zBaseMemorySliceSliceTests._viewc                 C   r   r   r   r   r	   r	   r
   rG     r   z)BaseMemorySliceSliceTests._check_contentsN)rq   rr   rs   r   r!   rG   r	   r	   r	   r
   r     s    r   c                   @   rm   )BytesMemoryviewTestc                 C   sv   | j D ]5}|| j}| t| | t|d | tt | tt|| | jtt|d | jtt|dd qd S )N)object)argumentT)r   r   r[   r;   r&   r(   )r   r)   obr	   r	   r
   test_constructor  s   

z$BytesMemoryviewTest.test_constructorN)rq   rr   rs   r   r	   r	   r	   r
   r         r   c                   @   rm   )ArrayMemoryviewTestc                 C   sH   t  dtd}t|}t  dtddd}||d d < | || d S )Nr/   
   	   r   )r   r3   r;   r"   )r   r   r   Znew_ar	   r	   r
   test_array_assign  s
   z%ArrayMemoryviewTest.test_array_assignN)rq   rr   rs   r   r	   r	   r	   r
   r     r   r   c                   @   ru   )BytesMemorySliceTestNrv   r	   r	   r	   r
   r         r   c                   @   ru   )ArrayMemorySliceTestNrv   r	   r	   r	   r
   r     r   r   c                   @   ru   )BytesMemorySliceSliceTestNrv   r	   r	   r	   r
   r     r   r   c                   @   ru   )ArrayMemorySliceSliceTestNrv   r	   r	   r	   r
   r     r   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	OtherTestc              	   C   s   t d}t|d}| }t|d}|d d |d d< |dd  |dd < | |jd dD ]G}| |8 | }t||}t||d d |d d< t||dd  |dd < | |jd W d    n1 svw   Y  q4d S )Nctypesg333333?r   rC   ZBbc)	r   import_modulerR   Zc_doubler;   r   r"   r7   subTest)r   r   Zp6r   r   rJ   r	   r	   r
   test_ctypes_cast  s"   
zOtherTest.test_ctypes_castc                 C   s6   dd }t |}|d d d }| | dd  d S )Nr?   i@ r   Z30)r;   r"   hex)r   r   Zm1Zm2r	   r	   r
   test_memoryview_hex  s   zOtherTest.test_memoryview_hexc                 C   sB   t d}| t t| W d    d S 1 sw   Y  d S )Nrz   )r;   r&   r(   copyre   r	   r	   r
   	test_copy  s   "zOtherTest.test_copyc              	   C   sV   t d}ttjd D ]}| t t|| W d    n1 s#w   Y  qd S )Nrz   r@   )r;   r3   pickleHIGHEST_PROTOCOLr&   r(   dumps)r   r   protor	   r	   r
   test_pickle  s   zOtherTest.test_picklec              
      s  d fddG fddd}G fddd}G fdd	d	}d  t td
 | t |   W d    n1 sDw   Y  d  t td
 | td |  dgd  d  t td
 | t| d dgd  d  t td
 dd| td | df  W d    n1 sw   Y  d  t td
 dd| td d| f  W d    n1 sw   Y  d  t td
 | td d| < W d    n1 sw   Y  |  d d d d  t td
 | td dd | < W d    n	1 s%w   Y  |  d d d d  t td
 | td d| d< W d    n	1 sWw   Y  |  d d d d  t td
 dd| td d| df< W d    n	1 sw   Y  |  dd d d  t td
 dd| td dd| f< W d    n	1 sw   Y  |  d d d d  t td
 | td | d< W d    n	1 sw   Y  |  d d d dD ]M}| j|d; d  t td
 || td | d< W d    n	1 s1w   Y  |  d d d W d    n	1 sKw   Y  qdD ]M}| j|d; d  t td
 || td | d< W d    n	1 sw   Y  |  d d d W d    n	1 sw   Y  qTd  t td
 d| td | d< W d    n	1 sw   Y  |  d d d d S )N   c                      s      t d S r   )r   r   r	   )bar   sizer	   r
   r   )  s   z3OtherTest.test_use_released_memory.<locals>.releasec                          e Zd Z fddZdS )z3OtherTest.test_use_released_memory.<locals>.MyIndexc                    
      dS )NrN   r	   r   r   r	   r
   	__index__.     z=OtherTest.test_use_released_memory.<locals>.MyIndex.__index__N)rq   rr   rs   r   r	   r   r	   r
   MyIndex-      r   c                       r   )z3OtherTest.test_use_released_memory.<locals>.MyFloatc                    r   )Ng      @r	   r   r   r	   r
   	__float__2  r   z=OtherTest.test_use_released_memory.<locals>.MyFloat.__float__N)rq   rr   rs   r   r	   r   r	   r
   MyFloat1  r   r   c                       r   )z2OtherTest.test_use_released_memory.<locals>.MyBoolc                    r   )NTr	   r   r   r	   r
   __bool__6  r   z;OtherTest.test_use_released_memory.<locals>.MyBool.__bool__N)rq   rr   rs   r   r	   r   r	   r
   MyBool5  r   r         rN      r   )@   rC   zoperation forbiddenr   )rC   r   *   s           s   spam   ZbhilqnBHILQN)fmtfd?)	r;   r   r&   rK   r"   r2   r   r   r   )r   r   r   r   r   r	   )r   r   r   r   r
   test_use_released_memory$  s     z"OtherTest.test_use_released_memoryN)rq   rr   rs   r   r   r   r   r   r	   r	   r	   r
   r     s    r   __main__)r   Ztest.supportr   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   ZTestCaser   r   r   r   r   r   r   rq   mainr	   r	   r	   r
   <module>   sV        