U
    ¸mœdá  ã                   @   sl   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

é   )Ú__version__)ÚhasbodyÚ	hascommonÚhasnoteÚisintent_hideÚoutmess)Ú	capi_maps)Ú	func2subr)Ú	rmbadnamec           
         s¬   g }t ˆ ƒrFˆ d  ¡ D ]*\}}‡ fdd„|D ƒ}| |||f¡ qn$tˆ ƒrjˆ d D ]}|t|dƒ }qV|r¨g }g }|D ](}	|	d |krz| |	d ¡ | |	¡ qz|S |S )NÚcommonc                    s   i | ]}|ˆ d  | “qS )Úvars© )Ú.0Úv©Úblockr   úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/f2py/common_rules.pyÚ
<dictcomp>   s      z$findcommonblocks.<locals>.<dictcomp>Úbodyé    )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„}	t | ƒD �]L\}
}}|
 ¡ }g g  }}|D ]&}t|| ƒrœ| |¡ q€| |¡ q€|rÌtd|
d |¡d |¡f ƒ ntd|
d |¡f ƒ |d|
 ƒ |dƒ |D ]}|t ||¡ƒ qú|
dk�r.|dd |¡ ƒ n|d|
d |¡f ƒ |dd |¡ ƒ |dƒ |d|
 ƒ g }|D ]”}t 	|| ¡}t 
|| ¡}tj| }t ||| ¡}|d �rÊ| d|d  ¡ n
| d¡ |d  ¡ }|�sêd}|d||d |||f ƒ �qr|dƒ t|ƒ}d dd„ |D ƒ¡}|d|
|f ƒ |d ƒ |D ]}|d!|
|f ƒ �qH|d"ƒ d#|k�rxd$}nd%}|d&|||
 ¡ d d'gt|ƒ ¡f ƒ |d(|
 ƒ |d)|||
 ¡ |
f ƒ |d*ƒ |d+|
|
f ƒ |d,ƒ |d-|
 ƒ |d.ƒ |
 d#d/¡}|	d0| ƒ |	d1ƒ |D ]Z}|	d2t ||| ¡ ƒ t|| ƒ�r || d3 }t|tƒ�rld4 |¡}|	d5| ƒ �q |	d6ƒ |d7  d8|
d td9d:„ ||ƒ¡f ¡ q^||d;< ||d<< |d= |d>< t|d7 ƒd?k�räd|d7< ||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   Úfadd4   s    zbuildhooks.<locals>.faddc                 S   s   d|d | f |d< d S ©Nz%s
%sr   r   r$   r   r   r   Úcadd8   s    zbuildhooks.<locals>.caddc                 S   s   d|d | f |d< d S r(   r   r$   r   r   r   Úiadd<   s    zbuildhooks.<locals>.iaddc                 S   s   d|d | f |d< d S r(   r   r$   r   r   r   Údadd@   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, %s},Zrankz
	{NULL}
};c                 S   s   g | ]}d | ‘qS )zchar *r   )r   r&   r   r   r   Ú
<listcomp>l   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}
z5	tmp = PyFortranObject_New(f2py_%s_def,f2py_init_%s);z	if (tmp == NULL) return NULL;z=	if (F2PyDict_SetItemString(d, "%s", tmp) == -1) return NULL;z	Py_DECREF(tmp);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>�   ó    zbuildhooks.<locals>.<lambda>r    r!   r   Zlatexdocr   )r   Úlowerr   r   r   Újoinr	   Zvar2fixfortranr   ZgetctypeZ
get_elsizeZ
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idimsÚctZelsizeÚatÚdmZdmsZinames1Zinames1_tpsr0   Ztnamer1   r   r   r   Ú
buildhooks/   sÌ    ÿ
  ÿ
 ÿ



ÿ


ÿÿÿÿÿ
ÿrF   N)r   )Ú__doc__r#   r   ÚversionZf2py_versionZauxfuncsr   r   r   r   r   r   r	   Zcrackfortranr
   r   rF   r   r   r   r   Ú<module>   s   
