a
    mJh]                  	   @   s  d dl Z 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m	Z	 d dl
mZ ddlmZ daed Zef deedejd	ejejfie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rejd%kre  e! fd&kre"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 d/d0 d0Z$G d1d2 d2Z%G d3d4 d4Z&dS )5    N)assert_assert_equal)typeinfo   )utilSTRING	CHARACTERc   c                  C   sb   t  std tdu r^d} tjt}t 	ddddt 	ddt 	dd	g}t 
|| d
adS )z6
    Build the required testing extension module

    zNo C compiler availableNz
        config.add_extension('test_array_from_pyobj_ext',
                             sources=['wrapmodule.c', 'fortranobject.c'],
                             define_macros=[])
        ZtestssrcZarray_from_pyobjzwrapmodule.czfortranobject.czfortranobject.hZtest_array_from_pyobj_ext)r   Zhas_c_compilerpytestskipwrapospathdirname__file__ZgetpathZbuild_module_distutils)Zconfig_codedr    r   X/var/www/shaz/venv/lib/python3.9/site-packages/numpy/f2py/tests/test_array_from_pyobj.pysetup_module   s    


r   c                 C   s   t | d }t|S )N   )r   array_attrsflags2names)arrflagsr   r   r   
flags_info1   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   6   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__N   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__X   s    zIntent.__getattr__c                 C   s   dd | j S )Nz
intent(%s),)joinr'   r)   r   r   r   __str__^   s    zIntent.__str__c                 C   s
   d| j  S )Nz
Intent(%r)r'   r4   r   r   r   __repr__a   s    zIntent.__repr__c                 G   s   |D ]}|| j vr dS qdS )NFTr6   )r)   namesr0   r   r   r   	is_intentd   s    
zIntent.is_intentc                 G   s   t | jt |ko| j| S N)lenr'   r9   )r)   r8   r   r   r   is_intent_exactj   s    zIntent.is_intent_exactN)	__name__
__module____qualname__r+   r1   r5   r7   r9   r<   r   r   r   r   r%   M   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   rT   rT   )rM   rU   rV   rV   rU   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 r:   )
isinstancenpdtyper   itemstype_type_cachegetr(   object__new___init)clsr0   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 | _n6t| j }ttd	| j | _|jd
 | _t|j| _| j|jksJ |j| _|j| _d S )Nr   Z
NPY_STRINGr   r	   r   r   r   SZNPY_r
   )r(   NAMEr   r"   r   type_numelsizerY   rZ   
startswithintbitsr\   numchar	dtypechar)r)   r0   r$   r   r   r   ra      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=)rf   rg   rZ   r\   rh   rn   r4   r   r   r   r7      s    zType.__repr__c                    s    fddt  j D S )Nc                    s   g | ]}  |qS r   r/   .0_mr4   r   r   
<listcomp>       z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrf   r4   r   r4   r   
cast_types   s    zType.cast_typesc                    s    fddt D S )Nc                    s   g | ]}  |qS r   ro   rp   r4   r   r   rs      rt   z"Type.all_types.<locals>.<listcomp>)_type_namesr4   r   r4   r   	all_types   s    zType.all_typesc                 C   s:   t | j j}g }tD ] }t | j|k r|t| q|S r:   r   rf   	alignmentrw   r#   rW   r)   rk   typesr0   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 r:   ry   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 r:   ry   r{   r   r   r   larger_types   s    zType.larger_typesN)r=   r>   r?   r]   r`   ra   r7   rv   rx   r}   r~   r   r   r   r   r   rW      s   
rW   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intentrd   r   r4   r   r   r   r7     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rZ   CF)orderr    writer            r   copy)#r\   r   r   r   deepcopyZobj_copyrd   r   callrg   rh   r   r   rX   rY   ndarrayr   arr_attrr;   r9   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshapern   rZ   setflagstobytesr   	arr_equalrW   has_shared_memory)r)   typr   r   rd   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   c  s    zArray.arr_equalc                 C   s
   t | jS r:   )strr   r4   r   r   r   r5   h  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   )rd   r   rX   rY   r   r   r   r   )r)   Zobj_attrr   r   r   r   k  s    zArray.has_shared_memoryN)r=   r>   r?   r7   r+   r   r5   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	   r9   r<   r4   r   r   r   test_in_outv  s    zTestIntent.test_in_outN)r=   r>   r?   r   r   r   r   r   r   u  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 r:   )r   rW   param)r)   r   r   rd   requestr   r   <lambda>  s   z-TestSharedMemory.setup_type.<locals>.<lambda>)rW   r   rb   r\   r   )r)   r   r   r   r   
setup_type  s    zTestSharedMemory.setup_typec                 C   s.   | j jdr&| j j}d| d| gS ddgS )Nr   12r   r   r\   rf   ri   rh   r)   rh   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 )
Nr   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 ]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   )r\   rv   rY   r   r   rZ   r;   r   r,   rh   r   r   r)   trd   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 copiesrl   rZ   r   r   r   r   N)r"   rY   r   r\   rZ   r   r   r   r,   r	   r   )r)   r   r   r   seqrd   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)rY   r   r   r\   rZ   r;   r   inoutr   r,   	TypeErrorr   ri   SystemError)r)   rd   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)rY   r   r   r\   rZ   r;   r   r,   r   r   
ValueErrorr   ri   r   )r)   rd   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   )rY   r   r   r\   rZ   r;   r   r,   r	   r   r   r)   rd   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\   rv   rY   r   r   rZ   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}| r2J 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 ]F}tj| j|jd}| t| jt| jd gtj|}|	 r
J q
d S r   )
r\   rv   rY   r   r   rZ   r;   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   )r\   rv   rY   r   r   rZ   r;   r   r,   rh   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   )r\   rv   rY   r   r   rZ   r;   r   r,   r	   rh   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   )r\   rv   rY   r   r   rZ   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 ]J}tj| j|jd}| t| jt| jd gtjj	j
|}| r
J q
d S r   )r\   rv   rY   r   r   rZ   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   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)r\   rx   rh   rY   r   r   rZ   r;   r   r,   r	   r   r   r   r   r   ri   r   )r)   r   rd   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| 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 )Nr   r   r   z1intent(cache) should have failed on smaller array)r\   rx   rf   rh   rY   r   r   rZ   r;   r   r,   r   r   r   ri   r   )r)   r   rd   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   ri   r   r)   r   r   r   r   r   r   test_cache_hidden<  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   rY   zerosr\   rZ   r   r	   r   r   ri   r   r   r   r   r   test_hiddenP  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   rY   r   r\   rZ   r   r	   )r)   r   r   r   r   r   test_optional_nonem  s       z#TestSharedMemory.test_optional_nonec                 C   s@   | j }t|f}| |tj|}|jj|ks0J | r<J d S r:   )r   r;   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   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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   )rY   r   r   r\   rZ   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   )r\   rv   rY   r   r   rZ   r   r   r   r   r   r   )r)   r   rd   r   r   r   r   r   test_inplace_from_casttype  s$    
,$z+TestSharedMemory.test_inplace_from_casttypeN)"r=   r>   r?   r   Zfixturerw   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     s>   


		

r   )'r   sysr   platformr   numpyrY   Znumpy.testingr   r   Znumpy.core.multiarrayr   Z	_typeinfo r   r   Z_tidictr\   rl   rz   r   r   r   r%   r   rw   ru   ZintprZ   itemsizeZclongdoublesystem	processorextendrW   r   r   r   r   r   r   r   <module>   sj   !





$Qo
