U
    K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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ddd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< d ged < d!ged!< dged< e jjd"ks8e jjd	krejd#kre  e! fd$kre"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 )0    N)assert_assert_equal)typeinfo   )utilSTRING	CHARACTERc   c                  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   J/tmp/pip-unpacked-wheel-6z689xxv/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 k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&   ZBOOLZBYTEZUBYTEZSHORTZUSHORTINTZUINTLONGZULONGZLONGLONGZ	ULONGLONGFLOATZDOUBLEZCFLOATZSTRING1ZSTRING5   win32)DarwinarmZ
LONGDOUBLEZCDOUBLEZCLONGDOUBLEc                   @   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kr|} qDq| j| d }|d k	rb|S t	
| }|| || j| < |S r;   )
isinstancenpdtyper   itemstype_type_cachegetr)   object__new___init)clsr1   Zdtype0nr+   objr   r   r   rQ      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st|j| _|j| _d S )Nr   Z
NPY_STRINGr   r	   r   r   r   SZNPY_r
   )r)   NAMEr   r#   r   type_numelsizerJ   rK   
startswithintbitsrM   numAssertionErrorchar	dtypechar)r*   r1   r%   r   r   r   rR      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=)rW   rX   rK   rM   rY   r`   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>   s     z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrW   r5   r   r5   r   
cast_types   s    zType.cast_typesc                    s    fddt D S )Nc                    s   g | ]}  |qS r   ra   rb   r5   r   r   re      s     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   rW   	alignmentrh   r$   rH   r*   r\   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;   rj   rl   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;   rj   rl   r   r   r   larger_types   s    zType.larger_typesN)r>   r?   r@   rN   rQ   rR   r8   rg   ri   rn   ro   rp   r   r   r   r   rH      s   
rH   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=)rM   dimsintentrU   r   r5   r   r   r   r8     s    zArray.__repr__c                 C   sH  || _ || _|| _t|| _|| _t|j	|j
||j|| _t| jtjsPt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nF|jtj@ rt| jjd st| jjd rt| jd tj@ st|d krd | _d | _d S |dr`t|tjsHt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rx| jdr>| jjd rt| jjd s&t| jd tj@ rxtn:| jjd sPt| jjd rbt| jd tj@ sxt| 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t| jd | jd f| jd | jd kst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rD|j
t"|jj
krD|dsD| jd dkrD| # sDtd S )Nr   r	   r   r   r   cacherK   CF)orderr!   writer             r   copy)$rM   rr   rs   r   deepcopyZobj_copyrU   r   callrX   rY   r   r   rI   rJ   ndarrayr^   r   arr_attrr<   r:   ZF2PY_INTENT_Cr   ZpyarrZ
pyarr_attrreprarrayZreshaper`   rK   setflagstobytesr   	arr_equalrH   has_shared_memory)r*   typrr   rs   rU   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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   )rU   r   rI   rJ   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   rq     s
   Wrq   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)r	   r.   )r   rs   r-   outr^   r	   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;   )rq   rH   param)r*   rr   rs   rU   requestr   r   <lambda>  s
      z-TestSharedMemory.setup_type.<locals>.<lambda>)rH   r   rS   rM   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{   rM   rW   rZ   rY   r*   rY   r   r   r   num2seq  s    zTestSharedMemory.num2seqc                 C   sV   | j jdrB| j j}d| d| d| gd| d| d| ggS dd	d
gdddggS )Nr   r   r   3456r   r{   r|   rD   r}   r   r   r   r   r   r   num23seq  s    zTestSharedMemory.num23seqc                 C   s$   |  dgtj| j}| r td S )Nr{   )r   rs   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|
 srtt| j j|jfq
|
 r
tq
d S Nru   )rM   rg   rJ   r   r   rK   r<   rs   r-   rY   r   r^   r   r*   trU   r   r   r   r   test_in_from_2casttype  s     z'TestSharedMemory.test_in_from_2casttyperz   wrorx   rv   rw   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 copiesr]   rK   rx   r   ry   rv   N)r#   rJ   r   rM   rK   r   r   rs   r-   r	   r   r^   )r*   rz   rx   r   seqrU   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|}| 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 )Nru   r{   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rJ   r   r   rM   rK   r<   rs   inoutr   r^   r-   	TypeErrorr   rZ   SystemError)r*   rU   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|}|	 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 )Nrw   r   r   rv   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rJ   r   r   rM   rK   r<   rs   r-   r   r   r^   
ValueErrorr   rZ   r   )r*   rU   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 Nru   r   )rJ   r   r   rM   rK   r<   rs   r-   r	   r   r   r^   r*   rU   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   )rM   rg   rJ   r   r   rK   r<   rs   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}| r2td S Nr   )r   r<   r   rs   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
t
q
d S r   )rM   rg   rJ   r   r   rK   r<   rs   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|
 sntq
|
 r
tq
d S Nrw   r   r   )rM   rg   rJ   r   r   rK   r<   rs   r-   rY   r   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| sntq
| r
tq
d S r   )rM   rg   rJ   r   r   rK   r<   rs   r-   r	   rY   r   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
tq
d S r   )rM   rg   rJ   r   r   rK   r<   rs   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
tq
d S r   )rM   rg   rJ   r   r   rK   r<   rs   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^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 )Nru   rw   r   (failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)rM   ri   rY   rJ   r   r   rK   r<   rs   r-   r	   rt   r   r^   r   r   r   rZ   r   )r*   r   rU   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 n2 tk
r } zt|ds W 5 d }~X Y q
X tdq
d S )Nr   ru   r   z1intent(cache) should have failed on smaller array)rM   ri   rW   rY   rJ   r   r   rK   r<   rs   r-   rt   r   r   rZ   r   )r*   r   rU   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r{   r{   r|   r   r|   2failed to create intent(cache|hide)|optional arrayz8intent(cache) should have failed on undefined dimensions)r   rs   rt   hider   r   r^   r   r   rZ   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   ru   r   r   r   r   r   z7intent(hide) should have failed on undefined dimensions)r   rs   r   r   r   r^   r   rJ   zerosrM   rK   r   r	   r   r   rZ   r   r   r   r   r   test_hiddenP  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   ru   r   r   r   )r   rs   r'   r   r   r^   r   rJ   r   rM   rK   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s0t| r<td S r;   )	r   r<   r   rs   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:t| rFt| |tjj	|}|jj|ksht| rttd S r   )
r   r<   r   rs   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,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 Nru   r   r   r   r{   6   )rJ   r   r   rM   rK   r   r^   r   rs   inplacer   r   r   r   r   r   test_inplace  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   )rM   rg   rJ   r   r   rK   r^   r   r   rs   r   r   r   )r*   r   rU   r   r   r   r   r   test_inplace_from_casttype  s$    
,$z+TestSharedMemory.test_inplace_from_casttypeN)"r>   r?   r@   r   Zfixturerh   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   ZnumpyrJ   Znumpy.testingr   r   Znumpy.core.multiarrayr   Z	_typeinfo r   r   Z_tidictrM   r]   rk   r   r   r   r&   rs   rh   rf   ZintprK   itemsizeZclongdoublesystem	processorextendrH   rq   r   r   r   r   r   r   <module>   s   !





$

Qo
