a
    ;e]                  	   @   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=[])
        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   Z/var/www/sunrise/env/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(   r5   r   r   r   __repr__a   s    zIntent.__repr__c                 G   s   |D ]}|| j vr dS qdS )NFTr7   )r*   namesr1   r   r   r   	is_intentd   s    
zIntent.is_intentc                 G   s   t | jt |ko| j| S N)lenr(   r:   )r*   r9   r   r   r   is_intent_exactj   s    zIntent.is_intent_exactN)	__name__
__module____qualname__r,   r2   r6   r8   r:   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   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   )rG   rL   rM   rM   rN   rO   rP      win32)Darwinarm)
LONGDOUBLECDOUBLECLONGDOUBLE)rI   rL   rM   rU   rU   )rN   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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)clsr1   Zdtype0nr+   objr   r   r   ra      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elsizerZ   r[   
startswithintbitsr]   numchar	dtypechar)r*   r1   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=)rg   rh   r[   r]   ri   ro   r5   r   r   r   r8      s    zType.__repr__c                    s    fddt  j D S )Nc                    s   g | ]}  |qS r   r0   .0_mr5   r   r   
<listcomp>       z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrg   r5   r   r5   r   
cast_types   s    zType.cast_typesc                    s    fddt D S )Nc                    s   g | ]}  |qS r   rp   rq   r5   r   r   rt      ru   z"Type.all_types.<locals>.<listcomp>)_type_namesr5   r   r5   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   rg   	alignmentrx   r$   rX   r*   rl   typesr1   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;   rz   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;   rz   r|   r   r   r   larger_types   s    zType.larger_typesN)r>   r?   r@   r^   ra   rb   r8   rw   ry   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   r5   r   r   r   r8     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r[   CF)orderr!   writer             r   copy)#r]   r   r   r   deepcopyZobj_copyre   r   callrh   ri   r   r   rY   rZ   ndarrayr   arr_attrr<   r:   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshapero   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)shapeall)r*   Zarr1Zarr2r   r   r   r   c  s    zArray.arr_equalc                 C   s
   t | jS r;   )strr   r5   r   r   r   r6   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   )re   r   rY   rZ   r   r   r   r   )r*   Zobj_attrr   r   r   r   k  s    zArray.has_shared_memoryN)r>   r?   r@   r8   r,   r   r6   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	   r:   r=   r5   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autouseZscopeparamsc                    s"   t  j j_ fdd j_d S )Nc                    s   t t j|||S r;   )r   rX   param)r*   r   r   re   requestr   r   <lambda>  s   z-TestSharedMemory.setup_type.<locals>.<lambda>)rX   r   rc   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]   rg   rj   ri   r*   ri   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   )rQ   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]   rw   rZ   r   r   r[   r<   r   r-   ri   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rJtjj	pNtj|}|
 s`J dS )z5Test if intent(in) array can be passed without copiesrm   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|}| 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)rZ   r   r   r]   r[   r<   r   inoutr   r-   	TypeErrorr   rj   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|}|	 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)rZ   r   r   r]   r[   r<   r   r-   r   r   
ValueErrorr   rj   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	|}|
 sLJ 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]   rw   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}| 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]   rw   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 ]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]   rw   rZ   r   r   r[   r<   r   r-   ri   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]   rw   rZ   r   r   r[   r<   r   r-   r	   ri   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]   rw   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 ]J}tj| j|jd}| t| jt| jd gtjj	j
|}| r
J q
d S r   )r]   rw   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   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]   ry   ri   rZ   r   r   r[   r<   r   r-   r	   r   r   r   r   r   rj   r   )r*   r   re   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]   ry   rg   ri   rZ   r   r   r[   r<   r   r-   r   r   r   rj   r   )r*   r   re   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   rj   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   rZ   zerosr]   r[   r   r	   r   r   rj   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   rZ   r   r]   r[   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   )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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]   rw   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@   r   Zfixturerx   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   numpyrZ   Znumpy.testingr   r   Znumpy.core.multiarrayr   Z	_typeinfo r   r   Z_tidictr]   rm   r{   r   r   r   r&   r   rx   rv   Zintpr[   itemsizeZclongdoublesystem	processorextendrX   r   r   r   r   r   r   r   <module>   sj   !





$Qo
