B
    n\u                 @   s   d Z ddlmZmZmZ ddd ZddlmZ ejZddl	m
Z
mZmZmZmZ dd	lmZ dd
lmZ ddlmZ dddZdd ZdS )aM  

Build common block mechanism 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/05/06 10:57:33 $
Pearu Peterson

    )divisionabsolute_importprint_functionz$Revision: 1.19 $
      )__version__)hasbody	hascommonhasnoteisintent_hideoutmess)	capi_maps)	func2subr)	rmbadnamec       
         s   g }t  rJxd d  D ]*\}} fdd|D }||||f qW n(t rrx d D ]}|t|d }q\W |rg }g }x0|D ](}	|	d |kr||	d  ||	 qW |S |S )Ncommonc                s   i | ]} d  | |qS )vars ).0v)blockr   6lib/python3.7/site-packages/numpy/f2py/common_rules.py
<dictcomp>#   s    z$findcommonblocks.<locals>.<dictcomp>Zbodyr   )r
   itemsappendr	   findcommonblocks)
r   topretkeyvalueZvars_bZtretnamestr   )r   r   r      s"    
r   c             C   s  g g dgd}dg}|fdd}dg}|fdd}dg}|fdd	}dg}|fd
d}	xFt | D ]8\}
}}|
 }g g  }}x.|D ]&}t|| r|| q|| qW |rtd|
d|d|f  ntd|
d|f  |d|
  |d x|D ]}|t|| qW |
dkr<|dd|  n|d|
d|f  |dd|  |d |d|
  g }x|D ]}t	|| }tj
| }t||| }|d r|d|d   n
|d |d  }|sd}|d||d ||f  qW |d t|}ddd |D }|d|
|f  |d  x|D ]}|d!|
|f  qLW |d" d#|kr~d$}nd%}|d&|||
 dd'gt| f  |d(|
  |d)|||
 |
f  |d* |d+|
|
|
f  |
d#d,}|	d-|  |	d. xb|D ]Z}|	d/t|||   t|| r|| d0 }t|trZd1|}|	d2|  qW |	d3 |d4 d5|
dtd6d7 ||f  qbW ||d8< ||d9< |d: |d;< t|d4 d<krd|d4< ||d: fS )=Nz"COMMON blocks:\n")commonhooksinitcommonhooksdocs c             S   s   d|d | f |d< d S )Nz%s
      %sr   r   )linesr   r   r   fadd8   s    zbuildhooks.<locals>.faddc             S   s   d|d | f |d< d S )Nz%s
%sr   r   )r'   r(   r   r   r   cadd<   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>.iaddc             S   s   d|d | f |d< d S )Nz%s
%sr   r   )r'   r(   r   r   r   daddD   s    zbuildhooks.<locals>.daddzF		Constructing COMMON block support for "%s"...
		  %s
		  Hidden: %s
,z7		Constructing COMMON block support for "%s"...
		  %s
z subroutine f2pyinit%s(setupfunc)zexternal setupfuncZ_BLNK_z	common %szcommon /%s/ %szcall setupfunc(%s)zend
z'static FortranDataDef f2py_%s_def[] = {Zdimsz(%s)z-1z	{"%s",%s,{{%s}},%s},Zrankz
	{NULL}
};c             S   s   g | ]}d | qS )zchar *r   )r   r(   r   r   r   
<listcomp>n   s    zbuildhooks.<locals>.<listcomp>zstatic void f2py_setup_%s(%s) {z	int i_f2py=0;z!	f2py_%s_def[i_f2py++].data = %s;}_Z	F_FUNC_USF_FUNCz3extern void %s(f2pyinit%s,F2PYINIT%s)(void(*)(%s));zchar*z static void f2py_init_%s(void) {z*	%s(f2pyinit%s,F2PYINIT%s)(f2py_setup_%s);z}
zP	F2PyDict_SetItemString(d, "%s", PyFortranObject_New(f2py_%s_def,f2py_init_%s));z\_z&\subsection{Common block \texttt{%s}}
z\begin{description}z\item[]{{}\verb@%s@{}}note
z--- %sz\end{description}r%   z"	/%s/ %s\n"c             S   s   | | S )Nr   )r   dr   r   r   <lambda>   s    zbuildhooks.<locals>.<lambda>r#   r$   r   Zlatexdocr   )r   lowerr   r   r   joinr   Zvar2fixfortranr   ZgetctypeZ
c2capi_mapZ
getarrdimsstripr   upperlenreplaceZgetarrdocsignr   
isinstancelistmap)mr   Zfwrapr)   Zchooksr*   Zihooksr+   docr,   nameZvnamesr   Z
lower_nameZhnamesZinamesnZidimsZctZatZdmZdmsZinames1Zinames1_tpsr1   Ztnamer2   r   r   r   
buildhooks3   s    













$rC   N)r   )__doc__Z
__future__r   r   r   r   r&   versionZf2py_versionZauxfuncsr	   r
   r   r   r   r   r   Zcrackfortranr   r   rC   r   r   r   r   <module>   s   
