o
    PZŽhj9  ã                   @   sR  d dl Z d dlZd dlT d dlZg d¢Zeeƒeeƒkr!eZeZ	nee
ƒeeƒkr.e
ZeZ	neeƒeeƒkr:eZeZ	eeƒZeeeƒkrGeZneeeƒkrPeZndeƒ v r^eeeƒkr^eZnedef ƒ‚G dd„ deƒZeeƒZzejZW n eyƒ   dd	„ ZY nw ee_ege_ejZee_ege_zejZW n ey§   d
d„ ZY nw ee_eege_ejZee_eege_ej Z ee _ege _e!deƒZ"ej#Z#ee#_eeee"ƒge#_dd„ Z$dZ%dZ&dZ'dZ(dZ)dZ*G dd„ dƒZ+dd„ Z,dd„ Z-dd„ Z.G dd„ dƒZ/G dd„ de/ƒZ0G d d!„ d!ej1ƒZ2G d"d#„ d#ej1ƒZ3e4d$kr'e 5¡  dS dS )%é    N)Ú*)ÚPAI_CONTIGUOUSÚPAI_FORTRANÚPAI_ALIGNEDÚPAI_NOTSWAPPEDÚPAI_WRITEABLEÚPAI_ARR_HAS_DESCRÚArrayInterfaceÚ
c_longlongzUnrecognized pointer size %ic                
   @   sN   e Zd Zdefdefdefdefdefdeeƒfdeeƒfdefd	efg	Z	d
S )ÚPyArrayInterfaceÚtwoÚndÚtypekindÚitemsizeÚflagsÚshapeÚstridesÚdataÚdescrN)
Ú__name__Ú
__module__Ú__qualname__Úc_intZc_charÚPOINTERÚPy_intptr_tÚc_void_pÚ	py_objectZ_fields_© r   r   úO/var/www/auris/lib/python3.10/site-packages/pygame/tests/test_utils/arrinter.pyr   &   s    

÷r   c                 C   s   t dƒ‚)NzNot available)Ú	TypeError)Úor   r   r   ÚPyCObject_AsVoidPtr:   s   r!   c                 C   s   dS ©Nr   r   )ZcapsuleÚnamer   r   r   ÚPyCapsule_IsValidH   s   r$   c                 C   s   t t| ƒd d ƒS ©N)ÚPyCapsule_NewÚ	addressof)Úpr   r   r   Úcapsule_new[   s   r)   é   é   é   i   i   i   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r	   c                 C   s¢   z|j | _W n ty   tdƒ‚w | jstdƒ‚zt| jƒ}W n  ty@   t| jd ƒr4t| jd ƒ}ntdƒ‚t| jƒ| _Y nw t	| jƒ| _t
|tƒd | _d S )Nz)The array object lacks an array structurez1The array object has a NULL array structure valuez/The array object has an invalid array structurer   )Ú__array_struct__Z_cobjÚAttributeErrorr   r!   r$   ÚPyCapsule_GetPointerÚPyCapsule_GetContextÚdescÚPyCObject_GetDescÚcastÚPAI_PtrÚ_inter)ÚselfZarrZvpr   r   r   Ú__init__h   s"   ÿûzArrayInterface.__init__c                 C   s"   |dkr| j j d¡S t| j |ƒS )Nr   zlatin-1)r5   r   ÚdecodeÚgetattr)r6   r#   r   r   r   Ú__getattr__{   s   zArrayInterface.__getattr__c              	   C   sR   t | jtƒr| jd }nd}d| j| j| jt| jƒt| j| j	ƒt
| j| jƒ|f S )Nr   zN/AzInd: %i
typekind: %s
itemsize: %i
flags: %s
shape: %s
strides: %s
ver: %s
)Ú
isinstancer1   Útupler   r   r   Úformat_flagsr   Úformat_shaper   Úformat_stridesr   )r6   Úverr   r   r   Ú__str__€   s   ùùÿzArrayInterface.__str__N)r   r   r   r7   r:   rA   r   r   r   r   r	   g   s    r	   c                 C   sR   g }t dftdftdftdftdftdffD ]\}}|| @ r#| |¡ qd |¡S )NZ
CONTIGUOUSZFORTRANZALIGNEDZ
NOTSWAPPEDZ	WRITEABLEZARR_HAS_DESCRú, )r   r   r   r   r   r   ÚappendÚjoin)r   ÚnamesÚflagr#   r   r   r   r=   ™   s   ú
€
r=   c                    ó   d  ‡ fdd„t| ƒD ƒ¡S )NrB   c                    ó   g | ]}t ˆ | ƒ‘qS r   ©Ústr©Ú.0Úi©r   r   r   Ú
<listcomp>©   ó    z format_shape.<locals>.<listcomp>©rD   Úrange)r   r   r   rN   r   r>   ¨   ó   r>   c                    rG   )NrB   c                    rH   r   rI   rK   ©r   r   r   rO   ­   rP   z"format_strides.<locals>.<listcomp>rQ   )r   r   r   rT   r   r?   ¬   rS   r?   c                   @   s,   e Zd Z	ddd„Zedd„ ƒZdd„ ZdS )	ÚExporterNc           
   
      sÞ  |d u rd}|d u rd}|d u rt tB tB }|d ur|tO }t|ƒdkr(tdƒ‚tˆ ƒ}|| _|| _|| _t	ˆ ƒ| _
t| j | j
Ž | _ˆd u r{t| j ƒ | _| j| j| jd < t| jd ddƒD ]}| j
| | j|  | j|d < q`t	| jƒ‰ˆ| _ntˆƒ|krt	ˆƒ| _t| j | jŽ | _ntdƒ‚|| _|  d¡r |tO }|  d¡r©|tO }|| _t‡ ‡fd	d
„t|ƒD ƒƒ}	t|	 ƒ | _t| jƒ| _td|| d¡||| j| j| j|ƒ	| _|| _t|ƒD ]}|  j| j
| 9  _qàd S )NÚur*   z+Argument 'typekind' must be length 1 stringr   éÿÿÿÿz'Mismatch in length of strides and shapeÚCÚFc                 3   s     | ]}ˆ | ˆ|  V  qd S r%   r   rK   ©r   r   r   r   Ú	<genexpr>Ö   s   € z$Exporter.__init__.<locals>.<genexpr>r+   Úlatin_1)r   r   r   r   ÚlenÚ
ValueErrorr   r   r   r<   r   Ú	c_ssize_tÚ_shapeZ_stridesrR   r   r   Úis_contiguousr   r   r   ÚmaxZc_ubyteÚ_datar'   r   r   Úencoder5   )
r6   r   r   r   r   r   r   r   rM   Úszr   rZ   r   r7   ±   sf   
 



÷ÿzExporter.__init__c                 C   s
   t | jƒS r%   )r)   r5   ©r6   r   r   r   Ú<lambda>è   s   
 zExporter.<lambda>c                 C   s¸   |dv r-| j d | jkr-t| jd ddƒD ]}| j |d  | j| | j |  kr* nqdS |dv rZ| j d | jkrZtd| jd ƒD ]}| j |d  | j| | j |  krW dS qAdS dS )NÚCArW   r*   r   TZFAF)r   r   rR   r   r   )r6   ÚfortranrM   r   r   r   ra   ê   s    "ÿ"üzExporter.is_contiguous)NNNNN)r   r   r   r7   Úpropertyr-   ra   r   r   r   r   rU   °   s
    
ÿ7rU   c                	       sJ   e Zd Zeeeeeee	e
dœZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
ÚArray))rV   r*   )rV   r+   )rV   é   )rV   é   )rM   r*   )rM   r+   )rM   rl   )rM   rm   c                    sš   t ƒ j|i |¤Ž z+| jt@ r| j| j| jf }ntjtu r)| j| j| jf j	}n
| j| j| jf j}W n t
yB   t| j }Y nw || _t|ƒ| _d S r%   )Úsuperr7   r   r   Ú_ctypesr   r   r   Ú__ctype_le__Ú__ctype_be__ÚKeyErrorÚc_uint8Ú_ctyper   Ú_ctype_p)r6   ÚargsÚkwdsÚct©Ú	__class__r   r   r7     s   

€ÿzArray.__init__c                 C   s   t |  |¡| jƒd S r"   ©r3   Ú_addr_atru   )r6   Úkeyr   r   r   Ú__getitem__  s   zArray.__getitem__c                 C   s   |t |  |¡| jƒd< d S r"   r{   )r6   r}   Úvaluer   r   r   Ú__setitem__  s   zArray.__setitem__c                 C   s†   t |tƒs|f}t|ƒ| jkrtdƒ‚t| jƒD ]}d||   kr)| j| k s2n td|› dƒ‚q| jt	dd„ t
|| jƒD ƒƒ S )Nzwrong number of indexesr   zindex z out of rangec                 s   s    | ]	\}}|| V  qd S r%   r   )rL   rM   Úsr   r   r   r[   $  s   € z!Array._addr_at.<locals>.<genexpr>)r;   r<   r]   r   r^   rR   r   Ú
IndexErrorr   ÚsumÚzipr   )r6   r}   rM   r   r   r   r|     s   
 ÿ zArray._addr_at)r   r   r   rs   Zc_uint16Úc_uint32Zc_uint64Zc_int8Zc_int16Úc_int32Zc_int64ro   r7   r~   r€   r|   Ú__classcell__r   r   ry   r   rk   ü   s    ørk   c                   @   s(   e Zd Zdd„ Zdd„ Z	d	dd„ZdS )
ÚExporterTestc              	   C   sà   |   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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 )"Nr   ©é
   rV   )r+   é   r+   )é   é   )é   r+   é   )é   r   rŒ   )r   rŠ   r+   éÒ   ©é   rŒ   é   r   ©iJ  éB   rŽ   r+   iÂ  r   rM   )r+   é   é*   Úx)r+   é   é0   éð   ú%)i¸  éX   rm   r+   iX  )r   rŒ   ú-)é   r   éi   r   )r   é   ú )r   é   éx   )Ú
check_argsrf   r   r   r   Útest_strides(  s   zExporterTest.test_stridesc                 C   s®  t ddd}|  | d¡¡ |  | d¡¡ |  | d¡¡ t ddd}|  | d¡¡ |  | d¡¡ |  | d¡¡ t ddd	d
}|  | d¡¡ |  | d¡¡ |  | d¡¡ t dddd
}|  | d¡¡ |  | d¡¡ |  | d¡¡ t dddd
}|  | d¡¡ |  | d¡¡ |  | d¡¡ t dddd
}|  | d¡¡ t dddd
}|  | d¡¡ t dddd
}|  | d¡¡ t dddd
}|  | d¡¡ d S )Nr‰   r+   )r   rX   rY   ÚA)rŠ   rl   r’   r•   ©r   r   )r+   r‹   )r+   é   é‚   i–  )r+   r”   rŽ   rl   )i@  r›   rm   r+   )r+   rl   r›   i   )r   r+   r+   )rš   rm   rl   )rl   é   r¤   )rU   Ú
assertTruera   ZassertFalse©r6   Úar   r   r   Útest_is_contiguous4  s8   zExporterTest.test_is_contiguousr   c	                 C   sÀ   |d@ r|}	nd }	|d@ r|}
nd }
t |||
d}|  t|jƒ|¡ |  |jt |j¡| ¡ t|ƒ}|  |j|j¡ |  |j|¡ |  t	|j
d|j… ƒ|¡ |  t	|jd|j… ƒ|¡ d S )Nr*   r+   r©   r   )rU   ÚassertEqualÚsizeofrc   r   Úctypesr'   r	   r   r<   r   r   r   )r6   Z
call_flagsr   r   r   ÚlengthÚbufsizer   ÚoffsetZtypekind_argZstrides_argr¯   Úmr   r   r   r¦   R  s    zExporterTest.check_argsN)r   )r   r   r   r§   r°   r¦   r   r   r   r   rˆ   '  s
    ÿ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S )Ú	ArrayTestc                 O   s,   t jj| g|¢R i |¤Ž tdddƒ| _d S )N)r‹   r    rM   rl   )ÚunittestÚTestCaser7   rk   r¯   )r6   rv   rw   r   r   r   r7   h  s   zArrayTest.__init__c                 C   s   t | jjdt| jjƒƒ d S r"   )Zmemsetr¯   r   r²   rc   rf   r   r   r   ÚsetUpl  s   zArrayTest.setUpc                 C   sf   | j }|  | d¡|j¡ |  | d¡|jd ¡ |  | d¡|jd ¡ |  | d¡|jd ¡ d S )N©r   r   )r   r*   rl   )r*   r   é<   )r*   r*   é@   )r¯   r±   r|   r   r®   r   r   r   Útest__addr_atp  s
   zArrayTest.test__addr_atc                 C   s  | j }|  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ d|d< d|d< |  |d d¡ |  |d d¡ |  t|jd	¡ |  t|jd
¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ tdddƒ}d|d< |  |d d¡ d S )Nr¼   r   )é   r   )r   r—   )rÀ   r—   )rŒ   rm   r¬   éc   )rW   r   )r   rW   )r‹   r   )r   r    )r   r   r   )r   rM   rl   iM  r*   )r¯   r±   ÚassertRaisesr‚   r~   r^   rk   r®   r   r   r   Útest_indicesw  s&   zArrayTest.test_indicesc                 C   s˜   t dddƒ}|  |jtu ¡ |  |jttƒu ¡ t dddƒ}|  |jtu ¡ |  |jttƒu ¡ t dddƒ}|j}|  t|tj ƒ¡ |  	t
|ƒd¡ d S )N©r*   rM   rl   rV   Úf)rk   r­   rt   r†   ru   r   r…   Ú
issubclassr³   r±   r²   )r6   r¯   rx   r   r   r   Útest_typekindŒ  s   zArrayTest.test_typekindc                 C   sB   dD ]}t dd|ƒ}|j}|  t|tjƒ¡ |  t|ƒ|¡ qd S )N)r*   r+   rl   rm   rÄ   rM   )rk   rt   r­   rÆ   r³   Z_SimpleCDatar±   r²   ©r6   Úsizer¯   rx   r   r   r   Útest_itemsize˜  ó   üzArrayTest.test_itemsizec                 C   sB   dD ]}t dd|ƒ}|j}|  t|tj ƒ¡ |  t|ƒ|¡ qd S )N)r   rŒ   rŽ   r   é	   rÄ   rM   )rk   rt   r­   rÆ   r³   r±   r²   rÈ   r   r   r   Útest_oddball_itemsizeŸ  rË   zArrayTest.test_oddball_itemsizec                 C   sª   t dddttB d}|j}|  |tu¡ tjdkr"|  |tju ¡ n|  |tj	u ¡ d}t|ƒ}||d< |  
|d |¡ |  
|jdd… tt|ƒttƒƒdd	d	… ¡ d S )
NrÄ   rV   rl   )r   Úlittlei
r   r   rW   )rk   r   r   rt   r­   r…   ÚsysÚ	byteorderrq   rp   r±   rc   r3   r'   r   rs   )r6   r¯   rx   rM   Únr   r   r   Útest_byteswapped¦  s   
2zArrayTest.test_byteswappedN)r   r   r   r7   r»   r¿   rÃ   rÇ   rÊ   rÍ   rÒ   r   r   r   r   r¸   g  s    r¸   Ú__main__)6rÏ   r³   r¹   Ú__all__r²   Zc_uintr   Zc_size_tr   r_   Zc_ulongZc_longZc_ulonglongr
   ÚSIZEOF_VOID_Pr   ÚglobalsÚRuntimeErrorZ	Structurer   r   r4   Z	pythonapir!   r.   Úrestyper   Úargtypesr2   r$   Úc_char_pr/   r0   Z	CFUNCTYPEZPyCapsule_Destructorr&   r)   r   r   r   r   r   r   r	   r=   r>   r?   rU   rk   rº   rˆ   r¸   r   Úmainr   r   r   r   Ú<module>   sŠ    

þ
þ


2L+@
Nÿ