
    ~Od                     r    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Z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                     g }t                     rG d                                         D ]+\  }} fd|D             }|                    |||f           ,n-t                     r d         D ]}|t	          |d          z   }|rEg }g }|D ]<}	|	d         |vr0|                    |	d                    |                    |	           =|S |S )Ncommonc                 .    i | ]}|d          |         S )vars ).0vblocks     7lib/python3.11/site-packages/numpy/f2py/common_rules.py
<dictcomp>z$findcommonblocks.<locals>.<dictcomp>   s$    888QQfa(888    body    )r   itemsappendr   findcommonblocks)
r   topretkeyvaluevars_btretnamests
   `         r   r   r      s   
C ////11 	, 	,JC8888%888EJJUE*++++	, 
 /v 	/ 	/A(A...CC
  	 	At5  QqT"""AJr   c                 p
   g g dgd}dg}|fd}dg}|fd}dg}|fd}dg}|fd}	t          |           D ]\  }
}}|
                                }g g }}|D ]B}t          ||                   r|                    |           -|                    |           C|r@t	          d|
d	d
                    |          dd
                    |          d           n)t	          d|
d	d
                    |          d            |d|
z              |d           |D ] } |t          j        ||                     !|
dk    r" |dd
                    |          z             n$ |d|
dd
                    |                      |dd
                    |          z              |d            |d|
z             g }|D ]}t          j	        ||                   }t          j
        ||                   }t          j        |         }t          j        |||                   }|d         r|                    d|d         z             n|                    d           |d                                         }|sd} |d|d|d         d|d|d|d            |d            t          |          }d
                    d! |D                       } |d"|
d#|d$            |d%           |D ]} |d&|
d'|d(            |d)           d*|v rd+}nd,} |d-|d.|d/|
                                d0d
                    d1gt!          |          z            d2	            |d3|
z              |d4|d.|d/|
                                d5|
d6	            |d7            |d8|
d9|
d6            |d:            |d;|
z              |d<           |
                    d*d=          } |	d>|z              |	d?           |D ]} |	d@t          j        |||                   z             t'          ||                   rF||         dA         }t)          |t*                    rd                    |          } |	dB|z              |	dC           |dD                             dE|
dd
                    t-          dF ||                    dG           ||dH<   ||dI<   |dJ         |dK<   t!          |dD                   dLk    rd|dD<   ||dJ         fS )MNz"COMMON blocks:\n")commonhooksinitcommonhooksdocs c                 &    |d         d| |d<   d S )Nr   z
      r   liness     r   faddzbuildhooks.<locals>.fadd4   s    !"1tt,!r   c                 &    |d         d| |d<   d S Nr   
r   r+   s     r   caddzbuildhooks.<locals>.cadd8       Q444&!r   c                 &    |d         d| |d<   d S r0   r   r+   s     r   iaddzbuildhooks.<locals>.iadd<   r3   r   c                 &    |d         d| |d<   d S r0   r   r+   s     r   daddzbuildhooks.<locals>.dadd@   r3   r   z)		Constructing COMMON block support for "z	"...
		  ,z
		  Hidden: r1   z subroutine f2pyinit%s(setupfunc)zexternal setupfunc_BLNK_z	common %szcommon /z/ zcall setupfunc(%s)zend
z'static FortranDataDef f2py_%s_def[] = {dimsz(%s)z-1z	{"z",rankz,{{z}},z, z},z
	{NULL}
};c                     g | ]}d |z   S )zchar *r   )r   r-   s     r   
<listcomp>zbuildhooks.<locals>.<listcomp>l   s    >>>1>>>r   zstatic void f2py_setup_(z) {z	int i_f2py=0;z	f2py_z_def[i_f2py++].data = ;}_	F_FUNC_USF_FUNCzextern void z	(f2pyinitz	,F2PYINITz
)(void(*)(zchar*z));z static void f2py_init_%s(void) {	z)(f2py_setup_z);z}
z 	tmp = PyFortranObject_New(f2py_z_def,f2py_init_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@{}}notez--- %sz\end{description}r(   z"	/c                     | |z   S )Nr   )r   ds     r   <lambda>zbuildhooks.<locals>.<lambda>   s
    A r   z\n"r&   r'   r   latexdocr   )r   lowerr   r   r   joinr
   var2fixfortranr	   getctype
get_elsize
c2capi_map
getarrdimsstripr   upperlenreplacegetarrdocsignr   
isinstancelistmap)mr   fwrapr.   chooksr2   ihooksr5   docr7   namevnamesr   
lower_namehnamesinamesnidimsctelsizeatdmdmsinames1inames1_tpsrC   tnamerE   s                               r   
buildhooksrm   /   s   )*, ,CDE - - - -TF ' ' ' 'TF ' ' ' '$C ' ' ' ' 0 3 3 MY MYvtZZ\\
R 	! 	!AT!W%% !a    a     	)Gchhv&&&&(8(8(8(8: ; ; ; ; Gchhv&&&&( ) ) )/$6777!""" 	4 	4AD)$2233338D 0 012222DDTTT388F+;+;+;<===!SXXf%5%56777W6$?@@@ 	5 	5A#DG,,B)$q'22F%b)B%aa11B&z !Vr&z23333R   V*""$$C DDAAr&zzz333FFF4 5 5 5 5^F##hh>>g>>>??$$$DEEE 	C 	CADDqqqABBBBS			* FFF


DJJLLLL'S\\122224 	5 	5 	5 	/$6777


DJJLLLL$$$8 	9 	9 	9UtttTUUU.///O 	 	 	 !!!S%((8EBCCC#$$$ 	( 	(AD+)!T!W557 8 8 8tAw (AwvdD)) +99T??DX&'''!"""F $chhs3E3Evu/U/U&V&V&V&VW	Y 	Y 	Y 	YC#C!fC
O
3v;1Fa=r   N)r   )__doc__r)   r   versionf2py_versionauxfuncsr   r   r   r   r   r	   r
   crackfortranr   r   rm   r   r   r   <module>rs      s          "                          # # # # # #   (f f f f fr   