o
    ZZh\                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z
 ddlmZ daed6dedie
Z	dd	 Zd
d Zdd Zdd ZG dd dZe Zg dZddgiZed dg ed< ed dg ed< dged< dged< ed ddg ed< ed ddg ed< ed ddg ed< ed ddg ed< ed dg ed< ed dg ed< ed dg ed< ed dg ed< ed ddg ed< ed g d ed < ed d!g ed!< d"ged"< d#ged#< dged< e jjd$kse jjd%kr2e jd&kr2e e fd'kr2eg d( ed g d) ed*< ed* g d+ ed,< ed  d!d-g ed-< G d.d/ d/ZG d0d1 d1Z G d2d3 d3Z!G d4d5 d5Z"dS )7    N)Path)c_names_dict   )util	CHARACTERcc                  C   s   t t jd } | d S )NsrcZarray_from_pyobj)r   __file__resolveparent)Ztestroot r   U/var/www/auris/lib/python3.10/site-packages/numpy/f2py/tests/test_array_from_pyobj.pyget_testdir   s   r   c                  C   s*   t du rt d g} tj| dda dS dS )z6
    Build the required testing extension module

    Nzwrapmodule.cZtest_array_from_pyobj_ext)module_name)wrapr   r   Zbuild_meson)r   r   r   r   setup_module   s
   r   c                 C   s   t | d }t|S )N   )r   array_attrsflags2names)arrflagsr   r   r   
flags_info'   s   r   c                 C   s0   g }dD ]}t | tt|d@ r|| q|S )N)
CONTIGUOUSFORTRANOWNDATAZ
ENSURECOPYZENSUREARRAYZALIGNEDZ
NOTSWAPPED	WRITEABLEZWRITEBACKIFCOPYZUPDATEIFCOPYZBEHAVEDZ
BEHAVED_ROZCARRAYZFARRAYr   )absgetattrr   append)r   infoZflagnamer   r   r   r   ,   s   
r   c                   @   s@   e Zd Zg fddZdd Zdd Zdd Zd	d
 Zdd ZdS )Intentc                 C   sP   |d d  | _ d}|D ]}|dkr|tjO }q|ttd|  O }q|| _d S )Nr   optionalZF2PY_INTENT_)intent_listr   ZF2PY_OPTIONALr   upperr   )selfr"   r   ir   r   r   __init__D   s   
zIntent.__init__c                 C   s&   |  }|dkr
d}| | j|g S )Nin_in)lower	__class__r"   )r$   namer   r   r   __getattr__N   s   zIntent.__getattr__c                 C   s   dd | j S )Nz
intent(%s),)joinr"   r$   r   r   r   __str__T   s   zIntent.__str__c                 C   s
   d| j  S )Nz
Intent(%r)r"   r/   r   r   r   __repr__W      
zIntent.__repr__c                    s   t  fdd|D S )Nc                 3   s    | ]}| j v V  qd S Nr1   ).0r+   r/   r   r   	<genexpr>[   s    z#Intent.is_intent.<locals>.<genexpr>)allr$   namesr   r/   r   	is_intentZ   s   zIntent.is_intentc                 G   s   t | jt |ko| j| S r4   )lenr"   r:   r8   r   r   r   is_intent_exact]   s   zIntent.is_intent_exactN)	__name__
__module____qualname__r&   r,   r0   r2   r:   r<   r   r   r   r   r    C   s    
r    )BOOLBYTEUBYTESHORTUSHORTINTUINTLONGULONGLONGLONG	ULONGLONGFLOATDOUBLECFLOATSTRING1STRING5r   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   )rF   rK   rL   rL   rM   rN   rO         win32)Darwinarm)
LONGDOUBLECDOUBLECLONGDOUBLE)rH   rK   rL   rU   rU   )rM   rV   rW   rW   rV   c                   @   sP   e Zd Zi 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 )Typec                 C   s   t |tjr"|}d }t D ]\}}t |ts!|j|ju r!|} nq| j| d }|d ur1|S t	
| }|| || j| < |S r4   )
isinstancenpdtyper   itemstype_type_cachegetr#   object__new___init)clsr+   Zdtype0nr%   objr   r   r   ra      s   

zType.__new__c                 C   s   |  | _| jdkrt| j }tj| _d| _td| _nC| j	drGt| jd d  }tj| _t
| jdd  p9d| _td| j | _nt| j }ttd| j | _|j| _t|j| _| j|jkshJ |j| _|j| _d S )	Nr   r   r   STRINGr   r   SZNPY_)r#   NAMEr   r   Z
NPY_STRINGtype_numelsizerZ   r[   
startswithintr   itemsizer]   numchar	dtypechar)r$   r+   r   r   r   r   rb      s$   



z
Type._initc                 C   s4   d| j  d| j d| j d| j d| j d| j S )NzType(z)|type_num=z, dtype=z, type=z	, elsize=z, dtypechar=)rh   ri   r[   r]   rj   rp   r/   r   r   r   r2      s   zType.__repr__c                    s    fddt  j D S )Nc                       g | ]}  |qS r   r*   r5   _mr/   r   r   
<listcomp>       z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrh   r/   r   r/   r   
cast_types   s   zType.cast_typesc                    s    fddt D S )Nc                    rq   r   rr   rs   r/   r   r   ru      rv   z"Type.all_types.<locals>.<listcomp>)_type_namesr/   r   r/   r   	all_types   s   zType.all_typesc                 C   s:   t | j j}g }tD ]}t | j|k r|t| q
|S r4   r   rh   	alignmentry   r   rX   r$   bitstypesr+   r   r   r   smaller_types      zType.smaller_typesc                 C   sF   t | j j}g }tD ]}|| jkrq
t | j|kr |t| q
|S r4   r{   r}   r   r   r   equal_types   s   
zType.equal_typesc                 C   s:   t | j j}g }tD ]}t | j|kr|t| q
|S r4   r{   r}   r   r   r   larger_types   r   zType.larger_typesN)r=   r>   r?   r^   ra   rb   r2   rx   rz   r   r   r   r   r   r   r   rX      s    
rX   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Arrayc              
   C   s,   d| j  d| j d| j d| j d| j 
S )NzArray(z, z)|arr=)r]   dimsintentre   r   r/   r   r   r   r2      s
   zArray.__repr__c                 C   sF  || _ || _|| _t|| _|| _t|j	|j
||j|| _t| jtjs(J t| j| _t|dkr| jdr^|jtj@ sCJ | jjd rKJ | jjd sSJ | jd tj@ r]J n"|jtj@ rfJ | jjd snJ | jjd rvJ | jd tj@ sJ |d u rd | _d | _d S |drt|tjsJ tt |t|j|  | _n!tjtj||jdj| | jdrdpd	d
| _| jj|ksJ | jj| jjd d | jjd sJ ||ft| j| _t|dkr3| jdr| jjd rJ | jjd s
J | jd tj@ rJ n| jjd sJ | jjd r(J | jd tj@ s3J | jd | jd ks@J | jd | jd ksMJ | jd dkrv| jd | jd ksvJ t| jd | jd | j | j f| jd dd  | jd dd  ksJ t| jd | jd f| jd | jd ksJ t| jd | jd td| jd  | jd  t| jd |f|dr| jd d | j j
ksJ n| jd d | j j
ksJ |  | j| jsJ t| jtjr|j
t!|jj
kr|ds| jd dkr| " s!J d S d S d S d S d S )Nr   r   r   r   r   cacher[   CF)orderr   writer            r   copy)#r]   r   r   r   deepcopyZobj_copyre   r   callri   rj   r   r   rY   rZ   ndarrayr   arr_attrr;   r:   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshaperp   r[   setflagstobytesr   	arr_equalrX   has_shared_memory)r$   typr   r   re   r   r   r   r&      s   
*zArray.__init__c                 C   s   |j |j krdS ||k S )NF)shaper7   )r$   Zarr1Zarr2r   r   r   r   V  s   zArray.arr_equalc                 C   s
   t | jS r4   )strr   r/   r   r   r   r0   [  r3   zArray.__str__c                 C   s@   | j | ju rdS t| j tjsdS t| j }|d | jd kS )z6Check that created array shares data with input array.TFr   )re   r   rY   rZ   r   r   r   r   )r$   Zobj_attrr   r   r   r   ^  s   zArray.has_shared_memoryN)r=   r>   r?   r2   r&   r   r0   r   r   r   r   r   r      s    Wr   c                   @   s   e Zd Zdd ZdS )
TestIntentc                 C   st   t tjjdks
J tjjdsJ tjjdrJ tjjdds&J tjjdds0J tjdr8J d S )Nzintent(in,out)r   r(   )r   r   r'   outr   r:   r<   r/   r   r   r   test_in_outi  s   zTestIntent.test_in_outN)r=   r>   r?   r   r   r   r   r   r   h  s    r   c                   @   s"  e Zd Zejddeddd Zedd Zedd	 Z	d
d Z
dd Zejdddgejdddgejdddg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'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?S )@TestSharedMemoryTclass)Zautousescopeparamsc                    s"   t  j j_ fdd j_d S )Nc                    s   t t j|||S r4   )r   rX   param)r$   r   r   re   requestr   r   <lambda>w  s    z-TestSharedMemory.setup_type.<locals>.<lambda>)rX   r   rc   r]   r   )r$   r   r   r   r   
setup_typet  s   zTestSharedMemory.setup_typec                 C   s.   | j jdr| j j}d| d| gS ddgS )Nrf   12r   r   r]   rh   rk   rj   r$   rj   r   r   r   num2seqz  s   zTestSharedMemory.num2seqc                 C   sR   | j jdr!| j j}d| d| d| gd| d| d| ggS g dg d	gS )
Nrf   r   r   3456)r   r   r   )rP   r   r   r   r   r   r   r   num23seq  s   zTestSharedMemory.num23seqc                 C   s$   |  dgtj| j}| rJ d S )Nr   )r   r   r'   r   r   r$   ar   r   r   test_in_from_2seq  s   z"TestSharedMemory.test_in_from_2seqc                 C   sx   | j  D ]4}tj| j|jd}| t| jgtj|}|j	| j j	kr3|
 s2J t| j j|jfq|
 r9J qd S Nr   )r]   rx   rZ   r   r   r[   r;   r   r'   rj   r   r   r$   tre   r   r   r   r   test_in_from_2casttype  s    z'TestSharedMemory.test_in_from_2casttyper   wror   r   r   inpZ2seqZ23seqc                 C   sd   t | d| }tj|| jj|d}|j|dkd | |j|dkr%tjj	p'tj|}|
 s0J dS )z5Test if intent(in) array can be passed without copiesrn   r[   r   r   r   r   N)r   rZ   r   r]   r[   r   r   r   r'   r   r   )r$   r   r   r   seqre   r   r   r   r   test_in_nocopy  s   zTestSharedMemory.test_in_nocopyc              
   C   s   t j| j| jjd}| t| jgtj|}| sJ z| dgtj	j| j}W td t
yG } zt|ds< W Y d }~d S d }~ww )Nr   r   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rZ   r   r   r]   r[   r;   r   inoutr   r'   	TypeErrorr   rk   SystemError)r$   re   r   msgr   r   r   test_inout_2seq  s   z TestSharedMemory.test_inout_2seqc              
   C   s   t j| j| jjdd}t| jt| jd f}| |tjj|}|	 s&J t j| j| jjdd}t| jt| jd f}z| |tjj|}W td t
yf } zt|ds[ W Y d }~d S d }~ww )Nr   r   r   r   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rZ   r   r   r]   r[   r;   r   r'   r   r   
ValueErrorr   rk   r   )r$   re   r   r   r   r   r   r   test_f_inout_23seq  s&   z#TestSharedMemory.test_f_inout_23seqc                 C   sP   t j| j| jjd}t| jt| jd f}| |tjjj	|}|
 s&J d S Nr   r   )rZ   r   r   r]   r[   r;   r   r'   r   r   r   r$   re   r   r   r   r   r   test_c_inout_23seq  s   z#TestSharedMemory.test_c_inout_23seqc                 C   sL   | j  D ]}tj| j|jd}| t| jgtjj	|}|
 r#J qd S r   )r]   rx   rZ   r   r   r[   r;   r   r'   r   r   r   r   r   r   test_in_copy_from_2casttype  s
   z,TestSharedMemory.test_in_copy_from_2casttypec                 C   s6   |  t| jt| jd gtj| j}| rJ d S Nr   )r   r;   r   r   r'   r   r   r   r   r   test_c_in_from_23seq  s
   z%TestSharedMemory.test_c_in_from_23seqc                 C   sV   | j  D ]#}tj| j|jd}| t| jt| jd gtj|}|	 r(J qd S r   )
r]   rx   rZ   r   r   r[   r;   r   r'   r   r   r   r   r   test_in_from_23casttype  s   z(TestSharedMemory.test_in_from_23casttypec                 C   st   | j  D ]2}tj| j|jdd}| t| jt| jd gtj|}|j	| j j	kr1|
 s0J q|
 r7J qd S Nr   r   r   )r]   rx   rZ   r   r   r[   r;   r   r'   rj   r   r   r   r   r   test_f_in_from_23casttype  s   z*TestSharedMemory.test_f_in_from_23casttypec                 C   st   | j  D ]2}tj| j|jd}| t| jt| jd gtjj	|}|j
| j j
kr1| s0J q| r7J qd S r   )r]   rx   rZ   r   r   r[   r;   r   r'   r   rj   r   r   r   r   r   test_c_in_from_23casttype  s   z*TestSharedMemory.test_c_in_from_23casttypec                 C   sZ   | j  D ]%}tj| j|jdd}| t| jt| jd gtjj	|}|
 r*J qd S r   )r]   rx   rZ   r   r   r[   r;   r   r'   r   r   r   r   r   r   test_f_copy_in_from_23casttype  s   z/TestSharedMemory.test_f_copy_in_from_23casttypec                 C   sZ   | j  D ]%}tj| j|jd}| t| jt| jd gtjj	j
|}| r*J qd S r   )r]   rx   rZ   r   r   r[   r;   r   r'   r   r   r   r   r   r   r   test_c_copy_in_from_23casttype  s   z/TestSharedMemory.test_c_copy_in_from_23casttypec                 C   s6  | j  D ]}|j| j jkrqtj| j|jd}t| jf}| |tj	j
j|}| s.J | |tj	j|}| s=J tj| j|jdd}| |tj	j
j|}| sWJ | |tj	j|}| skJ t|jz| |tj	j|d d d }W td ty } zt|ds W Y d }~qd }~ww d S )Nr   r   r   (failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)r]   rz   rj   rZ   r   r   r[   r;   r   r'   r   r   r   r   r   r   rk   r   )r$   r   re   r   r   r   r   r   r   test_in_cache_from_2casttype  s8   z-TestSharedMemory.test_in_cache_from_2casttypec                 C   s   | j  D ]`}|jdkrq|j| j jkrqt|jtj}|r.t| j	d t
|jjkr.qtj| j	|jd}t| j	f}z| |tjj| W td tye } zt|ds[ W Y d }~qd }~ww d S )Nrf   r   r   r   z1intent(cache) should have failed on smaller array)r]   rz   rh   rj   rZ   Z
issubdtyper[   integerrl   r   Ziinfomaxr   r;   r   r'   r   r   r   rk   r   )r$   r   Zis_intre   r   r   r   r   r   $test_in_cache_from_2casttype_failure  s0   
 z5TestSharedMemory.test_in_cache_from_2casttype_failurec              
   C   s   d}|  |tjjd }|jj|ksJ d}|  |tjjd }|jj|ks&J d}z|  |tjjd }W t	d tyQ } zt|dsF W Y d }~d S d }~ww )Nr   r   r   r   r   2failed to create intent(cache|hide)|optional arrayz8intent(cache) should have failed on undefined dimensions)
r   r   r   hider   r   r   r   rk   r   r$   r   r   r   r   r   r   test_cache_hidden3  s(   z"TestSharedMemory.test_cache_hiddenc              
   C   s\  d}|  |tjd }|jj|ksJ ||jtj|| jj	ds"J d}|  |tjd }|jj|ks4J ||jtj|| jj	dsDJ |jj
d rP|jj
d rRJ d}|  |tjjd }|jj|kseJ ||jtj|| jj	dsuJ |jj
d s|jj
d sJ d}z|  |tjd }W td ty } zt|ds W Y d }~d S d }~ww )	Nr   r   r   r   r   r   r   z7intent(hide) should have failed on undefined dimensions)r   r   r   r   r   r   rZ   zerosr]   r[   r   r   r   r   rk   r   r   r   r   r   test_hiddenG  s8      zTestSharedMemory.test_hiddenc                 C   s
  d}|  |tjd }|jj|ksJ ||jtj|| jj	ds"J d}|  |tjd }|jj|ks4J ||jtj|| jj	dsDJ |jj
d rP|jj
d rRJ d}|  |tjjd }|jj|kseJ ||jtj|| jj	dsuJ |jj
d s|jj
d sJ d S )Nr   r   r   r   r   )r   r   r!   r   r   r   rZ   r   r]   r[   r   r   )r$   r   r   r   r   r   test_optional_noned  s       z#TestSharedMemory.test_optional_nonec                 C   s@   | j }t|f}| |tj|}|jj|ksJ | rJ d S r4   )r   r;   r   r   r!   r   r   r   r   r   r   r   test_optional_from_2seqv  s
   
z(TestSharedMemory.test_optional_from_2seqc                 C   sx   | j }t|t|d f}| |tj|}|jj|ksJ | r#J | |tjj|}|jj|ks4J | r:J d S r   )	r   r;   r   r   r!   r   r   r   r   r   r   r   r   test_optional_from_23seq}  s   z)TestSharedMemory.test_optional_from_23seqc                 C   s   t j| j| jjd}|jd s|jd sJ |j}| |tj|}|d d |j	d d ks7J t
||j	fd|j	d d< |d d |j	d d   krYt jd| jjdks\J  J |j	|u scJ |jd sjJ |jd rqJ d S Nr   r   r   r   r   6   )rZ   r   r   r]   r[   r   r   r   inplacer   r   r   r   r   r   test_inplace  s   ,<zTestSharedMemory.test_inplacec                 C   s:  | j  D ]}|| j u rqtj| j|jd}|jj |j ksJ |jj | j j us)J |jd s3|jd s5J |j}| |tj	|}|d d |j
d d ksVJ t||j
fd|j
d d< |d d |j
d d   krxtjd| j jdks{J  J |j
|u sJ |jd sJ |jd rJ |jj | j j u sJ qd S r   )r]   rx   rZ   r   r   r[   r   r   r   r   r   r   )r$   r   re   r   r   r   r   r   test_inplace_from_casttype  s&   
,$z+TestSharedMemory.test_inplace_from_casttypeN)"r=   r>   r?   pytestZfixturery   r   propertyr   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  s@    


		

r   r   )#sysr   platformr   pathlibr   numpyrZ   Znumpy._core._type_aliasesr   Z_c_names_dict r   r   dictr[   r   r   r   r   r    r   ry   rw   Zintprm   Zclongdoubler|   system	processorextendrX   r   r   r   r   r   r   r   <module>   sf    





"Qo
