3
KdU                 @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlmZm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rPejdkrPej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)arrayalltruendarrayzerosdtypeintpclongdouble)assert_assert_equal)typeinfo   )utilc              C   sp   t j stjd tdkrld} tjjt}tjj	|dddtjj	|dddtjj	|ddd	g}t j
|| 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=[])
        srcZarray_from_pyobjzwrapmodule.cz..zfortranobject.czfortranobject.hZtest_array_from_pyobj_ext)r   Zhas_c_compilerpytestskipwrapospathdirname__file__joinZbuild_module_distutils)Zconfig_codedr    r   Z/var/www/html/virt/lib64/python3.6/site-packages/numpy/f2py/tests/test_array_from_pyobj.pysetup_module   s    
r   c             C   s   t j| d }t|S )N   )r   array_attrsflags2names)arrflagsr   r   r   
flags_info)   s    r    c             C   s4   g }x*dD ]"}t | tt|d@ r
|j| q
W |S )N
CONTIGUOUSFORTRANOWNDATA
ENSURECOPYENSUREARRAYALIGNED
NOTSWAPPED	WRITEABLEWRITEBACKIFCOPYUPDATEIFCOPYBEHAVED
BEHAVED_ROCARRAYFARRAYr   )r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   )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   sT   |d d  | _ d}x6|D ].}|dkr0|tjO }q|ttd|j  O }qW || _d S )Nr   optionalZF2PY_INTENT_)intent_listr   ZF2PY_OPTIONALr0   upperr   )selfr5   r   ir   r   r   __init__<   s    
zIntent.__init__c             C   s&   |j  }|dkrd}| j| j|g S )Nin_in)lower	__class__r5   )r7   namer   r   r   __getattr__F   s    zIntent.__getattr__c             C   s   ddj | j S )Nz
intent(%s),)r   r5   )r7   r   r   r   __str__L   s    zIntent.__str__c             C   s
   d| j  S )Nz
Intent(%r))r5   )r7   r   r   r   __repr__O   s    zIntent.__repr__c             G   s    x|D ]}|| j krdS qW dS )NFT)r5   )r7   namesr>   r   r   r   	is_intentR   s    

zIntent.is_intentc             G   s   t | jt |ko| j| S )N)lenr5   rD   )r7   rC   r   r   r   is_intent_exactX   s    zIntent.is_intent_exactN)	__name__
__module____qualname__r9   r?   rA   rB   rD   rF   r   r   r   r   r3   :   s   
r3   ZBOOLZBYTEZUBYTEZSHORTZUSHORTINTZUINTLONGZULONGZLONGLONGZ	ULONGLONGFLOATZDOUBLEZCFLOAT      win32Z
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rF|}d }x2tj D ]&\}}t |t r|j|jkr|}P qW | jj|j d }|d k	rd|S tj	| }|j
| || j|j < |S )N)
isinstancer   r   itemstype_type_cachegetr6   object__new___init)clsr>   Zdtype0nr8   objr   r   r   rW      s    


zType.__new__c             C   sT   |j  | _t| j }ttd| j | _t| j|j |j| _	|j
d | _|j| _d S )NZNPY_rN   )r6   NAMEr   r0   r   type_numr
   numrS   r   bitselsizechar	dtypechar)r7   r>   r2   r   r   r   rX      s    

z
Type._initc                s    fddt  j D S )Nc                s   g | ]} j |qS r   )r=   ).0_m)r7   r   r   
<listcomp>   s    z#Type.cast_types.<locals>.<listcomp>)
_cast_dictr\   )r7   r   )r7   r   
cast_types   s    zType.cast_typesc                s    fddt D S )Nc                s   g | ]} j |qS r   )r=   )rc   rd   )r7   r   r   re      s    z"Type.all_types.<locals>.<listcomp>)_type_names)r7   r   )r7   r   	all_types   s    zType.all_typesc             C   s>   t | j j}g }x(tD ] }t | j|k r|jt| qW |S )N)r   r\   	alignmentrh   r1   rP   )r7   r_   typesr>   r   r   r   smaller_types   s    
zType.smaller_typesc             C   sJ   t | j j}g }x4tD ],}|| jkr&qt | j|kr|jt| qW |S )N)r   r\   rj   rh   r1   rP   )r7   r_   rk   r>   r   r   r   equal_types   s    

zType.equal_typesc             C   s>   t | j j}g }x(tD ] }t | j|kr|jt| qW |S )N)r   r\   rj   rh   r1   rP   )r7   r_   rk   r>   r   r   r   larger_types   s    
zType.larger_typesN)rG   rH   rI   rT   rW   rX   rg   ri   rl   rm   rn   r   r   r   r   rP      s   	
rP   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Arrayc          	   C   sb  || _ || _|| _tj|| _|| _tj|j	||j
|| _tt| jttt | j tj| j| _t|dkr&| jjdrt|j
tj@  t| jj
d  t| jj
t|dd f t| jj
d  t| jd tj@   nHt|j
tj@   t| jj
d  t| jj
d   t| jd tj@  |d kr@d | _d | _d S |jdrztt|ttt | t|j| j | _nPtt||jdj| | jjdrd	pd
d| _t| jj|kt| jj|f t| jj
d ||f tj| j| _t|dkrz| jjdrDt| jj
d   t| jj
d  t| jd tj@   n6t| jj
d  t| jj
d   t| jd tj@  t| jd | jd k t| jd | jd k | jd dkrt| jd | jd kt| jd | jd | jj | jj f t| jd dd  | jd dd  kt| jd | jd f t| jd | jd kt| jd | jd td| jd  | jd  t| jd |f |jdrt| jd d | j jkt| jd d | j jf n2t| jd d | j jkt| jd d | j jf t| j | j| j t| jtr^|jt!|jjkr^|jd r^| jd dkr^t| j"  d S )Nr   cr"   r   r!   r   cache)r   CF)orderr#            r   copyry   )#rS   dimsintentrx   deepcopyZobj_copyr[   r   callr]   r   r   r	   rQ   r   reprr   arr_attrrE   rD   ZF2PY_INTENT_Cr0   r"   ZpyarrZ
pyarr_attrr   Zreshaperb   r   tobytesr   r`   	arr_equalrP   has_shared_memory)r7   typrz   r{   r[   r   r   r   r9      s|    
$zArray.__init__c             C   s$   |j |j krdS ||k}t|j S )NF)shaper   flatten)r7   Zarr1Zarr2sr   r   r   r     s    zArray.arr_equalc             C   s
   t | jS )N)strr   )r7   r   r   r   rA     s    zArray.__str__c             C   s>   | j | jkrdS t| j ts dS tj| j }|d | jd kS )z?Check that created array shares data with input array.
        TFr   )r[   r   rQ   r   r   r   r   )r7   Zobj_attrr   r   r   r     s    zArray.has_shared_memoryN)rG   rH   rI   r9   r   rA   r   r   r   r   r   ro      s   Oro   c               @   s   e Zd Zdd ZdS )
TestIntentc             C   sv   t ttjjd ttjjjd ttjjjd  ttjjjdd ttjjjdd ttjjd  d S )Nzintent(in,out)rp   r;   )	r
   r   r{   r:   outr	   rp   rD   rF   )r7   r   r   r   test_in_out(  s    zTestIntent.test_in_outN)rG   rH   rI   r   r   r   r   r   r   &  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
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(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6S )7TestSharedMemoryr   ru   rv   rM   rw   r   Tclass)ZautouseZscopeparamsc                s"   t  j j_ fdd j_d S )Nc                s   t t j|||S )N)ro   rP   param)r7   rz   r{   r[   )requestr   r   <lambda>8  s    z-TestSharedMemory.setup_type.<locals>.<lambda>)rP   r   rY   rS   r   )r7   r   r   )r   r   
setup_type5  s    zTestSharedMemory.setup_typec             C   s&   | j dgtj| j}t|j   d S )Nru   )r   r{   r:   num2seqr	   r   )r7   ar   r   r   test_in_from_2seq;  s    z"TestSharedMemory.test_in_from_2seqc             C   s   x|| j j D ]n}t| j|jd}| jt| jgtj|}|j| j jkrdt	|j
 t| j j|jf qt	|j
  t|j qW d S )N)r   )rS   rg   r   r   r   rE   r{   r:   r`   r	   r   r~   )r7   tr[   r   r   r   r   test_in_from_2casttype?  s    z'TestSharedMemory.test_in_from_2casttypec             C   s   t | j| jjd}| j t| jgtj|}t|j  y| j dgtj	j| j}W n2 t
k
r } zt|jdsr W Y d d }~X n
X tdd S )N)r   ru   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)r   r   rS   r   rE   r{   inoutr	   r   r:   	TypeErrorr   
startswithSystemError)r7   r[   r   msgr   r   r   test_inout_2seqI  s    z TestSharedMemory.test_inout_2seqc             C   s   t | j| jjdd}t| jt| jd f}| j |tjj|}t|j	  t | j| jjdd}t| jt| jd f}y| j |tjj|}W n2 t
k
r } zt|jds W Y d d }~X n
X tdd S )Nrs   )r   rt   r   rr   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)r   num23seqrS   r   rE   r{   r:   r   r	   r   
ValueErrorr   r   r   )r7   r[   r   r   r   r   r   r   test_f_inout_23seqW  s    z#TestSharedMemory.test_f_inout_23seqc             C   sN   t | j| jjd}t| jt| jd f}| j |tjjj|}t	|j
  d S )N)r   r   )r   r   rS   r   rE   r{   r:   rp   r   r	   r   )r7   r[   r   r   r   r   r   test_c_inout_23seqi  s    z#TestSharedMemory.test_c_inout_23seqc             C   sX   xR| j j D ]D}t| j|jd}| jt| jgtjj|}t	|j
  t|j qW d S )N)r   )rS   rg   r   r   r   rE   r{   r:   rx   r	   r   r~   )r7   r   r[   r   r   r   r   test_in_copy_from_2casttypeo  s    z,TestSharedMemory.test_in_copy_from_2casttypec             C   s8   | j t| jt| jd gtj| j}t|j   d S )Nr   )r   rE   r   r{   r:   r	   r   )r7   r   r   r   r   test_c_in_from_23sequ  s    z%TestSharedMemory.test_c_in_from_23seqc             C   sb   x\| j j D ]N}t| j|jd}| jt| jt| jd gtj|}t|j	  t
|j qW d S )N)r   r   )rS   rg   r   r   r   rE   r{   r:   r	   r   r~   )r7   r   r[   r   r   r   r   test_in_from_23casttypez  s
    
z(TestSharedMemory.test_in_from_23casttypec             C   s   x| j j D ]t}t| j|jdd}| jt| jt| jd gtj|}|j| j jkrjt	|j
 t|j qt	|j
  t|j qW d S )Nrs   )r   rt   r   )rS   rg   r   r   r   rE   r{   r:   r`   r	   r   r~   )r7   r   r[   r   r   r   r   test_f_in_from_23casttype  s    
z*TestSharedMemory.test_f_in_from_23casttypec             C   s   x| j j D ]t}t| j|jd}| jt| jt| jd gtjj|}|j	| j j	krjt
|j t|j qt
|j  t|j qW d S )N)r   r   )rS   rg   r   r   r   rE   r{   r:   rp   r`   r	   r   r~   )r7   r   r[   r   r   r   r   test_c_in_from_23casttype  s    z*TestSharedMemory.test_c_in_from_23casttypec             C   sf   x`| j j D ]R}t| j|jdd}| jt| jt| jd gtjj|}t	|j
  t|j qW d S )Nrs   )r   rt   r   )rS   rg   r   r   r   rE   r{   r:   rx   r	   r   r~   )r7   r   r[   r   r   r   r   test_f_copy_in_from_23casttype  s
    z/TestSharedMemory.test_f_copy_in_from_23casttypec             C   sf   x`| j j D ]R}t| j|jd}| jt| jt| jd gtjjj	|}t
|j  t|j qW d S )N)r   r   )rS   rg   r   r   r   rE   r{   r:   rp   rx   r	   r   r~   )r7   r   r[   r   r   r   r   test_c_copy_in_from_23casttype  s
    z/TestSharedMemory.test_c_copy_in_from_23casttypec             C   sV  xN| j j D ]>}|j| j jkr$qt| j|jd}t| jf}| j|tjj	j
|}t|j t|j | j|tjj
|}t|j t|j t| j|jdd}| j|tjj	j
|}t|j t|j | j|tjj
|}t|j t|j y | j|tjj
|d d d }W n6 tk
rD } zt|jds4 W Y d d }~X qX tdqW d S )N)r   rs   )r   rt   r   z(failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)rS   ri   r`   r   r   r   rE   r{   r:   rp   rq   r	   r   r~   r   r   r   r   )r7   r   r[   r   r   r   r   r   r   test_in_cache_from_2casttype  s*     z-TestSharedMemory.test_in_cache_from_2casttypec             C   s   x| j j D ]}|j| j jkr qt| j|jd}t| jf}y| j|tjj	| W n2 t
k
r } zt|jdst W Y d d }~X qX tdqW d S )N)r   z(failed to initialize intent(cache) arrayz1intent(cache) should have failed on smaller array)rS   ri   r`   r   r   r   rE   r{   r:   rq   r   r   r   r   )r7   r   r[   r   r   r   r   r   $test_in_cache_from_2casttype_failure  s    z5TestSharedMemory.test_in_cache_from_2casttype_failurec             C   s   d}| j |tjjd }t|jj|k d}| j |tjjd }t|jj|k d	}y| j |tjjd }W n2 tk
r } zt|j	ds W Y d d }~X n
X t
dd S )
Nru   rv   r   z2failed to create intent(cache|hide)|optional arrayz8intent(cache) should have failed on undefined dimensions)ru   )ru   rv   r   )r   rv   )r   r{   rq   hider	   r   r   r   r   r   r   )r7   r   r   r   r   r   r   test_cache_hidden  s    z"TestSharedMemory.test_cache_hiddenc             C   sb  d	}| j |tjd }t|jj|k t|j|jt|| jj	d d
}| j |tjd }t|jj|k t|j|jt|| jj	d t|jj
d o|jj
d   d}| j |tjjd }t|jj|k t|j|jt|| jj	d t|jj
d  o|jj
d  d}y| j |tjd }W n6 tk
rT } zt|jdsD W Y d d }~X n
X tdd S )Nru   )r   rv   r"   r!   r   z2failed to create intent(cache|hide)|optional arrayz7intent(hide) should have failed on undefined dimensions)ru   )ru   rv   )ru   rv   r   )r   rv   )r   r{   r   r	   r   r   r   r   rS   r   r   rp   r   r   r   r   )r7   r   r   r   r   r   r   test_hidden  s*     zTestSharedMemory.test_hiddenc             C   s
  d}| j |tjd }t|jj|k t|j|jt|| jj	d d}| j |tjd }t|jj|k t|j|jt|| jj	d t|jj
d o|jj
d   d}| j |tjjd }t|jj|k t|j|jt|| jj	d t|jj
d  o|jj
d  d S )	Nru   )r   rv   r"   r!   )ru   )ru   rv   )ru   rv   )r   r{   r4   r	   r   r   r   r   rS   r   r   rp   )r7   r   r   r   r   r   test_optional_none  s    z#TestSharedMemory.test_optional_nonec             C   sB   | j }t|f}| j|tj|}t|jj|k t|j   d S )N)	r   rE   r   r{   r4   r	   r   r   r   )r7   r[   r   r   r   r   r   test_optional_from_2seq  s
    
z(TestSharedMemory.test_optional_from_2seqc             C   s|   | j }t|t|d f}| j|tj|}t|jj|k t|j   | j|tjj	|}t|jj|k t|j   d S )Nr   )
r   rE   r   r{   r4   r	   r   r   r   rp   )r7   r[   r   r   r   r   r   test_optional_from_23seq  s    z)TestSharedMemory.test_optional_from_23seqc             C   s   t | j| jjd}t|jd  o(|jd  |j}| j |tj|}t|d d |j	d d kt
||j	f d|j	d d< t|d d |j	d d   kot d| jjdkn  t
||j	f t|j	|k t|jd  t|jd   d S )N)r   r"   r!   r   ru   6   )r   r   rS   r   r	   r   r   r{   inplacer   r~   )r7   r[   r   r   r   r   r   test_inplace%  s    * &zTestSharedMemory.test_inplacec             C   sL  xD| j j D ]4}|| j kr qt| j|jd}t|jj |jk t|jj | j jk	 t|jd  ol|jd  |j}| j|tj	|}t|d d |j
d d kt||j
f d|j
d d< t|d d |j
d d   kotd| j jdkn  t||j
f t|j
|k t|jd  t|jd   t|jj | j jk qW d S )N)r   r"   r!   r   ru   r   )rS   rg   r   r   r   r	   r   r   r{   r   r   r~   )r7   r   r[   r   r   r   r   r   test_inplace_from_casttype2  s"    
* &z+TestSharedMemory.test_inplace_from_casttypeN)rG   rH   rI   r   r   r   Zfixturerh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   1  s0   


r   )#r   sysrx   r   Znumpyr   r   r   r   r   r   r   Znumpy.testingr	   r
   Znumpy.core.multiarrayr    r   r   r   r    r   r3   r{   rh   rf   itemsizerj   platformextendrP   ro   r   r   r   r   r   r   <module>   sX   $!



 =e