o
    tVgj9                     @   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_intc_charPOINTERPy_intptr_tc_void_p	py_object_fields_ r   r   T/home/ubuntu/.local/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   )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___cobjAttributeErrorr!   r#   r'   PyCapsule_GetPointerPyCapsule_GetContextdescPyCObject_GetDesccastPAI_Ptr_inter)selfarr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)r9   r   decodegetattr)r:   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
)
isinstancer5   tupler   r   r   format_flagsr   format_shaper   format_stridesr   )r:   verr   r   r    __str__   s   zArrayInterface.__str__N)r   r   r   r=   r@   rG   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 )N
CONTIGUOUSFORTRANALIGNED
NOTSWAPPED	WRITEABLEARR_HAS_DESCR, )r   r   r   r   r   r   appendjoin)r   namesflagr&   r   r   r    rC      s   

rC   c                       d  fddt| D S )NrN   c                       g | ]}t  | qS r   str.0ir   r   r    
<listcomp>       z format_shape.<locals>.<listcomp>rP   range)r   r   r   rZ   r    rD         rD   c                    rS   )NrN   c                    rT   r   rU   rW   r   r   r    r[      r\   z"format_strides.<locals>.<listcomp>r]   )r   r   r   r`   r    rE      r_   rE   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  _qd 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   rW   r   r   r   r    	<genexpr>   s    z$Exporter.__init__.<locals>.<genexpr>r.   latin_1)r   r   r   r   len
ValueErrorr   r   r   rB   r   	c_ssize_t_shape_stridesr^   r   r   is_contiguousr   r   r   maxc_ubyte_datar*   r   r   encoder9   )
r:   r   r   r   r   r   r   r   rY   szr   rf   r    r=      sf   
 



zExporter.__init__c                 C   s
   t | jS r(   )r,   r9   r:   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CArc   r-   r   TFAF)r   r   r^   r   r   )r:   fortranrY   r   r   r    rn      s    ""zExporter.is_contiguous)NNNNN)r   r   r   r=   propertyr0   rn   r   r   r   r    ra      s
    
7ra   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))rb   r-   )rb   r.   )rb      )rb      )rY   r-   )rY   r.   )rY   r{   )rY   r|   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(   )superr=   r   r   _ctypesr   r   r   __ctype_le____ctype_be__KeyErrorc_uint8_ctyper   _ctype_p)r:   argskwdsct	__class__r   r    r=     s   

zArray.__init__c                 C   s   t | || jd S r$   r7   _addr_atr   )r:   keyr   r   r    __getitem__  s   zArray.__getitem__c                 C   s   |t | || jd< d S r$   r   )r:   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   )rX   rY   sr   r   r    rg   $  s    z!Array._addr_at.<locals>.<genexpr>)rA   rB   ri   r   rj   r^   r   
IndexErrorr   sumzipr   )r:   r   rY   r   r   r    r     s   
  zArray._addr_at)r   r   r   r   c_uint16c_uint32c_uint64c_int8c_int16c_int32c_int64r~   r=   r   r   r   __classcell__r   r   r   r    rz      s    rz   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   
   rb   )r.      r.   )      )   r.      )   r   r   )r   r   r.         r      r   iJ  B   r   r.   i  r   rY   )r.      *   x)r.      0      %)i  X   r|   r.   iX  )r   r   -)   r   i   r   )r       )r      x   )
check_argsrt   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   rd   re   A)r   r{   r   r   r   r   )r.   r   )r.         i  )r.   r   r   r{   )i@  r   r|   r.   )r.   r{   r   i   )r   r.   r.   )r   r|   r{   )r{      r   )ra   
assertTruern   assertFalser:   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   )ra   assertEqualsizeofrq   r   ctypesr*   r	   r   rB   r   r   r   )r:   
call_flagsr   r   r   lengthbufsizer   offsettypekind_arg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   rY   r{   )unittestTestCaser=   rz   r   )r:   r   r   r   r   r    r=   h  s   zArrayTest.__init__c                 C   s   t | jjdt| jj d S r$   )memsetr   r   r   rq   rt   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-   r{   )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   r|   r   c   )rc   r   )r   rc   )r   r   )r   r   )r   r   r   )r   rY   r{   iM  r-   )r   r   assertRaisesr   r   rj   rz   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-   rY   r{   rb   f)rz   r   r   r   r   r   r   
issubclassr   r   r   )r:   r   r   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.   r{   r|   r   rY   )rz   r   r   r   r   _SimpleCDatar   r   r:   sizer   r   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   rY   )rz   r   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   rb   r{   )r   littlei
r   r   rc   )rz   r   r   r   r   r   sys	byteorderr   r   r   rq   r7   r*   r   r   )r:   r   r   rY   nr   r   r    test_byteswapped  s   
2zArrayTest.test_byteswappedN)r   r   r   r=   r   r   r   r   r   r   r   r   r   r   r    r   g  s    r   __main__)6r   r   r   __all__r   c_uintr   c_size_tr   rk   c_ulongc_longc_ulonglongr
   SIZEOF_VOID_Pr   globalsRuntimeError	Structurer   r   r8   	pythonapir#   r2   restyper   argtypesr6   r'   c_char_pr3   r4   	CFUNCTYPEPyCapsule_Destructorr)   r,   r   r   r   r   r   r   r	   rC   rD   rE   ra   rz   r   r   r   r   mainr   r   r   r    <module>   s    





2L+@
N