a
    
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
   i/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   )hx)H@  )r   `y)I@B )lr4   )Lr6   )q         )Ql           )f      ?)dg      c                    s   g | ]}|  qS r
   r
   ).0r   offsetr
   r   
<listcomp>P       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	rjJ t |V  |j
}|jj	r|jjrJ t |V  |d d d }|jj	s|jjrJ t |V  d S )Nr,   	   abcdefghi))Zint8ir,   )Zuint8r   r,   )int16r1   i  )Zuint16r3   iP  )int32r4   i )Zuint32r   r6   )int64r:   r,   )Zuint64r   l    )float32r=         @)float64r=   rO   )Z	complex64                    (@      @)Z
complex128rQ   rR            r   )
memoryview	bytearraynpZlinspaceZastypearangereshapeflagsr#   r$   T)rF   rG   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   xyzrJ      Fwrite)rW   rY   rZ   setflagsrF   r`   r
   r
   r   _readonliesq   s
    

zTestBufferProtocol._readonliesc                 G   s   |j }| || ||  d S r   )Zpy_funcassertPreciseEqual)rF   Zjitfuncargsr    r
   r
   r   _check_unaryx   s    zTestBufferProtocol._check_unaryc                 C   s   |  t| d S r   )rk   r   rF   objr
   r
   r   	check_len|   s    zTestBufferProtocol.check_lenc                 C   s   |  t| d S r   )rk   r   rl   r
   r
   r   
check_iter   s    zTestBufferProtocol.check_iterc              
   C   sh   dd }||D ]R}z|| }W n. t tfyN   t|trH|j| }n Y n0 | t||| qd S )Nc                 s   sZ   z
| j }W n ty&   t| f}Y n0 t|D ]"}t|dkrN|d V  q2|V  q2d S )Nr   r   )r)   AttributeErrorr   rY   Zndindex)rm   r)   tupr
   r
   r   yield_indices   s    
z7TestBufferProtocol.check_getitem.<locals>.yield_indices)NotImplementedError	TypeError
isinstancerW   rm   ri   r   )rF   rm   rr   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   )rE   r   listr   assertEqualr   )rF   rm   r   origvalr   r
   r
   r   check_setitem   s    z TestBufferProtocol.check_setitemc                 C   s   |  t|dt|d  d S )Nr   )rk   r   r   rl   r
   r
   r   check_getslice   s    z!TestBufferProtocol.check_getslicec                 C   sd   |  td |  d |  D ]}|  | q |  D ]}|  | q8|  D ]}| | qPd S )Nrc   rb   )rn   rX   ra   rI   rh   rw   rF   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   abcrb   )rw   rX   ra   rI   rh   r~   r
   r
   r   test_getitem   s    
zTestBufferProtocol.test_getitemc                 C   s   |    | td W d    n1 s,0    Y  | d | td |   & | tdtd W d    n1 s0    Y  |  D ]}| | qd S )Ns   abcdes   xyzuvwr   r,   )assertTypingErrorr}   rX   rW   rD   rE   rh   rw   )rF   r	   r
   r
   r   test_getslice   s    
,

4z TestBufferProtocol.test_getslicec              	   C   s   |  td |  D ]}|  | q|  D ]}| | q.|  D ]6}|   |  | W d    qF1 sr0    Y  qFd S )NrJ   )r|   rX   rI   ra   rw   rh   r   )rF   r`   r   r	   r
   r
   r   test_setitem   s    
zTestBufferProtocol.test_setitemc                 C   sZ   |  td |  d |  td |  D ]}|  | q.|  D ]}| | qFd S r   )ro   rX   rW   rI   rh   rw   )rF   r`   r	   r
   r
   r   	test_iter   s    
zTestBufferProtocol.test_iterN)__name__
__module____qualname____doc__rI   ra   rh   rk   rn   ro   rw   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   sl   t d}|V  |d}|V  |jV  |d d d V  |jdd |V  t d}|jdksbJ |V  d S )NrS   rT   r   Frd   r
   r   )rY   rZ   r[   r]   rf   zerosr'   rg   r
   r
   r   rI      s    


zTestMemoryView._arraysc                 C   s,   |   D ]}t|}| t||j qd S r   )rI   rW   ri   ndim_usecaser'   rF   r`   mr
   r
   r   	test_ndim   s    zTestMemoryView.test_ndimc                 C   s,   |   D ]}t|}| t||j qd S r   )rI   rW   ri   shape_usecaser)   r   r
   r
   r   
test_shape   s    zTestMemoryView.test_shapec                 C   s,   |   D ]}t|}| t||j qd S r   )rI   rW   ri   strides_usecaser*   r   r
   r
   r   test_strides   s    zTestMemoryView.test_stridesc                 C   s,   |   D ]}t|}| t||j qd S r   )rI   rW   ri   itemsize_usecaser%   r   r
   r
   r   test_itemsize   s    zTestMemoryView.test_itemsizec                 C   s2   |   D ]$}t|}| t||j|j  qd S r   )rI   rW   ri   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 )Nrb   TF)rI   rW   assertIsreadonly_usecaser\   Z	writeablerX   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 )Nrb   T)
rW   rX   r   contiguous_usecasec_contiguous_usecasef_contiguous_usecaserI   r\   r$   r#   )rF   r   r`   r
   r
   r   test_contiguous  s    
zTestMemoryView.test_contiguousN)r   r   r   r   rI   r   r   r   r   r   r   r   r
   r
   r
   r   r      s   	r   __main__)rD   numpyrY   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
