U
    ¸mœdÜ$  ã                   @   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   sP   t | ƒr| gS t| ƒsg S g }| d D ]$}t |ƒr>| |¡ q&|t|ƒ }q&|S )NÚbody)ÚismoduleÚhasbodyÚappendÚfindf90modules)ÚmÚretÚb© r   úP/home/sam/Atlas/atlas_env/lib/python3.8/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„}t| ƒD �]ð}g g g g |d gg f\}}	}
}}}g }g }g }t|ƒr°|d D ]}| |d ¡ qœ|d  ¡ D ]:}|d | }||kr¼tttƒ|ƒs¼| |¡ | |¡ q¼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ƒ |D �]þ}|d | }| |¡ t |¡}tj| }t ||¡}|d  dd¡ ¡ }| dd¡ ¡ }|�sd}t}|d t|ƒ|d! ||t |¡f ƒ |d"t ||¡ ƒ t|ƒ�rŠ|d }t|tƒ�r~d 
|¡}|d#| ƒ t|ƒ�rx|	 d$|d |f ¡ |
 |	d% ¡ | d&| ¡ | d'¡ |d(|d |f ƒ |d)|	d%  ƒ |d*|d t|ƒf ƒ |d+ƒ |d, t |d,< tdt|d! ƒd ƒ}|d-d. 
d/d0„ |D ƒ¡ ƒ |d, | |d,< |d1|	d%  ƒ n6|	 |¡ | d2| ¡ | d3¡ |d4|d |f ƒ �q°|�rÀ|d5ƒ t|ƒ�rj|d D �]”}t|ƒ�st	d6|d7 › d|d › d�ƒ �qÒ| d8|d  ¡ |d |d9< | |¡\}} t|ƒ�rz|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 |!d>< t$||!ƒ}|d?|d |d |d |d |d f ƒ | d2|d  ¡ | d@¡ |d4|d |d f ƒ �qÒ|dAƒ |dBƒ dC|d d. 
|¡|d, f |d,< dD|d k�r®dE}"nd}"|dF|"|d |d  %¡ d. 
|¡f ƒ |dG|d  ƒ |dH|"|d |d  %¡ |d f ƒ |dIƒ |dJ | | |dJ< dK|d |d |d f g|dL  |dL< |d	ƒ |dM|d  ƒ |�r’t&|ƒD ]}#|dN|d |#f ƒ �qv|�r´|d 
dOg| ¡ƒ |dPƒ |dQƒ |
�rÞt&|
ƒD ]}#|dR|# ƒ �qÊ|dSd. 
t&|	ƒ¡ ƒ |dT|d  ƒ |d 
|dU ¡ dVdW¡ƒ g |dU< |d=  dX|d d. 
t&|ƒ¡f ¡ qXd	|dY< g |dZ< g |d>< |d, |dU< 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   Ú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 r    r   r   r   r   r   Úcaddz   s    zbuildhooks.<locals>.caddc                 S   s   d|d | f |d< d S 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	{"%s",%s,{{%s}},%s, %s},Zrankz\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docshortza	{"%s",-1,{{-1}},0,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Ú	fgetdims2r   Z
get_elsizeZgetarrdocsignZisallocatableÚ	fgetdims1ÚrangeÚintÚ	isroutineZbuildapiÚ
isfunctionr   ZcreatefuncwrapperZcreatesubrwrapperZ
applyrulesZ
dictappendÚupperr   Úlen)$Zpymodr   r   Zfhooksr   r2   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   sr   üÿÿ
ÿ






ÿÿ
ÿ


ÿ
ÿÿ




ÿ

 ý
ÿ
  ÿ
ÿÿ  ÿÿ ÿÿ
rJ   )Ú__doc__Ú__version__Zf2py_versionÚnumpyÚnpr   r   r   Zcrackfortranr   r   ZauxfuncsÚoptionsr   ZintpÚitemsizer:   r9   Zfgetdims2_sarJ   r   r   r   r   Ú<module>   s   ð
