o
    OZhd                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
ZmZmZ d dlZd dlT d dlZde kZe edG dd de jZedkrKe   dS dS )	    N)
uint8uint16uint32uint64zerosfloat32float64allrintarange)*PyPyzpypy skip known failurec                   @   sx  e Zd ZdddddZdddddZdddddZdddddZg dZdZg dZ	e
dd Ze
d	d
 Zdd ZdMddZdNddZdMddZdOd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/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dS )PSurfarrayModuleTestTF             )r   r   r      )
      <   r   )   K   d   r   )r         r   )r   r   r   r   )r      ))r   r      ))      r    ))	   r      )r"   r"   r$   ))r         ))r!      r'   ))r#   r&   r!   ))r"   r(   r!   c                 C      t   d S N)pygameinitcls r/   J/var/www/auris/lib/python3.10/site-packages/pygame/tests/surfarray_test.py
setUpClass4   s   zSurfarrayModuleTest.setUpClassc                 C   r)   r*   )r+   quitr-   r/   r/   r0   tearDownClass9   s   z!SurfarrayModuleTest.tearDownClassc                 C   s   t  s
t   d S d S r*   )r+   Zget_initr,   r-   r/   r/   r0   setUp=   s   zSurfarrayModuleTest.setUpNc                 C   sN   |d u r| j }d}|r|tO }t| j||}|dkr%|dd |D  |S )Nr   r   c                 S   s   g | ]}|d d qS )Nr'   r/   .0cr/   r/   r0   
<listcomp>K   s    z5SurfarrayModuleTest._make_surface.<locals>.<listcomp>)test_paletteSRCALPHAr+   Surface	surf_sizeZset_palette)selfbitsizesrcalphapaletteflagssurfr/   r/   r0   _make_surfaceC   s   z!SurfarrayModuleTest._make_surfacec                 C   sR   |d u r| j }||d d ||d d ||d d ||d d d S )	Nr    )r   r   r"   r(   r$   )r"   r   r"   r(   r'   )r   r(   r"   r(   r!   )r"   r(   r"   r(   )r9   fill)r=   rB   r@   r/   r/   r0   _fill_surfaceN   s   z!SurfarrayModuleTest._fill_surfacec                 C   s   |  |||}| || |S r*   )rC   rE   )r=   r>   r?   r@   rB   r/   r/   r0   _make_src_surfaceV   s   z%SurfarrayModuleTest._make_src_surface c                    sz   |d u r| j }  dkr fdd|D }| jD ]!\}}|  ||| d |||     ||f  qd S )Nr   c                       g | ]
}   |qS r/   	unmap_rgbmap_rgbr5   rB   r/   r0   r8   _       z7SurfarrayModuleTest._assert_surface.<locals>.<listcomp>z(%s != %s: flags: %i, bpp: %i, posn: %s%s)r9   get_bitsizetest_pointsassertEqualget_at	get_flags)r=   rB   r@   msgposnir/   rL   r0   _assert_surface[   s&   z#SurfarrayModuleTest._assert_surfacec                 C   s   t | jd | jd df|S )Nr   r    r'   r   r<   r=   dtyper/   r/   r0   _make_array3do   s   z!SurfarrayModuleTest._make_array3dc                 C   s   | j }||d d@ |d dd df< ||d d@ |dd d df< ||d d@ |d ddd f< ||d d@ |dd dd f< d S )Nr    l    r"   r(   r$   r'   r!   )r9   rK   )r=   arrrB   r@   r/   r/   r0   _fill_array2dr   s
   """&z!SurfarrayModuleTest._fill_array2dc                 C   s   | j }|d d d |d dd df< |d d d |dd d df< |d d d |d ddd f< |d d d |dd dd f< d S )Nr    r'   r"   r(   r$   r!   )r9   )r=   r[   r@   r/   r/   r0   _fill_array3dy   s
      $z!SurfarrayModuleTest._fill_array3dc                 C   s   |  |}| | |S r*   )rZ   r]   )r=   rY   r[   r/   r/   r0   _make_src_array3d   s   

z%SurfarrayModuleTest._make_src_array3dc                 C   s   t | j|S r*   rW   rX   r/   r/   r0   _make_array2d   s   z!SurfarrayModuleTest._make_array2dc                 C   s   |  d|  d| j ddd|  d|  d| j dddg}| j}d}|D ]W}tj|}| jD ] \}}| || ||d|| ||| |	 |f  q0|
 d	 r||| tj|}d
}| || ||d|| |||	 f  q%d S )Nr   r   Tr?   r   r   )r   r   r      &%s != %s: flags: %i, bpp: %i, posn: %sr'   r   z%s != %s: bpp: %i)rF   r9   r+   	surfarrayarray2drO   rP   get_at_mappedrR   rN   	get_masksrD   )r=   sourcesr@   Zalpha_colorrB   r[   rT   rU   r/   r/   r0   test_array2d   sJ   
z SurfarrayModuleTest.test_array2dc                 C   s   |  d| j ddd|  d|  d| j dddg}| j}|D ]4}tj|}dd }| jD ]$\}}| ||| ||dt|| |||	 |
 |f  q.qd S )	Nr   Tr`   r   r   c                 S   s0   | d |d ko| d |d ko| d |d kS )Nr   r    r$   r/   )acscr/   r/   r0   
same_color   s   0z4SurfarrayModuleTest.test_array3d.<locals>.same_colorrb   )rF   r9   r+   rc   array3drO   
assertTruerQ   tuplerR   rN   )r=   rg   r@   rB   r[   rk   rT   rU   r/   r/   r0   test_array3d   s0   
z SurfarrayModuleTest.test_array3dc           	         s  g d}| j d|d| j d|d| j d|dd| j d|d| j d|d| j d|ddg}|D ]S |}  dkrA fd	d
|D }tj }  d rx| jD ]&\\}}}| |||f || d d|||f || d ||  f  qPq.| t	|dk q.|D ](  
 } d  tj }| t	|dkd    f   | q|D ]A  
 } d tj }  d r| t	|dkd    f  n| t	|dkd    f   | qd S )Nr   r   r   r   )r   2   r   r   )r   x         )@   ra   r   r   )r   ra   r   A   r   r@   r   Tr@   r?   r   r   c                    rH   r/   rI   r5   rL   r/   r0   r8      rM   z8SurfarrayModuleTest.test_array_alpha.<locals>.<listcomp>r'   %%i != %i, posn: (%i, %i), bitsize: %ir   z]All alpha values should be 255 when surf.set_alpha(None) has been set. bitsize: %i, flags: %ir   zbitsize: %i, flags: %i)rF   rN   r+   rc   Zarray_alpharf   rO   rP   rm   alltrueZ	get_alphaZ	set_alpharR   assertFalse)	r=   r@   targetspr[   xyrU   Zblanket_alphar/   rL   r0   test_array_alpha   sd   	

 




z$SurfarrayModuleTest.test_array_alphac           
         s@  g d}| j d|d| j d|d| j d|dd| j d|d| j d|d| j d|ddg}|D ]o |}  dkrA fd	d
|D } d  tj }| t|dk tdt	|D ]@} ||  dgt	| }d||< tj }| j
D ]"\\}}}	| |||f ||	 d|||f ||	 ||  f  qyq\q.d S )Nrp   r   rx   r   Try   r   r   c                    rH   r/   rI   r5   rL   r/   r0   r8   "  rM   z;SurfarrayModuleTest.test_array_colorkey.<locals>.<listcomp>r   r    r   rz   )rF   rN   Zset_colorkeyr+   rc   Zarray_colorkeyrm   r{   rangelenrO   rP   )
r=   r@   r}   r~   r[   rU   alphasr   r   jr/   rL   r0   test_array_colorkey  s>   	

z'SurfarrayModuleTest.test_array_colorkeyc                 C      |  dd d S Nredr   _test_array_rgbr=   r/   r/   r0   test_array_red7     z"SurfarrayModuleTest.test_array_redc                 C   r   Ngreenr    r   r   r/   r/   r0   test_array_green:  r   z$SurfarrayModuleTest.test_array_greenc                 C   r   Nbluer$   r   r   r/   r/   r0   test_array_blue=  r   z#SurfarrayModuleTest.test_array_bluec                    s   d| }t tj|}g d} fdd|D }| jd|d| jd|d| jd|dd	g}|D ]C}| |  | jD ]6\\}	}
}|||  ||}| ||	|
f ||  |d
 | ||	|
f ||  | |  ~q:q.d S )NZarray_r   )r"         r   )      %   r   )         r   )         r   c                       g | ]}|  qS r/   r/   r5   	mask_posnr/   r0   r8   K      z7SurfarrayModuleTest._test_array_rgb.<locals>.<listcomp>r   rx   r   Try   )r   r   r      )	getattrr+   rc   rF   r|   
get_lockedrO   rD   rP   )r=   	operationr   method_nameZ	array_rgbr@   planer}   rB   r   r   rU   r[   r/   r   r0   r   @  s(   
z#SurfarrayModuleTest._test_array_rgbc                    s  t ddd t j }t j | ddjdddddjdddg}g }dtfdtfdtfg}z	|	d	t
f W n	 tyQ   Y nw fd
d|D }dD ]X}d }|dkrvt ddd  fddjD }j| r|t j}|	||f j| r|t j}|	||f |D ]\}}	|	||	|f qq]dd }
|D ] }|D ]#\}}d |dkrڈt|
| qt j| | qĈj| rd | t@  t j }t j|  j| rS| t@  t j }|D ]+\}}	d ||krFt j||	  q't|
|	 q'qjdddt t}d|d< |d }t j| d| jdddt t}d}||d< t j| d|  t}dg dg dfdg dg dfdg dg dfg}|D ]2\}}}j||d dkdd }|dkrfddjD }t!j"| t!j#| qt dddd}t|
| j$}t |ddt|d |d  d  dgt}t|
| t|d d  |d  dgt}t|
| t d!ddtd"t}t|
| d#|_%t|
| zt& W n typ   Y d S w t dt jd \}}|| }t't(fD ]>}	d$ t)d||	d%}||f|_%t j| t*|D ]}t*|D ]}+||ft,t&|||f  qqqd S )&N)r   r   r   r   r   r   Tr`   r   rv   c                    s   g | ]\}}  |d fqS r*   )r^   )r6   __rY   r   r/   r0   r8   t  s    z7SurfarrayModuleTest.test_blit_array.<locals>.<listcomp>r   )r    r    c                    rH   r/   rI   r5   )sr/   r0   r8   y  rM   c                 S   s   t j| | d S r*   )r+   rc   
blit_array)rB   r[   r/   r/   r0   do_blit  s   z4SurfarrayModuleTest.test_blit_array.<locals>.do_blitrq   )r   ra   r   rv   .r   r%   )r   o   r   ?   )r   r   r   r!   )i      i   rt   )r   r   r   r   )   r      r   )r   r   r   r   )r   r   l      ~ r   r'   c                    rH   r/   rI   r5   rL   r/   r0   r8     rM   abcdr    )r    r!   )r!   )r    r    r    r!   )r   r   r   r   rY   )-r+   r;   rc   rl   r   rC   r   r   r   appendr   	NameErrorr9   pixels3drF   ZastyperN   rD   assertRaises
ValueErrorrV   pixels2drR   r:   rd   r_   r   get_sizerK   rJ   rP   rQ   r^   	TypeErrorZ
set_shiftsZ	set_masksr<   shaper
   r   r   r   r   re   int)r=   ar}   Zarrays3dZdtypesr>   r@   r[   szrY   r   colorarr3dZshift_testsZshiftsmaskstr<   whlengthfarrr   r   r/   )r   r=   rB   r0   test_blit_array^  s   














z#SurfarrayModuleTest.test_blit_arrayc                 C   s"   t j }| |dd|  d S Nnumpyzunknown array type )r+   rc   get_arraytyperP   )r=   Z
array_typer/   r/   r0   test_get_arraytype  s   
z&SurfarrayModuleTest.test_get_arraytypec                 C   s8   t j }| d| |D ]}| |dd|  qd S r   )r+   rc   get_arraytypesZassertInrP   )r=   Z
arraytypesatyper/   r/   r0   test_get_arraytypes  s
   
z'SurfarrayModuleTest.test_get_arraytypesc           
      C   s   dt fdtfdtffD ]\}}tj| |}| | qzt W n
 t	y,   Y d S w d}d}|| }t
tfD ]5}td||d}||f|_tj|}t|D ]}t|D ]}	| |||	ftt|||	f  qWqQq9d S )Nr   r   r   r#   r&   r   r   )r   r   r   r+   rc   Zmake_surfacer^   rV   r
   r   r   r   r   r   r   rP   re   r   )
r=   r>   rY   rB   r   r   r   r   r   r   r/   r/   r0   test_make_surface  s.   
z%SurfarrayModuleTest.test_make_surfacec                 C   s   |  t}| d| d| jddd| d| d| jdddg}| j}|D ]0}tj||}| jD ]#\}}| || |	|| d|| |	|| |
 | f  q4q(| ttjj| d| t d S )Nr   r   Tr`   r   r   z %i != %i, bitsize: %i, flags: %i)r^   r   rC   r9   r+   rc   Z	map_arrayrO   rP   rK   rN   rR   r   r   r_   )r=   r   r}   r@   rB   Zarr2drT   rU   r/   r/   r0   test_map_array  s<   
z"SurfarrayModuleTest.test_map_arrayc                 C   s   |  d| j ddd| j dddg}|D ]<}| |  tj|}| |  | || |  | |  ~| |  | 	|
 d | | q| ttjj|  d d S )Nr   r   Tr`   r   r/   r   )rC   r|   r   r+   rc   r   rm   r\   unlockrP   	get_locksrV   r   r   )r=   rg   rB   r[   r/   r/   r0   test_pixels2dA  s    z!SurfarrayModuleTest.test_pixels2dc                 C   s  |  d|  dg}|D ];}| |  tj|}| |  | | |  | |  ~| |  | 	|
 d | | qd}| j ddd}tj|}|d d |d< | 	|d| d	d
 }| t||  d | t||  d d S )Nr   r   r/   )r    r$   r'   r   Tr`   r'   r   c                 S      t j|  d S r*   )r+   rc   r   rL   r/   r/   r0   do_pixels3dn  r   z6SurfarrayModuleTest.test_pixels3d.<locals>.do_pixels3dr   r   )rC   r|   r   r+   rc   r   rm   r]   r   rP   r   rV   rQ   r   r   )r=   rg   rB   r[   r   r   r/   r/   r0   test_pixels3dW  s(   
z!SurfarrayModuleTest.test_pixels3dc              	   C   s:  g d}g d}| j dd|d}| |  tj|}| |  |  | |  | jD ]\\}}}| 	|||f || d  q2| jD ]&\\}}}|| }||||f< ddd|f}	| 	|
||f|	d||f  qJ~| |  | 	| d	 d
d }
g d}|D ]\}}| t|
| || qd S )N)rq   )   r   r   r   )r   r   r   U   )r   r   r      )r   r   r   r   )r   -   V   c      r   Tr?   r@   r'   r   zposn: (%i, %i)r/   c                 S   r   r*   )r+   rc   pixels_alpharL   r/   r/   r0   do_pixels_alpha  r   z>SurfarrayModuleTest.test_pixels_alpha.<locals>.do_pixels_alpha)r   Fr   Fr   T)r   F)r   F)rF   r|   r   r+   rc   r   rm   r   rO   rP   rQ   r   r   r   rC   )r=   r@   r   rB   r[   r   r   rU   alphar   r   r}   r>   r?   r/   r/   r0   test_pixels_alphat  s2   "z%SurfarrayModuleTest.test_pixels_alphac                 C   r   r   _test_pixels_rgbr   r/   r/   r0   test_pixels_red  r   z#SurfarrayModuleTest.test_pixels_redc                 C   r   r   r   r   r/   r/   r0   test_pixels_green  r   z%SurfarrayModuleTest.test_pixels_greenc                 C   r   r   r   r   r/   r/   r0   test_pixels_blue  r   z$SurfarrayModuleTest.test_pixels_bluec              	      s$  d| }t tj|}g d} fdd|D }| jdd|d}| jdd|d}| jdd	|d}	|||	fD ]E}
| |
  ||
}| |
  |
  | |
  | jD ]\\}}}| 	|||f ||  qV~| |
  | 	|

 d
 q4g d}|D ]\}}| t|| || qd S )NZpixels_r   c                    r   r/   r/   r5   r   r/   r0   r8     r   z8SurfarrayModuleTest._test_pixels_rgb.<locals>.<listcomp>r   Fr   r   Tr/   )r   r   r   )r   r+   rc   rF   r|   r   rm   r   rO   rP   r   r   r   rC   )r=   r   r   r   Z
pixels_rgbr@   r   Zsurf24Zsurf32Zsurf32arB   r[   r   r   rU   r}   r>   r?   r/   r   r0   r     s0   z$SurfarrayModuleTest._test_pixels_rgbc                 C   s8   dd }t jd | t j d | t|d d S )Nc                 S   r   r*   )r+   rc   use_arraytype)r   r/   r/   r0   do_use_arraytype  r   z@SurfarrayModuleTest.test_use_arraytype.<locals>.do_use_arraytyper   znot an option)r+   rc   r   rP   r   r   r   )r=   r   r/   r/   r0   test_use_arraytype  s   z&SurfarrayModuleTest.test_use_arraytypec                 C   s~   t ddd}t j D ]0}t j| t j|}| |  |  | |  ~| 	|  | 
| d qd S )Nr%   r   r   r/   )r+   r;   rc   r   r   r   rm   r   r   r|   rP   r   )r=   Zsfr   arr/   r/   r0   test_surf_lock  s   z"SurfarrayModuleTest.test_surf_lock)FNr*   )NrG   )-__name__
__module____qualname__r   r   rd   rl   r9   r<   rO   classmethodr1   r3   r4   rC   rE   rF   rV   rZ   r\   r]   r^   r_   rh   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r      sZ    





'B) "#*'r   __main__)Zunittestplatformr   r   r   r   r   r   r   r   r	   r{   r
   r   r+   Zpygame.localsZpygame.surfarraypython_implementationZIS_PYPYZskipIfZTestCaser   r   mainr/   r/   r/   r0   <module>   s"    0
     P