o
    ¢ÄiÇ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	   úU/home/kim/smarthome/.venv/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*   ©Z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   Z
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ÿ