U
    ,dj"                     @   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re	  dS )     N)jit)TestCasecompile_functionMemoryLeakMixinTZnopythonc                 C   s   t | S N)len)buf r
   D/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_buffer_protocol.pylen_usecase
   s    r   c                 C   s   | | S r   r
   )r	   ir
   r
   r   getitem_usecase   s    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                 #   s6   d}dD ](\} t  | fddt|D V  qd S )N
   ))b)Br   )hx)H@  )r   `y)I@B )lr4   )Lr6   )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
   r@   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rf|jj	rjt
t |V  |j}|jj	r|jjrt
t |V  |d d d }|jj	s|jjrt
t |V  d S )Nr,   	   abcdefghi))Zint8ir,   )Zuint8r   r,   )Zint16r1   i  )Zuint16r3   iP  )Zint32r4   i )Zuint32r   r6   )Zint64r:   r,   )Zuint64r   l    )Zfloat32r=         @)Zfloat64r=   rJ   )Z	complex64                    (@      @)Z
complex128rK   rL            r   )
memoryview	bytearraynpZlinspaceZastypearangereshapeflagsr#   r$   AssertionErrorT)rE   rF   Zdtypestartstoparrr
   r
   r   _memoryviewsR   s    


zTestBufferProtocol._memoryviewsc                 c   s4   dV  t dV  td}|jdd t |V  d S )N   xyzrI      Fwrite)rQ   rS   rT   setflagsrE   r[   r
   r
   r   _readonliesq   s
    

zTestBufferProtocol._readonliesc                 G   s   |j }| || ||  d S r   )Zpy_funcassertPreciseEqual)rE   Zjitfuncargsr    r
   r
   r   _check_unaryx   s    zTestBufferProtocol._check_unaryc                 C   s   |  t| d S r   )rf   r   rE   objr
   r
   r   	check_len|   s    zTestBufferProtocol.check_lenc                 C   s   |  t| d S r   )rf   r   rg   r
   r
   r   
check_iter   s    zTestBufferProtocol.check_iterc              
   C   sj   dd }||D ]T}z|| }W n0 t tfk
rP   t|trJ|j| }n Y nX | t||| qd S )Nc                 s   s\   z
| j }W n tk
r(   t| f}Y nX t|D ]"}t|dkrP|d V  q4|V  q4d S )Nr   r   )r)   AttributeErrorr   rS   Zndindex)rh   r)   tupr
   r
   r   yield_indices   s    
z7TestBufferProtocol.check_getitem.<locals>.yield_indices)NotImplementedError	TypeError
isinstancerQ   rh   rd   r   )rE   rh   rm   r   expectedr
   r
   r   check_getitem   s    
z TestBufferProtocol.check_getitemc                 C   st   t t|D ]b}t|}|| d d }t||| | || | t|D ] \}}||krL| || | qLqd S )Nr   r   )rD   r   listr   assertEqualr   )rE   rh   r   origvalr   r
   r
   r   check_setitem   s    z TestBufferProtocol.check_setitemc                 C   s   |  t|dt|d  d S )Nr   )rf   r   r   rg   r
   r
   r   check_getslice   s    z!TestBufferProtocol.check_getslicec                 C   sd   |  td |  d |  D ]}|  | q |  D ]}|  | q8|  D ]}| | qPd S )Nr^   r]   )ri   rR   r\   rH   rc   rr   rE   memr[   r	   r
   r
   r   test_len   s    
zTestBufferProtocol.test_lenc                 C   sd   |  td |  d |  D ]}|  | q |  D ]}|  | q8|  D ]}|  | qPd S Ns   abcr]   )rr   rR   r\   rH   rc   ry   r
   r
   r   test_getitem   s    
zTestBufferProtocol.test_getitemc              	   C   s   |    | td W 5 Q R X | d | td |    | tdtd W 5 Q R X |  D ]}| | qld S )Ns   abcdes   xyzuvwr   r,   )assertTypingErrorrx   rR   rQ   rC   rD   rc   rr   )rE   r	   r
   r
   r   test_getslice   s    


 z TestBufferProtocol.test_getslicec              
   C   sn   |  td |  D ]}|  | q|  D ]}| | q.|  D ]"}|   |  | W 5 Q R X qFd S )NrI   )rw   rR   rH   r\   rr   rc   r~   )rE   r[   rz   r	   r
   r
   r   test_setitem   s    
zTestBufferProtocol.test_setitemc                 C   sZ   |  td |  d |  td |  D ]}|  | q.|  D ]}| | qFd S r|   )rj   rR   rQ   rH   rc   rr   )rE   r[   r	   r
   r
   r   	test_iter   s    
zTestBufferProtocol.test_iterN)__name__
__module____qualname____doc__rH   r\   rc   rf   ri   rj   rr   rw   rx   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   sl   t d}|V  |d}|V  |jV  |d d d V  |jdd |V  t d}|jdksbt|V  d S )NrM   rN   r   Fr_   r
   r   )rS   rT   rU   rX   ra   zerosr'   rW   rb   r
   r
   r   rH      s    


zTestMemoryView._arraysc                 C   s,   |   D ]}t|}| t||j qd S r   )rH   rQ   rd   ndim_usecaser'   rE   r[   mr
   r
   r   	test_ndim   s    zTestMemoryView.test_ndimc                 C   s,   |   D ]}t|}| t||j qd S r   )rH   rQ   rd   shape_usecaser)   r   r
   r
   r   
test_shape   s    zTestMemoryView.test_shapec                 C   s,   |   D ]}t|}| t||j qd S r   )rH   rQ   rd   strides_usecaser*   r   r
   r
   r   test_strides   s    zTestMemoryView.test_stridesc                 C   s,   |   D ]}t|}| t||j qd S r   )rH   rQ   rd   itemsize_usecaser%   r   r
   r
   r   test_itemsize   s    zTestMemoryView.test_itemsizec                 C   s2   |   D ]$}t|}| t||j|j  qd S r   )rH   rQ   rd   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 )Nr]   TF)rH   rQ   assertIsreadonly_usecaserV   Z	writeablerR   r   r
   r
   r   test_readonly	  s    zTestMemoryView.test_readonlyc                 C   s   t td}| t|d | t|d | t|d |  D ]P}t |}| t||jjph|jj	 | t||jj	 | t||jj qDd S )Nr]   T)
rQ   rR   r   contiguous_usecasec_contiguous_usecasef_contiguous_usecaserH   rV   r$   r#   )rE   r   r[   r
   r
   r   test_contiguous  s    
zTestMemoryView.test_contiguousN)r   r   r   r   rH   r   r   r   r   r   r   r   r
   r
   r
   r   r      s   	r   __main__)rC   ZnumpyrS   Znumbar   Znumba.tests.supportr   r   r   Z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
