o
    Ô­j«g  ã                   @   s|  d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddl	mZ g d¢Ze
jZejjZejZi Zg ZdZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#d%d&„ Z$d'd(„ Z%d)d*„ Z&d+d,„ Z'd-d.„ Z(d/d0„ Z)d1d2„ Z*d3d4„ Z+d5d6„ Z,d7d8„ Z-d9d:„ Z.d;d<„ Z/d=d>„ Z0d?d@„ Z1dAdB„ Z2dCdD„ Z3dEdF„ Z4dGdH„ Z5dIdJ„ Z6dKdL„ Z7dMdN„ Z8dOdP„ Z9dQdR„ Z:dSdT„ Z;dUdV„ Z<dWdX„ Z=dYdZ„ Z>d[d\„ Z?d]d^„ Z@d_d`„ ZAdadb„ ZBdcdd„ ZCdedf„ ZDdgdh„ ZEdidj„ ZFdkdl„ ZGdmdn„ ZHdodp„ ZIdqdr„ ZJdsdt„ ZKdudv„ ZLdwdx„ ZMdydz„ ZNd{d|„ ZOd}d~„ ZPdd€„ ZQd�d‚„ ZRdƒd„„ ZSd…d†„ ZTd‡dˆ„ ZUd‰dŠ„ ZVd‹dŒ„ ZWd�dŽ„ ZXd�d�„ ZYd‘d’„ ZZd“d”„ Z[d•d–„ Z\d—d˜„ Z]d™dš„ Z^d›dœ„ Z_d�dž„ Z`dŸd „ Zad¡d¢„ ZbeTd£eUd¤eVd¥eWd¦eZd§eYd¨ePd©e^dªe`d«ead¬ebd­iZcd®d¯„ Zdd°d±„ Zed²d³„ Zfd´dµ„ Zgd¶d·„ Zhd¸d¹„ Zidºd»„ Zjd¼d½„ Zkd¾d¿„ ZldÀdÁ„ ZmdÂdÃ„ ZndÄdÅ„ ZoG dÆdÇ„ dÇepƒZqG dÈdÉ„ dÉƒZrdÊdË„ ZsdÌdÍ„ ZtdÎdÏ„ ZudÐdÑ„ ZvdÒdÓ„ ZwdüdÔdÕ„ZxdÖd×„ Zyi fdØdÙ„ZzdÚdÛ„ Z{dÜdÝ„ Z|dÞdß„ Z}dàdá„ Z~dâdã„ Zdädå„ Z€dædç„ Z�dèdé„ Z‚dêdë„ Zƒdýdídî„Z„dïdð„ Z…i fdñdò„Z†e ‡dóejˆ¡j‰ZŠe ‡dôejˆ¡j‰Z‹dõdö„ ZŒd÷dø„ Z�dþdúdû„ZŽdS )ÿa9  
Auxiliary functions for f2py2e.

Copyright 1999 -- 2011 Pearu Peterson all rights reserved.
Copyright 2011 -- present NumPy Developers.
Permission to use, modify, and distribute this software is given under the
terms of the NumPy (BSD style) LICENSE.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
é    N)Úreduce)Údeepcopyé   )Ú__version__)Úcfuncs)\Ú
applyrulesÚ	debugcapiÚ
dictappendÚerrmessÚgentitleÚgetargs2ÚgetcallprotoargumentÚgetcallstatementÚgetfortrannameÚgetpymethoddefÚ
getrestdocÚgetusercodeÚgetusercode1ÚgetdimensionÚhasbodyÚhascallstatementÚ	hascommonÚhasexternalsÚhasinitvalueÚhasnoteÚhasresultnoteÚisallocatableÚisarrayÚisarrayofstringsÚischaracterÚischaracterarrayÚischaracter_or_characterarrayÚ	iscomplexÚiscomplexarrayÚiscomplexfunctionÚiscomplexfunction_warnÚisdoubleÚisdummyroutineÚ
isexternalÚ
isfunctionÚisfunction_wrapÚisint1Úisint1arrayÚ	isintegerÚisintent_auxÚ
isintent_cÚisintent_callbackÚisintent_copyÚisintent_dictÚisintent_hideÚisintent_inÚisintent_inoutÚisintent_inplaceÚisintent_nothideÚisintent_outÚisintent_overwriteÚ	islogicalÚislogicalfunctionÚislong_complexÚislong_doubleÚislong_doublefunctionÚislong_longÚislong_longfunctionÚismoduleÚismoduleroutineÚ
isoptionalÚ	isprivateÚ
isrequiredÚ	isroutineÚisscalarÚissigned_long_longarrayÚisstringÚisstringarrayÚisstring_or_stringarrayÚisstringfunctionÚissubroutineÚget_f2py_modulenameÚissubroutine_wrapÚisthreadsafeÚ
isunsignedÚisunsigned_charÚisunsigned_chararrayÚisunsigned_long_longÚisunsigned_long_longarrayÚisunsigned_shortÚisunsigned_shortarrayÚl_andÚl_notÚl_orÚoutmessÚreplaceÚshowÚ
stripcommaÚthrow_errorÚisattr_valueÚgetuseblocksÚprocess_f2cmap_dictc                 C   s    t  dd¡rtj | ¡ d S d S )NÚverboser   )ÚoptionsÚgetÚsysÚstdoutÚwrite)Út© rj   úP/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/f2py/auxfuncs.pyr[   >   s   ÿr[   c                 C   s   dt v S )NÚcapi)Údebugoptions©Úvarrj   rj   rk   r   C   ó   r   c                 C   ó   d| v o| d dkot | ƒ S ©NÚtypespecÚ	character©r(   rn   rj   rj   rk   Ú_ischaracterG   ó   ÿrv   c                 C   rq   rr   ru   rn   rj   rj   rk   Ú	_isstringL   rw   rx   c                 C   s   t | ƒod| vS ©NÚcharselector©rv   rn   rj   rj   rk   r!   Q   ó   r!   c                 C   ó   t | ƒot| ƒ S ©N©r!   r   rn   rj   rj   rk   r   U   ó   r   c                 C   ó   t | ƒot| ƒS r~   r   rn   rj   rj   rk   r    Y   r|   r    c                 C   s   t | ƒod| v S ry   r{   rn   rj   rj   rk   rK   ]   r|   rK   c                 C   r}   r~   ©rK   r   rn   rj   rj   rk   rI   a   r€   rI   c                 C   r�   r~   r‚   rn   rj   rj   rk   rJ   e   r|   rJ   c                 C   s   t | ƒo| d d dkS )NÚ	dimensionéÿÿÿÿz(*))rJ   rn   rj   rj   rk   r   i   s   r   c                 C   s   d| v ot | ƒ S ©Nrƒ   ru   rn   rj   rj   rk   r   o   r€   r   c                 C   s   t | ƒpt| ƒpt| ƒ S r~   )r   rI   r(   rn   rj   rj   rk   rG   s   s   rG   c                 C   ó   t | ƒo
|  d¡dv S ©Nrs   )Úcomplexzdouble complex©rG   re   rn   rj   rj   rk   r"   w   ó   ÿr"   c                 C   ó   t | ƒo
|  d¡dkS )Nrs   Úlogicalr‰   rn   rj   rj   rk   r:   |   ó   r:   c                 C   r‹   )Nrs   Úintegerr‰   rn   rj   rj   rk   r-   €   r�   r-   c                 C   r‹   )Nrs   Úrealr‰   rn   rj   rj   rk   Úisreal„   r�   r�   c                 C   sH   z| d d W S  t y#   z	| d d W  Y S  t y"   Y Y d S w w )NÚkindselectorÚ*Úkind©ÚKeyErrorrn   rj   rj   rk   Úget_kindˆ   s   ÿýr–   c                 C   s$   |   d¡dkot| ƒdkot| ƒ S ©Nrs   rŽ   Ú1)re   r–   r   rn   rj   rj   rk   r+   ’   s
   
ÿÿr+   c                 C   s*   t | ƒsdS |  d¡dvrdS t| ƒdkS )Nr   rs   ©rŽ   rŒ   Ú8©rG   re   r–   rn   rj   rj   rk   r?   —   ó
   r?   c                 C   ó*   t | ƒsdS |  d¡dkrdS t| ƒdkS )Nr   rs   rŽ   ú-1r›   rn   rj   rj   rk   rR   Ÿ   rœ   rR   c                 C   r�   )Nr   rs   rŽ   ú-2r›   rn   rj   rj   rk   rV   §   rœ   rV   c                 C   r�   )Nr   rs   rŽ   ú-4r›   rn   rj   rj   rk   rQ   ¯   rœ   rQ   c                 C   r�   )Nr   rs   rŽ   ú-8r›   rn   rj   rj   rk   rT   ·   rœ   rT   c                 C   ó*   t | ƒsdS |  d¡dksdS t| ƒdkS )Nr   rs   r�   rš   r›   rn   rj   rj   rk   r&   ¿   rœ   r&   c                 C   r¢   )Nr   rs   r�   Ú16r›   rn   rj   rj   rk   r=   Ç   rœ   r=   c                 C   s   t | ƒsdS t| ƒdkS )Nr   Ú32)r"   r–   rn   rj   rj   rk   r<   Ï   s   r<   c                 C   r†   r‡   )r   re   rn   rj   rj   rk   r#   Õ   rŠ   r#   c                 C   s"   t | ƒo|  d¡dkot| ƒdkS r—   ©r   re   r–   rn   rj   rj   rk   r,   Ú   ó   
ÿr,   c                 C   ó"   t | ƒo|  d¡dv ot| ƒdkS )Nrs   r™   rž   r¥   rn   rj   rj   rk   rS   ß   r¦   rS   c                 C   r§   )Nrs   r™   rŸ   r¥   rn   rj   rj   rk   rW   ä   r¦   rW   c                 C   r§   )Nrs   r™   r    r¥   rn   rj   rj   rk   Úisunsignedarrayé   r¦   r¨   c                 C   r§   )Nrs   r™   r¡   r¥   rn   rj   rj   rk   rU   î   r¦   rU   c                 C   r§   )Nrs   r™   r˜   r¥   rn   rj   rj   rk   Úissigned_chararrayó   r¦   r©   c                 C   r§   )Nrs   r™   Ú2r¥   rn   rj   rj   rk   Úissigned_shortarrayø   r¦   r«   c                 C   r§   )Nrs   r™   Ú4r¥   rn   rj   rj   rk   Úissigned_arrayý   r¦   r­   c                 C   r§   )Nrs   r™   rš   r¥   rn   rj   rj   rk   rH     r¦   rH   c                 C   ó   d| v o	d| d v S )NÚattrspecÚallocatablerj   rn   rj   rj   rk   r     ó   r   c                 C   s   d| vpt | ƒ S r…   )rI   rn   rj   rj   rk   Ú	ismutable  r€   r²   c                 C   ó   d| v S )NÚ
modulenamerj   ©Úroutrj   rj   rk   rB     rp   rB   c                 C   ó   d| v o	d| d kS )NÚblockÚmodulerj   rµ   rj   rj   rk   rA     r±   rA   c                 C   r·   )Nr¸   Úfunctionrj   rµ   rj   rj   rk   r)     r±   r)   c                 C   s"   t | ƒrdS tot| ƒot| ƒ S ©Nr   )r/   Ú	wrapfuncsr)   r(   rµ   rj   rj   rk   r*     s   r*   c                 C   r·   )Nr¸   Ú
subroutinerj   rµ   rj   rj   rk   rM   !  r±   rM   c                 C   s   t | ƒrdS t| ƒot| ƒS r»   )r/   rM   Úhasassumedshaperµ   rj   rj   rk   rO   %  ó   rO   c                 C   ó   d|   dg ¡v S )NÚvaluer¯   ©re   rn   rj   rj   rk   r`   *  r|   r`   c                 C   sV   |   d¡rdS | d D ]}| d   |i ¡  dg ¡D ]}|dkr'd| d<   dS qqdS )Nr¾   TÚargsÚvarsrƒ   ú:FrÂ   )r¶   ÚaÚdrj   rj   rk   r¾   .  s   
þÿr¾   c                 C   ó   t | ƒpt| ƒS r~   )rB   r¾   rµ   rj   rj   rk   Úrequiresf90wrapper9  r|   rÉ   c                 C   rÈ   r~   )r)   rM   rµ   rj   rj   rk   rF   =  r|   rF   c                 C   óF   t | ƒsdS d| v r| d }n| d }|| d v r!t| d | ƒS dS ©Nr   ÚresultÚnamerÄ   )r)   r:   ©r¶   rÆ   rj   rj   rk   r;   A  ó   
r;   c                 C   rÊ   rË   )r)   r?   rÎ   rj   rj   rk   r@   M  rÏ   r@   c                 C   rÊ   rË   )r)   r=   rÎ   rj   rj   rk   r>   Y  rÏ   r>   c                 C   rÊ   rË   )r)   r"   rÎ   rj   rj   rk   r$   e  rÏ   r$   c                 C   s   t | ƒr
tdƒ dS dS )Na‰      **************************************************************
        Warning: code with a function returning complex value
        may not work correctly with your Fortran compiler.
        When using GNU gcc/g77 compilers, codes should work
        correctly for callbacks with:
        f2py -c -DF2PY_CB_RETURNCOMPLEX
    **************************************************************
r   r   )r$   r[   rµ   rj   rj   rk   r%   q  s   r%   c                 C   rÊ   rË   )r)   rI   rÎ   rj   rj   rk   rL     rÏ   rL   c                 C   ó   d| v o| d S )NÚ	externalsrj   rµ   rj   rj   rk   r   ‹  r|   r   c                 C   r®   )NÚf2pyenhancementsÚ
threadsaferj   rµ   rj   rj   rk   rP   �  s   
ÿrP   c                 C   rÐ   )NrÄ   rj   rµ   rj   rj   rk   Úhasvariables”  r|   rÔ   c                 C   s(   d| v od| d v od| d vot | ƒS )Nr¯   ÚoptionalÚrequired)r7   rn   rj   rj   rk   rC   ˜  s
   
ÿÿrC   c                 C   r®   )Nr¯   Úexternalrj   rn   rj   rj   rk   r(   �  r±   r(   c                    sH   d‰ d|   ¡ v r tdd„ | d D ƒƒr"‡ fdd„| d D ƒd S d S d S )Nz	\((.*?)\)r¯   c                 s   s   � | ]}d |v V  qdS )rƒ   Nrj   )Ú.0Úsrj   rj   rk   Ú	<genexpr>¤  s   € zgetdimension.<locals>.<genexpr>c                    s   g | ]}t  ˆ |¡‘qS rj   )ÚreÚfindall)rØ   Úv©Ú
dimpatternrj   rk   Ú
<listcomp>¥  ó    z getdimension.<locals>.<listcomp>r   )ÚkeysÚanyrn   rj   rÞ   rk   r   ¡  s   þr   c                 C   s   t | ƒ ot| ƒS r~   )rC   r7   rn   rj   rj   rk   rE   ¨  r€   rE   c                 C   sp   d| vrdS d| d v rdS d| d v rdS d| d v rdS d| d v r&dS d| d v r.dS d	| d v r6dS dS )
NÚintentr   Úhider   ÚinplaceÚinÚoutÚinoutÚoutinrj   rn   rj   rj   rk   r4   ¬  s   r4   c                 C   sD   d| v o!d| d v sd| d v o!d| d vo!d| d vo!d| d vS )Nrä   ré   rê   rç   rå   ræ   rj   rn   rj   rj   rk   r5   ¾  s   
ÿ
ÿ
þ
þr5   c                 C   rÀ   )Nrè   rä   rÂ   rn   rj   rj   rk   r8   Ä  r|   r8   c                 C   s<   d| v od| d v pd| d v od| d vot ttƒ| ƒ S )Nrä   rå   rè   rç   )rZ   r5   r6   rn   rj   rj   rk   r3   È  s   þr3   c                 C   s
   t | ƒ S r~   )r3   rn   rj   rj   rk   r7   Î  ó   
r7   c                 C   rÀ   )NÚcrä   rÂ   rn   rj   rj   rk   r/   Ò  r|   r/   c                 C   rÀ   )NÚcacherä   rÂ   rn   rj   rj   rk   Úisintent_cacheÖ  r|   rî   c                 C   rÀ   )NÚcopyrä   rÂ   rn   rj   rj   rk   r1   Ú  r|   r1   c                 C   rÀ   )NÚ	overwriterä   rÂ   rn   rj   rj   rk   r9   Þ  r|   r9   c                 C   rÀ   )NÚcallbackrä   rÂ   rn   rj   rj   rk   r0   â  r|   r0   c                 C   rÀ   )Nræ   rä   rÂ   rn   rj   rj   rk   r6   æ  r|   r6   c                 C   rÀ   )NÚauxrä   rÂ   rn   rj   rj   rk   r.   ê  r|   r.   c                 C   rÀ   )NÚaligned4rä   rÂ   rn   rj   rj   rk   Úisintent_aligned4î  r|   rô   c                 C   rÀ   )NÚaligned8rä   rÂ   rn   rj   rj   rk   Úisintent_aligned8ò  r|   rö   c                 C   rÀ   )NÚ	aligned16rä   rÂ   rn   rj   rj   rk   Úisintent_aligned16ö  r|   rø   Ú	INTENT_INÚINTENT_INOUTÚ
INTENT_OUTÚINTENT_HIDEÚINTENT_CACHEÚINTENT_CÚOPTIONALÚINTENT_INPLACEÚINTENT_ALIGNED4ÚINTENT_ALIGNED8ÚINTENT_ALIGNED16c                 C   r®   )Nr¯   Úprivaterj   rn   rj   rj   rk   rD     r±   rD   c                 C   r³   )Nú=rj   rn   rj   rj   rk   r   	  rp   r   c                 C   s   t | ƒsdS | d d dv S )Nr   r  )ú"ú')r   rn   rj   rj   rk   Úhasinitvalueasstring  r¿   r  c                 C   r³   )NÚnoterj   rn   rj   rj   rk   r     rp   r   c                 C   rÊ   rË   )r)   r   rÎ   rj   rj   rk   r     rÏ   r   c                 C   r³   )NÚcommonrj   rµ   rj   rj   rk   r   #  rp   r   c                 C   s4   t | ƒrdS t| ƒr| d D ]	}t|ƒr dS qdS )Nr   Úbodyr   )r   r   Úcontainscommon)r¶   Úbrj   rj   rk   r  '  s   ÿr  c                 C   s8   t | ƒrdS t| ƒsdS | d D ]	}t|ƒr dS qdS )Nr   r   r  )rA   r   Úcontainsmodule)r¸   r  rj   rj   rk   r  1  s   ÿr  c                 C   r³   )Nr  rj   rµ   rj   rj   rk   r   <  rp   r   c                 C   s   t | ƒd uS r~   )r   rµ   rj   rj   rk   r   @  s   r   c                 C   ó   dS )Nr   rj   rn   rj   rj   rk   ÚistrueD  ó   r  c                 C   r  r»   rj   rn   rj   rj   rk   ÚisfalseH  r  r  c                   @   s   e Zd ZdS )Ú	F2PYErrorN)Ú__name__Ú
__module__Ú__qualname__rj   rj   rj   rk   r  L  s    r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )r_   c                 C   s
   || _ d S r~   )Úmess)Úselfr  rj   rj   rk   Ú__init__R  rë   zthrow_error.__init__c                 C   s   d|| j f }t|ƒ‚)Nz

  var = %s
  Message: %s
)r  r  )r  ro   r  rj   rj   rk   Ú__call__U  s   zthrow_error.__call__N)r  r  r  r  r  rj   rj   rj   rk   r_   P  s    r_   c                  G   óN   dg }}t t| ƒƒD ]}d|||f }| d| ¡ qtd|d |¡f ƒS )Núlambda vú%s,f%d=f[%d]úf%d(v)ú%s:%sz and ©ÚrangeÚlenÚappendÚevalÚjoin©ÚfÚl1Úl2Úirj   rj   rk   rX   Z  ó
   
rX   c                  G   r  )Nr  r  r  r  z or r   r&  rj   rj   rk   rZ   b  r+  rZ   c                 C   s   t dƒS )Nzlambda v,f=f:not f(v))r$  )r'  rj   rj   rk   rY   j  rp   rY   c                 C   s(   z	| d d dkW S  t y   Y dS w )NrÒ   ÚfortrannameÚ r   r”   rµ   rj   rj   rk   r'   n  s
   ÿr'   c                 C   sT   z| d d }|dkrt ‚|std| d  ƒ t ‚W |S  t y)   | d }Y |S w )NrÒ   r,  r-  z"Failed to use fortranname from %s
rÍ   )r•   r
   )r¶   rÍ   rj   rj   rk   r   u  s   ÿýþ
þr   c                 C   s
  z	| d   |¡}W n
 ty   Y d S w |sd S |dkr#t|tƒr#d S t|tƒr4|t|ƒkr0d S || }|d d… dkrƒ|rQd| d t|ƒ d |dd …  }n|dd … }|dd … dkry|rq|d d… d	 t|ƒ d
 }|S |d d… }|S td|t|ƒf ƒ |S )NrÒ   r   é   z'''z
	/* start z multiline (z) */
éýÿÿÿz
	/* end multiline (z)*/z-%s multiline block should end with `'''`: %s
)re   r•   Ú
isinstanceÚstrÚlistr"  Úreprr
   )r¶   Ú	blocknameÚcommentÚcounterÚrrj   rj   rk   Úgetmultilineblockƒ  sF   ÿ
ÿÿÿ
ÿüþ
ÿr8  c                 C   ó
   t | dƒS )NÚcallstatement©r8  rµ   rj   rj   rk   r   ¡  rë   r   c           
      C   s  t | ddd�}|r|S t| ƒrtdƒ d S ddlm} g g }}ttttƒƒ| ƒr0| 	ddg¡ | d	 D ]J}| d
 | }t
|ƒrAq4||v rL|| d }n-||ƒ}tttttƒƒ|ƒr[nt|ƒr`nt|ƒsh|d }t|ƒstt|ƒstt|ƒry| d¡ | |¡ q4d || ¡}	|	sŠd}	|	S )NÚcallprotoargumentr   )r5  z<warning: callstatement is defined without callprotoargument
r   )Úgetctypezchar*Úsize_trÃ   rÄ   Ú_typedefr’   ú,Úvoid)r8  r   r[   Ú	capi_mapsr=  rX   rL   rY   r*   Úextendr0   r/   rZ   rG   r"   rI   r`   r   rJ   r#  r%  )
r¶   Úcb_mapr7  r=  Ú	arg_typesÚ
arg_types2Únro   ÚctypeÚ
proto_argsrj   rj   rk   r   ¥  sH   ÿ
ÿþ
r   c                 C   r9  )NÚusercoder;  rµ   rj   rj   rk   r   Ì  rë   r   c                 C   s   t | ddd�S )NrJ  r   )r6  r;  rµ   rj   rj   rk   r   Ð  s   r   c                 C   r9  )NÚpymethoddefr;  rµ   rj   rj   rk   r   Ô  rë   r   c                 C   sv   g g }}d| v r7| d }d| v r3| d D ]}||v r |  |¡ q|D ]}||vr.|  |¡ q#||fS | d }||fS )NrÃ   Úsortvars)r#  )r¶   ÚsortargsrÃ   rÆ   rj   rj   rk   ÚgetargsØ  s   

€
€ÿrN  c                    s–   g ˆ  dg ¡}‰ ‡ ‡fdd„ˆd  ¡ D ƒ}|ˆ  ‰ dˆv rAˆd D ]}|ˆ v r.| |¡ q#ˆ D ]}||vr<| |¡ q1ˆ |fS |ˆd  }ˆ |fS )NrÃ   c                    s(   g | ]}t ˆd  | ƒr|ˆ vr|‘qS )rÄ   )r.   )rØ   rÆ   ©rÃ   r¶   rj   rk   rà   ê  s    ÿzgetargs2.<locals>.<listcomp>rÄ   rL  )re   râ   r#  )r¶   rM  ÚauxvarsrÆ   rj   rO  rk   r   è  s   
€
€ÿr   c                 C   s<   d| vrd S d }| d dkr| d | d f}| d   |d ¡S )NÚf2pymultilinesr¸   zpython modulerÍ   rÂ   )r¶   Úkrj   rj   rk   r   ù  s   r   c                 C   s*   dt | ƒ d d }d|d | |d f S )NéP   é   é   z/*%s %s %s*/r’   )r"  )rÍ   Úlnrj   rj   rk   r     s   r   c                 C   s$   t | tƒrttfdd„| g ƒS | gS )Nc                 S   s   | ||ƒ S r~   rj   )ÚxÚyr'  rj   rj   rk   Ú<lambda>	  s    zflatlist.<locals>.<lambda>)r0  r2  r   Úflatlist)Úlstrj   rj   rk   rZ    s   
rZ  c                 C   s    | r| d dkr| d d… S | S )Nr„   r@  rj   )rÙ   rj   rj   rk   r^     s   r^   r-  c              	      sÈ   t ˆ tƒr‡‡fdd„ˆ D ƒS t ˆtƒr‡ ‡fdd„ˆD ƒS dtˆ  ¡ ƒ D ];}|dkr-q&dˆ v r>|ˆ d v r>ˆ d | }nˆ}t ˆ | tƒrWˆ d| | tˆ | ƒ¡¡‰q&ˆ d| ˆ | ¡‰q&ˆS )Nc                    s   g | ]}t ˆ|ˆ ƒ‘qS rj   ©r\   ©rØ   Ú_m)Ú
defaultsepr1  rj   rk   rà     rá   zreplace.<locals>.<listcomp>c                    s   g | ]}t |ˆ ˆƒ‘qS rj   r\  r]  )rÇ   r_  rj   rk   rà     rá   rU  Úseparatorsforz#%s#)r0  r2  râ   r\   r%  rZ  )r1  rÇ   r_  rR  Úseprj   )rÇ   r_  r1  rk   r\     s   

 r\   c                 C   s(  t |tƒr|D ]}t| |ƒ} q| S | ¡ D ]|}|d dkrq|| v r‹t | | tƒr0| | g| |< t | | tƒrSt || tƒrI| | ||  | |< q| |  || ¡ qt | | tƒrŠt || tƒrŠ|dkr||  ¡ D ]}|| | vr}|| | | | |< qkqt| | || ƒ| |< q|| | |< q| S )Nr   Ú_r`  )r0  r2  r	   râ   r1  r#  Údict)ÚrdÚarrÆ   rR  Úk1rj   rj   rk   r	   &  s4   
€þ€r	   c                 C   sŒ  i }t | tƒr | D ]}t|||ƒ}t||ƒ}d|v r |S q	|S d| v r,| d |ƒs,|S d| v rEtd| d i||ƒ}d|v rEt |d ¡ |  ¡ D ]ú}|dkrV| | ||< qIt | | tƒrgt| | |ƒ||< n¹t | | tƒr�g ||< | | D ]}t||i||ƒ}	||	v r�||  	|	| ¡ qvn‘|d dkr–qIt | | t
ƒ�rg ||< | |  ¡ D ]l}
t |
tjƒ�r|
|ƒ�rt | | |
 tƒrë| | |
 D ]$}t |t
ƒrßtd|i||ƒ}d|v rÝ|d }nd	}||  	t||ƒ¡ qÅq¨| | |
 }t |t
ƒ�r
td|i|ƒ}d|v �r|d }nd	}||  	t||ƒ¡ q¨n
td
t| | ƒ ƒ t || tƒ�rCt|| ƒdk�r9|| d ||< || g k�rC||= qI|S )NÚ_breakÚ_checkÚneedÚneedsr`  r   rb  Ú	supertextr-  zapplyrules: ignoring rule %s.
r   )r0  r2  r   r	   r   Úappend_needsrâ   r1  r\   r#  rc  ÚtypesÚFunctionTyper
   r3  r"  )ÚrulesrÇ   ro   Úretr7  ÚrrÚresrR  r*  re  rf  rj   rj   rk   r   C  s|   

þ€ý

ù	

€í€r   z%\s*python\s*module\s*(?P<name>[\w_]+)z4\s*python\s*module\s*(?P<name>[\w_]*?__user__[\w_]*)c                 C   sp   d }t | ƒ�(}|D ]}t|ƒ}|rt|ƒrq	| d¡} n	q	W d   ƒ |S W d   ƒ |S 1 s1w   Y  |S )NrÍ   )ÚopenÚ_f2py_module_name_matchÚ_f2py_user_module_name_matchÚgroup)ÚsourcerÍ   r'  ÚlineÚmrj   rj   rk   rN   …  s$   

üþ
ÿÿ
ùørN   c                 C   sL   g }| d D ]}|d D ]}|  d¡r"| dd„ |  d¡ ¡ D ƒ¡ qq|S )Nr  Úusec                 S   s   g | ]}d |vr|‘qS )Ú__rj   )rØ   rW  rj   rj   rk   rà   –  rá   z getuseblocks.<locals>.<listcomp>)re   rC  râ   )ÚpymodÚall_usesÚinnerÚmodblockrj   rj   rk   ra   ‘  s   
€þra   Fc                 C   sô   g }i }|  ¡ D ]\}}dd„ |  ¡ D ƒ}||| ¡ < q|  ¡ D ]U\}}|| vr,i | |< |  ¡ D ]D\}	}
|
|v rc|	| | v rLtd||	| | |	 |
f ƒ |
| | |	< |r]td||	|
f ƒ | |
¡ q0|rttd||	|
|
t| ¡ ƒf ƒ q0q | |fS )aê  
    Update the Fortran-to-C type mapping dictionary with new mappings and
    return a list of successfully mapped C types.

    This function integrates a new mapping dictionary into an existing
    Fortran-to-C type mapping dictionary. It ensures that all keys are in
    lowercase and validates new entries against a given C-to-Python mapping
    dictionary. Redefinitions and invalid entries are reported with a warning.

    Parameters
    ----------
    f2cmap_all : dict
        The existing Fortran-to-C type mapping dictionary that will be updated.
        It should be a dictionary of dictionaries where the main keys represent
        Fortran types and the nested dictionaries map Fortran type specifiers
        to corresponding C types.

    new_map : dict
        A dictionary containing new type mappings to be added to `f2cmap_all`.
        The structure should be similar to `f2cmap_all`, with keys representing
        Fortran types and values being dictionaries of type specifiers and their
        C type equivalents.

    c2py_map : dict
        A dictionary used for validating the C types in `new_map`. It maps C
        types to corresponding Python types and is used to ensure that the C
        types specified in `new_map` are valid.

    verbose : boolean
        A flag used to provide information about the types mapped

    Returns
    -------
    tuple of (dict, list)
        The updated Fortran-to-C type mapping dictionary and a list of
        successfully mapped C types.
    c                 S   s   i | ]	\}}|  ¡ |“qS rj   )Úlower)rØ   rf  Úv1rj   rj   rk   Ú
<dictcomp>Ã  s    z'process_f2cmap_dict.<locals>.<dictcomp>z3	Warning: redefinition of {'%s':{'%s':'%s'->'%s'}}
z	Mapping "%s(kind=%s)" to "%s"
z5	Ignoring map {'%s':{'%s':'%s'}}: '%s' must be in %s
)Úitemsr€  r[   r#  r
   r2  râ   )Ú
f2cmap_allÚnew_mapÚc2py_maprc   Úf2cmap_mappedÚnew_map_lowerrR  Úd1Úd1_lowerrf  r�  rj   rj   rk   rb   ™  s:   &ÿÿÿÿ€órb   )r   r   )r-  )F)�Ú__doc__Úpprintrf   rÛ   rm  Ú	functoolsr   rï   r   r-  r   r   Ú__all__ÚversionÚf2py_versionÚstderrrh   r
   r]   rd   rm   r¼   r[   r   rv   rx   r!   r   r    rK   rI   rJ   r   r   rG   r"   r:   r-   r�   r–   r+   r?   rR   rV   rQ   rT   r&   r=   r<   r#   r,   rS   rW   r¨   rU   r©   r«   r­   rH   r   r²   rB   rA   r)   r*   rM   rO   r`   r¾   rÉ   rF   r;   r@   r>   r$   r%   rL   r   rP   rÔ   rC   r(   r   rE   r4   r5   r8   r3   r7   r/   rî   r1   r9   r0   r6   r.   rô   rö   rø   r2   rD   r   r  r   r   r   r  r  r   r   r  r  Ú	Exceptionr  r_   rX   rZ   rY   r'   r   r8  r   r   r   r   r   rN  r   r   r   rZ  r^   r\   r	   r   ÚcompileÚIÚmatchrt  ru  rN   ra   rb   rj   rj   rj   rk   Ú<module>   s*   

ù


'	
=ÿÿÿÿ