o
    ij"                     @   s  d dl Z d dlZd dlmZ d dlmZmZmZ d dl	Z	edddd Z
edddd	 Zeddd
d Zedddd Zedddd Zdd ZedZedZedZedZedZedZedZedZedZG dd deeZG dd deeZedkre	  dS dS )     N)jit)TestCasecompile_functionMemoryLeakMixinTnopythonc                 C   s   t | S N)len)buf r   ^/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_buffer_protocol.pylen_usecase
      r   c                 C   s   | | S r   r   )r
   ir   r   r   getitem_usecase   r   r   c                 C   s    | || }|d d|d   S )Nr      r   )r
   r   jsr   r   r   getslice_usecase   s   r   c                 C   s   || |< d S r   r   )r
   r   vr   r   r   setitem_usecase   s   r   c                 C   s.   d}t | D ]\}}||7 }||d 9 }q|S )Ng           )	enumerate)r
   resr   xr   r   r   iter_usecase   s
   r   c                 C   s&   dt   }td|t }tdd|S )Nz'def func(x):
        return x.%(attr)s
funcTr   )localsr   globalsr   )attrcodepyfuncr   r   r   
attrgetter(   s
   r#   
contiguousc_contiguousf_contiguousitemsizenbytesndimreadonlyshapestridesc                   @   s   e Zd Z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S )TestBufferProtocolz6
    Test operations on buffer-providing objects.
    c                 #   s8    d}dD ]\} t  | fddt|D V  qd S )N
   ))b)Br   )hx)H@  )r   `y)I@B )lr6   )Lr8   )q         )Ql           )f      ?)dg      c                    s   g | ]}|  qS r   r   ).0r   offsetr   r   
<listcomp>P   s    z.TestBufferProtocol._arrays.<locals>.<listcomp>)arrayrange)selfnletterr   rB   r   _arrays@   s
   "zTestBufferProtocol._arraysc                 c   s    d}t tdV  t dV  dD ]\}}}t t||||V  qtdd}|jjr4|jj	r6J t |V  |j
}|jj	rF|jjrHJ t |V  |d d d }|jj	s\|jjr^J t |V  d S )Nr.   	   abcdefghi))int8ir.   )uint8r   r.   )int16r3   i  )uint16r5   iP  )int32r6   i )uint32r   r8   )int64r<   r.   )uint64r   l    )float32r?         @)float64r?   rU   )	complex64                    (@      @)
complex128rX   rY            r   )
memoryview	bytearraynplinspaceastypearangereshapeflagsr%   r&   T)rG   rH   dtypestartstoparrr   r   r   _memoryviewsR   s   


zTestBufferProtocol._memoryviewsc                 c   s6    dV  t dV  td}|jdd t |V  d S )N   xyzrK      Fwrite)r_   ra   rd   setflagsrG   rk   r   r   r   _readonliesq   s   

zTestBufferProtocol._readonliesc                 G   s   |j }| || ||  d S r   )py_funcassertPreciseEqual)rG   jitfuncargsr"   r   r   r   _check_unaryx   s   zTestBufferProtocol._check_unaryc                 C      |  t| d S r   )rx   r   rG   objr   r   r   	check_len|      zTestBufferProtocol.check_lenc                 C   ry   r   )rx   r   rz   r   r   r   
check_iter   r}   zTestBufferProtocol.check_iterc              
   C   sh   dd }||D ])}z|| }W n t tfy'   t|tr$|j| }n Y nw | t||| qd S )Nc                 s   s\    z| j }W n ty   t| f}Y nw t|D ]}t|dkr(|d V  q|V  qd S )Nr   r   )r+   AttributeErrorr	   ra   ndindex)r{   r+   tupr   r   r   yield_indices   s   
z7TestBufferProtocol.check_getitem.<locals>.yield_indices)NotImplementedError	TypeError
isinstancer_   r{   ru   r   )rG   r{   r   r   expectedr   r   r   check_getitem   s   
z TestBufferProtocol.check_getitemc                 C   st   t t|D ]1}t|}|| d d }t||| | || | t|D ]\}}||kr6| || | q&qd S )Nr   r   )rF   r	   listr   assertEqualr   )rG   r{   r   origvalr   r   r   r   check_setitem   s   z TestBufferProtocol.check_setitemc                 C   s   |  t|dt|d  d S )Nr   )rx   r   r	   rz   r   r   r   check_getslice   s   z!TestBufferProtocol.check_getslicec                 C   sd   |  td |  d |  D ]}|  | q|  D ]}|  | q|  D ]}| | q(d S )Nrn   rm   )r|   r`   rl   rJ   rs   r   rG   memrk   r
   r   r   r   test_len      
zTestBufferProtocol.test_lenc                 C   sd   |  td |  d |  D ]}|  | q|  D ]}|  | q|  D ]}|  | q(d S Ns   abcrm   )r   r`   rl   rJ   rs   r   r   r   r   test_getitem   r   zTestBufferProtocol.test_getitemc                 C   s   |    | td W d    n1 sw   Y  | d | td |    | tdtd W d    n1 sAw   Y  |  D ]}| | qJd S )Ns   abcdes   xyzuvwr   r.   )assertTypingErrorr   r`   r_   rE   rF   rs   r   )rG   r
   r   r   r   test_getslice   s   


z TestBufferProtocol.test_getslicec              	   C   s   |  td |  D ]}|  | q|  D ]}| | q|  D ]}|   |  | W d    n1 s9w   Y  q#d S )NrK   )r   r`   rJ   rl   r   rs   r   )rG   rk   r   r
   r   r   r   test_setitem   s   
zTestBufferProtocol.test_setitemc                 C   sZ   |  td |  d |  td |  D ]}|  | q|  D ]}| | q#d S r   )r~   r`   r_   rJ   rs   r   )rG   rk   r
   r   r   r   	test_iter   s   
zTestBufferProtocol.test_iterN)__name__
__module____qualname____doc__rJ   rl   rs   rx   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r-   ;   s     



r-   c                   @   sP   e Zd Z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S )TestMemoryViewz=
    Test memoryview-specific attributes and operations.
    c                 c   sn    t d}|V  |d}|V  |jV  |d d d V  |jdd |V  t d}|jdks2J |V  d S )Nr[   r\   r   Fro   r   r   )ra   rd   re   rg   rq   zerosr)   rr   r   r   r   rJ      s   



zTestMemoryView._arraysc                 C   ,   |   D ]}t|}| t||j qd S r   )rJ   r_   ru   ndim_usecaser)   rG   rk   mr   r   r   	test_ndim      zTestMemoryView.test_ndimc                 C   r   r   )rJ   r_   ru   shape_usecaser+   r   r   r   r   
test_shape   r   zTestMemoryView.test_shapec                 C   r   r   )rJ   r_   ru   strides_usecaser,   r   r   r   r   test_strides   r   zTestMemoryView.test_stridesc                 C   r   r   )rJ   r_   ru   itemsize_usecaser'   r   r   r   r   test_itemsize   r   zTestMemoryView.test_itemsizec                 C   s2   |   D ]}t|}| t||j|j  qd S r   )rJ   r_   ru   nbytes_usecasesizer'   r   r   r   r   test_nbytes  s   zTestMemoryView.test_nbytesc                 C   sd   |   D ]}t|}| t||jj  qtd}| t|d ttd}| t|d d S )Nrm   TF)rJ   r_   assertIsreadonly_usecaserf   	writeabler`   r   r   r   r   test_readonly	  s   zTestMemoryView.test_readonlyc                 C   s   t td}| t|d | t|d | t|d |  D ](}t |}| t||jjp4|jj	 | t||jj	 | t||jj q"d S )Nrm   T)
r_   r`   r   contiguous_usecasec_contiguous_usecasef_contiguous_usecaserJ   rf   r&   r%   )rG   r   rk   r   r   r   test_contiguous  s   
zTestMemoryView.test_contiguousN)r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r   r      s    	r   __main__)rE   numpyra   numbar   numba.tests.supportr   r   r   unittestr   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r-   r   r   mainr   r   r   r   <module>   s>    




 $B