o
    tVgc                     @   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	   O/home/ubuntu/.local/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_paletteSRCALPHAr+   Surface	surf_size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   rI   rG   r	   r	   r   _fill_surfaceF      z!PixelcopyModuleTest._fill_surfacec                 C      |  |||}| || |S NrJ   rQ   r4   rF   r)   rG   rI   r	   r	   r   r1   N      z%PixelcopyModuleTest._make_src_surfacec                 C      t j  d S rT   r+   r,   r-   r4   r	   r	   r   setUpS      zPixelcopyModuleTest.setUpc                 C   rX   rT   r+   r,   r3   rZ   r	   r	   r   tearDownV   r\   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rd S tjtjB }| j D ]D}d	D ]?}|| k rqtj| d
||d}t|| | jD ]"\}}t||}	|| }
| |
|	d|
|	|| | |f  qqqd 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)rH   z4%s != %s: itemsize: %i, flags: %i, bpp: %i, posn: %s)r2   get_bitsizebitsizesr+   rB   get_sizerO   get_viewassertFalse
get_lockedassertRaises
ValueErrorr   test_pointsget_at_mappedassertEqual	get_flags	get_masksset_atIS_PYPYr   PAI_ALIGNEDPAI_WRITEABLEget_bytesizeArrayr   )r4   alpha_colorrI   src_bitsizedst_bitsizedstviewposnr
   spdp	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_3drZ   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*   masksra   3r&   rc   )r+   rB   rC   r2   rO   rg   rj   rk   rl   r   ro   get_atrq   rr   )
r4   
rgba_masksr}   rI   r{   r~   r   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  qqu| \}
}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   rb   rc   salmonr&   r    )rJ   r+   rB   rC   rQ   rj   r   ro   map_rgbr   rp   rq   rr   rg   Color
set_lengthri   rm   rn   )r4   targetssourcesource_viewtr   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  qtj|		d
| tj
||		d
 t|D ]}t|D ]}| |||f|	|df qqqt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/qd S )Nr   r   Tr(   r*   r   r    r   r$   rb   r    r    r      /   e   )rJ   rC   r+   rB   rangert   r   	pixelcopyr   rj   r   rq   rp   )r4   r   r   r   columnr   r   yxrowpixelpr	   r	   r   "test_array_to_surface_broadcasting   sb   
	44
z6PixelcopyModuleTest.test_array_to_surface_broadcastingFNrT   )__name__
__module____qualname__rh   r@   rC   ro   r0   rJ   rQ   r1   r[   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ignore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   uint8uint16uint32	dst_typesappend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?   rE   r	   r	   r   rJ   \  rK   z)PixelCopyTestWithArrayNumpy._make_surfacec                 C   rL   rM   rN   rP   r	   r	   r   rQ   g  rR   z)PixelCopyTestWithArrayNumpy._fill_surfacec                 C   rS   rT   rU   rV   r	   r	   r   r1   o  rW   z-PixelCopyTestWithArrayNumpy._make_src_surfacec                 C   rX   rT   rY   rZ   r	   r	   r   r[   t  r\   z!PixelCopyTestWithArrayNumpy.setUpc                 C   rX   rT   r]   rZ   r	   r	   r   r^   w  r\   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
 rd}	||	| 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   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&   rd   re   )r   r   r   ImportErrorr@   rC   r   r+   get_sdl_byteorder
LIL_ENDIANr2   rx   r   rm   rn   r   rk   rl   ro   r   rp   rq   rr   rg   rs   rt   )r4   r   rG   rz   destinationsswapped_dstrI   src_bytesizer}   r   r
   r   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  qqAd 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@   rC   r   r+   r   r   r2   rg   rk   rl   r   ro   r   rq   rr   )r4   r   rG   r   r   rI   r{   r}   r   r
   r_surfg_surfb_surfa_surfr_arrg_arr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:   rI   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+   rB   r   
assertTruer   shaperm   rn   )r4   r   r   r   r   alltruer   r   stripetarget_striper   r   r   r	   r   r   r     s>    
$$z*PixelCopyTestWithArrayNumpy.test_map_arrayr   rT   )r   r   r   r   r   __tags__r+   	surfarrayuse_arraytyperh   r@   rC   ro   pixels2dpixels3darray2darray3dr0   rJ   rQ   r1   r[   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   key
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   rt   )r4   rI   r   r   r	   r	   r   r[   |  s    z"PixelCopyTestWithArrayNewBuf.setUpc                 C   sB   t ddD ]}t ddD ]}| |||f|||f  qqd S )Nr   r&   r"   )r   rq   rp   )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  rp   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  rp   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  rq   	unmap_rgb)r4   array2Delements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!i1iz=1iz@qq4x8x)r         )r   *   )r'  r'  r'  r   )fd?r   1x2x3x5x6x7x9x)r   Exporterr  ri   rO   buflen_bufr   r   rq   r   rm   rn   )
r4   r2  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   r2  r   r  rB   r  r[   r  r  r  r  r   r6  r	   r	   r	   r   r   T  s    
r   __main__)platformr.   r8  r   r   r+   pygame.localspygame.pixelcopyr   r   r   r   python_implementationru   r   skipIfr/   r   r   r7  r   r   mainr	   r	   r	   r   <module>   s4    
  
  3
o