o
    p>em(                     @   s   d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZ dddZdd	 Zdd
dZdddZdd ZdS )aW  

Rules for building C/API module with f2py2e.

Copyright 1999,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: 2004/11/26 11:13:06 $
Pearu Peterson

    N   )getfortranname
isexternal
isfunctionisfunction_wrapisintent_inisintent_outislogicalfunctionismoduleroutineisscalarissubroutineissubroutine_wrapoutmessshow)isoc_kindmapc                 C   s  |d u r|}|| vrt |  td|  dS d| | vr*t | |  td|  dS | | d }|dkrDd| | v rDd|| | d f }i }d}d| | v rW| | d }d	}nd
| | v re| | d
 }d}d|v r|r|d dv rvd| }qd|||d f }q|d dv rd||d f }qd||d f }n*d|v rd||d f }d	|v rd||d	 f }qd| }nd	|v rd||d	 f }d||f }d| | v rd|d| | d f }|S )Nz1var2fixfortran: No definition for argument "%s".
 typespecz/var2fixfortran: No typespec for argument "%s".
typetypenamez%s(%s)kindselectorkindcharselectorlen*)r   :(*)z	%s(len=*)z	%s(%s=%s))r   r   z%s*(%s)z%s*%sz	%s(len=%sz%s,kind=%s)z%s)z%s(kind=%s)z%s %s	dimension,)r   r   join)varsafaf90modeZvardefselectorZlk r$   U/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/numpy/f2py/func2subr.pyvar2fixfortran   sP   

r&   c                 C   s>   d}| d   D ]\}}|di d}|tv r dS q|S )NFr   r   r   T)itemsgetr   )routuseisockeyvalueZ
kind_valuer$   r$   r%   useiso_c_bindingJ   s   r-   c                    sX  t | sJ g  | d }| d D ]=}| d | }t|dg D ],\}}|dkrLd||f }tddgd}d	||f |d
<  | |||< ||d |< q q| d   t }	dg}
|
fdd}| d t| }t| }d }||vr| ||< |g| d dd   }n|g| d  }t	|d|}|d d dkr|rd|dd   }nd|dd   }| d }|dddkrd|d< |
d|}d }t| }d|}|r|
 dd}fdd|D }|| d< |d| d |f  |s|d| d |f  |r|d  n"|d!|f  |r|d  |	s/|d"|  |
ddd# | }|	rN| d$ d%D ]}| d&rLd'|vrL|| q9|dd  }g }|D ]}t|| rl|d"|  || qX|D ]}||v ryqpt|| r|t	|||d( || qp|D ]}||v rqt|| r|t	|||d( || q|D ]}||v rq|t	|||d( q|| |d ur|| |	r|rn|d) || d$   |d* d fd+d|D }|st| r
|d,|||f  n	|d-|||f  |r$|d.| d f  |
d0 S |d/ |
d0 S )1Nr   argsr   r   f2py_%s_d%sintegerhider   intentshape(%s, %s)=r   c                 S      d|d | f |d< d S Nz%s
      %sr   r$   lineretr$   r$   r%   addf      zcreatefuncwrapper.<locals>.addnamez
%sf2pywrapr   z
@@@NAME@@@   zcharacter*(*)zcharacter(len=10)zcharacter*10r   r   r   10, c                    s   g | ]}| kr|qS r$   r$   ).0arg)r=   r$   r%   
<listcomp>       z%createfuncwrapper.<locals>.<listcomp>subroutine f2pywrap_%s_%s (%s)
modulenameuse %s, only : %suse iso_c_bindingsubroutine f2pywrap%s (%s)external %s saved_interface
use __user__r"   	interfaceend interfacec                       g | ]}| vr|qS r$   r$   rA   r    
extra_argsr$   r%   rC      rD   z%s = .not.(.not.%s(%s))z%s = %s(%s)end subroutine f2pywrap_%s_%sendr   )r   	enumerater(   dictappendextendboolr   r
   r&   replacer-   r   splitlstrip
startswithr   r   r   r	   )r)   	signaturer   r    viddndvneed_interfacer:   r;   fortrannamer"   Znewnamer.   Zl_tmplZ
charselectl1Zrlr*   sargsr9   dumped_argsr$   )rV   r=   r%   createfuncwrapperR   s   









rm   c                    s  t | sJ g  | d }| d D ]=}| d | }t|dg D ],\}}|dkrLd||f }tddgd}d	||f |d
<  | |||< ||d |< q q| d   t }	dg}
|
fdd}| d }t| }t| }| d }t	| }d
|}|r|d| d ||f  |r|d |s|d| d |f  n|d||f  |r|d |	s|d|  |	r| d dD ]}| drd|vr|| qg }|D ]}t|| r|d|  || q|D ]}||v rqt|| r|t|||d || q|D ]}||v rq|t|||d q|	rF|r n&|d | d dD ]}| dr<d|v r<q+|| q+|d d
 fdd|D }|s]|d||f  |rn|d | d |f  |
d" S |d! |
d" S )#Nr   r.   r   r   r/   r0   r1   r2   r4   r5   r   c                 S   r6   r7   r$   r8   r$   r$   r%   r;      r<   zcreatesubrwrapper.<locals>.addr=   r@   rE   rF   rH   rG   rI   rJ   rL   rM   rN   rO   rP   rQ   rR   c                    rS   r$   r$   rT   rU   r$   r%   rC     rD   z%createsubrwrapper.<locals>.<listcomp>zcall %s(%s)rW   rX   r   )r   rY   r(   rZ   r[   r\   r]   r   r
   r-   r   r_   r`   ra   r   r   r&   )r)   rb   r   r    rc   rd   re   rf   rg   rh   r:   r;   r=   ri   r"   r.   r*   rk   r9   rl   r$   rU   r%   createsubrwrapper   s   




rn   c                 C   s6  t | rxt| }| d }td||f  t| } |}|}d| v r/| d }| d | | d |< | d | }t|sed|vrAg |d< |d d d}|d D ]}|drYd	} qZqN|re|d d
|  |g| d  | d d d < | t| fS t| rt| }| d }td||f  t| } | t	| fS | dfS )Nr=   z6		Creating wrapper for Fortran function "%s"("%s")...
resultr   r3   outr   zout=r   zout=%sr.   z8		Creating wrapper for Fortran subroutine "%s"("%s")...
r   )
r   r   r   copyr   r[   ra   rm   r   rn   )r)   ri   r=   fnamernameZfvarflagrd   r$   r$   r%   assubr&  sH   


ru   )NN)r   )__doc__rq   Zauxfuncsr   r   r   r   r   r   r	   r
   r   r   r   r   r   Z	_isocbindr   r&   r-   rm   rn   ru   r$   r$   r$   r%   <module>   s   <
0

|X