a
    hÝEbS&  ã                   @   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   úW/home/ja/django-apps/lartica_env/lib/python3.9/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 �]T}g g g g |d gg f\}}	}
}}}g }g }g }t|ƒr°|d D ]}| |d ¡ qœ|d  ¡ D ]:}|d | }||v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 �]b}|d | }| |¡ t |¡}tj| }t ||¡}|d  dd¡ ¡ }| dd¡ ¡ }|�sd}t}t|ƒ�rŠd |v �rld!|d  v �rl|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°|�r$|d8ƒ t|ƒ�rÎ|d D �]”}t|ƒ�sht	d9|d: › d|d › d�ƒ �q6| 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 ƒ �q6|dDƒ |dEƒ dF|d d1 
|¡|d/ f |d/< dG|d v �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öt'|ƒD ]}#|dQ|d |#f ƒ �qÚ|�r|d 
dRg| ¡ƒ |dSƒ |dTƒ |
�rBt'|
ƒD ]}#|dU|# ƒ �q.|dVd1 
t'|	ƒ¡ ƒ |dW|d  ƒ |d 
|dX ¡ dYdZ¡ƒ g |dX< |d@  d[|d d1 
t'|ƒ¡f ¡ qXd	|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   Ú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}Ú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>¶   ó    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   r5   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   s~   üÿÿ
ÿ







ÿÿÿ
ÿ


ÿ
ÿÿ



ÿÿ

ÿ

 ÿ
ÿ
ÿ
ÿÿÿÿÿÿ
rM   )Ú__doc__Ú__version__Zf2py_versionÚnumpyÚnpr   r   r   Zcrackfortranr   r   ZauxfuncsÚoptionsr   ZintpÚitemsizer>   r<   r=   rM   r   r   r   r   Ú<module>   s   ð
