o
    OZŽhÇc  ã                   @   sò   d dl Z d dlZzd dlmZ W n	 ey   Y nw d dlZd dlT d dlmZm	Z	m
Z
mZ de  ¡ kZdd„ Ze ed¡G d	d
„ d
ejƒƒZe ed¡G dd„ dejƒƒZe ej d¡e ed¡G dd„ dejƒƒƒZedkrwe ¡  dS dS )é    N)Úarrinter)Ú*)Úsurface_to_arrayÚ	map_arrayÚarray_to_surfaceÚmake_surfaceÚPyPyc                 C   s   | d@ S )z1cast signed 32 bit integer to an unsigned integerl   ÿÿ © )Úir	   r	   úJ/var/www/auris/lib/python3.10/site-packages/pygame/tests/pixelcopy_test.pyÚ
unsigned32   s   r   z&pypy having illegal instruction on macc                   @   s†   e Zd Zg d¢Zg d¢ZdZg d¢Zdd„ Zdd	d
„Zddd„Z	d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S )ÚPixelcopyModuleTest©é   é   é    ©)r   r   r   éÿ   )é
   é   é<   r   )é   éK   éd   r   )r   é–   éÈ   r   )r   r   r   r   ©r   é   ©)©r   r   é   ))é   é   r    ))é	   r   é   ))r"   r"   r$   ))r   é   é   ))r!   é   r&   ))r#   r%   r!   ))r"   r'   r!   c              	   O   s€   t j ¡  z4tjj| g|¢R i |¤Ž |  d¡|  d¡| jddd|  d¡|  d¡| jdddg| _W t j ¡  d S t j ¡  w )Nr   r   T©Úsrcalphaé   r   )	ÚpygameÚdisplayÚinitÚunittestÚTestCaseÚ__init__Ú_make_src_surfaceÚsourcesÚquit)ÚselfÚargsÚkwdsr	   r	   r   r0   ,   s   
ú	zPixelcopyModuleTest.__init__FNc                 C   óN   |d u r| j }d}|r|tO }t | j||¡}|dkr%| dd„ |D ƒ¡ |S )Nr   r   c                 S   ó   g | ]}|d d… ‘qS ©Nr&   r	   ©Ú.0Úcr	   r	   r   Ú
<listcomp>C   ó    z5PixelcopyModuleTest._make_surface.<locals>.<listcomp>©Útest_paletteZSRCALPHAr+   ÚSurfaceÚ	surf_sizeZset_palette©r4   Úbitsizer)   ÚpaletteÚflagsÚsurfr	   r	   r   Ú_make_surface;   ó   z!PixelcopyModuleTest._make_surfacec                 C   óR   |d u r| j }| |d d¡ | |d d¡ | |d d¡ | |d d¡ d S ©	Nr    )r   r   r"   r'   r$   )r"   r   r"   r'   r&   )r   r'   r"   r'   r!   )r"   r'   r"   r'   ©r@   Úfill©r4   rG   rE   r	   r	   r   Ú_fill_surfaceF   ó   z!PixelcopyModuleTest._fill_surfacec                 C   ó   |   |||¡}|  ||¡ |S ©N©rH   rO   ©r4   rD   r)   rE   rG   r	   r	   r   r1   N   ó   z%PixelcopyModuleTest._make_src_surfacec                 C   ó   t j ¡  d S rR   ©r+   r,   r-   ©r4   r	   r	   r   ÚsetUpS   ó   zPixelcopyModuleTest.setUpc                 C   rV   rR   ©r+   r,   r3   rX   r	   r	   r   ÚtearDownV   rZ   zPixelcopyModuleTest.tearDownc                 C   s  d}| j D ]®}| ¡ }| jD ]¤}t | ¡ d|¡}| d¡ | d¡}|  | 	¡ ¡ ||k r>|  
tt||¡ |  | 	¡ ¡ qt||ƒ |  | 	¡ ¡ | jD ] \}}| |¡}	| |¡}
|  |
|	d|
|	| ¡ | ¡ |f ¡ qM~| ¡ d r²| d¡ | d¡}d}| ||¡ |  | 	¡ ¡ t||ƒ |  | 	¡ ¡ | |¡}	| |¡}
|  |
|	d|
|	| ¡ f ¡ qqtr¸d S tjtjB }| j D ]D}d	D ]?}|| ¡ k rÎqÅtj| ¡ d
||d}t||ƒ | jD ]"\}}t| |¡ƒ}	|| }
|  |
|	d|
|	|| ¡ | ¡ |f ¡ qáqÅqÁd S )N©r   r   r   é€   r   ©r   r   r   r   Ú2ú&%s != %s: flags: %i, bpp: %i, posn: %sr&   ©r$   r    ú%s != %s: bpp: %i)r    r$   r!   r   Úu)rF   z4%s != %s: itemsize: %i, flags: %i, bpp: %i, posn: %s)r2   Úget_bitsizeÚbitsizesr+   rA   Úget_sizerM   Úget_viewÚassertFalseÚ
get_lockedÚassertRaisesÚ
ValueErrorr   Útest_pointsÚget_at_mappedÚassertEqualÚ	get_flagsÚ	get_masksÚset_atÚIS_PYPYr   ZPAI_ALIGNEDZPAI_WRITEABLEÚget_bytesizeZArrayr   )r4   Úalpha_colorrG   Úsrc_bitsizeZdst_bitsizeÚdstÚviewÚposnr
   ÚspÚdpZ	pai_flagsÚitemsizeÚar	   r	   r   Útest_surface_to_array_2dY   sˆ   






þý




ÿ€Ý'

úþýýûÿz,PixelcopyModuleTest.test_surface_to_array_2dc                 C   s   |   d¡ |   d¡ d S )N©r   é ÿ  é  ÿ r   )r   r€   r   r   )Úiter_surface_to_array_3drX   r	   r	   r   Útest_surface_to_array_3d¡   s   
z,PixelcopyModuleTest.test_surface_to_array_3dc           
      C   sÂ   t j| jdd|d}| jD ]Q}| d¡ | ¡ }| d¡}|  | ¡ ¡ t	||ƒ |  | ¡ ¡ | j
D ](\}}| |¡dd… }| |¡dd… }	|  |	|d|	|| ¡ | ¡ |f ¡ q3d }qd S )Nr   r*   ©Úmasksr_   Ú3r&   ra   )r+   rA   rB   r2   rM   re   rh   ri   rj   r   rm   Úget_atro   rp   )
r4   Z
rgba_masksrw   rG   rv   rx   ry   r
   ÚscÚdcr	   r	   r   r‚   ¥   s(   



þýïz,PixelcopyModuleTest.iter_surface_to_array_3dc                 C   sª  |   d¡|   d¡| j ddd|   d¡|   d¡| j dddg}tj| jddg d¢d	}|  |¡ | d
¡}|D ]2}t| d¡||ƒ | jD ]#\}}| | 	|¡¡}| 
|¡}|  ||d||| ¡ | ¡ |f ¡ qDq6t d¡}	|	 d¡ |D ]/}t| d¡|	|ƒ | |	¡}| jD ]\}}| 
|¡}|  ||d||| ¡ | ¡ |f ¡ qˆqu| ¡ \}
}t |
|d fdd¡}|  tt|||¡ t |
d |fdd¡}|  tt|||¡ d S )Nr   r   Tr(   r*   r   r   r   r„   r†   r`   ra   Zsalmonr&   r    )rH   r+   rA   rB   rO   rh   r   rm   Úmap_rgbr‡   rn   ro   rp   re   ÚColorÚ
set_lengthrg   rk   rl   )r4   ÚtargetsÚsourceZsource_viewÚtry   r
   rˆ   r‰   ÚcolorÚwÚhÚtargetr	   r	   r   Útest_map_array»   sZ   úÿ


þýý



þýþz"PixelcopyModuleTest.test_map_arrayc                 C   s’  |   d¡|   d¡| j ddd|   d¡|   d¡| j dddg}| j\}}t d|fdd¡}|D ]]}t d|fd|¡}t|ƒD ]}| d|ft |d || d |d	|  d ¡¡ q=tj | 	d
¡|¡ tj 
|| 	d
¡¡ t|ƒD ]}t|ƒD ]}|  | ||f¡| d|f¡¡ qwqqq.t |dfdd¡}	|D ]]}t |dfd|¡}t|ƒD ]}| |dft |d || d |d	|  d ¡¡ q¦tj |	 	d
¡|¡ tj 
||	 	d
¡¡ t|ƒD ]}t|ƒD ]}|  | ||f¡|	 |df¡¡ qàqÚq—t ddd¡}
|D ]H}t dd|¡}| dt ddd¡¡ tj |
 	d
¡|¡ tj 
||
 	d
¡¡ |
 d¡}t|ƒD ]}t|ƒD ]}|  | ||f¡|¡ q5q/qþd S )Nr   r   Tr(   r*   r   r    r   r$   r`   ©r    r    r   é   é/   ée   )rH   rB   r+   rA   Úrangerr   r‹   Z	pixelcopyr   rh   r   ro   rn   )r4   r   r‘   r’   Úcolumnr“   rŽ   ÚyÚxÚrowZpixelÚpr	   r	   r   Ú"test_array_to_surface_broadcastingì   sb   ú
	4ÿÿÿ4ÿÿÿ
ÿÿúz6PixelcopyModuleTest.test_array_to_surface_broadcasting©FNrR   )Ú__name__Ú
__module__Ú__qualname__rf   r@   rB   rm   r0   rH   rO   r1   rY   r\   r~   rƒ   r‚   r”   rŸ   r	   r	   r	   r   r      s     


H1r   c                   @   sò   e Zd ZzddlZW n ey   ddgZY nw ej d¡ g d¢Z	g d¢Z
dZg d	¢Zh d
£ZddhZh d£ZddhZdd„ Zd!dd„Zd"dd„Zd!dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zze W n eyu   [[[[Y dS w [dS )#ÚPixelCopyTestWithArrayNumpyr   NÚignoreZsubprocess_ignoreÚnumpyr   r   r   r   >   r   r   r   r*   r   >   r   r   r   r*   c              	   O   sÀ   dd l }|j|j|jg| _z	| j |j¡ W n	 ty   Y nw tj	 
¡  z4tjj| g|¢R i |¤Ž |  d¡|  d¡| jddd|  d¡|  d¡| jdddg| _W tj	 ¡  d S tj	 ¡  w )Nr   r   r   Tr(   r*   r   )r¦   Úuint8Zuint16Zuint32Ú	dst_typesÚappendZuint64ÚAttributeErrorr+   r,   r-   r.   r/   r0   r1   r2   r3   )r4   r5   r6   r¦   r	   r	   r   r0   F  s$   ÿ
ú	z$PixelCopyTestWithArrayNumpy.__init__Fc                 C   r7   )Nr   r   c                 S   r8   r9   r	   r:   r	   r	   r   r=   d  r>   z=PixelCopyTestWithArrayNumpy._make_surface.<locals>.<listcomp>r?   rC   r	   r	   r   rH   \  rI   z)PixelCopyTestWithArrayNumpy._make_surfacec                 C   rJ   rK   rL   rN   r	   r	   r   rO   g  rP   z)PixelCopyTestWithArrayNumpy._fill_surfacec                 C   rQ   rR   rS   rT   r	   r	   r   r1   o  rU   z-PixelCopyTestWithArrayNumpy._make_src_surfacec                 C   rV   rR   rW   rX   r	   r	   r   rY   t  rZ   z!PixelCopyTestWithArrayNumpy.setUpc                 C   rV   rR   r[   rX   r	   r	   r   r\   w  rZ   z$PixelCopyTestWithArrayNumpy.tearDownc                    s€  z
ddl m‰m} W n
 ty   Y d S w | j}d}| j‰ ‡ ‡fdd„| jD ƒ}t ¡ tj	kr7ˆˆ |dƒƒ}nˆˆ |dƒƒ}| j
D ]ü}| ¡ }|D ]z}|j|k rY|  tt||¡ qId|d< |  | ¡ ¡ t||ƒ |  | ¡ ¡ | jD ]#\}	}
t| |	¡ƒ}||	 }|  ||d	||| ¡ | ¡ |j|	f ¡ qs| ¡ d
 rÃd}	| |	|¡ t||ƒ t| |	¡ƒ}||	 }|  ||d||| ¡ f ¡ qId|d< |  | ¡ ¡ t||ƒ |  | ¡ ¡ | jD ]#\}	}
t| |	¡ƒ}||	 }|  ||d	||| ¡ | ¡ |j|	f ¡ qÞ| ¡ d
 r=d}	| |	|¡ |  | ¡ ¡ t||ƒ |  | ¡ ¡ t| |	¡ƒ}||	 }|  ||d||| ¡ f ¡ qAd S )Nr   ©ÚemptyÚdtyper]   c                    ó   g | ]}ˆˆ |ƒ‘qS r	   r	   ©r;   r   ©Zdst_dimsr¬   r	   r   r=   „  ó    zHPixelCopyTestWithArrayNumpy.test_surface_to_array_2d.<locals>.<listcomp>ú>u4ú<u4.z2%s != %s: flags: %i, bpp: %i, dtype: %s,  posn: %sr&   rb   rc   )r¦   r¬   r­   ÚImportErrorr@   rB   r¨   r+   Úget_sdl_byteorderÚ
LIL_ENDIANr2   rt   r|   rk   rl   r   ri   rj   rm   r   rn   ro   rp   re   rq   rr   )r4   r­   rE   ru   ÚdestinationsÚswapped_dstrG   Zsrc_bytesizerw   ry   r
   rz   r{   r	   r°   r   r~   z  s–   ÿ


úþý
ÿ€
þý
ÿ€Ãz4PixelCopyTestWithArrayNumpy.test_surface_to_array_2dc                    s2  z
ddl m‰m} W n
 ty   Y d S w | j}| jd ‰ ‡ ‡fdd„| jD ƒ}t ¡ tj	kr7ˆˆ |dƒƒ}nˆˆ |dƒƒ}| j
D ]Õ}| ¡ }|D ]g}d|d< |  | ¡ ¡ t||ƒ |  | ¡ ¡ | jD ]J\}}	| |¡\}
}}}|| \}}}|  ||
d	||
| ¡ | ¡ |f ¡ |  ||d
||
| ¡ | ¡ |f ¡ |  ||d||
| ¡ | ¡ |f ¡ qeqId|d< |  | ¡ ¡ t||ƒ |  | ¡ ¡ | jD ]J\}}	| |¡\}
}}}|| \}}}|  ||
d	||
| ¡ | ¡ |f ¡ |  ||d
||
| ¡ | ¡ |f ¡ |  ||d||
| ¡ | ¡ |f ¡ qËqAd S )Nr   r«   )r&   c                    r®   r	   r	   r¯   r°   r	   r   r=   Ô  r±   zHPixelCopyTestWithArrayNumpy.test_surface_to_array_3d.<locals>.<listcomp>r²   r³   .z2%i != %i, color: red, flags: %i, bpp: %i, posn: %sz4%i != %i, color: green, flags: %i, bpp: %i, posn: %sz3%i != %i, color: blue, flags: %i, bpp: %i, posn: %s)r¦   r¬   r­   r´   r@   rB   r¨   r+   rµ   r¶   r2   re   ri   rj   r   rm   r‡   ro   rp   )r4   r­   rE   r·   r¸   rG   rv   rw   ry   r
   Zr_surfZg_surfZb_surfZa_surfZr_arrZg_arrZb_arrr	   r°   r   rƒ   Ë  s’   ÿ


þýþýþýï
þýþýþýïÜz4PixelCopyTestWithArrayNumpy.test_surface_to_array_3dc                    sì  zddl m}m}m}m}m} W n
 ty   Y d S w t ddd¡‰ |g d¢|ƒ}|d|ƒ}t	||ˆ ƒ |  
||ˆ  |¡kƒ¡ |g d¢g d¢g d	¢g|ƒ}|d
|jd f|ƒ}t	||ˆ ƒ |‡ fdd„|D ƒ|ƒ}	|  
|||	kƒ¡ |g d¢gg d¢gg d¢gg d	¢gg|ƒ}||jd df|ƒ}t	||ˆ ƒ |‡ fdd„|d d …df D ƒ|ƒ}	|  
|||	kƒ¡ d
}
d}||
|df|ƒ}||
f|ƒ}|  tt	||ˆ ¡ |d|
|d f|ƒ}|  tt	||ˆ ¡ |d|
d df|ƒ}|  tt	||ˆ ¡ d S )Nr   )ÚarrayÚzerosr§   Úint32Úallr•   r   )r%   é   é;   )r"   é   )r$   r"   r¿   )r%   é   é   )é%   é5   r˜   r!   c                    s   g | ]}ˆ   |¡‘qS r	   ©rŠ   r:   ©rG   r	   r   r=   *  r±   z>PixelCopyTestWithArrayNumpy.test_map_array.<locals>.<listcomp>)r%   rÀ   r*   )r   é   r   r&   c                    s   g | ]}ˆ   |¡g‘qS r	   rÄ   r:   rÅ   r	   r   r=   4  r>   r"   r   r    )r¦   r¹   rº   r§   r»   r¼   r´   r+   rA   r   Ú
assertTruerŠ   Úshaperk   rl   )r4   r¹   rº   r§   r»   Zalltruer   r“   ZstripeZtarget_striper‘   r’   rŽ   r	   rÅ   r   r”     s>    ÿ
$ÿ$z*PixelCopyTestWithArrayNumpy.test_map_arrayr    rR   )r¡   r¢   r£   r¦   r´   Z__tags__r+   Z	surfarrayZuse_arraytyperf   r@   rB   rm   Zpixels2dZpixels3dZarray2dZarray3dr0   rH   rO   r1   rY   r\   r~   rƒ   r”   Ú	NameErrorr	   r	   r	   r   r¤   "  sB    ÿ


QL0úr¤   znewbuf not implementedc                   @   sˆ   e Zd ZejrddlmZ G dd„ dejƒZG dd„ dejƒZ	e 
d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S )ÚPixelCopyTestWithArrayNewBufr   )Úbuftoolsc                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )z$PixelCopyTestWithArrayNewBuf.Array2Dc                    ó^   ddl m}m}m} tj}tƒ jdddd || j||ƒƒ| _	t
|ƒD ]	\}}|| j	|< q#d S )Nr   )ÚcastÚPOINTERÚc_uint32©r&   r"   ú=I)rÆ   r!   ©ÚformatÚstrides)ÚctypesrÎ   rÏ   rÐ   rÊ   ÚArray2DÚsuperr0   ÚbufÚcontentÚ	enumerate)r4   ÚinitializerrÎ   rÏ   rÐ   r×   r
   Úv©Ú	__class__r	   r   r0   [  ó   ÿz-PixelCopyTestWithArrayNewBuf.Array2D.__init__c                 C   s>   |d d |d  }d|  krdk sn t d|ƒ‚| j| S )Nr   r"   r    é   ú%s is out of range©Ú
IndexErrorrÚ   ©r4   ÚkeyZ
byte_indexr	   r	   r   Ú__getitem__d  s   

z0PixelCopyTestWithArrayNewBuf.Array2D.__getitem__©r¡   r¢   r£   r0   rç   Ú__classcell__r	   r	   rÞ   r   r×   Z  ó    	r×   c                       rÌ   )z$PixelCopyTestWithArrayNewBuf.Array3Dc                    rÍ   )Nr   )rÎ   rÏ   Úc_uint8)r&   r"   r&   ÚB)rÆ   r!   r    rÓ   )rÖ   rÎ   rÏ   rë   rÊ   ÚArray3DrØ   r0   rÙ   rÚ   rÛ   )r4   rÜ   rÎ   rÏ   rë   rí   r
   rÝ   rÞ   r	   r   r0   k  rà   z-PixelCopyTestWithArrayNewBuf.Array3D.__init__c                 C   sJ   |d d |d d  |d  }d|  krdk s n t d|ƒ‚| j| S )Nr   rÆ   r    r!   r$   r   râ   rã   rå   r	   r	   r   rç   t  s    

z0PixelCopyTestWithArrayNewBuf.Array3D.__getitem__rè   r	   r	   rÞ   r   rí   j  rê   rí   rÑ   r   c              	   C   sD   | j }tdƒD ]}tdƒD ]}| ||f|d d|d f¡ qqd S )Nr"   r&   r    r   )Úsurfacer™   rr   )r4   rG   r›   rœ   r	   r	   r   rY   |  s    ÿÿz"PixelCopyTestWithArrayNewBuf.setUpc                 C   sB   t ddƒD ]}t ddƒD ]}|  | ||f¡|||f ¡ qqd S )Nr   r&   r"   )r™   ro   rn   )r4   rî   r¹   rœ   r›   r	   r	   r   ÚassertCopy2D‚  s
    ÿÿz)PixelCopyTestWithArrayNewBuf.assertCopy2Dc                 C   sH   |   tddƒ¡}|  |jd | j d¡¡ t|| jƒ |  | j|¡ d S ©Nr   rá   r   )r×   r™   ÚassertNotEqualrÚ   rî   rn   r   rï   ©r4   r¹   r	   r	   r   Útest_surface_to_array_newbuf‡  ó   z9PixelCopyTestWithArrayNewBuf.test_surface_to_array_newbufc                 C   sH   |   tddƒ¡}|  |jd | j d¡¡ t| j|ƒ |  | j|¡ d S rð   )r×   r™   rñ   rÚ   rî   rn   r   rï   rò   r	   r	   r   Útest_array_to_surface_newbuf  rô   z9PixelCopyTestWithArrayNewBuf.test_array_to_surface_newbufc              	   C   s¤   |   dgd ¡}dd„ tddƒD ƒ}|  |¡}t||| jƒ tddƒD ],}tddƒD ]$}|||df |||df |||df f}|  | j |||f ¡|¡ q*q#d S )	Nr   rá   c                 S   s    g | ]}|d | d>  d ‘qS )r   r   i  c r	   )r;   r
   r	   r	   r   r=   •  s     zFPixelCopyTestWithArrayNewBuf.test_map_array_newbuf.<locals>.<listcomp>r&   r"   r    r$   )r×   r™   rí   r   rî   ro   Z	unmap_rgb)r4   Zarray2DÚelementsZarray3Drœ   r›   rž   r	   r	   r   Útest_map_array_newbuf“  s   
(þÿz2PixelCopyTestWithArrayNewBuf.test_map_array_newbufc                 C   s*   |   tdddƒ¡}t|ƒ}|  ||¡ d S )Nr   é    )r×   r™   r   rï   )r4   r¹   rî   r	   r	   r   Útest_make_surface_newbuf  s   z5PixelCopyTestWithArrayNewBuf.test_make_surface_newbufc           
   	   C   sº   | j j}| j}| ¡ }|\}}dD ]6}| d¡ |||d}dg|j |jd d …< t||ƒ t|ƒD ]}t|ƒD ]}	|  	| 
||	f¡d¡ q8q2qdD ]}|||d}|  tt||¡ qJd S )N)z=irÒ   z=lz=Lz=qz=Qz<iz>iz!iZ1iz=1iz@qÚqZ4xZ8x)r   éþ   éý   )rÔ   é*   )rý   rý   rý   r   )ÚfÚdú?rœ   Z1xZ2xZ3xZ5xZ6xZ7xZ9x)rË   ÚExporterrî   rg   rM   ÚbuflenZ_bufr   r™   ro   r‡   rk   rl   )
r4   r  rî   rÈ   r‘   r’   rÔ   Úexprœ   r›   r	   r	   r   Útest_format_newbuf¢  s$   

ÿÿþz/PixelCopyTestWithArrayNewBuf.test_format_newbufN)r¡   r¢   r£   r+   ÚHAVE_NEWBUFÚpygame.tests.test_utilsrË   r  r×   rí   rA   rî   rY   rï   ró   rõ   r÷   rù   r  r	   r	   r	   r   rÊ   T  s    
rÊ   Ú__main__)Úplatformr.   r  r   rÉ   r+   Zpygame.localsZpygame.pixelcopyr   r   r   r   Úpython_implementationrs   r   ZskipIfr/   r   r¤   r  rÊ   r¡   Úmainr	   r	   r	   r   Ú<module>   s4    ÿ
  
  3
oÿ