U
    b7V                     @   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 ddl	m
Z
 dadd Zdd Zd	d
 ZG dd dZe Zddddddddddddddg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 dddg ed< ed dg ed< e jjdkse jjdkrFejdkrFe e fdkrFedd d!g ed ddddg ed< ed dd d!g ed!< ed dd g ed < G d"d# d#ZG d$d% d%ZG d&d' d'ZG d(d) d)ZdS )*    N)typeinfo   )utilc                  C   sb   t  std tdk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=[])
        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   f/home/fireinfo/NEWAFireInfo/venv/lib/python3.8/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_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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"   r/   r   r   r   __repr__Y   s    zIntent.__repr__c                 G   s   |D ]}|| j kr dS qdS )NFTr1   )r$   namesr+   r   r   r   	is_intent\   s    
zIntent.is_intentc                 G   s   t | jt |ko| j| S N)lenr"   r4   )r$   r3   r   r   r   is_intent_exactb   s    zIntent.is_intent_exactN)	__name__
__module____qualname__r&   r,   r0   r2   r4   r7   r   r   r   r   r    E   s   
r    ZBOOLZBYTEZUBYTEZSHORTZUSHORTINTZUINTLONGZULONGZLONGLONGZ	ULONGLONGFLOATZDOUBLEZCFLOAT      win32)DarwinarmZ
LONGDOUBLEZCDOUBLEZCLONGDOUBLEc                   @   sH   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S )Typec                 C   s   t |tjrD|}d }t D ]&\}}t |ts|j|jkr|} qDq| j| d }|d k	rb|S t	
| }|| || j| < |S r5   )
isinstancenpdtyper   itemstype_type_cachegetr#   object__new___init)clsr+   Zdtype0nr%   objr   r   r   rL      s    

zType.__new__c                 C   sd   |  | _t| j }ttd| j | _| j|jks6tt	|j
| _	|j
| _
|jd | _|j| _d S )NZNPY_r?   )r#   NAMEr   r   r	   type_numnumAssertionErrorrE   rF   rH   bitselsizechar	dtypechar)r$   r+   r   r   r   r   rM      s    

z
Type._initc                    s    fddt  j D S )Nc                    s   g | ]}  |qS r   r*   .0_mr/   r   r   
<listcomp>   s     z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrQ   r/   r   r/   r   
cast_types   s    zType.cast_typesc                    s    fddt D S )Nc                    s   g | ]}  |qS r   rY   rZ   r/   r   r   r]      s     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 r5   r   rQ   	alignmentr`   r   rC   r$   rU   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 r5   rb   rd   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 r5   rb   rd   r   r   r   larger_types   s    zType.larger_typesN)r8   r9   r:   rI   rL   rM   r_   ra   rf   rg   rh   r   r   r   r   rC      s   

rC   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Arrayc                 C   s(  || _ || _|| _t|| _|| _t|j	||j
|| _t| jtjsLtt| j| _t|dkr| jdr|j
tj@ st| jj
d rt| jj
d st| jd tj@ rtnD|j
tj@ rt| jj
d st| jj
d rt| jd tj@ st|d krd | _d | _d S |drXt|tjs@ttt |t|j|  | _nHtjtj||jdj| | jdrdpd	d
| _| jj|kst| jj| jj
d d | jj
d st||ft| j| _t|dkrp| jdr6| jj
d rt| jj
d st| jd tj@ rptn:| jj
d sHt| jj
d rZt| jd tj@ spt| jd | jd kst| jd | jd kst| jd dkr| jd | jd kstt| jd | jd | j | j f| jd dd  | jd dd  ks t| jd | jd ksztt| jd | jd td| jd  | jd  t| jd |f|dr| jd d | j j kstn2| jd d | j j kst| !| j| jstt| jtjr$|j t"|jj kr$|ds$| jd dkr$| # s$td S )Nr   cr   r   r   cacherF   CF)orderr   writer            r   copy)$rH   dimsintentrv   deepcopyZobj_copyrP   r	   callrR   r   r   rD   rE   ndarrayrT   r   arr_attrr6   r4   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshaperX   rF   setflagstobytesr   rV   	arr_equalrC   has_shared_memory)r$   typrw   rx   rP   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   8  s    zArray.arr_equalc                 C   s
   t | jS r5   )strr   r/   r   r   r   r0   =  s    zArray.__str__c                 C   s@   | j | jk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   )rP   r   rD   rE   r{   r	   r   r|   )r$   Zobj_attrr   r   r   r   @  s    zArray.has_shared_memoryN)r8   r9   r:   r&   r   r0   r   r   r   r   r   ri      s   Sri   c                   @   s   e Zd Zdd ZdS )
TestIntentc                 C   st   t tjjdksttjjds&ttjjdr8ttjjddsLttjjdds`ttjdrptd S )Nzintent(in,out)rj   r(   )r   rx   r'   outrT   rj   r4   r7   r/   r   r   r   test_in_outK  s    zTestIntent.test_in_outN)r8   r9   r:   r   r   r   r   r   r   J  s   r   c                   @   s&  e Zd ZddgZdddgdddggZejdded	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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ Z dAS )BTestSharedMemoryr   rr   rs   r>   rt   r   Tclass)ZautouseZscopeparamsc                    s"   t  j j_ fdd j_d S )Nc                    s   t t j|||S r5   )ri   rC   param)r$   rw   rx   rP   requestr   r   <lambda>[  s
      z-TestSharedMemory.setup_type.<locals>.<lambda>)rC   r   rN   rH   r~   )r$   r   r   r   r   
setup_typeX  s    zTestSharedMemory.setup_typec                 C   s$   |  dgtj| j}| r td S )Nrr   )r~   rx   r'   num2seqr   rT   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|
 srtt| j j|jfq
|
 r
tq
d S Nrl   )rH   r_   rE   r~   r   rF   r6   rx   r'   rV   r   rT   r}   r$   trP   r   r   r   r   test_in_from_2casttypeb  s     z'TestSharedMemory.test_in_from_2casttyperq   wroro   rm   rn   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`tdS )z5Test if intent(in) array can be passed without copiesrS   rF   ro   r   rp   rm   N)r   rE   r~   rH   rF   r   r   rx   r'   rj   r   rT   )r$   rq   ro   r   seqrP   r   r   r   r   test_in_nocopyk  s     zTestSharedMemory.test_in_nocopyc              
   C   s   t j| j| jjd}| t| jgtj|}| s8t	z| dgtj
j| j}W n2 tk
r } zt|dst W 5 d }~X Y n
X tdd S )Nrl   rr   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rE   r~   r   rH   rF   r6   rx   inoutr   rT   r'   	TypeErrorr   
startswithSystemError)r$   rP   r   msgr   r   r   test_inout_2seqw  s    z TestSharedMemory.test_inout_2seqc              
   C   s   t j| j| jjdd}t| jt| jd f}| |tjj|}|	 sLt
t j| j| jjdd}t| jt| jd f}z| |tjj|}W n2 tk
r } zt|ds W 5 d }~X Y n
X tdd S )Nrn   r   r   rm   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rE   r~   num23seqrH   rF   r6   rx   r'   r   r   rT   
ValueErrorr   r   r   )r$   rP   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	|}|
 sLtd S Nrl   r   )rE   r~   r   rH   rF   r6   rx   r'   rj   r   r   rT   r$   rP   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
tq
d S r   )rH   r_   rE   r~   r   rF   r6   rx   r'   rv   r   rT   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}| r2td S Nr   )r~   r6   r   rx   r'   r   rT   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
t
q
d S r   )rH   r_   rE   r~   r   rF   r6   rx   r'   r   rT   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|
 sntq
|
 r
tq
d S Nrn   r   r   )rH   r_   rE   r~   r   rF   r6   rx   r'   rV   r   rT   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| sntq
| r
tq
d S r   )rH   r_   rE   r~   r   rF   r6   rx   r'   rj   rV   r   rT   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
tq
d S r   )rH   r_   rE   r~   r   rF   r6   rx   r'   rv   r   rT   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
tq
d S r   )rH   r_   rE   r~   r   rF   r6   rx   r'   rj   rv   r   rT   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^t| |tj	j|}| s|ttj| j|jdd}| |tj	j
j|}| st| |tj	j|}| stt|jz | |tj	j|d d d }W n6 tk
r. } zt|ds W 5 d }~X Y q
X tdq
d S )Nrl   rn   r   (failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)rH   ra   rV   rE   r~   r   rF   r6   rx   r'   rj   rk   r   rT   r}   r   r   r   r   )r$   r   rP   r   r   r   r   r   r   test_in_cache_from_2casttype  s0     z-TestSharedMemory.test_in_cache_from_2casttypec                 C   s   | j  D ]}|j| j jkrq
tj| j|jd}t| jf}z| |tj	j
| W n2 tk
r } zt|dst W 5 d }~X Y q
X tdq
d S )Nrl   r   z1intent(cache) should have failed on smaller array)rH   ra   rV   rE   r~   r   rF   r6   rx   r'   rk   r   r   r   r   )r$   r   rP   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&td}|  |tjjd }|jj|ksLtd}z|  |tjjd }W n2 tk
r } zt|	ds W 5 d }~X Y n
X t
dd S )Nrr   rr   rs   r   rs   2failed to create intent(cache|hide)|optional arrayz8intent(cache) should have failed on undefined dimensions)r~   rx   rk   hider   r   rT   r   r   r   r   r$   r   r   r   r   r   r   test_cache_hidden  s"    z"TestSharedMemory.test_cache_hiddenc              
   C   sf  d}|  |tjd }|jj|ks$t||jtj|| j	j
dsDtd}|  |tjd }|jj|ksht||jtj|| j	j
dst|jjd r|jjd rtd}|  |tjjd }|jj|kst||jtj|| j	j
dst|jjd s|jjd s
td}z|  |tjd }W n6 tk
rX } zt|dsH W 5 d }~X Y n
X tdd S )	Nr   rl   r   r   r   r   r   z7intent(hide) should have failed on undefined dimensions)r~   rx   r   r   r   rT   r   rE   zerosrH   rF   r   rj   r   r   r   r   r   r   r   r   test_hidden  s2        zTestSharedMemory.test_hiddenc                 C   s  d}|  |tjd }|jj|ks$t||jtj|| j	j
dsDtd}|  |tjd }|jj|ksht||jtj|| j	j
dst|jjd r|jjd rtd}|  |tjjd }|jj|kst||jtj|| j	j
dst|jjd s|jjd s
td S )Nr   rl   r   r   r   )r~   rx   r!   r   r   rT   r   rE   r   rH   rF   r   rj   )r$   r   r   r   r   r   test_optional_none2  s       z#TestSharedMemory.test_optional_nonec                 C   s@   | j }t|f}| |tj|}|jj|ks0t| r<td S r5   )	r   r6   r~   rx   r!   r   r   rT   r   r   r   r   r   test_optional_from_2seqD  s
    
z(TestSharedMemory.test_optional_from_2seqc                 C   sx   | j }t|t|d f}| |tj|}|jj|ks:t| rFt| |tjj	|}|jj|ksht| rttd S r   )
r   r6   r~   rx   r!   r   r   rT   r   rj   r   r   r   r   test_optional_from_23seqK  s    z)TestSharedMemory.test_optional_from_23seqc                 C   s   t j| j| jjd}|jd s(|jd s,t|j}| |tj	|}|d d |j
d d ksntt||j
fd|j
d d< |d d |j
d d   krt jd| jjdksn t|j
|kst|jd st|jd rtd S Nrl   r   r   r   rr   6   )rE   r~   r   rH   rF   r   rT   r   rx   inplacer   r}   r   r   r   r   test_inplaceV  s    ,:zTestSharedMemory.test_inplacec                 C   s@  | j  D ].}|| j krq
tj| j|jd}|jj |j ks@t|jj | j j k	sTt|jd sh|jd slt|j}| |t	j
|}|d d |jd d kstt||jfd|jd d< |d d |jd d   krtjd| j jdksn t|j|kst|jd st|jd r&t|jj | j j ks
tq
d S r   )rH   r_   rE   r~   r   rF   rT   r   r   rx   r   r   r}   )r$   r   rP   r   r   r   r   r   test_inplace_from_casttypeb  s$    
,$z+TestSharedMemory.test_inplace_from_casttypeN)!r8   r9   r:   r   r   r   Zfixturer`   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   T  s:   
		

r   )r
   sysrv   platformr   ZnumpyrE   Znumpy.core.multiarrayr    r   r	   r   r   r   r    rx   r`   r^   ZintprF   itemsizeZclongdoublerc   system	processorextendrC   ri   r   r   r   r   r   r   <module>   s   !


$

>f
