o
    OZŽhõ  ã                   @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 zd dlm
Z
 W n	 ey5   Y nw d dlZde ¡ kZG dd„ dƒZe ed¡G d	d
„ d
ejeƒƒZe ed¡G dd„ dejeƒƒZe ej d¡e ed¡G dd„ dejeƒƒƒZedkr‰e ¡  dS dS )é    N)Úreduce)ÚSurfaceSubclass)ÚarrinterÚPyPyc                   @   s    e Zd Zddd„Zddd„ZdS )Ú	TestMixinNc                 C   s¢   |  ¡ \}}|  ||f|  ¡ |¡ |du rdn|› d}|d|› d|› d7 }t|ƒD ]#}t|ƒD ]}|  | ||f¡| ||f¡|› d|› d|› d¡ q1q+dS )z3Checks if two surfaces are equal in size and color.NÚ z, zsize: (ú)z, position: ()Úget_sizeZassertTupleEqualÚrangeÚassertEqualÚget_at)ÚselfÚs1Ús2ÚmsgÚwÚhÚxÚy© r   úK/var/www/auris/lib/python3.10/site-packages/pygame/tests/pixelarray_test.pyÚassert_surfaces_equal   s   ýÿÿzTestMixin.assert_surfaces_equalc                    sP   |  ¡ \‰ }| ¡  ‡ fdd„t|ƒD ƒD ]}|  | |¡||¡ q| ¡  dS )z5Checks if the surface is filled with the given color.c                 3   s&    | ]}t ˆ ƒD ]}||fV  qqd S ©N)r
   )Ú.0r   r   ©Úwidthr   r   Ú	<genexpr>-   s   €$ z2TestMixin.assert_surface_filled.<locals>.<genexpr>N)r	   Úlockr
   r   r   Úunlock)r   ÚsurfaceZexpected_colorr   ÚheightÚposr   r   r   Úassert_surface_filled(   s
   zTestMixin.assert_surface_filledr   )Ú__name__Ú
__module__Ú__qualname__r   r"   r   r   r   r   r      s    
r   zpypy having issuesc                   @   sL  e 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e ed¡dd„ ƒZdd„ Zdd„ Zdd„ Ze ed ¡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*dMS )NÚPixelArrayTypeTestc           
      C   s  d}d}||f}t  |dd¡}t  |¡}t  |dd¡}|  t|j|¡ t  |¡}| |¡}|  t|t jƒ¡ |  |j	|¡ | 
t  d¡¡ |  ||j¡ ~t  dddd	¡}	| 
t  d
¡|	¡ | 
t  d¡¡ | 
t  d
¡|	¡ | |¡}| 
t  d¡|	¡ |  ||j¡ d S )Né
   é   r   é    Úwhiteé   é   é   é   ÚblueÚred)ÚpygameÚSurfaceÚ
PixelArrayÚassertRaisesÚ	TypeErrorÚcompareÚ
assertTrueÚ
isinstancer   ÚshapeÚfillÚColorr   r   ZRect)
r   r   r   ÚsizeÚsfÚarÚsf2Úar2Úar3Úrr   r   r   Útest_compare4   s*   



zPixelArrayTypeTest.test_comparec                 C   sØ   d}t  d¡}d}dD ]^}t j||d}| |¡ | ¡ }| |¡ | d¡}t  |¡}t  | ¡ ¡}	dD ]'}
|j|	|
d}|  |j	|||
f¡ |  
|j	|||
f¡ |  
|	j	|||
f¡ q5| ¡  |	 ¡  | ¡  qd	S )
z;Ensures compare works correctly with same colored surfaces.©é   r,   r*   ©é   rG   rG   éÿ   ©é   é   é   r)   ©Údepth©r   r   )ç        g{®Gáz„?çš™™™™™¹?ç      ð?©ÚdistanceN©r1   r;   r2   r:   Úcopyr   r3   r6   r   r   r"   Úclose)r   r<   Úpixelarray_result_colorZsurface_colorrN   Úexpected_pixelarray_surfaceÚsurf_aZexpected_surface_colorÚpixelarray_aÚpixelarray_brT   Úpixelarray_resultr   r   r   Ú)test_compare__same_colors_within_distanceS   s<   




ÿýÿÿ
Ýz<PixelArrayTypeTest.test_compare__same_colors_within_distancec                 C   óô   d}t  d¡}d}d}dD ]j}t j||d}| |¡ | ¡ }| |¡ | d¡}t  |¡}	| ¡ }
|
 |¡ |
 d¡}t  |
¡}dD ]'}|	j||d	}|  |j	|||f¡ |  
|	j	|||f¡ |  
|j	|||f¡ qC|	 ¡  | ¡  | ¡  qd
S )z‡Ensures compare works correctly with different colored surfaces
        and the color difference is within the given distance.
        rD   r*   rF   ©é€   rG   rG   rH   rI   rM   rO   )gš™™™™™É?g333333Ó?g      à?rR   rS   NrU   ©r   r<   rX   Zsurface_a_colorZsurface_b_colorrN   rY   rZ   Zexpected_surface_a_colorr[   Zsurf_bZexpected_surface_b_colorr\   rT   r]   r   r   r   Ú.test_compare__different_colors_within_distance~   óD   







ÿýÿÿ
ØzAPixelArrayTypeTest.test_compare__different_colors_within_distancec                 C   r_   )z‹Ensures compare works correctly with different colored surfaces
        and the color difference is not within the given distance.
        rD   ÚblackrF   r`   rI   rM   rO   )rP   gñhãˆµøä>g-Cëâ6?gü©ñÒMbP?rS   NrU   rb   r   r   r   Ú2test_compare__different_colors_not_within_distance±   rd   zEPixelArrayTypeTest.test_compare__different_colors_not_within_distancec                 C   s"   t  d¡}t  |¡}| ¡  ~dS )z"does not crash when it is deleted.©r'   r'   N)r1   r2   r3   rW   ©r   ÚsÚar   r   r   Ú
test_closeä   s   

zPixelArrayTypeTest.test_closec           
         sà   t  d¡}t  |¡‰ ˆ  ¡  ‡ fdd„}|  t|¡ ‡ fdd„}|  t|¡ ‡ fdd„}|  t|¡ ‡ fdd	„}|  t|¡ ‡ fd
d„}|  t|¡ ‡ fdd„}|  t|¡ ‡ fdd„}|  t|¡ ‡ fdd„}	|  t|	¡ dS )z3when you try to do an operation after it is closed.rg   c                      s   ˆ d d …  d S r   r   r   ©rj   r   r   Úaccess_afterñ   ó   z:PixelArrayTypeTest.test_close_raises.<locals>.access_afterc                      s   dˆ d d …< d S ©Né   r   r   rl   r   r   Úassign_all_afterö   rn   z>PixelArrayTypeTest.test_close_raises.<locals>.assign_all_afterc                      ó   ˆ   ¡  d S r   )Úmake_surfacer   rl   r   r   Úmake_surface_afterû   ó   z@PixelArrayTypeTest.test_close_raises.<locals>.make_surface_afterc                     s   ˆ D ]} qd S r   r   )r   rl   r   r   Ú
iter_after   s   ÿz8PixelArrayTypeTest.test_close_raises.<locals>.iter_afterc                      rr   r   )rW   r   rl   r   r   Úclose_after  ru   z9PixelArrayTypeTest.test_close_raises.<locals>.close_afterc                      ó
   ˆ j  d S r   )r   r   rl   r   r   Úsurface_after  ó   
z;PixelArrayTypeTest.test_close_raises.<locals>.surface_afterc                      rx   r   )Úitemsizer   rl   r   r   Úitemsize_after  rz   z<PixelArrayTypeTest.test_close_raises.<locals>.itemsize_afterc                      rr   r   )Ú	transposer   rl   r   r   Útranspose_after  ru   z=PixelArrayTypeTest.test_close_raises.<locals>.transpose_afterN)r1   r2   r3   rW   r4   Ú
ValueError)
r   ri   rm   rq   rt   rv   rw   ry   r|   r~   r   rl   r   Útest_close_raisesë   s&   

z$PixelArrayTypeTest.test_close_raisesc                 C   s‚   t  d¡}t  |¡}|dd…  W d  ƒ n1 sw   Y  t  |¡}t  d¡|dd…< W d  ƒ dS 1 s:w   Y  dS )zcloses properly.rg   NZdeepskyblue)r1   r2   r3   r;   rh   r   r   r   Útest_context_manager  s   
ÿ"ÿz'PixelArrayTypeTest.test_context_managerc                 C   s~   dD ]:}t  dd|¡}| d¡ t  |¡}|  |j|j¡ | ¡ r(|  | ¡ ¡ |  t	|ƒd¡ ~| ¡ r<|  
| ¡ ¡ qd S )NrI   ©r'   r(   r   ©r   r   r   r'   )r1   r2   r:   r3   r   Ú_pixels_addressZmustlockr7   Z
get_lockedÚlenÚassertFalse©r   Úbppr=   r>   r   r   r   Útest_pixel_array%  s   

€òz#PixelArrayTypeTest.test_pixel_arrayc                 C   sÒ   t  ddd¡}t  |¡}|  tt|d¡ d|_|  |jd¡ t 	|¡}|  
|ƒ |u ¡ ~t ¡  |  
|ƒ d u ¡ G dd„ dt jƒ}||ƒ}|  t|ƒd¡ t 	|¡}|  
|ƒ |u ¡ ~t ¡  |  
|ƒ d u ¡ d S )	N©r+   rE   r   r)   Ú	nonnativeÚvaluec                   @   s   e Zd Zdd„ ZdS )z+PixelArrayTypeTest.test_as_class.<locals>.Cc                 S   s
   d| j  S )Nzstring (%i, %i)©r9   )r   r   r   r   Ú__str__D  rz   z3PixelArrayTypeTest.test_as_class.<locals>.C.__str__N)r#   r$   r%   rŽ   r   r   r   r   ÚCC  s    r   zstring (2, 3))r1   r2   r3   r4   ÚAttributeErrorÚgetattrr‹   r   ÚweakrefÚrefr7   ÚgcÚcollectÚstr)r   r=   r>   rB   r   r   r   r   Útest_as_class6  s$   


z PixelArrayTypeTest.test_as_classc                 C   s(   t dddƒ}t |¡}|  |tj¡ dS )z>Ensure the PixelArray constructor accepts subclassed surfaces.rD   r   r)   N)r   r1   r3   ÚassertIsInstance)r   r   Ú
pixelarrayr   r   r   Ú#test_pixelarray__subclassed_surfaceO  s   
z6PixelArrayTypeTest.test_pixelarray__subclassed_surfacec                 C   sÚ   dD ]h}t  dd|¡}| d¡ | d¡}t  |¡}| d¡}|  t|ƒd¡ |  | d¡|¡ |  | d¡|¡ |  | d¡|¡ | d¡}|  t|ƒd¡ |  | d¡|¡ |  | d¡|¡ |  | d¡|¡ qd S )	NrI   ©r-   rJ   r   ©r   r   rH   rp   rJ   r+   éÿÿÿÿ)r1   r2   r:   Úmap_rgbr3   Ú__getitem__r   r…   )r   rˆ   r=   Úvalr>   r@   r   r   r   Útest_get_columnW  s    




ðz"PixelArrayTypeTest.test_get_columnzpypy malloc abortc              
   C   sV  d}d}||f}d}d}d}dD ]—}t  |d|¡}| |¡}	| |¡}
| |¡}|  |
|	d|f ¡ |  ||	d|f ¡ |  |
|d|f ¡ | |¡ t  |¡}| d	¡}t|ƒD ],}| |¡}|  ||	d
|||	f ¡ | 	d	|f|¡ | |¡}|  ||
d|||
f ¡ qZ| 	d|¡ t|ƒD ]2}| |¡ d	¡}|  ||	d|||	f ¡ | 	|d	f|¡ | |¡ d	¡}|  ||d|||f ¡ q‘| d¡ d¡}|  ||	d|f ¡ | d	¡ d¡}|  ||
d|f ¡ | d¡ d	¡}|  ||d|f ¡ | d¡ d¡}|  ||	d|f ¡ | d¡ d¡}|  ||	d|f ¡ | | d	 ¡ d¡}|  ||
d|f ¡ | | ¡ d¡}|  ||	d|f ¡ | d¡ d¡}|  ||	d|f ¡ | d¡ | d	 ¡}|  ||d|f ¡ | d¡ | ¡}|  ||	d|f ¡ | d¡ | d	 ¡}|  ||d|f ¡ | d¡ | ¡}|  ||	d|f ¡ qd S )Nr'   r(   rœ   )r   r   ra   )r   r   é   rI   r   zUnusable test colors for bpp %irp   z&ar[1][%i] == %i, mapped_bg_color == %iz(ar[1][%i] == %i, mapped_fg_color_y == %i©rp   rp   z$ar[%i][1] = %i, mapped_bg_color = %iz&ar[%i][1] = %i, mapped_fg_color_x = %izbpp = %iéüÿÿÿr,   )
r1   r2   rž   ZassertNotEqualr:   r3   rŸ   r
   r   Úset_at)r   r   r   r<   Úbg_colorZ
fg_color_yZ
fg_color_xrˆ   r=   Zmapped_bg_colorZmapped_fg_color_yZmapped_fg_color_xr>   Úar_yr   r@   r   r   r   r   Útest_get_pixelj  s²   



ýýý



ÿý
ÿýýÿý¢z!PixelArrayTypeTest.test_get_pixelc                 C   sà   dD ]k}t  dd|¡}| d¡ t  |¡}| d¡ dd¡ |  |d d | d¡¡ | d¡ dd¡ |  |d d | d¡¡ | d¡ dd¡ |  |d	 d
 | d¡¡ | d¡ dd¡ |  |d d | d¡¡ qd S )NrI   r‚   r   rƒ   ©r   rH   r   rp   ©ra   ra   ra   r   é	   é   éþÿÿÿrJ   )r1   r2   r:   r3   rŸ   Ú__setitem__r   rž   r‡   r   r   r   Útest_set_pixelÒ  s   

ñz!PixelArrayTypeTest.test_set_pixelc                 C   s°  dD ]Ó}t  dd|¡}| d¡ t  |¡}t  dd|¡}| d¡ t  |¡}| dd¡ |  |d d | d¡¡ |  |d d | d¡¡ | d	d¡ |  |d
 d | d¡¡ |  |d	 d | d¡¡ | dd¡ |  |d d | d¡¡ |  |d d | d¡¡ | ddgd ¡ |  |d d | d¡¡ |  |d d | d¡¡ |  t|jdd¡ | d| 	d¡¡ |  |d d | d¡¡ |  |d d | d¡¡ qd S )NrI   r›   r   rƒ   ©r   rH   rH   r+   rª   rp   r   r,   r­   ©rH   rH   r   é   ©rH   rH   rH   rJ   )©éÌ   r   rµ   ©é   r·   r·   r´   r¶   r´   r¶   r´   r¶   rE   )
r1   r2   r:   r3   r®   r   rž   r4   r   rŸ   )r   rˆ   r=   r>   r?   r@   r   r   r   Útest_set_columnä  s:   



üÐz"PixelArrayTypeTest.test_set_columnc                 C   s$  dD ]}t  dd|¡}| d¡ t  |¡}|  t|dd… ƒd¡ |  t|dd… d ƒd¡ |  |dd… d ¡ |  |d	d	… d ¡ |  |d
d
… d ¡ |  t|dd… ƒd¡ |  t|dd… d ƒd¡ d|dd	…< d|d dd…< |  |d d	 | d¡¡ |  |d d | d¡¡ qd S )NrI   r‚   r   rƒ   r+   rE   é   r(   r,   r«   éýÿÿÿr­   rp   r³   )r'   r'   r'   r-   )r1   r2   r:   r3   r   r…   rž   r‡   r   r   r   Útest_get_slice  s    

èz!PixelArrayTypeTest.test_get_slicez0skipping for PyPy (segfaults on mac pypy3 6.0.0)c                 C   s¼   dD ]Y}t  dd|¡}| d¡ | dd¡ t  |¡}|  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|d	 v ¡ |  d|d	 v ¡ |  d|d	 v ¡ |  d|d	 v ¡ qd S )
NrI   r‚   r   rƒ   )rJ   rJ   r³   r±   rH   rJ   )r1   r2   r:   r¥   r3   r7   r†   r‡   r   r   r   Útest_contains2  s   

ñz PixelArrayTypeTest.test_containsc                 C   s@   dD ]}t  dd|¡}| d¡ t  |¡}|  |j|u ¡ qd S )NrI   r‚   r   rƒ   )r1   r2   r:   r3   r7   r   r‡   r   r   r   Útest_get_surfaceE  s   

üz#PixelArrayTypeTest.test_get_surfacec                 C   sF   t dddƒ}t |¡}|j}|  ||¡ |  |tj¡ |  |t ¡ dS )z<Ensure the surface attribute can handle subclassed surfaces.)r,   rE   r   r)   N)r   r1   r3   r   ZassertIsr˜   r2   )r   Zexpected_surfacer™   r   r   r   r   Ú$test_get_surface__subclassed_surfaceL  s   
z7PixelArrayTypeTest.test_get_surface__subclassed_surfacec                    sü  dD ]x}t  dd|¡}| d¡ t  |¡}| d¡}||dd…< |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ | d¡}||d	d
…< |  |d d |¡ |  |d d |¡ | d¡}d|d	d …< |  |d d |¡ |  |d
 d |¡ | d¡}|  t|jt	ddƒ|gd ¡ | d¡}| d¡}||g|dd…< |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ d|d d …< t  dd|¡}| d¡ | d¡}t  |¡}|d d … |d d …< |  |d d |¡ |  |d d |¡ t
tdƒr{G dd„ dtƒ‰ t  ddd¡}t  |¡}‡ fdd„t|jd ƒD ƒ}dd„ |D ƒ}	||d< dd„ |D ƒ}
t ¡  |  |
|	¡ qd S ) NrI   r›   r   rƒ   rª   r+   rp   r°   rº   r   rE   r­   r³   r²   r©   rJ   ©rH   r   r   )ra   r   rH   r,   )rH   r   rH   r¹   Úgetrefcountc                   @   ó   e Zd ZdZdS )z.PixelArrayTypeTest.test_set_slice.<locals>.IntúUnique int instancesN©r#   r$   r%   Ú__doc__r   r   r   r   ÚInt’  ó    rÅ   )r,   r+   r)   c                    s   g | ]}ˆ |ƒ‘qS r   r   ©r   Úi©rÅ   r   r   Ú
<listcomp>™  s    z5PixelArrayTypeTest.test_set_slice.<locals>.<listcomp>c                 S   ó   g | ]}t  |¡‘qS r   ©ÚsysrÀ   rÇ   r   r   r   rÊ   š  ó    .c                 S   rË   r   rÌ   rÇ   r   r   r   rÊ   œ  rÎ   )r1   r2   r:   r3   rž   r   r4   r   r®   ÚsliceÚhasattrrÍ   Úintr
   r9   r”   r•   )r   rˆ   r=   r>   r    Zval2r?   r@   Z
pixel_listZrefcnts_beforeZrefcnts_afterr   rÉ   r   Útest_set_sliceW  sf   












€ºz!PixelArrayTypeTest.test_set_slicec                 C   sÔ  dD ]d}t  dd|¡}| dd¡ | dd¡ | dd¡ | d¡}t  |¡}|  |d |¡ |  |d |¡ |  |d |¡ |  |d d	 |¡ |  |d d |¡ |  |d
 d
 |¡ |  t|d ƒd¡ |  t|d ƒd¡ |  t|d ƒd¡ |  t|d d …d d …f ƒd¡ |  t|d d …f ƒd¡ |  t|dd d …f ƒd¡ |  t|d d …df ƒd¡ |  |d
d
…f d ¡ |  |d
d
…df d ¡ |  |d
d
…dd…f d ¡ |  |d
d
…dd
…f d ¡ |  |d
d
d…f d ¡ |  |d
d
d…f d ¡ |  |d
d
d…df d ¡ |  |d
d
d…df d ¡ |  |d
d
d…dd…f d ¡ |  |d
d
d…dd
…f d ¡ |  |dd
d
…f d ¡ |  |dd
…d
d
…f d ¡ |  |dd
d
d…f 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|d< d	|d	< d
|d
< 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 d¡ |  |dd d d…f d d¡ |  |dd d d…f d d¡ |d d d…d d d…f }|  t|ƒd	¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d
¡ |  |d d d
¡ |  |d d d
¡ |  |d d d¡ |  |d d d
¡ |  |d d d¡ |d	dd… }|  t|ƒd	¡ |  |d d d	¡ |  |d d d	¡ |  |d d d	¡ |  |d d d	¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |d d d… }|  t|ƒd¡ |  |d d d¡ |  |d d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d
¡ |  |d d d
¡ |  |d d	 d
¡ |  |d d d
¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ d|d d …< |d d …df }dgt|ƒ |d d …< |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |dd…d d …f }|  |jd|jd f¡ |d d …dd…f }|  |j|jd df¡ t  ddd¡}t  |¡}|  |j| ¡ ¡ t  ddd¡}t  |¡}|  |j| ¡ ¡ |d }|  	||u ¡ t
td ƒrgG d!d"„ d"tƒ}t  d#dd¡}t  |¡}|dƒ|dƒ}}	t |¡t |	¡}
}|||	f }t |¡t |	¡}}|  ||
¡ |  ||¡ qd S )$NrI   r›   r   ©rp   rE   r©   rO   )r²   r²   rp   rE   r²   ©..r-   )rp   .rJ   ).rE   r+   .r­   r   r,   r¹   rº   éc   )r   rp   r£   )r+   rp   )r   rp   )r­   rp   ©rp   r,   r)   )r¹   rp   rÀ   c                   @   rÁ   )z.PixelArrayTypeTest.test_subscript.<locals>.IntrÂ   NrÃ   r   r   r   r   rÅ   9  rÆ   rÅ   ©r+   r+   )r1   r2   r¥   rž   r3   r   r…   r9   r	   r7   rÐ   rÍ   rÑ   rÀ   )r   rˆ   r=   r    r>   r@   r?   rÅ   r   r   Ú	rx_beforeÚ	ry_beforeÚpÚrx_afterÚry_afterr   r   r   Útest_subscript   s
  


 þþþþ


€ Þz!PixelArrayTypeTest.test_subscriptc                 C   sâ  dD ]ì}t  dd|¡}| d¡ t  |¡}d|d< |  |d d¡ |  |d d¡ |  |d	 d¡ d
|d< |  |d | d
¡¡ |  |d | d
¡¡ |  |d	 | d
¡¡ d|d d …df< |  |d | d¡¡ |  |d | d¡¡ |  |d	 | d¡¡ d|d< |  |d | d¡¡ |  |d | d¡¡ |  |d	 | d¡¡ ttdƒrîG dd„ dtƒ}t  ddd¡}t  |¡}|dƒ|dƒ}}t 	|¡t 	|¡}}d|||f< t 	|¡t 	|¡}	}
|  |	|¡ |  |
|¡ qd S )NrI   r›   r   r³   rƒ   rÔ   rO   ©rp   r   )r   r   rœ   ).r¿   .r©   rÀ   c                   @   rÁ   )z2PixelArrayTypeTest.test_ass_subscript.<locals>.IntrÂ   NrÃ   r   r   r   r   rÅ   c  rÆ   rÅ   r×   r)   rp   )
r1   r2   r:   r3   r   rž   rÐ   rÍ   rÑ   rÀ   )r   rˆ   r=   r>   rÅ   r   r   rØ   rÙ   rÛ   rÜ   r   r   r   Útest_ass_subscriptG  s@   



€Ùz%PixelArrayTypeTest.test_ass_subscriptc                 C   s¶  dD ]U}t  dd|d ¡}t  |¡}|dd …d d …f }|  |j|j |j¡ |d d …dd …f }|  |j|j |jd ¡ |d d d…d d …f }|  |j|j |jd d |j ¡ |d d d…d d …f }|  |j|j |jd d |j ¡ |d d …d d d…f }|  |j|j |jd d |jd  ¡ |d d d…d d …f }|  |j|j |jd d |jd  |jd d |jd   ¡ |d d …d d d…f }|  |j|j |jd d |jd  ¡ |dd …d	d …f }|  |j|j |jd d |jd d	  ¡ |dd d…d	d d
…f }|  |j|j |jd d |jd d	  ¡ |ddd…d d …f }|  |j|j |jd d ¡ |d d …ddd…f }|  |j|j |jd d ¡ qd S )N©rp   r+   rE   r²   )r¢   r¹   r   rJ   rp   r   r­   r+   rE   r²   r«   r,   )r1   r2   r3   r   r„   r{   Ústridesr9   )r   rˆ   r=   r>   r@   rA   r   r   r   Útest_pixels_fieldq  sf   


þ
þ
þ
.þ
þ
þ
þÿÿÑz$PixelArrayTypeTest.test_pixels_fieldc                 C   sø  t  ddd¡}t  ddd¡}dD ]e}t  dd|¡}| | |¡¡}| | |¡¡}| |¡ | |d¡ t  |¡}|d d d…d d d…f  ¡ }| ¡ }	|  	|	j
d	¡ |  	|	jd
¡ dD ]}
|  	| |
¡|¡ q[dD ]}
|  	| |
¡|¡ qiqd}tt|ƒƒ}t|d d d… ƒ}d}t  ||fdd¡}t  |¡}|d d d…d d …f }| ¡ }| ¡ \}}|  	||¡ |  	||¡ d}tt|ƒƒ}t|d d d… ƒ}d}t  ||fdd¡}t  |¡}|d d …d d d…f }| ¡ }| ¡ \}}|  	||¡ |  	||¡ d S )NrH   ra   éd   r   rI   r‚   )r+   r,   r²   r¢   r+   r,   r'   ))r   r+   )r   rE   )rp   r+   r×   )rE   r+   ©rE   rE   )r   r¹   )r   rJ   )rp   rJ   )r+   rJ   )rE   rJ   ©rE   r¹   )rÓ   rŠ   rÖ   )r+   r,   )rp   r¹   )r+   r¹   r·   rE   r)   )r1   r;   r2   Z	unmap_rgbrž   r:   r3   rs   Zget_rectr   r   r    r   Úlistr
   r…   r	   )r   r¦   Zfg_colorrˆ   r=   Zbg_color_adjZfg_color_adjr>   ZnewsfÚrectrÚ   r   ÚlstZw_slicer   r@   r?   Úw2Úh2Zh_slicer   r   r   Útest_make_surface¦  sP   

ÿ

z$PixelArrayTypeTest.test_make_surfacec                 C   s„   d}d}d}t |||ƒ}t |¡}| ¡ }|  ||¡ |  |tj¡ |  |t ¡ |  | 	¡ |¡ |  | 
¡ |¡ |  | ¡ |¡ dS )z3Ensure make_surface can handle subclassed surfaces.rD   r   r)   N)r   r1   r3   rs   ZassertIsNotr˜   r2   ZassertNotIsInstancer   r	   Z	get_flagsÚget_bitsize)r   Zexpected_sizeZexpected_flagsZexpected_depthZoriginal_surfacer™   r   r   r   r   Ú%test_make_surface__subclassed_surfaceá  s   ÿ
z8PixelArrayTypeTest.test_make_surface__subclassed_surfacec                 C   sX   dD ]'}t  dd|¡}t  |¡}d}|D ]}|  t|ƒd¡ |d7 }q|  |d¡ qd S )NrI   )r,   r'   r   r'   rp   r,   )r1   r2   r3   r   r…   )r   rˆ   r=   r>   Z
iterationsÚcolr   r   r   Ú	test_iterô  s   

ùzPixelArrayTypeTest.test_iterc                 C   sP  dD ]£}t  dd|¡}| d¡ | d¡}| d¡}t  |¡}|d d d…  dd¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |  |d d	 |¡ |  |d
 d |¡ |  |d d |¡ |d d d… jdddd |  |d d |¡ |  |d d |¡ |  |d d	 |¡ |  |d
 d |¡ |  |d d |¡ qd S )NrI   rg   r   r¿   rœ   r+   rp   rE   r-   rJ   r«   )r'   r(   é2   ©Úweights)r1   r2   r:   rž   r3   Úreplacer   )r   rˆ   r=   ÚrvalZovalr>   r   r   r   Útest_replaceþ  s(   



ízPixelArrayTypeTest.test_replacec                 C   sX  dD ]§}t  dd|¡}| d¡ | dd¡ | d¡}| d¡}t  |¡}| d¡}|  |d d |¡ |  |d	 d |¡ |  |d
 d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ |jddd}|  |d d |¡ |  |d	 d |¡ |  |d
 d |¡ |  |d d |¡ |  |d d |¡ |  |d d |¡ qd S )NrI   rg   r   rœ   r¿   )r+   r+   r-   r-   r³   rƒ   rp   r+   rE   r-   rJ   r«   )r'   rQ   rð   rñ   )r1   r2   r:   rž   r3   Úextractr   )r   rˆ   r=   r*   re   r>   Znewarr   r   r   Útest_extract  s,   




èzPixelArrayTypeTest.test_extractc           
      C   sÞ   d}d}t  ||fdd¡}t  |¡}||f}d|f}d}|  |||||¡ td d dƒ}td d dƒ}	|  ||||	f||¡\}}}}|  |||||¡ tdd dƒ}tdd dƒ}	|  ||||	f||¡\}}}}|  |||||¡ d S )	NéP   é‡   r   r)   rp   r+   rE   r,   )r1   r2   r3   Ú_test_assignmentrÏ   Ú_array_slice)
r   r   r   r=   r>   r<   rá   ÚoffsetÚxsliceÚyslicer   r   r   Útest_2dslice_assignment3  s(   
ÿÿz*PixelArrayTypeTest.test_2dslice_assignmentc                 C   s,  |   |j|¡ |\}}|\}}	| ¡ \}
}t d¡}t ddd¡}| |¡}| |¡ dd|d f|d dfd|d f|d df|d |d ffD ]J\}}|||  ||	  }||
 }|||
  }||f}| |¡}|   ||d||||||f ¡ ||||f< | |¡}|   ||d||||||f ¡ qId S )	Nre   r   é   rO   r²   rE   rp   z6at pixarr posn (%i, %i) (surf posn (%i, %i)): %s != %s)r   r9   r	   r1   r;   rž   r:   r   )r   r=   r>   Zar_sizeZ
ar_stridesZ	ar_offsetZar_wZar_hZ
ar_xstrideZ
ar_ystrideZsf_wZsf_hre   ÚcolorZpxcolorÚar_xr§   Z	sf_offsetÚsf_yÚsf_xZsf_posnZsf_pixr   r   r   rú   I  sJ   






ú
ÿý
ÿýëz#PixelArrayTypeTest._test_assignmentc                 C   s    || }|\}}|\}}	|  |¡\}
}}|  |	¡\}}}||
 | d | }|| | d | }	|\}}||
| ||  7 }||9 }||9 }|||	f||f|fS ro   )Úindices)r   r>   r<   Úslicesrá   rü   rý   rþ   r   r   ZxstartZxstopZxstepZystartZystopZystepZxstrideZystrider   r   r   rû   n  s   zPixelArrayTypeTest._array_slicec                 C   sÜ  dD ]}t  dd|d ¡}t  |¡}|  |j|¡ qdD ]Ï}|\}}t  |dd¡}| ¡ }| ¡ }t  |¡}|  |jd¡ |  |j|¡ |  |j	||f¡ |d d d…d d …f }t
dg| d d d… ƒ}	|  |jd¡ |  |j|	|f¡ |  |j	d| |f¡ |d d …d d d…f }t
dg| d d d… ƒ}
|  |jd¡ |  |j||
f¡ |  |j	|d| f¡ |d }|  |jd¡ |  |j|f¡ |  |j	|f¡ |d d …df }|  |jd¡ |  |j|f¡ |  |j	|f¡ qd S )	Nrà   r×   r   rJ   ))r²   rK   )r,   r.   r)   r+   rp   )r1   r2   r3   r   r{   Zget_bytesizeÚ	get_pitchÚndimr9   rá   r…   )r   rˆ   r=   r>   r9   r   r   Zpitchr@   ré   rê   r   r   r   Útest_array_properties|  s@   

æz(PixelArrayTypeTest.test_array_propertiesc           	   	   C   sÚ  d}|d }d}|d }dD ]Ü}t  ||fd|d ¡}t  |¡}t|| ƒD ]}|||| || f< q&|d d d…d d …f |d d …d d …f< t|| ƒD ]}|  ||||  || f |¡ qLt  |¡}t|| ƒD ]}|||| || f< qj|d d …d d d…f |d d …d d …f< t|| ƒD ]}|  ||| |||  f |¡ qt  |¡}t|| ƒD ]}|||| || f< q®|d d d…d d d…f |d d …d d …f< t|| ƒD ]}|  ||||  |||  f |¡ qÕqd S )Nr'   rp   r(   rà   r   rJ   r   ©r1   r2   r3   r
   r   )	r   r   Zmax_xr   Zmax_yrˆ   r=   r>   rÈ   r   r   r   Útest_self_assignŸ  s4   
&"
&"
(&ÿîz#PixelArrayTypeTest.test_self_assignc                 C   sH  t  ddd¡}t  |¡}td d dƒ}| |d¡ |  |d | d¡¡ | |t  ddd	¡¡ |  |d | d
¡¡ |  t	|j|d¡ |  t	|j||fd¡ |  t	|j|g d¢¡ |  t	|j||fg d¢¡ t  ddd¡}t  |¡}d|d d …< |  |d | d¡¡ g d¢|d d …< |  |d d¡ |  |d d¡ |  |d d¡ d S )N)r,   r,   r   r)   rp   )rp   r+   rE   rO   r'   r¢   r   )r'   r¢   r   )rp   r+   rE   r²   r,   rä   )r(   é   é(   r(   rÞ   r  )r+   r   r  )
r1   r2   r3   rÏ   r®   r   rž   r;   r4   r   )r   r=   r>   Úindexr   r   r   Útest_color_valueº  s&   

z#PixelArrayTypeTest.test_color_valuec                 C   s`  t  ddd¡}t  |¡}|j\}}|j\}}t|| ƒD ]}|| }|| }	||||	f< q| ¡ }
|  |
j||f¡ |  |
j||f¡ t|| ƒD ]}|| }|| }	|  |
|	|f |||	f ¡ qI|d }| ¡ }|  |jd|f¡ t|ƒD ]}	|  ||	 |d|	f ¡ qw|d d …df }| ¡ }|  |jd|f¡ tdƒD ]}|  || |d|f ¡ qŸd S )Nrå   r   r)   rp   r+   )r1   r2   r3   r9   rá   r
   r}   r   )r   r=   r>   r   r   ZdxZdyrÈ   r   r   Zar_tZar1DZar2Dr   r   r   Útest_transposeÓ  s4   


ÿz!PixelArrayTypeTest.test_transposec                 C   sˆ  d}t  ||fdd¡}t  |¡}t  |dfdd¡}t  |¡}t|ƒD ]}|d d ||df< q"||d< t|ƒD ]}t|ƒD ]}|  |||f ||df ¡ q=q7d|d< t  d|fdd¡}	t  |	¡}
t|ƒD ]}|d d |
d|f< qe|
|d< t|ƒD ]}t|ƒD ]}|  |||f |
d|f ¡ q€qzd|d< t  ddd¡}t  |¡}d|d	< ||d< t|ƒD ]}t|ƒD ]}|  |||f d¡ q´q®d S )
Nr,   r   r)   rp   r'   .r£   é*   rO   r
  )r   r   r=   r>   r  r  rÈ   r   r   r  r§   Zsf_1pxZar_1pxr   r   r   Ú!test_length_1_dimension_broadcastð  s@   

ÿ
ÿ
ÿÿz4PixelArrayTypeTest.test_length_1_dimension_broadcastc              	   C   s`   t  ddd¡}t  |¡}|  t|jt|d d …dd…f ¡ |  t|jt|dd…d d …f ¡ d S )N)r¹   r¢   r   r)   r+   )r1   r2   r3   r4   r   r®   ÚEllipsis)r   r=   r>   r   r   r   Útest_assign_size_mismatch  s   
"&z,PixelArrayTypeTest.test_assign_size_mismatchc                 C   sJ   t  dt jd¡}t  |¡}d|d< | d¡}|  t|ƒt|ƒjd ¡ d S )N)rE   rp   rK   r  .rO   z([
  [42, 42, 42]]
))	r1   r2   ZSRCALPHAr3   Zget_at_mappedr   ÚreprÚtyper#   )r   r=   r>   Zpixelr   r   r   Ú	test_repr  s
   

zPixelArrayTypeTest.test_reprN)+r#   r$   r%   rC   r^   rc   rf   rk   r€   r   r‰   r—   rš   r¡   ÚunittestÚskipIfÚIS_PYPYr¨   r¯   r¸   r»   r¼   r½   r¾   rÒ   rÝ   rß   râ   rë   rí   rï   rõ   r÷   rÿ   rú   rû   r	  r  r  r  r  r  r  r   r   r   r   r&   2   sR    +33/

g3

I (*5;
%#!r&   c                   @   sd   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZe ed¡dd„ ƒZe ed¡dd	„ ƒZ	d
d„ Z
dS )ÚPixelArrayArrayInterfaceTestzskipping for PyPy (why?)c                 C   s`   t  ddd¡}t  |¡}t |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |j	|j
¡ d S )Nr×   r   r)   r+   Úu)r1   r2   r3   r   ÚArrayInterfacer   ÚtwoZtypekindÚndÚdatar„   )r   r=   r>   Úair   r   r   Ú
test_basic#  s   

z'PixelArrayArrayInterfaceTest.test_basicc           
         s(  ddgddgfD ]‰}|\}}t  |dd¡}t  |¡}t |¡‰ ‡ fdd„tˆ jƒD ƒ}|  ||¡ |d d d	…d d …f }t |¡‰tdg| d d d	… ƒ}‡fd
d„tˆjƒD ƒ}|  |||g¡ |d d …d d d	…f }t |¡‰tdg| d d d	… ƒ}	‡fdd„tˆjƒD ƒ}|  |||	g¡ qd S )Nr²   rK   r,   r.   r   r)   c                    ó   g | ]}ˆ j | ‘qS r   r   rÇ   )r!  r   r   rÊ   6  rÎ   z;PixelArrayArrayInterfaceTest.test_shape.<locals>.<listcomp>r+   c                    r#  r   r   rÇ   ©Úai2r   r   rÊ   ;  rÎ   c                    r#  r   r   rÇ   r$  r   r   rÊ   @  rÎ   )	r1   r2   r3   r   r  r
   r  r   r…   )
r   r9   r   r   r=   r>   Zai_shaper@   ré   rê   r   )r!  r%  r   Ú
test_shape/  s$   



ðz'PixelArrayArrayInterfaceTest.test_shapec                 C   sL   t ddƒD ]}d| }t dd|¡}t |¡}t |¡}|  |j|¡ qd S )Nrp   r,   rJ   r×   r   )r
   r1   r2   r3   r   r  r   r{   )r   Zbytes_per_pixelZbits_per_pixelr=   r>   r!  r   r   r   Útest_itemsizeC  s   

ûz*PixelArrayArrayInterfaceTest.test_itemsizec                 C   sä   t }|j|jB |jB }t ddd¡}t |¡}| |¡}|  |j	||j
B ¡ |d d d…d d …f }| |¡}|  |j	|¡ t ddd¡}t |¡}| |¡}|  |j	||j
B ¡ t ddd¡}t |¡}| |¡}|  |j	|¡ d S )N©r'   r+   r   r)   r+   )rJ   r+   rL   )r¹   r+   )r   ZPAI_NOTSWAPPEDZPAI_WRITEABLEZPAI_ALIGNEDr1   r2   r3   r  r   ÚflagsZPAI_FORTRAN)r   ZaimZcommon_flagsri   r>   r!  r@   r   r   r   Ú
test_flagsL  s"   






z'PixelArrayArrayInterfaceTest.test_flagsc                 C   sŽ  g d¢}t tj|dƒ}d}t ||fdd¡}| d¡}t |¡}|d d… D ]9}|| }| d¡ |||| …d d …f }||d d< ||d d	< ||d d
< | ¡ }tj	 |¡}	|  
|	|¡ q&t tj|dƒ}d}t ||fdd¡}| d¡}t |¡}|d d… D ]9}|| }| d¡ |d d …||| …f }||d d< ||d d	< ||d d
< | ¡ }tj	 |¡}	|  
|	|¡ q‚d}d}t ||fdd¡}| d¡}t |¡}t|ƒt|ƒftd|dƒt|ƒftd|dƒt|ƒft|ƒtd|dƒft|ƒtd|dƒftd|dƒtd|dƒftd|dƒtd|dƒffD ].}
| d¡ ||
 }||d d< ||d d	< ||d d
< | ¡ }tj	 |¡}	|  
|	|¡ qd S )N)r¹   rE   r¢   rp   r.   r   rJ   )rp   r·   ra   r   rƒ   r­   rº   r(   r'   r+   rE   )r   ÚoperatorÚmulr1   r2   rž   r3   r:   rs   Z	pixelcopyr   rÏ   )r   Zfactorsr   r   r=   r  r>   Úfr?   Zsf3r  r@   r   r   r   Útest_slicingc  sj   







ù
	ðz)PixelArrayArrayInterfaceTest.test_slicingN)r#   r$   r%   r  r  r  r"  r&  r'  r*  r.  r   r   r   r   r  !  s    







r  znewbuf not implementedc                   @   s<   e Zd ZejrddlmZ dddddœZdd	„ Zd
d„ Z	dS )ÚPixelArrayNewBufferTestr   )ÚbuftoolsÚBz=HZ3xz=IrI   c                 C   s  | j }|j}dD ]s}t dd|¡}t |¡}| j| }|j}|j}|\}	}
|j}|	|
 | }|||j	ƒ}|  
|j|¡ |  |j|¡ |  |jd¡ |  |j|¡ |  |j|¡ |  |j¡ |  |j|¡ |  |j|¡ |  
|jd u ¡ |  |j|j¡ qt ddd¡}t |¡}| j| ¡  }|j}|j}|\}	}
|j}|	|
 | }|||jƒ}|  
|j|¡ |  |j|¡ |  |jd¡ |  |j|¡ |  
|jd u ¡ |  |j¡ |  
|jd u ¡ |  
|jd u ¡ |  
|jd u ¡ |  |j|j¡ |||jƒ}|  |jd¡ |  |j|¡ |||jƒ}|  |jd¡ |  
|jd u ¡ |||jƒ}|  |jd¡ |  
|jd u ¡ |  |j|¡ |  |j|¡ |||jƒ}|  |jd¡ |  
|jd u ¡ |  |j|¡ |  |j|¡ |  t|||j¡ |  t|||j¡ |d d …d d d…f }| j| ¡  }|j}|j}|\}	}
|j}|	|
 | }|||jƒ}|  |j|¡ |  |jd¡ |  |j|¡ |  
|jd u ¡ |  |j¡ |  |j|¡ |  |j|¡ |  |j|j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |d d d…d d …f }| j| ¡  }|j}|j}|\}	}
|j}|	|
 | }|||jƒ}|  |j|¡ |  |jd¡ |  |j|¡ |  
|jd u ¡ |  |j¡ |  |j|¡ |  |j|¡ |  |j|j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  d¡}t |¡}| j| ¡  }|j}|j}|\}	}
|j}|	|
 | }|||j!ƒ}|  
|j|¡ |  |j|¡ |  |jd¡ |  |j|¡ |  
|jd u ¡ |  |j¡ |  |j|¡ |  |j|¡ |  
|jd u ¡ |  |j|j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ d S )NrI   r(  r   r+   )rJ   rK   r)   )r+   rE   r,   r¹   )"r0  ÚImporterr1   r2   r3   Úbitsize_to_formatr{   r9   rá   Ú
PyBUF_FULLr7   Úobjr   r…   r  Úformatr†   ÚreadonlyÚ
suboffsetsÚbufr„   rì   ÚPyBUF_SIMPLEÚPyBUF_FORMATÚPyBUF_WRITABLEÚPyBUF_F_CONTIGUOUSÚPyBUF_ANY_CONTIGUOUSr4   ÚBufferErrorÚPyBUF_C_CONTIGUOUSÚPyBUF_NDZPyBUF_STRIDEDZ
subsurfaceÚPyBUF_STRIDES)r   r0  r2  Zbit_sizeri   r>   r6  r{   r9   r   r   rá   ÚlengthÚimpZ	ar_slicedr   r   r   r   Útest_newbuf_2D«  s  



ÿ
ÿ

z&PixelArrayNewBufferTest.test_newbuf_2Dc                 C   s®  | j }|j}t ddd¡}t |¡}d}|| }| j| ¡  }|j}|j}	|	d }
|j	}|
| }|j
||  }|||jƒ}|  |j|¡ |  |j|¡ |  |jd¡ |  |j|¡ |  |jd u ¡ |  |j¡ |  |j|	¡ |  |j	|¡ |  |jd u ¡ |  |j|¡ |||jƒ}|  |jd¡ |  |j|¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ d}|d d …|f }|j}	|	d }|j	}|| }|j
||  ¡   }|||jƒ}|  |j|¡ |  |jd¡ |  |j|¡ |  |j|¡ |  |j¡ |  |j|	¡ |  |j	|¡ |  |j|¡ |  |jd u ¡ |||jƒ}|  |j|¡ |  |jd¡ |  |j|¡ |  |jd u ¡ |  |j¡ |  |jd u ¡ |  |j	d u ¡ |||jƒ}|  |j|¡ |  |jd¡ |  |j|¡ |  |jd u ¡ |  |j¡ |  |j|	¡ |  |j	d u ¡ |||jƒ}|  |jd¡ |||jƒ}|  |jd¡ |||jƒ}|  |jd¡ d S )N)r+   rK   r   r)   rp   r'   )!r0  r2  r1   r2   r3   r3  rì   r{   r9   rá   r„   rB  r7   r5  r   r…   r  r6  r†   r7  r8  r9  r4  r4   r?  r:  r;  r<  rA  r@  r=  r>  r  )r   r0  r2  ri   Zar_2Dr   r>   r6  r{   r9   r   rá   rC  r9  rD  r   r   r   r   r   Útest_newbuf_1D5  s’   
z&PixelArrayNewBufferTest.test_newbuf_1DN)
r#   r$   r%   r1   ÚHAVE_NEWBUFÚpygame.tests.test_utilsr0  r3  rE  rF  r   r   r   r   r/  £  s     r/  Ú__main__)r”   r+  ÚplatformrÍ   r  r’   Ú	functoolsr   rH  r   r   Ú	NameErrorr1   Úpython_implementationr  r   r  ZTestCaser&   r  rG  r/  r#   Úmainr   r   r   r   Ú<module>   sJ    ÿ
         
w 
 ^ÿ