a ;jg:(@sdZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZddlmZdddZdd Zdd d Zdd d ZddZdS)a; Rules for building C/API module with 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 License. NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. N) getfortranname isexternal isfunctionisfunction_wrap isintent_in isintent_outislogicalfunctionismoduleroutineisscalar issubroutineissubroutine_wrapoutmessshow) isoc_kindmapcCs|dur |}||vr,t|td|dSd||vrTt||td|dS||d}|dkrd||vrd|||df}i}d}d||vr||d}d }nd ||vr||d }d }d |vr6|r|d d vrd|}nd|||d f}n0|d dvr$d||d f}nd||d f}nZd |vrvd||d f}d |vrld||d f}nd|}nd |vrd||d f}d||f}d||vrd|d||df}|S)Nz1var2fixfortran: No definition for argument "%s". typespecz/var2fixfortran: No typespec for argument "%s". typetypenamez%s(%s) kindselectorkind charselectorlen*)r:(*)z %s(len=*)z %s(%s=%s))rrz%s*(%s)z%s*%sz %s(len=%sz %s,kind=%s)z%s)z %s(kind=%s)z%s %s dimension,)rrjoin)varsafaf90modeZvardefselectorZlkr$>/usr/local/lib/python3.9/site-packages/numpy/f2py/func2subr.pyvar2fixfortransP                 r&cCs>d}|dD](\}}|did}|tvrdSq|S)NFrrrT)itemsgetr)routuseisockeyvalueZ kind_valuer$r$r%useiso_c_bindingFs r-csZt|s Jg|d}|dD]z}|d|}t|dgD]X\}}|dkr@d||f}tddgd}d ||f|d <||||<||d|<q@q |dt} d g} | fd d } |dt|} t|} d}||vr|||<|g|ddd}n|g|d}t |d| }|dddkr| rXd|dd}nd|dd}|d}|dd dkrd|d<| d|}d}t |}d |}| r"| dd }fdd|D}||d<| d|d|f|s| d|d| f|rf| d nD| d!|f|r@| d | sf| d"| | dd d#| }| r|d$ d%D](}|d&rzd'|vrz| |qz|dd}g}|D]*}t||r| d"|||q|D]>}||vrqt||r| t ||| d(||q|D]>}||vr>q,t||r,| t ||| d(||q,|D]&}||vrqp| t ||| d(qp| ||dur| || r| rn | d)| |d$| d*d fd+d|D}|s.t|r| d,|| |fn| d-|| |f| rJ| d.|dfn| d/| d0S)1Nrargsrr f2py_%s_d%sintegerhiderintent shape(%s, %s)=rcSsd|d|f|d<dSNz %s %srr$lineretr$r$r%addbszcreatefuncwrapper..addnamez %sf2pywraprz @@@NAME@@@ z character*(*)zcharacter(len=10)z character*10rrr10, csg|]}|kr|qSr$r$).0arg)r;r$r% z%createfuncwrapper..subroutine f2pywrap_%s_%s (%s) modulenameuse %s, only : %suse iso_c_bindingsubroutine f2pywrap%s (%s) external %s saved_interface use __user__r" interface end interfacecsg|]}|vr|qSr$r$r?r  extra_argsr$r%rArBz%s = .not.(.not.%s(%s))z %s = %s(%s)end subroutine f2pywrap_%s_%sendr)r enumerater(dictappendextendboolrr r&replacer-rsplitlstrip startswithrr rr )r) signaturerr viddndvneed_interfacer9r: fortrannamer"Znewnamer.Zl_tmplZ charselectl1Zrlr*sargsr8 dumped_argsr$)rSr;r%createfuncwrapperNs                      rjcst|s Jg|d}|dD]z}|d|}t|dgD]X\}}|dkr@d||f}tddgd}d ||f|d <||||<||d|<q@q |dt} d g} | fd d } |d} t|} t|}|d}t |}d |}|r<| d|d| |f|r | d|sl| d|d| fn0| d| |f|rZ| d| sl| d| | r|d dD](}| drd|vr| |qg}|D]*}t||r| d|||q|D]>}||vrqt||r| t|||d||q|D]&}||vr8q&| t|||dq&| r|r\nL| d|d dD],}| drd|vrqr| |qr| dd fdd|D}|s| d| |f|r| d |d| fn| d!| d"S)#Nrr.rrr/r0r1r2r4r5rcSsd|d|f|d<dSr6r$r7r$r$r%r:szcreatesubrwrapper..addr;r>rCrDrFrErGrHrJrKrLrMrNrOrPcsg|]}|vr|qSr$r$rQrRr$r%rArBz%createsubrwrapper..z call %s(%s)rTrUr)r rVr(rWrXrYrZrr r-rr\r]r^rr r&)r)r_rr r`rarbrcrdrer9r:r;rfr"r.r*rhr8rir$rRr%createsubrwrappers              rkcCs8t|rt|}|d}td||ft|}|}|}d|vr^|d}|d||d|<|d|}t|sd|vrg|d<|ddd}|dD]}|drd }qq|r|dd ||g|d |d dd<|t|fSt|r0t|}|d}td ||ft|}|t |fS|d fS)Nr;z6 Creating wrapper for Fortran function "%s"("%s")... resultrr3outrzout=rzout=%sr.z8 Creating wrapper for Fortran subroutine "%s"("%s")... r) rrrcopyrrXr^rjr rk)r)rfr;fnamernameZfvarflagrar$r$r%assubr"sF        rr)NN)r)r)__doc__rnZauxfuncsrrrrrrr r r r r rrZ _isocbindrr&r-rjrkrrr$r$r$r%s <  0 | X