a
    Lf!]                     @   s  d dl Z 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
mZ d dlmZ ddlmZ daef d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se jjd&kr~ejd'kr~e  e! fd(kr~e"g d) ed g d* ed+< ed+ g d, ed-< ed! d"d.g ed.< G d/d0 d0Z#G d1d2 d2Z$G d3d4 d4Z%G d5d6 d6Z&dS )7    N)Path)assert_assert_equal)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   _/var/www/ai-form-bot/venv/lib/python3.9/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 )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__F   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__P   s    zIntent.__getattr__c                 C   s   dd | j S )Nz
intent(%s),)joinr$   r&   r   r   r   __str__V   s    zIntent.__str__c                 C   s
   d| j  S )Nz
Intent(%r)r$   r1   r   r   r   __repr__Y   s    zIntent.__repr__c                 G   s   |D ]}|| j vr dS qdS )NFTr3   )r&   namesr-   r   r   r   	is_intent\   s    
zIntent.is_intentc                 G   s   t | jt |ko| j| S N)lenr$   r6   )r&   r5   r   r   r   is_intent_exactb   s    zIntent.is_intent_exactN)	__name__
__module____qualname__r(   r.   r2   r4   r6   r9   r   r   r   r   r"   E   s   
r"   )BOOLBYTEUBYTESHORTUSHORTINTUINTLONGULONGLONGLONG	ULONGLONGFLOATDOUBLECFLOATSTRING1STRING5r   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   )rC   rH   rI   rI   rJ   rK   rL         win32)Darwinarm)
LONGDOUBLECDOUBLECLONGDOUBLE)rE   rH   rI   rR   rR   )rJ   rS   rT   rT   rS   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rD|}d }t D ]&\}}t |ts|j|ju r|} qDq| j| d }|d urb|S t	
| }|| || j| < |S r7   )
isinstancenpdtyper   itemstype_type_cachegetr%   object__new___init)clsr-   Zdtype0nr'   objr   r   r   r^      s    

zType.__new__c                 C   s   |  | _| jdkr>t| j }ttd| _d| _td| _n| j	drt| jd d  }ttd| _t
| jdd  pzd| _td| j | _n2t| j }ttd	| j | _|j| _t|j| _| j|jksJ |j| _|j| _d S )
Nr   Z
NPY_STRINGr   r	   STRINGr   r   SZNPY_)r%   NAMEr   r   r   type_numelsizerW   rX   
startswithintitemsizerZ   numchar	dtypechar)r&   r-   r!   r   r   r   r_      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=)re   rf   rX   rZ   rg   rm   r1   r   r   r   r4      s    zType.__repr__c                    s    fddt  j D S )Nc                    s   g | ]}  |qS r   r,   .0_mr1   r   r   
<listcomp>       z#Type.cast_types.<locals>.<listcomp>)
_cast_dictre   r1   r   r1   r   
cast_types   s    zType.cast_typesc                    s    fddt D S )Nc                    s   g | ]}  |qS r   rn   ro   r1   r   r   rr      rs   z"Type.all_types.<locals>.<listcomp>)_type_namesr1   r   r1   r   	all_types   s    zType.all_typesc                 C   s:   t | j j}g }tD ] }t | j|k r|t| q|S r7   r   re   	alignmentrv   r    rU   r&   bitstypesr-   r   r   r   smaller_types   s    zType.smaller_typesc                 C   sF   t | j j}g }tD ],}|| jkr$qt | j|kr|t| q|S r7   rx   rz   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 r7   rx   rz   r   r   r   larger_types   s    zType.larger_typesN)r:   r;   r<   r[   r^   r_   r4   ru   rw   r}   r~   r   r   r   r   r   rU      s   
rU   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=)rZ   dimsintentrb   r   r1   r   r   r   r4      s
    zArray.__repr__c                 C   sH  || _ || _|| _t|| _|| _t|j	|j
||j|| _t| jtjsPJ t| j| _t|dkr| jdr|jtj@ sJ | jjd rJ | jjd sJ | jd tj@ rJ nF|jtj@ rJ | jjd sJ | jjd rJ | jd tj@ sJ |d u rd | _d | _d S |dr`t|tjsHJ tt |t|j|  | _nHt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rx| jdr>| jjd rJ | jjd s&J | jd tj@ rxJ n:| jjd sPJ | jjd rbJ | jd tj@ sxJ | jd | jd ksJ | jd | jd ksJ | jd dkr| jd | jd ksJ t| jd | jd | j | j f| jd dd  | jd dd  ks@J 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 n2| jd d | j j
ksJ |  | j| jsJ t| jtjrD|j
t!|jj
krD|dsD| jd dkrD| " sDJ d S )Nr   r	   r   r   r   cacherX   CF)orderr   writer            r   copy)#rZ   r   r   r   deepcopyZobj_copyrb   r   callrf   rg   r   r   rV   rW   ndarrayr   arr_attrr8   r6   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshaperm   rX   setflagstobytesr   	arr_equalrU   has_shared_memory)r&   typr   r   rb   r   r   r   r(     s    
*zArray.__init__c                 C   s   |j |j krdS ||k S )NF)shapeall)r&   Zarr1Zarr2r   r   r   r   [  s    zArray.arr_equalc                 C   s
   t | jS r7   )strr   r1   r   r   r   r2   `  s    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   )rb   r   rV   rW   r   r   r   r   )r&   Zobj_attrr   r   r   r   c  s    zArray.has_shared_memoryN)r:   r;   r<   r4   r(   r   r2   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r8J tjjddsLJ tjjdds`J tjdrpJ d S )Nzintent(in,out)r	   r*   )r   r   r)   outr	   r6   r9   r1   r   r   r   test_in_outn  s    zTestIntent.test_in_outN)r:   r;   r<   r   r   r   r   r   r   m  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 r7   )r   rU   param)r&   r   r   rb   requestr   r   <lambda>|  s   z-TestSharedMemory.setup_type.<locals>.<lambda>)rU   r   r`   rZ   r   )r&   r   r   r   r   
setup_typey  s    zTestSharedMemory.setup_typec                 C   s.   | j jdr&| j j}d| d| gS ddgS )Nrc   12r   r   rZ   re   rh   rg   r&   rg   r   r   r   num2seq  s    zTestSharedMemory.num2seqc                 C   sR   | j jdrB| j j}d| d| d| gd| d| d| ggS g dg d	gS )
Nrc   r   r   3456)r   r   r   )rM   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 ]h}tj| j|jd}| t| jgtj|}|j	| j j	krf|
 srJ t| j j|jfq
|
 r
J q
d S Nr   )rZ   ru   rW   r   r   rX   r8   r   r)   rg   r   r   r&   trb   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rJtjj	pNtj|}|
 s`J dS )z5Test if intent(in) array can be passed without copiesrk   rX   r   r   r   r   N)r   rW   r   rZ   rX   r   r   r   r)   r	   r   )r&   r   r   r   seqrb   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|}| s8J z| dgtj	j| j}W n4 t
y } zt|dsr W Y d }~nd }~0 0 tdd S )Nr   r   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rW   r   r   rZ   rX   r8   r   inoutr   r)   	TypeErrorr   rh   SystemError)r&   rb   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|}|	 sLJ t j| j| jjdd}t| jt| jd f}z| |tjj|}W n4 t
y } zt|ds W Y d }~nd }~0 0 tdd S )Nr   r   r   r   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rW   r   r   rZ   rX   r8   r   r)   r   r   
ValueErrorr   rh   r   )r&   rb   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	|}|
 sLJ d S Nr   r   )rW   r   r   rZ   rX   r8   r   r)   r	   r   r   r&   rb   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   )rZ   ru   rW   r   r   rX   r8   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}| r2J d S Nr   )r   r8   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 ]F}tj| j|jd}| t| jt| jd gtj|}|	 r
J q
d S r   )
rZ   ru   rW   r   r   rX   r8   r   r)   r   r   r   r   r   test_in_from_23casttype  s    z(TestSharedMemory.test_in_from_23casttypec                 C   st   | j  D ]d}tj| j|jdd}| t| jt| jd gtj|}|j	| j j	krb|
 snJ q
|
 r
J q
d S Nr   r   r   )rZ   ru   rW   r   r   rX   r8   r   r)   rg   r   r   r   r   r   test_f_in_from_23casttype  s    z*TestSharedMemory.test_f_in_from_23casttypec                 C   st   | j  D ]d}tj| j|jd}| t| jt| jd gtjj	|}|j
| j j
krb| snJ q
| r
J q
d S r   )rZ   ru   rW   r   r   rX   r8   r   r)   r	   rg   r   r   r   r   r   test_c_in_from_23casttype  s    z*TestSharedMemory.test_c_in_from_23casttypec                 C   sZ   | j  D ]J}tj| j|jdd}| t| jt| jd gtjj	|}|
 r
J q
d S r   )rZ   ru   rW   r   r   rX   r8   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 ]J}tj| j|jd}| t| jt| jd gtjj	j
|}| r
J q
d S r   )rZ   ru   rW   r   r   rX   r8   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   s@  | 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|}| sJ | |tj	j|}| sJ t|jz | |tj	j|d d d }W n8 ty0 } zt|ds W Y d }~q
d }~0 0 tdq
d S )Nr   r   r   (failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)rZ   rw   rg   rW   r   r   rX   r8   r   r)   r	   r   r   r   r   r   rh   r   )r&   r   rb   r   r   r   r   r   r   test_in_cache_from_2casttype  s0     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 n4 ty } zt|ds W Y d }~q
d }~0 0 tdq
d S )Nrc   r   r   r   z1intent(cache) should have failed on smaller array)rZ   rw   re   rg   rW   Z
issubdtyperX   integerri   r   Ziinfomaxr   r8   r   r)   r   r   r   rh   r   )r&   r   Zis_intrb   r   r   r   r   r   $test_in_cache_from_2casttype_failure!  s(    
 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sLJ d}z|  |tjjd }W n4 ty } zt|ds W Y d }~nd }~0 0 t	dd S )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   rh   r   r&   r   r   r   r   r   r   test_cache_hidden8  s"    z"TestSharedMemory.test_cache_hiddenc              
   C   sh  d}|  |tjd }|jj|ks$J ||jtj|| jj	dsDJ d}|  |tjd }|jj|kshJ ||jtj|| jj	dsJ |jj
d r|jj
d rJ d}|  |tjjd }|jj|ksJ ||jtj|| jj	dsJ |jj
d s|jj
d s
J d}z|  |tjd }W n8 tyZ } zt|dsF W Y d }~nd }~0 0 tdd S )	Nr   r   r   r   r   r   r   z7intent(hide) should have failed on undefined dimensions)r   r   r   r   r   r   rW   zerosrZ   rX   r   r	   r   r   rh   r   r   r   r   r   test_hiddenL  s2        zTestSharedMemory.test_hiddenc                 C   s  d}|  |tjd }|jj|ks$J ||jtj|| jj	dsDJ d}|  |tjd }|jj|kshJ ||jtj|| jj	dsJ |jj
d r|jj
d rJ d}|  |tjjd }|jj|ksJ ||jtj|| jj	dsJ |jj
d s|jj
d s
J d S )Nr   r   r   r   r   )r   r   r#   r   r   r   rW   r   rZ   rX   r   r	   )r&   r   r   r   r   r   test_optional_nonei  s       z#TestSharedMemory.test_optional_nonec                 C   s@   | j }t|f}| |tj|}|jj|ks0J | r<J d S r7   )r   r8   r   r   r#   r   r   r   r   r   r   r   test_optional_from_2seq{  s
    
z(TestSharedMemory.test_optional_from_2seqc                 C   sx   | j }t|t|d f}| |tj|}|jj|ks:J | rFJ | |tjj|}|jj|kshJ | rtJ d S r   )	r   r8   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snJ t
||j	fd|j	d d< |d d |j	d d   krt jd| jjdksn J |j	|u sJ |jd sJ |jd rJ d S Nr   r   r   r   r   6   )rW   r   r   rZ   rX   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sTJ |jd sh|jd slJ |j}| |tj	|}|d d |j
d d ksJ t||j
fd|j
d d< |d d |j
d d   krtjd| j jdksn J |j
|u sJ |jd sJ |jd r&J |jj | j j u s
J q
d S r   )rZ   ru   rW   r   r   rX   r   r   r   r   r   r   )r&   r   rb   r   r   r   r   r   test_inplace_from_casttype  s$    
,$z+TestSharedMemory.test_inplace_from_casttypeN)"r:   r;   r<   pytestZfixturerv   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   w  s>   


		

r   )'ossysr   platformr   pathlibr   numpyrW   Znumpy.testingr   r   Znumpy._core._type_aliasesr   Z_c_names_dict r   r   dictrX   r   r   r   r   r"   r   rv   rt   Zintprj   Zclongdoublery   system	processorextendrU   r   r   r   r   r   r   r   <module>   sl   !





$Qo
