B
    GŽ0dS&  ã               @   sz   d Z ddd… ZdZddlZddlmZ dd	lmZ dd
lm	Z	m
Z
 ddlT i Zdd„ Zde ¡ j ZdZdZdd„ ZdS )aJ  

Build F90 module support for f2py2e.

Copyright 2000 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@ioc.ee>
Permission to use, modify, and distribute this software is given under the
terms of the NumPy License.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
$Date: 2005/02/03 19:30:23 $
Pearu Peterson

z$Revision: 1.27 $é
   éÿÿÿÿzSee `f2py -v`é    Né   )Ú	capi_maps)Ú	func2subr)Úundo_rmbadnameÚundo_rmbadname1)Ú*c             C   sT   t | ƒr| gS t| ƒsg S g }x0| d D ]$}t |ƒr@| |¡ q(|t|ƒ }q(W |S )NÚbody)ÚismoduleÚhasbodyÚappendÚfindf90modules)ÚmÚretÚb© r   úI/var/www/html/venv/lib/python3.7/site-packages/numpy/f2py/f90mod_rules.pyr   "   s    r   a        external f2pysetdata
      logical ns
      integer r,i
      integer(%d) s(*)
      ns = .FALSE.
      if (allocated(d)) then
         do i=1,r
            if ((size(d,i).ne.s(i)).and.(s(i).ge.0)) then
               ns = .TRUE.
            end if
         end do
         if (ns) then
            deallocate(d)
         end if
      end if
      if ((.not.allocated(d)).and.(s(1).ge.1)) thenz«      end if
      if (allocated(d)) then
         do i=1,r
            s(i) = size(d,i)
         end do
      end if
      flag = 1
      call f2pysetdata(d,allocated(d))zÕ      end if
      if (allocated(d)) then
         do i=1,r
            s(i) = size(d,i)
         end do
         !s(r) must be equal to len(d(1))
      end if
      flag = 2
      call f2pysetdata(d,allocated(d))c       $   
   C   s  ddl m} g g g ddgdddœdgg dœ}d	g}|fd
d„}d	g}|fdd„}x~t| ƒD ]p}g g g g |d gg f\}}	}
}}}g }g }g }t|ƒr¸x|d D ]}| |d ¡ q¢W xJ|d  ¡ D ]:}|d | }||krÆtttƒ|ƒsÆ| |¡ | |¡ qÆW t	d|d  ƒ |r,t	dd 
|¡ ƒ d	g}|fdd„}d	g}|fdd„}t |¡}|d|d  ƒ |d|d  ƒ t|ƒrª|d }t|tƒr¢d 
|¡}||ƒ |r¸|dƒ xl|D ]b}|d | }| |¡ t |¡}tj| }t ||¡}|d  dd¡ ¡ }| dd¡ ¡ }|s*d}t}t|ƒršd |kr|d!|d  kr||d"t|ƒ|d# ||d  d! |f ƒ t}n|d$t|ƒ|d# ||f ƒ n|d$t|ƒ|d# ||f ƒ |d%t ||¡ ƒ t|ƒrþ|d }t|tƒròd 
|¡}|d&| ƒ t|ƒrì|	 d'|d |f ¡ |
 |	d( ¡ | d)| ¡ | d*¡ |d+|d |f ƒ |d,|	d(  ƒ |d-|d t|ƒf ƒ |d.ƒ |d/ t |d/< tdt|d# ƒd ƒ}|d0d1 
d2d3„ |D ƒ¡ ƒ |d/ | |d/< |d4|	d(  ƒ n6|	 |¡ | d5| ¡ | d6¡ |d7|d |f ƒ qÀW |r6|d8ƒ t|ƒræx¢|d D ]”}t|ƒs~t	d9|d: › d|d › dƒ qL| d;|d  ¡ |d |d<< | |¡\}} t |ƒrô|d/ |  |d/< |	 d=|d |d f ¡ | t!j"|dd>¡ nb| r:|d/ |  |d/< |	 d=|d |d f ¡ | t!j#|dd>¡ n|	 |d ¡ | |	d( ¡ g |d?< t$||ƒ}!g |!d@< g |!dA< t%||!ƒ}|dB|d |d |d |d |d f ƒ | d5|d  ¡ | dC¡ |d7|d |d f ƒ qLW |dDƒ |dEƒ dF|d d1 
|¡|d/ f |d/< dG|d kr*dH}"nd}"|dI|"|d |d  &¡ d1 
|¡f ƒ |dJ|d  ƒ |dK|"|d |d  &¡ |d f ƒ |dLƒ |dM | | |dM< dN|d |d |d f g|dO  |dO< |d	ƒ |dP|d  ƒ |rx&t'|ƒD ]}#|dQ|d |#f ƒ qôW |r4|d 
dRg| ¡ƒ |dSƒ |dTƒ |
rbxt'|
ƒD ]}#|dU|# ƒ qLW |dVd1 
t'|	ƒ¡ ƒ |dW|d  ƒ |d 
|dX ¡ dYdZ¡ƒ g |dX< |d@  d[|d d1 
t'|ƒ¡f ¡ q\W d	|d\< g |d]< g |dA< |d/ |dX< t(|d@ ƒdkrd	|d@< ||d/ fS )^Nr   )ÚrulesÚF_FUNCzarrayobject.hÚ
)Z	includes0Zincludesz"Fortran 90/95 modules:\n")Úf90modhooksÚinitf90modhooksr
   ZneedZseparatorsforÚdocsÚlatexdocÚ c             S   s   d|d | f |d< d S )Nz%s
      %sr   r   )ÚlineÚsr   r   r   Úfadd`   s    zbuildhooks.<locals>.faddc             S   s   d|d | f |d< d S )Nz%s
%sr   r   )r   r   r   r   r   Údaddd   s    zbuildhooks.<locals>.daddÚnamer
   Úvarsz.		Constructing F90 module support for "%s"...
z		  Variables: %s
ú c             S   s   d|d | f |d< d S )Nz%s
%sr   r   )r   r   r   r   r   Úcaddz   s    zbuildhooks.<locals>.caddc             S   s   d|d | f |d< d S )Nz%s
%sr   r   )r   r   r   r   r   Úiadd~   s    zbuildhooks.<locals>.iaddz'static FortranDataDef f2py_%s_def[] = {z.\subsection{Fortran 90/95 module \texttt{%s}}
Únotez\begin{description}Zdimsr	   z-1ú:ZcharselectorÚlenz	{"%s",%s,{{%s,%s}},%s},Zrankz	{"%s",%s,{{%s}},%s},z\item[]{{}\verb@%s@{}}z--- %szf2py_%s_getdims_%sr   z.void (*%s)(int*,int*,void(*)(char*,int*),int*)z,void (*)(int*,int*,void(*)(char*,int*),int*)z!	f2py_%s_def[i_f2py++].func = %s;z#subroutine %s(r,s,f2pysetdata,flag)zuse %s, only: d => %s
zinteger flag
r   z allocate(d(%s))
ú,c             S   s   g | ]}d | ‘qS )zs(%s)r   )Ú.0Úir   r   r   ú
<listcomp>¶   s    zbuildhooks.<locals>.<listcomp>zend subroutine %szchar *%szchar*z!	f2py_%s_def[i_f2py++].data = %s;z\end{description}z"f90mod_rules.buildhooks: skipping Úblockz%s()Ú
modulenamezf2pywrap_%s_%s)Ú	signatureZexternroutinesr   Zdocshortz_	{"%s",-1,{{-1}},0,NULL,(void *)f2py_rout_#modulename#_%s_%s,doc_f2py_rout_#modulename#_%s_%s},zchar *z	{NULL}
};
Ú}z0static void f2py_setup_%s(%s) {
	int i_f2py=0;%sÚ_Z	F_FUNC_USz4extern void %s(f2pyinit%s,F2PYINIT%s)(void (*)(%s));z static void f2py_init_%s(void) {z*	%s(f2pyinit%s,F2PYINIT%s)(f2py_setup_%s);z}
r   zN	PyDict_SetItemString(d, "%s", PyFortranObject_New(f2py_%s_def,f2py_init_%s));r   z$subroutine f2pyinit%s(f2pysetupfunc)zuse %s, only : %sZ	interfacezend interfacezexternal f2pysetupfunczexternal %szcall f2pysetupfunc(%s)zend subroutine f2pyinit%s
r   z\subsection{z\subsubsection{z"	%s --- %s"Zroutine_defsÚdoc))r   r   r   r   r   ÚkeysZl_orZisintent_hideZ	isprivateZoutmessÚjoinr   Zmodsign2mapZhasnoteÚ
isinstanceÚlistZgetctypeZ
c2capi_mapZ
getarrdimsÚreplaceÚstripÚ	fgetdims2Zisstringarrayr   Úfgetdims2_saZgetarrdocsignZisallocatableÚ	fgetdims1ÚrangeÚintÚ	isroutineZbuildapiÚ
isfunctionr   ZcreatefuncwrapperZcreatesubrwrapperZ
applyrulesZ
dictappendÚupperr   r'   )$Zpymodr   r   Zfhooksr   r1   r   r   ZsargsZfargsZefargsZmodobjsZnotvarsZonlyvarsZsargspZifargsZmfargsr   ÚnÚvarZchooksr#   Zihooksr$   Zvrdr%   ÚctÚatÚdmZdmsZuse_fgetdims2ÚapiÚwrapÚarr   Úar   r   r   Ú
buildhooksW   sH   







"











&
" &
rI   )Ú__doc__Ú__version__Zf2py_versionÚnumpyÚnpr   r   r   Zcrackfortranr   r   ZauxfuncsÚoptionsr   ZintpÚitemsizer:   r8   r9   rI   r   r   r   r   Ú<module>   s   
