o
    tVgd                     @   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/   O/home/ubuntu/.local/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+   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_size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(   )r:   fill)r?   rD   rB   r/   r/   r0   _fill_surfaceN   s   z!SurfarrayModuleTest._fill_surfacec                 C   s   |  |||}| || |S r*   )rE   rG   )r?   r@   rA   rB   rD   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_rgbr6   rD   r/   r0   r9   _       z7SurfarrayModuleTest._assert_surface.<locals>.<listcomp>z(%s != %s: flags: %i, bpp: %i, posn: %s%s)r:   get_bitsizetest_pointsassertEqualget_at	get_flags)r?   rD   rB   msgposnir/   rN   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!   )r:   rM   )r?   arrrD   rB   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!   )r:   )r?   r]   rB   r/   r/   r0   _fill_array3dy   s
      $z!SurfarrayModuleTest._fill_array3dc                 C   s   |  |}| | |S r*   )r\   r_   )r?   r[   r]   r/   r/   r0   _make_src_array3d   s   

z%SurfarrayModuleTest._make_src_array3dc                 C   s   t | j|S r*   rY   rZ   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rA   r   r   )r   r   r      &%s != %s: flags: %i, bpp: %i, posn: %sr'   r   z%s != %s: bpp: %i)rH   r:   r+   	surfarrayarray2drQ   rR   get_at_mappedrT   rP   	get_masksrF   )r?   sourcesrB   alpha_colorrD   r]   rV   rW   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   Trb   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_colorrd   )rH   r:   r+   re   array3drQ   
assertTruerS   tuplerT   rP   )r?   ri   rB   rD   r]   rn   rV   rW   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         )@   rc   r   r   )r   rc   r   A   r   rB   r   TrB   rA   r   r   c                    rJ   r/   rK   r6   rN   r/   r0   r9      rO   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)rH   rP   r+   re   array_alpharh   rQ   rR   rp   alltrue	get_alpha	set_alpharT   assertFalse)	r?   rB   targetspr]   xyrW   blanket_alphar/   rN   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 )Nrs   r   r{   r   Tr|   r   r   c                    rJ   r/   rK   r6   rN   r/   r0   r9   "  rO   z;SurfarrayModuleTest.test_array_colorkey.<locals>.<listcomp>r   r    r   r}   )rH   rP   set_colorkeyr+   re   array_colorkeyrp   r   rangelenrQ   rR   )
r?   rB   r   r   r]   rW   alphasr   r   jr/   rN   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 )Narray_r   )r"         r   )      %   r   )         r   )         r   c                       g | ]}|  qS r/   r/   r6   	mask_posnr/   r0   r9   K      z7SurfarrayModuleTest._test_array_rgb.<locals>.<listcomp>r   r{   r   Tr|   )r   r   r      )	getattrr+   re   rH   r   
get_lockedrQ   rF   rR   )r?   	operationr   method_name	array_rgbrB   planer   rD   r   r   rW   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   Trb   r   ry   c                    s   g | ]\}}  |d fqS r*   )r`   )r7   __r[   r   r/   r0   r9   t  s    z7SurfarrayModuleTest.test_blit_array.<locals>.<listcomp>r   )r    r    c                    rJ   r/   rK   r6   )sr/   r0   r9   y  rO   c                 S   s   t j| | d S r*   )r+   re   
blit_array)rD   r]   r/   r/   r0   do_blit  s   z4SurfarrayModuleTest.test_blit_array.<locals>.do_blitrt   )r   rc   r   ry   .r   r%   )r   o   r   ?   )r   r   r   r!   )i      i   rw   )r   r   r   r   )   r      r   )r   r   r   r   )r   r   l      ~ r   r'   c                    rJ   r/   rK   r6   rN   r/   r0   r9     rO   abcdr    )r    r!   )r!   )r    r    r    r!   )r   r   r   r   r[   )-r+   r<   re   ro   r   rE   r   r   r   appendr   	NameErrorr:   pixels3drH   astyperP   rF   assertRaises
ValueErrorrX   pixels2drT   r;   rf   ra   r   get_sizerM   rL   rR   rS   r`   	TypeError
set_shifts	set_masksr=   shaper
   r   r   r   r   rg   int)r?   ar   arrays3ddtypesr@   rB   r]   szr[   r   colorarr3dshift_testsshiftsmaskstr=   whlengthfarrr   r   r/   )r   r?   rD   r0   test_blit_array^  s   














z#SurfarrayModuleTest.test_blit_arrayc                 C   s"   t j }| |dd|  d S Nnumpyzunknown array type )r+   re   get_arraytyperR   )r?   
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+   re   get_arraytypesassertInrR   )r?   
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+   re   make_surfacer`   rX   r
   r   r   r   r   r   r   rR   rg   r   )
r?   r@   r[   rD   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   Trb   r   r   z %i != %i, bitsize: %i, flags: %i)r`   r   rE   r:   r+   re   	map_arrayrQ   rR   rM   rP   rT   r   r   ra   )r?   r   r   rB   rD   arr2drV   rW   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   Trb   r   r/   r   )rE   r   r   r+   re   r   rp   r^   unlockrR   	get_locksrX   r   r   )r?   ri   rD   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   Trb   r'   r   c                 S      t j|  d S r*   )r+   re   r   rN   r/   r/   r0   do_pixels3dn  r   z6SurfarrayModuleTest.test_pixels3d.<locals>.do_pixels3dr   r   )rE   r   r   r+   re   r   rp   r_   r   rR   r   rX   rS   r   r   )r?   ri   rD   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)rt   )   r   r   r   )r   r   r   U   )r   r   r      )r   r   r   r   )r   -   V   c      r   TrA   rB   r'   r   zposn: (%i, %i)r/   c                 S   r   r*   )r+   re   pixels_alpharN   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)rH   r   r   r+   re   r   rp   r   rQ   rR   rS   r   r   r   rE   )r?   rB   r   rD   r]   r   r   rW   alphar   r   r   r@   rA   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 )Npixels_r   c                    r   r/   r/   r6   r   r/   r0   r9     r   z8SurfarrayModuleTest._test_pixels_rgb.<locals>.<listcomp>r   Fr   r   Tr/   )r   r   r   )r   r+   re   rH   r   r   rp   r   rQ   rR   r   r   r   rE   )r?   r   r   r   
pixels_rgbrB   r   surf24surf32surf32arD   r]   r   r   rW   r   r@   rA   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+   re   use_arraytype)r   r/   r/   r0   do_use_arraytype  r   z@SurfarrayModuleTest.test_use_arraytype.<locals>.do_use_arraytyper   znot an option)r+   re   r  rR   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<   re   r   r  r   rp   r   r   r   rR   r   )r?   sfr   arr/   r/   r0   test_surf_lock  s   z"SurfarrayModuleTest.test_surf_lock)FNr*   )NrI   )-__name__
__module____qualname__r   r   rf   ro   r:   r=   rQ   classmethodr1   r3   r5   rE   rG   rH   rX   r\   r^   r_   r`   ra   rk   rr   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__)unittestplatformr   r   r   r   r   r   r   r   r	   r   r
   r   r+   pygame.localspygame.surfarraypython_implementationIS_PYPYskipIfTestCaser   r  mainr/   r/   r/   r0   <module>   s"    0
     P