o
    1ήc7V                     @   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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< e jjdkse jjdkrejdkre e fd kre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)d* d*ZG d+d, d,ZG d-d. d.ZdS )/    N)typeinfo   )utilc                  C   sf   t  s	td tdu r1d} tjt}t 	ddddt 	ddt 	dd	g}t 
|| d
adS 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srcarray_from_pyobjzwrapmodule.czfortranobject.czfortranobject.htest_array_from_pyobj_ext)r   has_c_compilerpytestskipwrapospathdirname__file__getpathbuild_module_distutils)config_codedr    r   M/tmp/pip-target-vg8gfxp4/lib/python/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OWNDATA
ENSURECOPYENSUREARRAYALIGNED
NOTSWAPPED	WRITEABLEWRITEBACKIFCOPYBEHAVED
BEHAVED_ROCARRAYFARRAYr   )absgetattrr   append)r   info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   optionalF2PY_INTENT_)intent_listr   F2PY_OPTIONALr,   upperr   )selfr3   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__r3   )r6   namer   r   r   __getattr__P   s   zIntent.__getattr__c                 C   s   dd | j S )Nz
intent(%s),)joinr3   r6   r   r   r   __str__V   s   zIntent.__str__c                 C   s
   d| j  S )Nz
Intent(%r)r3   rA   r   r   r   __repr__Y      
zIntent.__repr__c                 G   s   |D ]
}|| j vr dS qdS )NFTrC   )r6   namesr=   r   r   r   	is_intent\   s
   
zIntent.is_intentc                 G   s   t | jt |ko| j| S N)lenr3   rG   )r6   rF   r   r   r   is_intent_exactb   s   zIntent.is_intent_exactN)	__name__
__module____qualname__r8   r>   rB   rD   rG   rJ   r   r   r   r   r0   E   s    
r0   )BOOLBYTEUBYTESHORTUSHORTINTUINTLONGULONGLONGLONG	ULONGLONGFLOATDOUBLECFLOATrN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   )rT   rY   rZ   rZ   r[         win32)Darwinarm)
LONGDOUBLECDOUBLECLONGDOUBLE)rV   rY   rZ   ra   ra   )r[   rb   rc   rc   rb   c                   @   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r"|}d }t D ]\}}t |ts!|j|ju r!|} nq| j| d }|d ur1|S t	
| }|| || j| < |S rH   )
isinstancenpdtyper   itemstype_type_cachegetr5   object__new___init)clsr=   dtype0nr7   objr   r   r   rm      s   

zType.__new__c                 C   sd   |  | _t| j }ttd| j | _| j|jksJ t|j	| _|j	| _	|j
d | _|j| _d S )NNPY_r]   )r5   NAMEr   r,   r   type_numnumrf   rg   ri   bitselsizechar	dtypechar)r6   r=   r.   r   r   r   rn      s   

z
Type._initc                    s    fddt  j D S )Nc                       g | ]}  |qS r   r<   .0_mrA   r   r   
<listcomp>       z#Type.cast_types.<locals>.<listcomp>)
_cast_dictrt   rA   r   rA   r   
cast_types   s   zType.cast_typesc                    s    fddt D S )Nc                    r{   r   r|   r}   rA   r   r   r      r   z"Type.all_types.<locals>.<listcomp>)_type_namesrA   r   rA   r   	all_types   s   zType.all_typesc                 C   s:   t | j j}g }tD ]}t | j|k r|t| q
|S rH   r   rt   	alignmentr   r-   rd   r6   rw   typesr=   r   r   r   smaller_types      zType.smaller_typesc                 C   sF   t | j j}g }tD ]}|| jkrq
t | j|kr |t| q
|S rH   r   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 rH   r   r   r   r   r   larger_types   r   zType.larger_typesN)rK   rL   rM   rj   rm   rn   r   r   r   r   r   r   r   r   r   rd      s    

rd   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s&J t| j| _t|dkr~| jdr\|j
tj@ sAJ | jj
d rIJ | jj
d sQJ | jd tj@ r[J n"|j
tj@ rdJ | jj
d slJ | jj
d rtJ | jd tj@ s~J |d u rd | _d | _d S |drt|tjsJ tt |t|j|  | _n!t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r0| jdr| jj
d rJ | jj
d sJ | jd tj@ rJ n| jj
d sJ | jj
d r%J | jd tj@ s0J | jd | jd ks=J | jd | jd ksJJ | jd dkrs| jd | jd kssJ t| jd | jd | j | j f| jd dd  | jd dd  ksJ | 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 n| jd d | j jksJ |  | j| jsJ t| jtjr
|jt!|jjkr|ds| jd dkr| " sJ d S d S d S d S d S )Nr   cr   r   r   cacherg   CF)orderr%   writer             r   copy)#ri   dimsintentr   deepcopyobj_copyrr   r   callru   r   r   re   rf   ndarrayr   arr_attrrI   rG   F2PY_INTENT_Cr   pyarr
pyarr_attrreprarrayreshaperz   rg   setflagstobytesr   rx   	arr_equalrd   has_shared_memory)r6   typr   r   rr   r   r   r   r8      s   
*zArray.__init__c                 C   s   |j |j krdS ||k S )NF)shapeall)r6   arr1arr2r   r   r   r   8  s   zArray.arr_equalc                 C   s
   t | jS rH   )strr   rA   r   r   r   rB   =  rE   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   )rr   r   re   rf   r   r   r   r   )r6   obj_attrr   r   r   r   @  s   zArray.has_shared_memoryN)rK   rL   rM   r8   r   rB   r   r   r   r   r   r      s
    S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rJ tjjdds&J tjjdds0J tjdr8J d S )Nzintent(in,out)r   r:   )r   r   r9   outr   rG   rJ   rA   r   r   r   test_in_outK  s   zTestIntent.test_in_outN)rK   rL   rM   r   r   r   r   r   r   J  s    r   c                   @   s"  e Zd ZddgZg dg d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-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?S )@TestSharedMemoryr   r   )r   r   r   )r\   r   r   Tclass)autousescopeparamsc                    s"   t  j j_ fdd j_d S )Nc                    s   t t j|||S rH   )r   rd   param)r6   r   r   rr   requestr   r   <lambda>[  s    z-TestSharedMemory.setup_type.<locals>.<lambda>)rd   r   ro   ri   r   )r6   r   r   r   r   
setup_typeX  s   zTestSharedMemory.setup_typec                 C   s$   |  dgtj| j}| rJ d S )Nr   )r   r   r9   num2seqr   r6   ar   r   r   test_in_from_2seq^  s   z"TestSharedMemory.test_in_from_2seqc                 C   sx   | j  D ]4}tj| j|jd}| t| jgtj|}|j	| j j	kr3|
 s2J t| j j|jfq|
 r9J qd S Nr   )ri   r   rf   r   r   rg   rI   r   r9   rx   r   r   r6   trr   r   r   r   r   test_in_from_2casttypeb  s    z'TestSharedMemory.test_in_from_2casttyper   wror   r   r   inp2seq23seqc                 C   sd   t | d| }tj|| jj|d}|j|dkd | |j|dkr%tjj	p'tj|}|
 s0J dS )z5Test if intent(in) array can be passed without copiesrv   rg   r   r   r   r   N)r,   rf   r   ri   rg   r   r   r   r9   r   r   )r6   r   r   r   seqrr   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|}| sJ z| dgtj	j| j}W td t
yG } zt|ds< W Y d }~d S d }~ww )Nr   r   z6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rf   r   r   ri   rg   rI   r   inoutr   r9   	TypeErrorr   
startswithSystemError)r6   rr   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|}|	 s&J t j| j| jjdd}t| jt| jd f}z| |tjj|}W td t
yf } zt|ds[ W Y d }~d S d }~ww )Nr   r   r   r   z(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rf   r   num23seqri   rg   rI   r   r9   r   r   
ValueErrorr   r   r   )r6   rr   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	|}|
 s&J d S Nr   r   )rf   r   r   ri   rg   rI   r   r9   r   r   r   r6   rr   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   )ri   r   rf   r   r   rg   rI   r   r9   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}| rJ d S Nr   )r   rI   r   r   r9   r   r   r   r   r   test_c_in_from_23seq  s
   z%TestSharedMemory.test_c_in_from_23seqc                 C   sV   | j  D ]#}tj| j|jd}| t| jt| jd gtj|}|	 r(J qd S r   )
ri   r   rf   r   r   rg   rI   r   r9   r   r   r   r   r   test_in_from_23casttype  s   z(TestSharedMemory.test_in_from_23casttypec                 C   st   | j  D ]2}tj| j|jdd}| t| jt| jd gtj|}|j	| j j	kr1|
 s0J q|
 r7J qd S Nr   r   r   )ri   r   rf   r   r   rg   rI   r   r9   rx   r   r   r   r   r   test_f_in_from_23casttype  s   z*TestSharedMemory.test_f_in_from_23casttypec                 C   st   | j  D ]2}tj| j|jd}| t| jt| jd gtjj	|}|j
| j j
kr1| s0J q| r7J qd S r   )ri   r   rf   r   r   rg   rI   r   r9   r   rx   r   r   r   r   r   test_c_in_from_23casttype  s   z*TestSharedMemory.test_c_in_from_23casttypec                 C   sZ   | j  D ]%}tj| j|jdd}| t| jt| jd gtjj	|}|
 r*J qd S r   )ri   r   rf   r   r   rg   rI   r   r9   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 ]%}tj| j|jd}| t| jt| jd gtjj	j
|}| r*J qd S r   )ri   r   rf   r   r   rg   rI   r   r9   r   r   r   r   r   r   r   test_c_copy_in_from_23casttype  s   z/TestSharedMemory.test_c_copy_in_from_23casttypec                 C   s6  | 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|}| sWJ | |tj	j|}| skJ t|jz| |tj	j|d d d }W td ty } zt|ds W Y d }~qd }~ww d S )Nr   r   r   (failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)ri   r   rx   rf   r   r   rg   rI   r   r9   r   r   r   r   r   r   r   r   )r6   r   rr   r   r   r   r   r   r   test_in_cache_from_2casttype  s8   z-TestSharedMemory.test_in_cache_from_2casttypec                 C   s   | j  D ]A}|j| j jkrqtj| j|jd}t| jf}z| |tj	j
| W td tyF } zt|ds< W Y d }~qd }~ww d S )Nr   r   z1intent(cache) should have failed on smaller array)ri   r   rx   rf   r   r   rg   rI   r   r9   r   r   r   r   r   )r6   r   rr   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s&J d}z|  |tjjd }W t	d tyQ } zt|dsF W Y d }~d S d }~ww )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   r   r   r6   r   r   r   r   r   r   test_cache_hidden  s(   z"TestSharedMemory.test_cache_hiddenc              
   C   s\  d}|  |tjd }|jj|ksJ ||jtj|| jj	ds"J d}|  |tjd }|jj|ks4J ||jtj|| jj	dsDJ |jj
d rP|jj
d rRJ d}|  |tjjd }|jj|kseJ ||jtj|| jj	dsuJ |jj
d s|jj
d sJ d}z|  |tjd }W td ty } zt|ds W Y d }~d S d }~ww )	Nr   r   r   r   r   r   r   z7intent(hide) should have failed on undefined dimensions)r   r   r   r   r   r   rf   zerosri   rg   r   r   r   r   r   r   r   r   r   r   test_hidden  s8      zTestSharedMemory.test_hiddenc                 C   s
  d}|  |tjd }|jj|ksJ ||jtj|| jj	ds"J d}|  |tjd }|jj|ks4J ||jtj|| jj	dsDJ |jj
d rP|jj
d rRJ d}|  |tjjd }|jj|kseJ ||jtj|| jj	dsuJ |jj
d s|jj
d sJ d S )Nr   r   r   r   r   )r   r   r1   r   r   r   rf   r   ri   rg   r   r   )r6   r   r   r   r   r   test_optional_none2  s       z#TestSharedMemory.test_optional_nonec                 C   s@   | j }t|f}| |tj|}|jj|ksJ | rJ d S rH   )r   rI   r   r   r1   r   r   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J | r#J | |tjj|}|jj|ks4J | r:J d S r   )	r   rI   r   r   r1   r   r   r   r   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J |j}| |tj|}|d d |j	d d ks7J t
||j	fd|j	d d< |d d |j	d d   krYt jd| jjdks\J  J |j	|u scJ |jd sjJ |jd rqJ d S Nr   r   r   r   r   6   )rf   r   r   ri   rg   r   r   r   inplacer   r   r   r   r   r   test_inplaceV  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s)J |jd s3|jd s5J |j}| |tj	|}|d d |j
d d ksVJ t||j
fd|j
d d< |d d |j
d d   krxtjd| j jdks{J  J |j
|u sJ |jd sJ |jd rJ |jj | j j u sJ qd S r   )ri   r   rf   r   r   rg   r   r   r   r   r   r   )r6   r   rr   r   r   r   r   r   test_inplace_from_casttypeb  s&   
,$z+TestSharedMemory.test_inplace_from_casttypeN)!rK   rL   rM   r   r   r
   fixturer   r   r   r   mark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   sysr   platformr
   numpyrf   numpy.core.multiarrayr    r   r   r   r   r   r0   r   r   r   intprg   itemsizeclongdoubler   system	processorextendrd   r   r   r   r   r   r   r   <module>   sX    !


">f
