o
    OZŽhPÐ  ã                   @   s    d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlZd dl	T g fdd„Z
			dd	d
„ZG dd„ de jƒZG dd„ de jƒZedkrNe  ¡  dS dS )é    N)Ú
test_utils)Úexample_path)Ú*c                 C   sü   |   ¡ dd … }tj |¡}| | d¡ tj ¡  tj ¡  d}d}|rrtj ¡ }|D ]D}|j	t
kr4d}|j	tkro|jttfv rg|jtkrI|d7 }|jtkrR|d8 }|| } | | d¡ tj ¡  tj ¡  q+|jtfv rod}q+|s$tj ¡  tj ¡  d S )Né   ©r   r   Tr   Fé   )Úget_rectÚpygameÚdisplayÚset_modeÚblitÚflipÚeventZpumpÚgetÚtypeZQUITZKEYDOWNÚkeyZK_sZK_aZK_ESCAPEÚquitÚinit)ÚsZimagesÚsizeÚscreenZgoingÚidxÚeventsÚe© r   úJ/var/www/auris/lib/python3.10/site-packages/pygame/tests/transform_test.pyÚ
show_image   s8   







€ð
r   ©r   r   r   Tc                 C   s  |  ¡ | ¡ }}|r|  |¡ z|\}}	}
W n ty&   |\}}	}
}Y nw z|\}}}W n ty=   |\}}}}Y nw d}t|ƒD ]<}t|ƒD ]5}| ||f¡}t|d | ƒ|k t|d |	 ƒ|k @ t|d |
 ƒ|k @ r|r{|  ||f|¡ |d7 }qJqD|S )zKgiven the color it makes return_surf only have areas with the given colour.r   r   r   )Ú	get_widthÚ
get_heightÚfillÚ
ValueErrorÚrangeÚget_atÚabsÚset_at)Zreturn_surfÚsurfÚcolorÚ	thresholdÚ
diff_colorZchange_returnÚwidthÚheightÚrÚgÚbÚaÚtrÚtgÚtbÚtaZsimilarÚyÚxÚc1r   r   r   r(   +   s0   

ÿÿ<€ùr(   c                   @   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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(dMdN„ Z)dOdP„ Z*dQS )RÚTransformModuleTestc                 C   sz   t  d¡}| d¡ |  | ¡ d¡ t  d¡}| d¡ t j |d¡}| ¡ }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ dS )z%see if set_alpha information is kept.©é    r9   é7   ©é@   r<   N)r	   ÚSurfaceZ	set_alphaÚassertEqualZ	get_alphaÚ	transformÚscaleÚcopy©Úselfr   Ús2Ús3r   r   r   Útest_scale__alphaU   s   



z%TransformModuleTest.test_scale__alphac                 C   s¤   t  d¡}t j |d¡}| ¡ }t jj|d|d}t j |d|¡ |  tt jj|d|¡ t  d¡}t j |d¡}| ¡ }t jj|d|d}|  tt jj|d|¡ dS )z7see if the destination surface can be passed in to use.r8   r;   )Úsurfacer   Údest_surface)é!   r<   N)r	   r=   r?   r@   rA   ÚassertRaisesr!   ÚsmoothscalerB   r   r   r   Útest_scale__destinationc   s   

z+TransformModuleTest.test_scale__destinationc                 C   sZ   t  d¡}t j |t  dd¡¡}t j |t  dd¡¡}|  d| ¡ ¡ |  d| ¡ ¡ d S )Nr8   r<   r;   )r	   r=   r?   r@   ZVector2rK   r>   Úget_sizerB   r   r   r   Útest_scale__vector2{   s
   
z'TransformModuleTest.test_scale__vector2c                 C   sF   t j t  d¡d¡}|  | ¡ d¡ t j |d¡}|  | ¡ d¡ d S )N©é€   rP   r   )r	   r?   r@   r=   r>   rM   )rC   Ztmp_surfacer   r   r   Ú"test_scale__zero_surface_transformƒ   s   z6TransformModuleTest.test_scale__zero_surface_transformc                 C   óh   t  d¡}t j |d¡}|  d| ¡ ¡ t jj|dd}|  d| ¡ ¡ t  d¡}t jj|d|d d S ©Nr8   r   r;   )g       @g      ø?)Úfactor)r<   é0   )rH   )r	   r=   r?   Zscale_byr>   rM   ©rC   r   rD   Údestr   r   r   Útest_scale_by‰   ó   

z!TransformModuleTest.test_scale_byc                 C   rR   rS   )r	   r=   r?   Zsmoothscale_byr>   rM   rV   r   r   r   Útest_smoothscale_by•   rY   z'TransformModuleTest.test_smoothscale_byc                 C   s°  t  d¡}| d¡ t j |¡}|  t j |¡d d¡ |  t j |¡d d¡ |  t j |¡d d¡ t jddd}t j ||¡ |  t j |¡d d¡ |  t j |¡d d¡ |  t j |¡d d¡ t jddd}| d	¡ t j ||¡ |  t j |¡d d
¡ |  t j |¡d d
¡ |  t j |¡d d
¡ t jddd}| d¡ t j ||¡ |  t j |¡d ddg¡ |  t j |¡d ddg¡ |  t j |¡d ddg¡ t jdd
d}| d¡ t jdd
d}t j ||¡ |  t j |¡d d¡ |  t j |¡d d¡ |  t j |¡d d¡ t jddd}| d¡ t jddd}t j ||¡ |  t j |¡d d¡ |  t j |¡d d¡ |  t j |¡d d¡ d S )Nr8   ©éÿ   r   r   r   éL   r   r   r9   ©Údepth)é"   é   éA   é   )é{   rd   rd   rd   éz   é   éH   )r	   r=   r    r?   Z	grayscaler>   Úaverage_colorZassertInrV   r   r   r   Útest_grayscale¡   sJ   





z"TransformModuleTest.test_grayscalec              	   C   s²   d \}}}d}d}d}t  |t jd¡}t  |t jd¡}t  |t jd¡}	| |¡ |	 |¡ t jjd |||d dd}
|  || |
¡ t jjd |d |d d|	d}
|  || |
¡ d S )	Nr8   ©é   rk   rk   rk   ©é   rm   rm   rm   ©é
   ro   ro   ro   r9   r   ©rH   rG   Úsearch_colorr(   Ú	set_colorÚset_behavior©rH   rG   rq   r(   rr   rs   Úsearch_surf)r	   r=   ÚSRCALPHAr    r?   r(   r>   )rC   ÚwÚhr   r(   Úoriginal_colorÚthreshold_colorÚoriginal_surfacerH   Zthird_surfaceÚpixels_within_thresholdr   r   r   Ú$test_threshold__honors_third_surfaceÎ   s8   

ú	ù	z8TransformModuleTest.test_threshold__honors_third_surfacec              	   C   sî   d \}}}d}d}d}d}d}t  |t jd¡}	t  |t jd¡}
t  |t jd¡}|	 |¡ | |¡ |
 |¡ d}t jj|
|	d	||||d
}|  || |¡ |
 ¡ }|j}|  ||¡ t	 
|¡D ]}|  |
 |¡|¡ |  |
 |¡|¡ q`d	S )z¢the pixels within the threshold.

        All pixels not within threshold are changed to set_color.
        So there should be none changed in this test.
        r8   rj   rl   ©rb   rb   rb   r:   rn   ©r\   ro   ro   ro   r9   r   Nrt   )r	   r=   rv   r    r?   r(   r>   r   r   r   Úrect_area_ptsZassertNotEqualr#   ©rC   rw   rx   r   r(   ry   Zoriginal_dest_colorrz   rr   r&   Ú	dest_surfru   Ú$THRESHOLD_BEHAVIOR_FROM_SEARCH_COLORr|   Z	dest_rectZ	dest_sizeÚptr   r   r   Ú#test_threshold_dest_surf_not_change  s<   


ùþz7TransformModuleTest.test_threshold_dest_surf_not_changec                 C   sÖ   d \}}}d}d}d}d}d}t  |t jd¡}	t  |t jd¡}
t  |t jd¡}|	 |¡ | |¡ |
 |¡ d}t jj|
|	d	|||d
}|  d|¡ |
 ¡ }|j}|  ||¡ t	 
|¡D ]}|  |
 |¡|¡ q]d	S )z1Lowering the threshold, expecting changed surfacer8   rj   rl   r~   rn   r   r9   r   N©rq   rr   rs   ru   r   )r	   r=   rv   r    r?   r(   r>   r   r   r   r€   r#   r   r   r   r   Ú$test_threshold_dest_surf_all_changed@  s8   


ú	ÿz8TransformModuleTest.test_threshold_dest_surf_all_changedc           	      C   sª   d}t  |t jd¡}t  |t jd¡}d}d}| |¡ | d|¡ | d|¡ |  tt jjd||¡ d}| jtt jjd|||d	 d
}t jjd|||d}|  	|d¡ dS )z(counts the colors, and not changes them.r8   r9   ©r:   r:   r:   r\   ©ro   ro   ro   r\   r   ©ra   é   Nr   )rs   r   )rH   rG   rq   rs   ©
r	   r=   rv   r    r%   rJ   Ú	TypeErrorr?   r(   r>   )	rC   Ú	surf_sizer&   ru   rq   ry   Ú#THRESHOLD_BEHAVIOR_FROM_SEARCH_SURFÚTHRESHOLD_BEHAVIOR_COUNTÚnum_threshold_pixelsr   r   r   Útest_threshold_countg  s8   
ÿú	üz(TransformModuleTest.test_threshold_countc              
   C   s:  d}t  |t jd¡}t  |t jd¡}t  |t jd¡}d}d}| |¡ | |¡ | d|¡ | d|¡ | |¡ d}| jtt jj|||||d t  d	t jd¡}| jtt jj||d d ||d
 | jtt jj||d d ||d
 t jj||d d ||d}	d}
|  	|	|
¡ | |¡ t jj||d d ||dd}	|  	|	d¡ d S )Nr8   r9   r‰   rˆ   r   rŠ   r   )rs   ru   )é   rI   r†   )rH   rG   rq   rr   rs   ru   T)rq   rr   rs   ru   Úinverse_setrŒ   )rC   rŽ   r&   ru   r‚   ry   rq   r   Zdifferent_sized_surfr‘   Znum_pixels_withinr   r   r   Útest_threshold_search_surf  s~   


ùøøú	
ù
z.TransformModuleTest.test_threshold_search_surfc              	   C   sè   d}t  |t jd¡}t  |t jd¡}|}|}d}d}d}d}	d}
| |
¡ | d|¡ | d	|¡ | |
¡ | d|¡ | d	|¡ d}t jj||||||dd
}|  |d¡ |  | d¡|¡ |  | d	¡|¡ |  | d¡|
¡ dS )z9changes the pixels within the threshold, and not outside.r8   r9   rˆ   )r   r   r   r   )éõ   r–   r–   r\   r   r‰   r   rŠ   )rq   r(   rr   rs   r”   r   )r   r   N)	r	   r=   rv   r    r%   r?   r(   r>   r#   )rC   rŽ   Z
_dest_surfZ_surfr‚   r&   rq   r(   rr   r”   ry   rƒ   r‘   r   r   r   Útest_threshold_inverse_setà  s<   

ù
z.TransformModuleTest.test_threshold_inverse_setc                 C   sL  t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}| d¡}| 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}
t jj||||	||
d}|  |d¡ t jj||d|	||
d}|  |d¡ |  | d¡|¡ d S )N©ro   ro   r   r   )r9   rk   r   )r   rk   r   )rI   é   r   )é   r   )é?   é=   r   )ép   é   r   )é   rž   r   ©r   r   )ra   rž   r   )r9   rk   r   r\   )rI   r™   r   r\   ©r\   r\   r\   r\   )éÞ   r   r   r\   )rk   rk   rk   r\   r   rp   r   )é(   r£   r   )	r	   r=   r    r%   r>   r#   Ú	get_flagsr?   r(   )rC   ÚresultÚs1rD   rE   Ús4r5   Zsimilar_colorr)   rz   rƒ   r‘   r   r   r   Útest_threshold_non_src_alpha  sR   








úúz0TransformModuleTest.test_threshold_non_src_alphac              	   C   s¬   d \}}}t  |t jd¡}t  |t jd¡}| d¡ g d¢}g d¢}ttdƒƒD ]*}|d d … }	|d d … }
d|	|< d|
|< t jjd ||	|
d dd	}|  || |¡ q)d S )
N)rf   rf   r9   r   )r‹   r‹   r‹   r‹   )é   r©   r©   r©   Úrgbé-   é2   )rr   rs   )	r	   r=   rv   r    r"   Úlenr?   r(   r>   )rC   rw   rx   r   r{   rH   Zthreshold_color_templateZthreshold_templateÚposrz   r(   r|   r   r   r   Útest_threshold__uneven_colors?  s*   
ú	ðz1TransformModuleTest.test_threshold__uneven_colorsc              
   C   sJ   ddl m} t dtd¡}t dtd¡}d}| jt|||ddd|d	 d
S )z>raises an error when set_behavior=2 and set_color is not None.r   ©r(   r8   r9   r   ©é   r²   r²   ©rŸ   rŸ   rŸ   r[   rp   N©Úpygame.transformr(   r	   r=   rv   rJ   r   )rC   r(   r¦   rD   r   r   r   r   Útest_threshold_set_behavior2`  s   
øz0TransformModuleTest.test_threshold_set_behavior2c              
   C   sx   ddl m} t dtd¡}t dtd¡}d}| jt|d|ddd|d	 | jt|||ddd|d	 |d|ddd|d	 dS )
zrraises an error when set_behavior=1
        and set_color is not None,
        and dest_surf is not None.
        r   r°   r8   r9   Nr±   r³   r   rp   r´   )rC   r(   r¦   rD   r   r   r   r   Útest_threshold_set_behavior0r  s@   øø
úz0TransformModuleTest.test_threshold_set_behavior0c              	   C   sŒ   ddl m} t dtd¡}t dtd¡}d}d}| |¡ | |¡ d}|||dd	d
|dd}|  || ¡ | ¡  ¡ |  | 	d¡|¡ d
S )z9Set similar pixels in 'dest_surf' to color in the 'surf'.r   r°   r8   r9   )r£   r£   r£   r\   ©r\   r\   r\   r   r±   r³   Nr   )rH   rG   rq   r(   rr   rs   r”   r   )
rµ   r(   r	   r=   rv   r    r>   r   r   r#   )rC   r(   r&   r‚   Z
surf_colorZ
dest_colorr   r‘   r   r   r   Útest_threshold_from_surfaceœ  s*   

ù
ÿz/TransformModuleTest.test_threshold_from_surfacec                 C   sN  ddl m} t dtd¡}t dtd¡}t 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
S )ú r   r°   r8   r9   r    r   )r£   r£   r£   r   )éª   r»   r»   Nr±   r³   rp   r   )éþ   r¼   r¼   r¸   ©r   r   r   )éý   r¾   r¾   r   )
rµ   r(   r	   r=   rv   r    r%   r>   r   r   )rC   r(   r¦   rD   rE   r   r   r‘   r   r   r   Útest_threshold__surface·  sJ   
 ú



ÿÿÿÿz+TransformModuleTest.test_threshold__surfacec           
      C   sâ   d}d}d}d}d}t  |||¡}t  |||¡}t  |||¡}| d¡ | d¡ | d¡ tjj||d|d	|d
}	|  |tj¡ |  |t j¡ |  |	|¡ |  | 	d¡|¡ |  | 
¡ |¡ |  | ¡ |¡ |  | ¡ |¡ d	S )z-Ensure threshold accepts subclassed surfaces.)é   rŸ   r   r9   )éZ   éP   éF   r\   )ro   ro   ro   r¸   )rk   rk   rk   r½   N)rH   rG   r(   rr   rq   ru   r   )r   ÚSurfaceSubclassr    r	   r?   r(   ÚassertIsInstancer=   r>   r#   Úget_bitsizerM   r¤   )
rC   Úexpected_sizeÚexpected_flagsÚexpected_depthÚexpected_colorZexpected_countrG   rH   Zsearch_surfaceÚcountr   r   r   Ú"test_threshold__subclassed_surface  s@   ÿÿÿ


ú	z6TransformModuleTest.test_threshold__subclassed_surfacec                 C   sü   d}t  ||f¡}t  ||f¡}| d¡ t j |ddd¡ t j |ddd¡ t j ||¡ |  | d¡d	¡ |  | d¡d
¡ |  | d¡d
¡ |  | d¡d
¡ t j |¡}|  | d¡d	¡ |  | d¡d
¡ |  | d¡d
¡ |  | d¡d
¡ dS )rº   r9   ©ro   ro   rÃ   r[   ©rš   ro   ©rk   rk   ©r   rž   ©rž   rž   r   ©r   r   r   r\   ©r\   r   r   r\   N)	r	   r=   r    ÚdrawÚliner?   Ú	laplacianr>   r#   )rC   ÚSIZEr¦   rD   r   r   r   Útest_laplacian1  s    
z"TransformModuleTest.test_laplacianc                 C   s  t j ¡  zvt j ttj dd¡ƒ¡}d}t  	||fdd¡}t j
j||d |  | d¡d¡ |  | d	¡d
¡ |  | d¡d
¡ |  | d¡d
¡ t j
 |¡}|  | d¡d¡ |  | d	¡d
¡ |  | d¡d
¡ |  | d¡d
¡ W t j ¡  dS t j ¡  w )rº   Údatazlaplacian.pngr9   r   rc   )rG   rH   r   rÒ   rÎ   rÓ   rÐ   rÑ   N)r	   r
   r   ÚimageÚloadr   ÚosÚpathÚjoinr=   r?   rÖ   r>   r#   r   )rC   Úsurf_1r×   Úsurf_2r   r   r   Útest_laplacian__24_big_endianO  s$   
ÿz1TransformModuleTest.test_laplacian__24_big_endianc                 C   s  d}t  ||f¡}t  ||f¡}t  ||f¡}| d¡ | d¡ | d¡ |||g}||g}t j |¡}|  | d¡d¡ |  tt jjd¡ |  tt jjg ¡ |  tt jjdg¡ |  tt jj|dg¡ |  tt jjd|g¡ |  tt jj||dg¡ |  tt jjdd	„ |||fD ƒ¡ d
S )rº   r9   rÍ   )ro   rk   rÃ   )ro   é‚   ro   r   )ro   é   rÃ   r\   r   c                 s   s    | ]}|V  qd S ©Nr   )Ú.0r   r   r   r   Ú	<genexpr>  s   € z<TransformModuleTest.test_average_surfaces.<locals>.<genexpr>N)	r	   r=   r    r?   Úaverage_surfacesr>   r#   rJ   r   )rC   r×   r¦   rD   rE   ÚsurfacesÚsrr   r   r   Útest_average_surfacess  s(   



ÿz)TransformModuleTest.test_average_surfacesc                 C   sÆ   d}d}t  ||fd|¡}t  ||fd|¡}t  ||fd|¡}| d¡ | d¡ | d¡ |||g}t j |¡}|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ 	 |  | d¡d¡ d S )	Nr9   rc   r   )ro   ro   rÃ   r\   )ro   rk   rÃ   r\   )ro   râ   ro   r\   r   )ro   é5   r¬   r\   )r	   r=   r    r?   rç   r>   Ú	get_masksr¤   Ú
get_lossesÚprintZ
get_shiftsr#   )rC   r×   r_   r¦   rD   rE   rè   ré   r   r   r   Útest_average_surfaces__24  s   



z-TransformModuleTest.test_average_surfaces__24c                 C   sÐ   t j ¡  z\t j ttj dd¡ƒ¡}| 	¡ }||g}|  
| d¡d¡ |  
| d¡d¡ t j |¡}|  
| ¡ | ¡ ¡ |  
| ¡ | ¡ ¡ |  
| ¡ | ¡ ¡ |  
| d¡d¡ W t j ¡  d S t j ¡  w )NrÙ   zBGR.pngr   rÓ   )r	   r
   r   rÚ   rÛ   r   rÜ   rÝ   rÞ   rA   r>   r#   r?   rç   rì   r¤   rí   r   )rC   rß   rà   rè   Zsurf_avr   r   r   Ú$test_average_surfaces__24_big_endian©  s   
z8TransformModuleTest.test_average_surfaces__24_big_endianc           	      C   s®   d}d}d}d}g }dD ]}t  |||¡}| |¡ | |¡ qtj |¡}|  |tj¡ |  	|t j¡ |  
| d¡|¡ |  
| ¡ |¡ |  
| ¡ |¡ |  
| ¡ |¡ dS )z4Ensure average_surfaces accepts subclassed surfaces.)é   é   r   r9   )r¬   r¬   r¬   r\   ))r£   é<   r£   )ró   r£   ró   r   N)r   rÄ   r    Úappendr	   r?   rç   rÅ   r=   ZassertNotIsInstancer>   r#   rÆ   rM   r¤   )	rC   rÇ   rÈ   rÉ   rÊ   rè   r'   r   rG   r   r   r   Ú*test_average_surfaces__subclassed_surfaces½  s$   ÿ
z>TransformModuleTest.test_average_surfaces__subclassed_surfacesc           
      C   sÆ   d}d}d}d}g }dD ]}t  |||¡}| |¡ | |¡ q| ¡ }tjj||d}	|  |	tj	¡ |  |	t j¡ |  
|	|¡ |  |	 d¡|¡ |  |	 ¡ |¡ |  |	 ¡ |¡ |  |	 ¡ |¡ dS )	zAEnsure average_surfaces accepts a destination subclassed surface.)rÀ   é   r   r9   )rã   rã   rã   r\   ))ro   ro   rk   )rk   rk   ro   r±   )rè   rH   r   N)r   rÄ   r    rô   Úpopr	   r?   rç   rÅ   r=   ZassertIsr>   r#   rÆ   rM   r¤   )
rC   rÇ   rÈ   rÉ   rÊ   rè   r'   r   Zexpected_dest_surfacerH   r   r   r   Ú5test_average_surfaces__subclassed_destination_surfaceÕ  s,   ÿ
ÿzITransformModuleTest.test_average_surfaces__subclassed_destination_surfacec              	   C   s”   dD ]E}|   d|› d¡2 t dd|¡}| d¡ | dd¡ |  tj |¡d	¡ tjj|d
d}|  |d¡ W d  ƒ n1 sBw   Y  qdS )rº   )rc   r9   zTesting z-bit surfacer8   r   )r   éd   éÈ   )ro   r¬   rù   ©r   r   rf   r9   )r‹   éK   é–   r   ©rf   r   rf   r9   ©rG   Úrect)r   rù   rú   r   N)ZsubTestr	   r=   r    r>   r?   rh   )rC   Úir   Ú	avg_colorr   r   r   Útest_average_colorò  s   
ÿõ€ÿz&TransformModuleTest.test_average_colorc                 C   s`   t  dt jd¡}| d¡ | dd¡ |  t jj|ddd¡ t jj|d	dd
}|  |d¡ dS )rº   r8   r9   ©r   rù   rú   r\   )ro   r¬   rù   r\   rû   T©Úconsider_alpha)r‹   rü   rý   r\   rþ   ©rG   r   r  N©r	   r=   rv   r    r>   r?   rh   ©rC   r   r  r   r   r   Ú6test_average_color_considering_alpha_all_pixels_opaque  s   
ÿÿzJTransformModuleTest.test_average_color_considering_alpha_all_pixels_opaquec                 C   s`   t  dt jd¡}| d¡ | dd¡ |  t jj|ddd¡ t jj|ddd	}|  |d¡ d
S )rº   r8   r9   r  )ro   r¬   rù   rP   rû   Tr  )rš   éS   é¦   é¿   r  Nr  r	  r   r   r   Ú$test_average_color_considering_alpha  s   
ÿÿz8TransformModuleTest.test_average_color_considering_alphac                 C   sü   d}d}d}t  d¡}d}| d|¡ | d|¡ |  | d¡|¡ |  | d¡|¡ |  | d¡|¡ tdd	ƒD ]9}|d
 dkrK|  | d¡|¡ n|dkrY|  | d¡|¡ n|dkrf|  | d¡|¡ |d7 }t jj|dd}q9|  | d¡|¡ d S )N)r   r   r\   r\   rÓ   r   )rš   rš   r   )r   r   )r   r   r   é   r   r   rš   rÁ   )rG   Úangle)r	   r=   r%   r>   r#   r"   r?   Úrotate)rC   ÚblueÚredÚblackZcanvasÚrotationr  r   r   r   Útest_rotate&  s(   
zTransformModuleTest.test_rotatec                 C   s4   t  d¡}t  d¡}t j |d¡ t j |d¡ d S )N)r   r   )r   r   é*   )r	   r=   r?   r  )rC   Zcanvas1Zcanvas2r   r   r   Útest_rotate_of_0_sized_surfaceC  s   

z2TransformModuleTest.test_rotate_of_0_sized_surfacec                 C   s‚   d\}}t  ||ft j¡}tt ||¡ƒ}|D ]
\}}| ||¡ qdD ]	}t j ||¡}q$|D ]\}}|  	| 
|¡|k¡ q0d S )Nr8   )rÁ   i¦ÿÿÿ)r	   r=   rv   Úlistr   Úgradientr%   r?   r  Ú
assertTruer#   )rC   rw   rx   r   r  r„   r'   r  r   r   r   Ú#test_rotate__lossless_at_90_degreesJ  s   ÿz7TransformModuleTest.test_rotate__lossless_at_90_degreesc                 C   s^   d\}}t  ||ft jd¡}t j |¡}t jj|d}|  | ¡ jd¡ |  | ¡ jd¡ d S )Nr8   r9   )rG   r;   )r	   r=   rv   r?   Zscale2xr>   r   r   )rC   rw   rx   r   r¦   rD   r   r   r   Útest_scale2xY  s   z TransformModuleTest.test_scale2xc                 C   sØ   d\}}t  ||ft jd¡}| d¡ t j |d|d |d f|d ¡ t j ||d |d f¡}t j ||d |d f¡}t j ||d |d f¡}|  | 	¡ j
d¡ t | 	¡ ¡D ]}|  | |¡| |¡¡ q[d S )	Nr8   r9   r   r[   r   rš   r  rO   )r	   r=   rv   r    rÔ   Úcircler?   r@   r>   r   r   r   r€   r#   )rC   rw   rx   r   rD   Zs2_2r§   r„   r   r   r   Útest_scale2xrawj  s   
"ÿz#TransformModuleTest.test_scale2xrawc                 C   s   t j ¡ }|  |dv ¡ d S )N)ÚGENERICZMMXÚSSE)r	   r?   Úget_smoothscale_backendr  )rC   Úfilter_typer   r   r   Útest_get_smoothscale_backendy  s   
z0TransformModuleTest.test_get_smoothscale_backendc                 C   s¬   t j ¡ }t j d¡ t j ¡ }|  |d¡ t jj|d dd„ }|  t|¡ dd„ }|  t|¡ dd„ }|  t|¡ |dkrIdd„ }|  t|¡ t j ¡ }|  ||¡ d S )	Nr   )Úbackendc                   S   ó   t j d¡ d S )NZmmx©r	   r?   Úset_smoothscale_backendr   r   r   r   Úchange‹  ó   z@TransformModuleTest.test_set_smoothscale_backend.<locals>.changec                   S   s   t jjdd d S )Nr   )Útr'  r   r   r   r   r)  ‘  s   c                   S   r&  )Nr   r'  r   r   r   r   r)  —  r*  r!  c                   S   r&  )Nr!  r'  r   r   r   r   r)  ž  r*  )r	   r?   r"  r(  r>   rJ   r!   r   )rC   Zoriginal_typer#  r)  r   r   r   Útest_set_smoothscale_backend€  s    


z0TransformModuleTest.test_set_smoothscale_backendc                 C   sj  t  d¡}t j |dd¡ t j |dd¡ t j |dd¡ t j |dd	¡ t  d
d
dd¡}t j ||¡}|  | ¡ d¡ t	dƒD ]$}t	dƒD ]}|dk rX|  | 
||f¡d¡ qF|  | 
||f¡d¡ qFq@|  | ¡ d¡ t	dƒD ]]}t	dƒD ]V}|dk rŒ|dk rŒ|  | 
||f¡d¡ |d  k r–|k r£n n|  | 
||f¡d¡ |d  kr­|krºn n|  | 
||f¡d¡ |dkrÍ|dkrÍ|  | 
||f¡d¡ qwqqt  d
d
dd¡}| ¡ j|_t jj||d}|  | ¡ d¡ t	dƒD ]e}t	dƒD ]^}|dk r|dk r|  | 
||f¡d¡ |d  k r|k r'n n|  | 
||f¡d¡ |d  kr3|kr@n n|  | 
||f¡d¡ |dkrU|dkrU|  | 
||f¡d¡ q÷qñt  ddd
d
¡}t j ||¡}|  | ¡ d¡ t  d
d
dd¡}t j ||¡}|  | ¡ d¡ t  dddd¡}t j ||¡}|  | ¡ d¡ t  dddd¡}t j ||¡}|  | ¡ d¡ d S )NrÏ   r[   )r   r   ro   ro   )r   r\   r   )r   ro   ro   ro   )r   r   r\   )ro   r   ro   ro   )r\   r\   r   rn   r   r‹   rã   )rã   r‹   rk   ro   rÿ   r˜   r   )r‹   rã   i  )r	   r=   rÔ   r   ÚRectr?   Zchopr>   rM   r"   r#   r   Úcenter)rC   r{   r   Ztest_surfacer5   r4   r   r   r   Ú	test_chop¦  sn   
ü€ø
€ø
zTransformModuleTest.test_chopc              	   C   sv   t  d¡}t j |d¡ t j |dd¡}t jj|ddd}|  | ¡ t  dddd¡¡ |  | ¡ t  dddd¡¡ d S )N)ro   r   )ro   r   r²   r   )rG   r  r@   r   )r	   r=   r?   r@   Zrotozoomr>   r   r-  )rC   r   r¦   rD   r   r   r   Útest_rotozoomä  s   
 z!TransformModuleTest.test_rotozoomc           	   	   C   s¤  dd„ }|   t|¡ dd„ }|   t|¡ dd„ }|   t|¡ tjddd	}| t d
d
d
¡t d
d
dd¡¡ | t ddd¡t dd
dd¡¡ dd„ tddƒD ƒD ]'}tj 	||df¡}|  
| |d d
f¡t ddd¡¡ |  
| ¡ |df¡ qQtjddd	}| t d
d
d
¡t d
d
dd¡¡ | t ddd¡t dd
dd¡¡ tdddƒD ]'}tj 	||df¡}|  
| |d d
f¡t ddd¡¡ |  
| ¡ |df¡ q¨dS )zOTests the stated boundaries, sizing, and color blending of smoothscale functionc                  S   ó    t jddd} t j | d¡}d S )NrÏ   ra   r^   r˜   ©r	   r=   r?   rK   ©Zstarting_surfaceZsmoothscaled_surfacer   r   r   Úsmoothscale_low_bpp  ó   ÿzATransformModuleTest.test_smoothscale.<locals>.smoothscale_low_bppc                  S   r1  )NrÏ   rU   r^   r˜   r2  r3  r   r   r   Úsmoothscale_high_bpp  r5  zBTransformModuleTest.test_smoothscale.<locals>.smoothscale_high_bppc                  S   r1  )NrÏ   r9   r^   )éÿÿÿÿr7  r2  r3  r   r   r   Úsmoothscale_invalid_scale  r5  zGTransformModuleTest.test_smoothscale.<locals>.smoothscale_invalid_scale)r   r   r9   r^   r   r   r\   c                 S   s   g | ]}d | ‘qS )r   r   )rå   r5   r   r   r   Ú
<listcomp>+  s    z8TransformModuleTest.test_smoothscale.<locals>.<listcomp>r‹   é   r   é   )é   r   rP   rš   rŸ   N)rJ   r!   r	   r=   r    ÚColorr-  r"   r?   rK   r>   r#   rM   )	rC   r4  r6  r8  Ztwo_pixel_surfaceÚkZbigger_surfaceZtwo_five_six_surfZsmaller_surfacer   r   r   Útest_smoothscaleú  s2   ""ÿ""ÿûz$TransformModuleTest.test_smoothscaleN)+Ú__name__Ú
__module__Ú__qualname__rF   rL   rN   rQ   rX   rZ   ri   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,  r/  r0  r?  r   r   r   r   r7   T   sR    -@2'&S-2!*U%$&>r7   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTransformDisplayModuleTestc                 C   s   t j ¡  t j d¡ d S )N)i@  rú   )r	   r
   r   r   ©rC   r   r   r   ÚsetUp>  s   
z TransformDisplayModuleTest.setUpc                 C   s   t j ¡  d S rä   )r	   r
   r   rD  r   r   r   ÚtearDownB  s   z#TransformDisplayModuleTest.tearDownc           	      C   sn  t j tdƒ¡}t  | ¡ dd¡}| |d¡ | ¡ }|  | 	¡ t j
@ ¡ |  | 	¡ t j
@ ¡ t  | ¡ dd¡}t  | ¡ dd¡}| d¡ | d¡ | d¡}| |t¡ t j |dd¡}| d¡}| |t¡ t jj|ddd}| |d¡ | |d¡ |  | d¡| d¡¡ |  | d¡d¡ | d¡ | d¡ | |d¡ | |d¡ |  | d¡| d¡¡ d	S )
z;honors the set_color key on the returned surface from flip.údata/chimp.pngr   r9   r   r¸   r   )rG   Zflip_xZflip_yr¡   N)r	   rÚ   rÛ   r   r=   rM   r   ÚconvertZassertFalser¤   rv   r    r#   Úset_colorkeyÚRLEACCELr?   r   r>   )	rC   Úimage_loadedrÚ   Zimage_convertedr&   Úsurf2ÚcolorkeyZtimageZtimage_convertedr   r   r   Ú	test_flipE  s6   



ÿ

z$TransformDisplayModuleTest.test_flipc                 C   sü   t j tdƒ¡}t  | ¡ t jd¡}| |d¡ t  | ¡ dd¡}t  | ¡ dd¡}| d¡}| 	|t
¡ t j |dd¡}|  | ¡ t j@ ¡ |  | ¡ t j@ ¡ | d¡ | d¡ | |d¡ | |d¡ |  | d¡| d¡¡ |  | d¡d¡ dS )	z8returns a surface with the same properties as the input.rG  r9   r   r   r   r¸   rÓ   N)r	   rÚ   rÛ   r   r=   rM   rv   r   r#   rI  rJ  r?   r   r  r¤   r    r>   )rC   rK  Zimage_alphar&   rL  rM  Ztimage_alphar   r   r   Útest_flip_alphaq  s    


z*TransformDisplayModuleTest.test_flip_alphaN)r@  rA  rB  rE  rF  rN  rO  r   r   r   r   rC  =  s
    ,rC  Ú__main__)r   r   T)ZunittestrÜ   ÚplatformZpygame.testsr   Zpygame.tests.test_utilsr   r	   rµ   Zpygame.localsr   r(   ZTestCaser7   rC  r@  Úmainr   r   r   r   Ú<module>   s6    "
ú)         rNÿ