o
    gHd$                     @   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   ^/var/www/html/facialservice/flask-venv/lib/python3.10/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 ]q}g g g g |d gg f\}}	}
}}}g }g }g }t|rX|d D ]	}||d  qN|d  D ]}|d | }||vr{ttt|s{|| || q^t	d|d   |rt	dd
|  d	g}|fdd}d	g}|fdd}t|}|d|d   |d|d   t|r|d }t|trd
|}|| |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|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 }|d-d.
d/d0 |D   |d, | |d,< |d1|	d%   q|	| |d2|  |d3 |d4|d |f  q|r|d5 t|r|d D ]}t|st	d6|d7  d|d  d q|d8|d   |d |d9< ||\}} t|r6|d, |  |d,< |	d:|d |d f  |t j!|dd; n1| rY|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 v rdE}"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   |rBt&|D ]}#|dN|d |#f  q4|rS|d
dOg|  |dP |dQ |
rht&|
D ]	}#|dR|#  q^|dSd.
t&|	  |dT|d   |d
|dU dVdW g |dU< |d= dX|d d.
t&|f  q,d	|dY< g |dZ< g |d>< |d, |dU< t'|d= dkrd	|d=< ||d, fS )[Nr   )rulesF_FUNCzarrayobject.h
)	includes0includesz"Fortran 90/95 modules:\n")f90modhooksinitf90modhooksr
   needseparatorsfordocslatexdoc c                 S      d|d | f |d< d S )Nz%s
      %sr   r   linesr   r   r   fadd`      zbuildhooks.<locals>.faddc                 S   r    Nz%s
%sr   r   r!   r   r   r   daddd   r%   zbuildhooks.<locals>.daddnamer
   varsz.		Constructing F90 module support for "%s"...
z		  Variables: %s
 c                 S   r    r&   r   r!   r   r   r   caddz   r%   zbuildhooks.<locals>.caddc                 S   r    r&   r   r!   r   r   r   iadd~   r%   zbuildhooks.<locals>.iaddz'static FortranDataDef f2py_%s_def[] = {z.\subsection{Fortran 90/95 module \texttt{%s}}
notez\begin{description}dimsr	   z-1:z	{"%s",%s,{{%s}},%s, %s},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)	signatureexternroutinesr   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_	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 : %s	interfacezend interfacezexternal f2pysetupfunczexternal %szcall f2pysetupfunc(%s)zend subroutine f2pyinit%s
r   z\subsection{z\subsubsection{z"	%s --- %s"routine_defsdoc)(r   r   r   r   r   keysl_orisintent_hide	isprivateoutmessjoinr   modsign2maphasnote
isinstancelistgetctype
c2capi_map
getarrdimsreplacestrip	fgetdims2r   
get_elsizegetarrdocsignisallocatable	fgetdims1rangeint	isroutinebuildapi
isfunctionr   createfuncwrappercreatesubrwrapper
applyrules
dictappendupperr   len)$pymodr   r   fhooksr$   r?   r'   r   sargsfargsefargsmodobjsnotvarsonlyvarssargspifargsmfargsr   nvarchooksr+   ihooksr,   vrdr-   ctatdmdmsuse_fgetdims2apiwraparr   ar   r   r   
buildhooksW   sr  




















 



rx   )__doc____version__f2py_versionnumpynpr   r   r   crackfortranr   r   auxfuncsoptionsr   intpitemsizerS   rO   fgetdims2_sarx   r   r   r   r   <module>   s    
