U
    iâË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
   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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   )Úhéxìÿÿ)Ú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rŽt
‚t |ƒV  |d d d… }|jj	s¶|jjrºt
‚t |ƒV  d S )Nr,   ó	   abcdefghi))Zint8iöÿÿÿr,   )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   Z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   Ú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
