o
    tVÆgPÐ  ã                   @   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ÚeventÚpumpÚgetÚtypeÚQUITÚKEYDOWNÚkeyÚK_sÚK_aÚK_ESCAPEÚquitÚinit)ÚsÚimagesÚsizeÚscreenÚgoingÚidxÚeventsÚe© r"   úO/home/ubuntu/.local/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)Úreturn_surfÚsurfÚcolorÚ	thresholdÚ
diff_colorÚchange_returnÚwidthÚheightÚrÚgÚbÚaÚtrÚtgÚtbÚtaÚsimilarÚyÚxÚc1r"   r"   r#   r1   +   s0   

ÿÿ<€ùr1   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.©é    rD   é7   ©é@   rG   N)r	   ÚSurfaceÚ	set_alphaÚassertEqualÚ	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.rC   rF   )Úsurfacer   Údest_surface)é!   rG   N)r	   rH   rL   rM   rN   ÚassertRaisesr)   ÚsmoothscalerO   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 )NrC   rG   rF   )r	   rH   rL   rM   ÚVector2rX   rJ   Úget_sizerO   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©é€   r^   r   )r	   rL   rM   rH   rJ   r[   )rP   Ú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 ©NrC   r   rF   )g       @g      ø?)Úfactor)rG   é0   )rU   )r	   rH   rL   Úscale_byrJ   r[   ©rP   r   rQ   Údestr"   r"   r#   Útest_scale_by‰   ó   

z!TransformModuleTest.test_scale_byc                 C   ra   rb   )r	   rH   rL   Úsmoothscale_byrJ   r[   rf   r"   r"   r#   Útest_smoothscale_by•   ri   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 )NrC   ©éÿ   r   r   r   éL   r   r   rD   ©Údepth)é"   é   éA   é   )é{   ru   ru   ru   éz   é   éH   )r	   rH   r(   rL   Ú	grayscalerJ   Úaverage_colorÚassertInrf   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 )	NrC   ©é   r~   r~   r~   ©é   r€   r€   r€   ©é
   r‚   r‚   r‚   rD   r   ©rU   rT   Úsearch_colorr1   Ú	set_colorÚset_behavior©rU   rT   r„   r1   r…   r†   Úsearch_surf)r	   rH   ÚSRCALPHAr(   rL   r1   rJ   )rP   ÚwÚhr   r1   Úoriginal_colorÚthreshold_colorÚoriginal_surfacerU   Ú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.
        rC   r}   r   ©rs   rs   rs   rE   r   ©rm   r‚   r‚   r‚   rD   r   Nr‡   )r	   rH   r‰   r(   rL   r1   rJ   r   r   r   Úrect_area_ptsÚassertNotEqualr+   ©rP   rŠ   r‹   r   r1   rŒ   Úoriginal_dest_colorr   r…   r/   Ú	dest_surfrˆ   Ú$THRESHOLD_BEHAVIOR_FROM_SEARCH_COLORr   Ú	dest_rectÚ	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 surfacerC   r}   r   r’   r   r“   rD   r   N©r„   r…   r†   rˆ   r   )r	   rH   r‰   r(   rL   r1   rJ   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.rC   rD   ©rE   rE   rE   rm   ©r‚   r‚   r‚   rm   r   ©rr   é   Nr   )r†   r   )rU   rT   r„   r†   ©
r	   rH   r‰   r(   r-   rW   Ú	TypeErrorrL   r1   rJ   )	rP   Ú	surf_sizer/   rˆ   r„   rŒ   Ú#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 )NrC   rD   r¡   r    r   r¢   r   )r†   rˆ   )é   rV   rž   )rU   rT   r„   r…   r†   rˆ   T)r„   r…   r†   rˆ   Úinverse_setr¤   )rP   r¦   r/   rˆ   r˜   rŒ   r„   r§   Údifferent_sized_surfr©   Ú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.rC   rD   r    )r   r   r   r   )éõ   r°   r°   rm   r   r¡   r   r¢   )r„   r1   r…   r†   r¬   r   )r   r   N)	r	   rH   r‰   r(   r-   rL   r1   rJ   r+   )rP   r¦   Ú
_dest_surfÚ_surfr˜   r/   r„   r1   r…   r¬   rŒ   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©r‚   r‚   r%   r   )rD   r~   r   )r   r~   r   )rV   é   r   )é   r   )é?   é=   r   )ép   é   r   )é   rº   r   ©r   r   )rr   rº   r   )rD   r~   r   rm   )rV   rµ   r   rm   ©rm   rm   rm   rm   )éÞ   r   r   rm   )r~   r~   r~   rm   r   rƒ   r   )é(   r¿   r   )	r	   rH   r(   r-   rJ   r+   Ú	get_flagsrL   r1   )rP   ÚresultÚs1rQ   rR   Ús4r@   Úsimilar_colorr2   r   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)rw   rw   rD   r   )r£   r£   r£   r£   )é   rÆ   rÆ   rÆ   Úrgbé-   é2   )r…   r†   )	r	   rH   r‰   r(   r*   ÚlenrL   r1   rJ   )rP   rŠ   r‹   r   rŽ   rU   Úthreshold_color_templateÚthreshold_templateÚposr   r1   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   ©r1   rC   rD   r   ©é   rÑ   rÑ   ©r»   r»   r»   rl   rƒ   N©Úpygame.transformr1   r	   rH   r‰   rW   r¥   )rP   r1   rÂ   rQ   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Ï   rC   rD   NrÐ   rÒ   r%   rƒ   rÓ   )rP   r1   rÂ   rQ   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Ï   rC   rD   )r¿   r¿   r¿   rm   ©rm   rm   rm   r   rÐ   rÒ   Nr   )rU   rT   r„   r1   r…   r†   r¬   r   )
rÔ   r1   r	   rH   r‰   r(   rJ   r'   r&   r+   )rP   r1   r/   r˜   Ú
surf_colorÚ
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Ï   rC   rD   r¼   r   )r¿   r¿   r¿   r   )éª   rÜ   rÜ   NrÐ   rÒ   rƒ   r   )éþ   rÝ   rÝ   r×   ©r   r   r   )éý   rß   rß   r%   )
rÔ   r1   r	   rH   r‰   r(   r-   rJ   r'   r&   )rP   r1   rÂ   rQ   rR   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   rD   )éZ   éP   éF   rm   )r‚   r‚   r‚   r×   )r~   r~   r~   rÞ   N)rU   rT   r1   r…   r„   rˆ   r   )r   ÚSurfaceSubclassr(   r	   rL   r1   ÚassertIsInstancerH   rJ   r+   Úget_bitsizer[   rÀ   )
rP   Úexpected_sizeÚexpected_flagsÚexpected_depthÚexpected_colorÚexpected_countrT   rU   Ú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Û   rD   ©r‚   r‚   rä   rl   ©r¶   r‚   ©r~   r~   ©r   rº   ©rº   rº   r   ©r   r   r   rm   ©rm   r   r   rm   N)	r	   rH   r(   ÚdrawÚlinerL   Ú	laplacianrJ   r+   )rP   ÚSIZErÂ   rQ   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.pngrD   r   rt   )rT   rU   r   rõ   rñ   rö   ró   rô   N)r	   r
   r   ÚimageÚloadr   ÚosÚpathÚjoinrH   rL   rù   rJ   r+   r   )rP   Ú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Û   rD   rð   )r‚   r~   rä   )r‚   é‚   r‚   r   )r‚   é   rä   rm   r   c                 s   s    | ]}|V  qd S ©Nr"   )Ú.0r   r"   r"   r#   Ú	<genexpr>  s   € z<TransformModuleTest.test_average_surfaces.<locals>.<genexpr>N)	r	   rH   r(   rL   Úaverage_surfacesrJ   r+   rW   r¥   )rP   rú   rÂ   rQ   rR   Ú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 )	NrD   rt   r   )r‚   r‚   rä   rm   )r‚   r~   rä   rm   )r‚   r  r‚   rm   r   )r‚   é5   rÉ   rm   )r	   rH   r(   rL   r
  rJ   Ú	get_masksrÀ   Ú
get_lossesÚprintÚ
get_shiftsr+   )rP   rú   rp   rÂ   rQ   rR   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  rN   rJ   r+   rL   r
  r  rÀ   r  r   )rP   r  r  r  Ú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   rD   )rÉ   rÉ   rÉ   rm   ))r¿   é<   r¿   )r  r¿   r  r   N)r   rå   r(   Úappendr	   rL   r
  ræ   rH   ÚassertNotIsInstancerJ   r+   rç   r[   rÀ   )	rP   rè   ré   rê   rë   r  r0   r   rT   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   rD   )r  r  r  rm   ))r‚   r‚   r~   )r~   r~   r‚   rÐ   )r  rU   r   N)r   rå   r(   r  Úpopr	   rL   r
  ræ   rH   ÚassertIsrJ   r+   rç   r[   rÀ   )
rP   rè   ré   rê   rë   r  r0   r   Úexpected_dest_surfacerU   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Û   )rt   rD   zTesting z-bit surfacerC   r   )r   éd   éÈ   )r‚   rÉ   r!  ©r   r   rw   rD   )r£   éK   é–   r   ©rw   r   rw   rD   ©rT   Úrect)r   r!  r"  r   N)ÚsubTestr	   rH   r(   rJ   rL   rz   )rP   Ú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Û   rC   rD   ©r   r!  r"  rm   )r‚   rÉ   r!  rm   r#  T©Úconsider_alpha)r£   r$  r%  rm   r&  ©rT   r(  r/  N©r	   rH   r‰   r(   rJ   rL   rz   ©rP   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Û   rC   rD   r-  )r‚   rÉ   r!  r^   r#  Tr.  )r¶   éS   é¦   é¿   r0  Nr1  r2  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   rm   rm   rö   r%   )r¶   r¶   r   )r   r   )r   r   r   é   r   r   r¶   râ   )rT   Úangle)r	   rH   r-   rJ   r+   r*   rL   Úrotate)rP   ÚblueÚredÚblackÚ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	   rH   rL   r:  )rP   Úcanvas1Ú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 )NrC   )râ   i¦ÿÿÿ)r	   rH   r‰   Úlistr   Úgradientr-   rL   r:  Ú
assertTruer+   )rP   rŠ   r‹   r   rF  rœ   r0   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 )NrC   rD   )rT   rF   )r	   rH   r‰   rL   Úscale2xrJ   r   r   )rP   rŠ   r‹   r   rÂ   rQ   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 )	NrC   rD   r%   rl   r   r¶   r8  r]   )r	   rH   r‰   r(   r÷   ÚcirclerL   rM   rJ   r   r   r   r”   r+   )rP   rŠ   r‹   r   rQ   Ús2_2rÃ   rœ   r"   r"   r#   Útest_scale2xrawj  s   
"ÿz#TransformModuleTest.test_scale2xrawc                 C   s   t j ¡ }|  |dv ¡ d S )N)ÚGENERICÚMMXÚSSE)r	   rL   Úget_smoothscale_backendrG  )rP   Ú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 )	NrN  )Úbackendc                   S   ó   t j d¡ d S )NÚmmx©r	   rL   Úset_smoothscale_backendr"   r"   r"   r#   Úchange‹  ó   z@TransformModuleTest.test_set_smoothscale_backend.<locals>.changec                   S   s   t jjdd d S )NrN  )ÚtrW  r"   r"   r"   r#   rY  ‘  s   c                   S   rU  )Nr   rW  r"   r"   r"   r#   rY  —  rZ  rP  c                   S   rU  )NrP  rW  r"   r"   r"   r#   rY  ž  rZ  )r	   rL   rQ  rX  rJ   rW   r)   r¥   )rP   Úoriginal_typerR  rY  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ò   rl   )r   r   r‚   r‚   )r   rm   r   )r   r‚   r‚   r‚   )r   r   rm   )r‚   r   r‚   r‚   )rm   rm   r   r   r   r£   r  )r  r£   r~   r‚   r'  r´   r   )r£   r  i  )r	   rH   r÷   r(  ÚRectrL   ÚchoprJ   r[   r*   r+   r   Úcenter)rP   rŽ   r(  Útest_surfacer@   r?   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)r‚   r   )r‚   r   rÑ   r   )rT   r9  rM   r   )r	   rH   rL   rM   ÚrotozoomrJ   r   r^  )rP   r   rÂ   rQ   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ò   rr   ro   r´   ©r	   rH   rL   rX   ©Ústarting_surfaceÚsmoothscaled_surfacer"   r"   r#   Úsmoothscale_low_bpp  ó   ÿzATransformModuleTest.test_smoothscale.<locals>.smoothscale_low_bppc                  S   re  )Nrò   rd   ro   r´   rf  rg  r"   r"   r#   Úsmoothscale_high_bpp  rk  zBTransformModuleTest.test_smoothscale.<locals>.smoothscale_high_bppc                  S   re  )Nrò   rD   ro   )éÿÿÿÿrm  rf  rg  r"   r"   r#   Úsmoothscale_invalid_scale  rk  zGTransformModuleTest.test_smoothscale.<locals>.smoothscale_invalid_scale)r   r   rD   ro   r   r   rm   c                 S   s   g | ]}d | ‘qS )r   r"   )r  r@   r"   r"   r#   Ú
<listcomp>+  s    z8TransformModuleTest.test_smoothscale.<locals>.<listcomp>r£   é   r   é   )é   r   r^   r¶   r»   N)rW   r)   r	   rH   r(   ÚColorr^  r*   rL   rX   rJ   r+   r[   )	rP   rj  rl  rn  Útwo_pixel_surfaceÚkÚbigger_surfaceÚtwo_five_six_surfÚsmaller_surfacer"   r"   r#   Útest_smoothscaleú  s2   ""ÿ""ÿûz$TransformModuleTest.test_smoothscaleN)+Ú__name__Ú
__module__Ú__qualname__rS   rY   r\   r`   rh   rk   r|   r‘   r   rŸ   rª   r¯   r³   rÅ   rÎ   rÕ   rÖ   rÚ   rà   rï   rû   r  r  r  r  r  r   r,  r3  r7  r@  rD  rH  rJ  rM  rS  r]  rb  rd  ry  r"   r"   r"   r#   rB   T   sR    -@2'&S-2!*U%$&>rB   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   ©rP   r"   r"   r#   ÚsetUp>  s   
z TransformDisplayModuleTest.setUpc                 C   s   t j ¡  d S r  )r	   r
   r   r~  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   rD   r   r×   r   )rT   Úflip_xÚflip_yr½   N)r	   rý   rþ   r   rH   r[   r   ÚconvertÚassertFalserÀ   r‰   r(   r+   Úset_colorkeyÚRLEACCELrL   r   rJ   )	rP   Úimage_loadedrý   Úimage_convertedr/   Úsurf2ÚcolorkeyÚtimageÚ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.r  rD   r   r   r   r×   rö   N)r	   rý   rþ   r   rH   r[   r‰   r   r+   r†  r‡  rL   r   rG  rÀ   r(   rJ   )rP   rˆ  Úimage_alphar/   rŠ  r‹  Útimage_alphar"   r"   r#   Útest_flip_alphaq  s    


z*TransformDisplayModuleTest.test_flip_alphaN)rz  r{  r|  r  r€  rŽ  r‘  r"   r"   r"   r#   r}  =  s
    ,r}  Ú__main__)r%   r%   T)Úunittestrÿ   ÚplatformÚpygame.testsr   Úpygame.tests.test_utilsr   r	   rÔ   Úpygame.localsr$   r1   ÚTestCaserB   r}  rz  Úmainr"   r"   r"   r#   Ú<module>   s6    "
ú)         rNÿ