+
    ‹°³jÛo  ã                  óÖ  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	t	^ RI
HtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHt ^ RI H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+ ^ RI,H-t-H.t.H/t/H0t0H1t1 ^ R	I2H3t3 ^ R
I4H5t5 ^ RI6H7t7 ^ RI8H9t9 ^ RI:H;t; ^ RI<H=t=H>t> ^ RI?H@t@ ^ RI:HAtAHBtB / RRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbR R!bR"R#bR$R%btC ! R& R'];4      tDR# )(ar  
Fortran code printer

The FCodePrinter converts single SymPy expressions into single Fortran
expressions, using the functions defined in the Fortran 77 standard where
possible. Some useful pointers to Fortran can be found on wikipedia:

https://en.wikipedia.org/wiki/Fortran

Most of the code below is based on the "Professional Programmer's Guide to
Fortran77" by Clive G. Page:

https://www.star.le.ac.uk/~cgp/prof77.html

Fortran is a case-insensitive language. This might cause trouble because
SymPy is case sensitive. So, fcode adds underscores to variable names when
it is necessary to make them different for Fortran.
)Úannotations)ÚAny)Údefaultdict)ÚchainN)Ú
AssignmentÚDeclarationÚPointerÚvalue_constÚfloat32Úfloat64Úfloat80Ú	complex64Ú
complex128Úint8Úint16Úint32Úint64ÚintcÚrealÚintegerÚbool_Úcomplex_ÚnoneÚstderrÚstdout)ÚallocatableÚisignÚdsignÚcmplxÚmergeÚ
literal_dpÚ	elementalÚpureÚ	intent_inÚ
intent_outÚintent_inout)ÚSÚAddÚNÚFloatÚSymbol)ÚFunction)Úequal_valued)ÚEq)ÚRange)ÚCodePrinter)Ú
precedenceÚ
PRECEDENCE)Úprinter_context)ÚfcodeÚprint_fcodeÚsinÚcosÚtanÚasinÚacosÚatanÚatan2ÚsinhÚcoshÚtanhÚlogÚexpÚerfÚAbsÚabsÚ	conjugateÚconjgÚMaxÚmaxÚMinÚminc                  ó`  a € ] tR t^Ft$ RtRtRt]]]	]
]]/t]R]R]
R]R]R]R	]R
]R]R]R]R/t]RR//t]! ]P4                  3/ R^R/ RRRRR^MRR/B tR]R&   RRRRRR R!R"R#R$/tR%R&/tRdV 3R' llt]R( 4       t V 3R) lt!R* t"R+ t#R, t$R- t%R. t&R/ t'R0 t(R1 t)R2 t*R3 t+R4 t,R5 t-R6 t.R7 t/R8 t0R9 t1R: t2R; t3R< t4R= t5R> t6R? t7R@ t8RA t9RB t:RC t;RD t<RE t=RF t>RG t?RH t@RI tARJ tBRK tCRL tDRM tERN tFRO tGRP tHRQ tIRR tJRS tKRT tLRU tMRV tNRW tORX tPRY tQRZ tRR[ tSR\ tTR] tUR^ tVR_ tWR` tXRa tYRb tZRct[V ;t\# )eÚFCodePrinterzAA printer to convert SymPy expressions to strings of Fortran codeÚ_fcodeÚFortranzinteger(c_int)zreal*4zreal*8zreal*10z	complex*8z
complex*16z	integer*1z	integer*2z	integer*4z	integer*8ÚlogicalÚiso_c_bindingÚc_intÚ	precisionÚuser_functionsÚsource_formatÚfixedÚcontractTÚstandardÚname_manglingzdict[str, Any]Ú_default_settingsÚandz.and.Úorz.or.Úxorz.neqv.Ú
equivalentz.eqv.Únotz.not. z!=z/=c           	     	ó¾  <€ V'       g   / p/ V n         . V n        \        \        V P                  P                  4       VP                  R / 4      P                  4       4      4      V n        \        \        V P                  P                  4       VP                  R/ 4      P                  4       4      4      V n        \        SV `%  V4       \        \        4      V n
        VP                  R/ 4      pV P                  P                  V4       0 RmpV P                  R,          V9  d$   \        RV P                  R,          ,          4      h\        \         4      V n        R# )Útype_aliasesÚtype_mappingsrR   rV   zUnknown Fortran standard: %sN>   éB   éM   éZ   é_   éÓ  éØ  )Úmangled_symbolsÚ	used_nameÚdictr   r_   ÚitemsÚpopr`   ÚsuperÚ__init__Úknown_functionsÚgetÚupdateÚ	_settingsÚ
ValueErrorr   ÚsetÚmodule_uses)ÚselfÚsettingsÚ	userfuncsÚ	standardsÚ	__class__s   &&  €ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/printing/fortran.pyrm   ÚFCodePrinter.__init__x   s  ø€ ßØˆHØ!ˆÔØˆŒÜ ¤ t×'8Ñ'8×'>Ñ'>Ó'@Ø'/§|¡|°NÀBÓ'G×'MÑ'MÓ'Oó"Qó RˆÔä!¤%¨×(:Ñ(:×(@Ñ(@Ó(BØ(0¯©°_ÀbÓ(I×(OÑ(OÓ(Qó#Só TˆÔä‰Ñ˜Ô"Ü#¤OÓ4ˆÔØ—L‘LÐ!1°2Ó6ˆ	Ø×Ñ×#Ñ# IÔ.â0ˆ	Ø�>‰>˜*Õ%¨YÔ6ÜÐ;¸d¿n¹nØ'õ?)õ )ó *ð *ä&¤sÓ+ˆÖó    c                	óÈ   € V P                   R ,          R8X  d	   RRRRRR/# V P                   R ,          R8X  d	   RR	RRRR
/# \        RV P                   R ,          ,          4      h)rS   rT   Úcodez      Úcontz     @ ÚcommentzC     ÚfreeÚ z! zUnknown source format: %s)rq   rr   )ru   s   &rz   Ú_leadÚFCodePrinter._leadŒ   sd   € à�>‰>˜/Õ*¨gÔ5Ø˜H f¨i¸ÀHÐMÐMØ�^‰^˜OÕ,°Ô6Ø˜B ¨°)¸TÐBÐBäÐ8¸4¿>¹>È/Õ;ZÕZÓ[Ð[r|   c                	óØ  <€ V P                   R ,          R8X  dÂ   WP                  9  d—   VP                  pVP                  4       V P                  9   d   VR,          pK*  V P                  P                  VP                  4       4       W!P                  8X  d   WP                  V&   M\        V4      V P                  V&   VP                  V P                  4      p\        SV `%  V4      pV# )rW   TÚ_)
rq   rg   ÚnameÚlowerrh   Úappendr*   Úxreplacerl   Ú_print_Symbol)ru   Úexprr‡   ry   s   && €rz   r‹   ÚFCodePrinter._print_Symbol•   s°   ø€ Ø�>‰>˜/Õ*¨dÔ2Ø×/Ñ/Ô/Ø—y‘y�Ø—j‘j“l d§n¡nÔ4Ø˜C•K’DØ—‘×%Ñ% d§j¡j£lÔ3ØŸ9™9Ô$Ø15×(Ñ(¨Ò.ä17¸³�D×(Ñ(¨Ñ.à—=‘= ×!5Ñ!5Ó6ˆDä‰wÑ$ TÓ*ˆØˆr|   c                	ó   € V) ^,          # )é   © )ru   Úps   &&rz   Ú_rate_index_positionÚ!FCodePrinter._rate_index_position¦   s   € Øˆr�!�tˆr|   c                	ó   € V# ©Nr�   )ru   Ú
codestrings   &&rz   Ú_get_statementÚFCodePrinter._get_statement©   s   € ØÐr|   c                	ó$   € R P                  V4      # )z! {})Úformat)ru   Útexts   &&rz   Ú_get_commentÚFCodePrinter._get_comment¬   s   € Ø�}‰}˜TÓ"Ð"r|   c                	óB   € R P                  WP                  V4      4      # )zparameter ({} = {}))rš   Ú_print)ru   r‡   Úvalues   &&&rz   Ú_declare_number_constÚ"FCodePrinter._declare_number_const¯   s   € Ø$×+Ñ+¨D·+±+¸eÓ2DÓEÐEr|   c           	     	ó¤   € V P                   P                  V\        VP                  V P                  R ,          4      4      34       \        V4      # ©rQ   )Ú_number_symbolsÚaddr)   Úevalfrq   Ústr©ru   rŒ   s   &&rz   Ú_print_NumberSymbolÚ FCodePrinter._print_NumberSymbol²   s>   € ð 	×Ñ× Ñ  $¬¨d¯j©j¸¿¹ÈÕ9TÓ.UÓ(VÐ!WÔXÜ�4‹yÐr|   c                	óB   € V P                  V P                  V4      4      # r•   )Ú_wrap_fortranÚindent_code)ru   Úliness   &&rz   Ú_format_codeÚFCodePrinter._format_code¸   s   € Ø×!Ñ! $×"2Ñ"2°5Ó"9Ó:Ð:r|   c                	óL   a€ VP                   w  opV3R  l\        V4       4       # )c              3  óN   <"  € T F  p\        S4       F  q"V3x € K
  	  K  	  R # 5ir•   )Úrange)Ú.0ÚjÚiÚrowss   &  €rz   Ú	<genexpr>Ú8FCodePrinter._traverse_matrix_indices.<locals>.<genexpr>½   s   øé € ÐA¡˜1´U¸4¶[°�A•±[‘£ùs   ƒ"%)Úshaper´   )ru   ÚmatÚcolsr¸   s   && @rz   Ú_traverse_matrix_indicesÚ%FCodePrinter._traverse_matrix_indices»   s   ø€ Ø—Y‘Y‰
ˆˆdÜA¤ d¤ÓAÐAr|   c           	     	ó  € . p. pV Fy  p\        V P                  VP                  VP                  ^,           VP                  ^,           .4      w  rVpVP                  RV: RV: RV: 24       VP                  R4       K{  	  W#3# )é   údo z = ú, úend do)ÚmaprŸ   Úlabelrˆ   Úupperr‰   )ru   ÚindicesÚ
open_linesÚclose_linesr·   ÚvarÚstartÚstops   &&      rz   Ú_get_loop_opening_endingÚ%FCodePrinter._get_loop_opening_ending¿   sw   € Øˆ
ØˆÛˆAä" 4§;¡;Ø—W‘W˜aŸg™g¨�k¨1¯7©7°Q­;Ð7ó 9ÑˆC˜à×Ò³#³uºdÐCÔDØ×Ñ˜xÖ(ñ ð Ð&Ð&r|   c           
     	ó  € ^ RI Hp VP                  w  pVP                  '       d#   \	        ^ \        ^V4      \        V^ 4      4      pM¯VP                  '       g   VP                  '       dP   \	        \        \        ^ 4      \        ^ 4      4      W2! V4      ,          \        V! V4      \        ^ 4      4      4      pM<\	        \        ^ 4      \        \        ^4      V4      \        V\        ^ 4      4      4      pV P                  V4      # )é    )rB   )Ú$sympy.functions.elementary.complexesrB   ÚargsÚ
is_integerr   r   r-   Ú
is_complexÚis_infiniter   r    r   rŸ   )ru   rŒ   rB   ÚargÚnew_exprs   &&   rz   Ú_print_signÚFCodePrinter._print_signÊ   s·   € Ý<Ø�y‰y‰ˆØ�>�>ˆ>Ü˜Q¤ a¨£¬r°#°q«zÓ:‰HØ�n�nˆn §§ ÜœU¤:¨a£=´*¸Q³-Ó@À#ÀcÈ#ÃhÅ,ÔPRÑSVÐWZÓS[Ô]gÐhiÓ]jÓPkÓl‰HäœZ¨›]¬E´*¸Q³-ÀÓ,EÄrÈ#ÌzÐZ[Ë}ÓG]Ó^ˆHØ�{‰{˜8Ó$Ð$r|   c                	óô  € VP                   R,          P                  R8w  d   \        R4      h. pVP                  \        4      '       dô   \        VP                   4       F¸  w  pw  rEV^ 8X  d)   VP                  RV P                  V4      ,          4       MaV\        VP                   4      ^,
          8X  d   VR8X  d   VP                  R4       M'VP                  RV P                  V4      ,          4       VP                  V P                  V4      4       Kº  	  VP                  R4       RP                  V4      # V P                  R,          ^_8¼  dš   R	pV P                  VP                   R,          P                  4      p\        VP                   R
R 4      pV'       dJ   VP                  4       w  rEV P                  V4      pV P                  V4      p	VP                  WV	R7      pKQ  V# \        R4      h)rÁ   Tz¼All Piecewise expressions must contain an (expr, True) statement to be used as a default condition. Without one, the generated expression may not evaluate to anything under some condition.zif (%s) thenÚelsezelse if (%s) thenúend ifÚ
rV   zmerge({T}, {F}, {COND})N)ÚTÚFÚCONDzmUsing Piecewise as an expression using inline operators is not supported in standards earlier than Fortran95.éÿÿÿÿ)rÓ   Úcondrr   Úhasr   Ú	enumerater‰   rŸ   ÚlenÚjoinrq   rŒ   Úlistrk   rš   ÚNotImplementedError)
ru   rŒ   r¯   r·   ÚeÚcÚpatternr~   Útermsrã   s
   &&        rz   Ú_print_PiecewiseÚFCodePrinter._print_PiecewiseÖ   s�  € Ø�9‰9�R�=×Ñ Ô%ô ð /ó 0ð 0ð
 ˆØ�8‰8”J×ÒÜ& t§y¡yÖ1‘	�‘6�AØ˜”6Ø—L‘L °$·+±+¸a³.Õ!@ÕAØœ#˜dŸi™i›.¨1Õ,Ô,°°d´Ø—L‘L Õ(à—L‘LÐ!4°t·{±{À1³~Õ!EÔFØ—‘˜TŸ[™[¨›^Ö,ñ 2ð �L‰L˜Ô"Ø—9‘9˜UÓ#Ð#Ø�^‰^˜JÕ'¨2Ô-ð 0ˆGØ—;‘;˜tŸy™y¨�}×1Ñ1Ó2ˆDÜ˜Ÿ™ 3 B˜Ó(ˆEßØ—y‘y“{‘�Ø—{‘{ 1“~�Ø—{‘{ 1“~�Ø—~‘~¨¸4�~Ó@’ØˆKô &ð 'Jó Kð Kr|   c                	óº   € R P                  V P                  VP                  \        R,          RR7      VP                  ^,           VP
                  ^,           4      # )z
{}({}, {})ÚAtomT)Ústrict)rš   ÚparenthesizeÚparentr1   r·   r¶   r©   s   &&rz   Ú_print_MatrixElementÚ!FCodePrinter._print_MatrixElement   sN   € Ø×"Ñ" 4×#4Ñ#4°T·[±[Ü˜6Õ"¨4ð $5ó $1Ø26·&±&¸1µ*¸d¿f¹fÀq½jóJð 	Jr|   c           
     	óˆ  € . p. p. pVP                    F‚  pVP                  '       d&   VP                  '       d   VP                  V4       K:  VP                  '       d&   VP                  '       d   VP                  V4       Kq  VP                  V4       K„  	  V'       Ed   V'       d¸   \        V4      p\        V!  pV P                  V4      pVP                  R 4      '       d   R p	VR,          pMRp	\        V4      V8  d
   RV,          pRV P                  \        V!  4      : RV P                  \        P                  ) \        V!  ,          4      : RV	: RV: 2# RV P                  \        V!  4      : RV P                  \        P                  ) \        V!  ,          4      : R2# \        P                  ! W4      # )	Ú-ºrÁ   NNÚ+z(%s)zcmplx(Ú,z) Ú Ú))rÓ   Ú	is_numberÚis_realr‰   Úis_imaginaryr0   r'   rŸ   Ú
startswithr&   ÚImaginaryUnitr/   Ú
_print_Add)
ru   rŒ   Ú	pure_realÚpure_imaginaryÚmixedr×   ÚPRECÚtermÚtÚsigns
   &&        rz   r  ÚFCodePrinter._print_Add  sa  € ð ˆ	ØˆØˆØ—9”9ˆCØ�}�}ˆ} §§ Ø× Ñ  Ö%Ø——� 3×#3×#3Ð#3Ø×%Ñ% cÖ*à—‘˜SÖ!ñ ÷ ˆ>ßÜ! $Ó'�Ü˜E‘{�Ø—K‘K Ó%�Ø—<‘< ×$Ò$Ø�DØ˜"�‘Aà�DÜ˜dÓ# dÔ*Ø �
�Aøð —K‘K¤ Y¡Ö0Ø—K‘K¤§¡Ð 0´°nÑ1EÕ EÖFÛš!ðð ð ð& —K‘K¤ Y¡Ö0Ø—K‘K¤§¡Ð 0´°nÑ1EÕ EÖFðð ô
 ×)Ò)¨$Ó5Ð5r|   c                	ó0  € V P                   R ,          pVP                   Uu. uF  p\        W24      NK  	  ppVP                  ! V!  p\	        V\
        4      '       g   V P                  V4      # \        P                  ! WP                  ! V!  4      # u upi r¤   )	rq   rÓ   r(   ÚfuncÚ
isinstancer+   rŸ   r/   Ú_print_Function)ru   rŒ   ÚprecÚarÓ   Ú	eval_exprs   &&    rz   r  ÚFCodePrinter._print_Function+  su   € à—‘˜{Õ+ˆØ$(§I¢IÓ.¡I˜q”�!–
¡IˆÐ.Ø—I’I˜tÑ$ˆ	Ü˜)¤X×.Ò.Ø—;‘;˜yÓ)Ð)ä×.Ò.¨t·Y²YÀÑ5EÓFÐFùò /s   ¢Bc                	óÈ   € V P                   R ,          R9   d   Rp\        V4      hVP                  w  r4RP                  V P	                  V4      V P	                  V4      4      # )rV   z]Python % operator and SymPy's Mod() function are not supported by Fortran 66 or 77 standards.z      modulo({}, {}))ra   rb   )rq   ré   rÓ   rš   rŸ   )ru   rŒ   ÚmsgÚxÚys   &&   rz   Ú
_print_ModÚFCodePrinter._print_Mod5  sU   € ð
 �>‰>˜*Õ%¨Ô1ð>ˆCä% cÓ*Ð*à—9‘9‰DˆAØ)×0Ñ0°·±¸Q³ÀÇÁÈQÃÓPÐPr|   c                	ó   € R # )z
cmplx(0,1)r�   r©   s   &&rz   Ú_print_ImaginaryUnitÚ!FCodePrinter._print_ImaginaryUnitB  s   € ár|   c                	ó   € \        V4      # r•   ©r¨   r©   s   &&rz   Ú
_print_intÚFCodePrinter._print_intF  s   € Ü�4‹yÐr|   c                	óÒ   € VP                   '       dA   VP                  '       d/   R V P                  \        P                  ) V,          4      ,          # \
        P                  ! W4      # )zcmplx(0,%s))rþ   r   rŸ   r&   r  r/   Ú
_print_Mulr©   s   &&rz   r"  ÚFCodePrinter._print_MulI  sN   € à�>�>ˆ>˜d×/×/Ð/Ø Ø—‘œQŸ_™_Ð,¨TÕ1Ó2õð ô ×)Ò)¨$Ó5Ð5r|   c                	óf  € \        V4      p\        VP                  R4      '       d<   V P                  \	        ^4      4      : RV P                  VP                  V4      : 2# \        VP                  R4      '       dŸ   VP                  P                  '       da   VP                  P                  '       d#   RV P                  VP                  4      ,          # RV P                  VP                  4      ,          # RV P                  VP                  4      ,          # \        P                  ! W4      # )rÁ   Ú/g      à?zsqrt(%s.0d0)zsqrt(dble(%s))zsqrt(%s)râ   )r0   r,   r@   rŸ   r    ró   ÚbaserÔ   Ú	is_Numberr/   Ú
_print_Pow)ru   rŒ   r  s   && rz   r(  ÚFCodePrinter._print_PowR  s×   € Ü˜$ÓˆÜ˜Ÿ™ "×%Ò%à—‘œJ q›MÖ*Ø×!Ñ! $§)¡)¨TÕ2ðð ô ˜$Ÿ(™( C×(Ò(Ø�y‰y×#×#Ð#à—9‘9×&×&Ð&Ø)¨D¯K©K¸¿	¹	Ó,BÕBÐBà+¨d¯k©k¸$¿)¹)Ó.DÕDÐDà! D§K¡K°·	±	Ó$:Õ:Ð:ä×)Ò)¨$Ó5Ð5r|   c                	óh   € \        VP                  4      \        VP                  4      r2R W#3,          # )z%d.0d0/%d.0d0)Úintr‘   Úq)ru   rŒ   r‘   r,  s   &&  rz   Ú_print_RationalÚFCodePrinter._print_Rationale  s&   € Ü�4—6‘6‹{œC §¡›Kˆ1Ø ! Õ'Ð'r|   c                	óš   € \         P                  ! W4      pVP                  R 4      pVR8”  d   VRV : RW#^,           R : 2# RV,          # )rê   NÚdz%sd0râ   )r/   Ú_print_FloatÚfind)ru   rŒ   Úprintedrê   s   &&  rz   r1  ÚFCodePrinter._print_Floati  sK   € Ü×*Ò*¨4Ó6ˆØ�L‰L˜ÓˆØˆrŒ6Ø% b q›k¨7°qµ5°6ª?Ð;Ð;Ø˜ÕÐr|   c                	óô   € V P                  VP                  4      pV P                  VP                  4      pVP                  pW@P                  9  d   TMV P                  V,          pR P                  W$V4      # )z{} {} {})rŸ   ÚlhsÚrhsÚrel_opÚ_relationalsrš   )ru   rŒ   Úlhs_codeÚrhs_codeÚops   &&   rz   Ú_print_RelationalÚFCodePrinter._print_Relationalp  s_   € Ø—;‘;˜tŸx™xÓ(ˆØ—;‘;˜tŸx™xÓ(ˆØ�[‰[ˆØ×.Ñ.Ô.‰R°D×4EÑ4EÀbÕ4IˆØ× Ñ  ¨xÓ8Ð8r|   c                	óÖ   € VP                    Uu. uF  q P                  V4      NK  	  ppV P                  VP                  P                  4      : R RP	                  V4      : R2# u upi )Ú(rÃ   rý   )rÈ   rŸ   r&  rÆ   rç   )ru   rŒ   r·   Úindss   &&  rz   Ú_print_IndexedÚFCodePrinter._print_Indexedw  sI   € Ø)-¯ªÓ7© A—‘˜Q–©ˆÐ7ØŸ;™; t§y¡y§¡Ö7¸¿¹À4¾ÐIÐIùò 8s   �A&c           	     	ó   € V P                  VP                  4      pV P                  VP                  4      pV P                  R P	                  V P                  V4      V P                  VP
                  4      V P                  V4      4      4      # )z{0} = {0} {1} {2})rŸ   r6  r7  r—   rš   Úbinop)ru   rŒ   r:  r;  s   &&  rz   Ú_print_AugmentedAssignmentÚ'FCodePrinter._print_AugmentedAssignment{  sp   € Ø—;‘;˜tŸx™xÓ(ˆØ—;‘;˜tŸx™xÓ(ˆØ×"Ñ"Ð#6×#=Ñ#=Ø�K‰K˜Ó! 4§;¡;¨t¯z©zÓ#:¸D¿K¹KÈÓ<Qó$Só Tð 	Tr|   c                	óz  € V P                  VP                  4      pVP                  R 8w  d*   VRV P                  VP                  4      ,           ,          pVP                  R 8w  d*   VRV P                  VP                  4      ,           ,          pVP                  P
                  P                  R4      : RV: R2# )NrÃ   z, mask=r†   r@  rý   )rŸ   ÚarrayÚdimÚmaskry   Ú__name__Úrstrip)ru   ÚsmÚparamss   && rz   Ú_print_sum_ÚFCodePrinter._print_sum_�  s‚   € Ø—‘˜RŸX™XÓ&ˆØ�6‰6�TŒ>Ø�d˜TŸ[™[¨¯©Ó0Õ0Õ0ˆFØ�7‰7�dŒ?Ø�i $§+¡+¨b¯g©gÓ"6Õ6Õ6ˆFØŸ<™<×0Ñ0×7Ñ7¸Ö<»fÐEÐEr|   c                	ó$   € V P                  V4      # r•   )rP  )ru   Úprods   &&rz   Ú_print_product_ÚFCodePrinter._print_product_‰  s   € Ø×Ñ Ó%Ð%r|   c           	     	óî   a € R .pVP                   ^8X  d   VP                  R4       RpMRpRV,           R,           P                  ! R	R VP                  '       d   RMR/VP	                  V 3R lVR7      B # )
Ú
concurrentÚstepr‚   ú, {step}z*do {concurrent}{counter} = {first}, {last}z
{body}
end do
zconcurrent c                ó&   <€ SP                  V 4      # r•   ©rŸ   ©r×   ru   s   &€rz   Ú<lambda>Ú(FCodePrinter._print_Do.<locals>.<lambda>š  s   ø€ ¨$¯+©+°cÔ*:r|   )ÚapplyÚexcluder�   )rX  r‰   rš   rW  Úkwargs)ru   ÚdoÚexclrX  s   f&  rz   Ú	_print_DoÚFCodePrinter._print_DoŒ  s�   ø€ Øˆ~ˆØ�7‰7�aŒ<Ø�K‰K˜ÔØ‰DàˆDð 9¸Õ=ð ?õ ÷ ‰&ð	ñ 
ð
 )+¯¯¨‘}¸2ð
ð �i‰iÔ:ÀDˆiÓIñ
ð 	
r|   c                	ó–   a € VP                   ^8X  d   RMRpRV,           R,           P                  ! R/ VP                  V 3R lR7      B # )rÁ   r‚   rY  z$({expr}, {counter} = {first}, {last}rý   c                ó&   <€ SP                  V 4      # r•   r[  r\  s   &€rz   r]  Ú3FCodePrinter._print_ImpliedDoLoop.<locals>.<lambda>   s   ø€ ¨4¯;©;°sÔ+;r|   ©r_  r�   )rX  rš   ra  )ru   ÚidlrX  s   f& rz   Ú_print_ImpliedDoLoopÚ!FCodePrinter._print_ImpliedDoLoop�  sE   ø€ Ø—X‘X ”]‰r¨
ˆØ6°tÕ;¸CÕ?×GÒGñ 
Ø�j‰jÔ;ˆjÓ<ñ
ð 	
r|   c                	ó.  € V P                  VP                  4      p\        VP                  \        4      '       d   VP                  P
                  w  r4pM\        R 4      hV P                  VP                  4      pRP                  W#V^,
          WVR7      # )z*Only iterable currently supported is Rangez3do {target} = {start}, {stop}, {step}
{body}
end do)ÚtargetrÌ   rÍ   rX  Úbody)	rŸ   rn  r  Úiterabler.   rÓ   ré   ro  rš   )ru   rŒ   rn  rÌ   rÍ   rX  ro  s   &&     rz   Ú
_print_ForÚFCodePrinter._print_For£  s{   € Ø—‘˜TŸ[™[Ó)ˆÜ�d—m‘m¤U×+Ò+Ø $§¡× 2Ñ 2ÑˆE™ä%Ð&RÓSÐSØ�{‰{˜4Ÿ9™9Ó%ˆðç ™&¨À$ÈÅ(Ø!ð !ó .ð	.r|   c                	ó&  € V P                   P                  W4      pV P                  P                  WP                  4      pV P                  P                  V4      pV'       d.   V F'  w  rEV P
                  V,          P                  V4       K)  	  V# r•   )r_   ro   r`   r‡   Útype_modulesrt   r¦   )ru   Útype_Útype_strrt   ÚkÚvs   &&    rz   Ú_print_TypeÚFCodePrinter._print_Type¯  su   € Ø×!Ñ!×%Ñ% eÓ3ˆØ×%Ñ%×)Ñ)¨%·±Ó<ˆØ×'Ñ'×+Ñ+¨EÓ2ˆßÛ#‘�Ø× Ñ  Õ#×'Ñ'¨Ö*ñ $àˆr|   c                	ó¢   a € R P                  S P                  VP                  4      RP                  V 3R lVP                   4       4      R7      # )ú{symbol}({idxs})rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  ©rµ   r×   ru   s   & €rz   r¹   Ú.FCodePrinter._print_Element.<locals>.<genexpr>»  ó   øé € ÐE¹°˜DŸK™K¨×,Ð,»ùó   ƒ!©ÚsymbolÚidxs)rš   rŸ   rƒ  rç   rÈ   ©ru   Úelems   f&rz   Ú_print_ElementÚFCodePrinter._print_Element¸  sA   ø€ Ø!×(Ñ(Ø—;‘;˜tŸ{™{Ó+Ø—‘ÔE¸¿ºÓEÓFð )ó 
ð 	
r|   c                	ó   € \        V4      # r•   r  )ru   Úexts   &&rz   Ú_print_ExtentÚFCodePrinter._print_Extent¾  s   € Ü�3‹xˆr|   c           
     	ó8  a € VP                   pVP                  pVP                  R 4      p\        \        \
        3 Uu. uF  qUVP                  9   NK  	  ppVP                  R4      ^ 8X  d   RpMJVP                  R4      ^8X  d#   R. ROVP                  R4      ,          ,          pM\        RS ,          4      h\        V\        4      '       d   \        R4      hS P                  R,          ^Z8¼  dÊ   RP                  S P                  VP                   4      \"        VP                  9   d   RMRV'       d#   R	R
P%                  V 3R lV 4       4      ,          MRT\&        VP                  9   d   RMRS P                  VP(                  4      R7      pVR8w  d    VRS P                  V4      ,          ,          pV# \"        VP                  9   g	   V'       d   \        R4      hRP%                  V 3R lVP                   VP(                  3 4       4      pV# u upi )Ú	dimensionTr‚   z, intent(%s)z!Multiple intents specified for %sz1Pointers are not available by default in Fortran.rV   z"{t}{vc}{dim}{intent}{alloc} :: {s}z, parameterz, dimension(%s)rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú2FCodePrinter._print_Declaration.<locals>.<genexpr>Ó  s   øé € Ð2SÉsÈ°4·;±;¸s×3CÐ3CËsùr�  z, allocatable)r	  ÚvcrJ  ÚintentÚallocÚsNz = %sz0F77 init./parameter statem. req. multiple lines.rü   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   r�  Ý  s   øé € ÐRÑ;Q°C˜tŸ{™{¨3×/Ð/Ó;Qùr�  )ÚinÚoutÚinout)Úvariabler    Úattr_paramsr#   r$   r%   ÚattrsÚcountÚindexrr   r  r   ré   rq   rš   rŸ   Útyper	   rç   r   rƒ  )ru   rŒ   rË   ÚvalrJ  r’  ÚintentsÚresults   f&      rz   Ú_print_DeclarationÚFCodePrinter._print_DeclarationÁ  s¨  ø€ Ø�m‰mˆØ�i‰iˆØ�o‰o˜kÓ*ˆÜ6?ÄÌ\Ñ5ZÓ[Ñ5Z¨6˜SŸY™YÔ&Ñ5ZˆÐ[Ø�=‰=˜Ó !Ô#Ø‰FØ�]‰]˜4Ó  AÔ%Ø#Ò&<¸W¿]¹]È4Ó=PÕ&QÕQ‰FäÐ@À4ÕGÓHÐHä�cœ7×#Ò#Ü%Ð&YÓZÐZØ�>‰>˜*Õ%¨Ô+Ø9×@Ñ@Ø—+‘+˜cŸh™hÓ'Ü$/°3·9±9Ô$<‘=À"ßX[Ð%¨¯	©	Ô2SÉsÓ2SÓ(TÖTÐacØÜ)4¸¿	¹	Ô)A‘oÀrØ—+‘+˜cŸj™jÓ)ð Aó ˆFð �dŒ{Ø˜' D§K¡K°Ó$4Õ4Õ4�ð ˆô	 ˜cŸi™iÔ'¯3Ü)Ð*\Ó]Ð]Ø—X‘XÔR¸C¿H¹HÀcÇjÁjÑ;QÓRÓSˆFàˆùò5 \s   ¾Hc                	óD   € R V P                  \        ^ 4      4      ,          # )z(huge(%s) + 1))rŸ   r    r©   s   &&rz   Ú_print_InfinityÚFCodePrinter._print_Infinityâ  s   € Ø $§+¡+¬j¸«mÓ"<Õ<Ð<r|   c                	óP   a € R P                   ! R/ VP                  V 3R lR7      B # )z$do while ({condition})
{body}
end doc                ó&   <€ SP                  V 4      # r•   r[  r\  s   &€rz   r]  Ú+FCodePrinter._print_While.<locals>.<lambda>ç  s   ø€ ˜dŸk™k¨#Ô.r|   ri  r�   ©rš   ra  r©   s   f&rz   Ú_print_WhileÚFCodePrinter._print_Whileå  s1   ø€ Ø7×>Ò>ñ 1ÀÇÁÜ.ð BMó B0ñ 1ð 	1r|   c                	ó   € R # )z.true.r�   r©   s   &&rz   Ú_print_BooleanTrueÚFCodePrinter._print_BooleanTrueé  s   € Ùr|   c                	ó   € R # )z.false.r�   r©   s   &&rz   Ú_print_BooleanFalseÚ FCodePrinter._print_BooleanFalseì  s   € Ùr|   c                	ó  € . pV Fƒ  pVP                  R 4      '       dA   VP                  V P                  R,          VR,          P                  4       ,           4       KZ  VP                  V P                  R,          V,           4       K…  	  V# )Ú!r€   rù   r~   )r  r‰   rƒ   Úlstrip)ru   r¯   r¡  Úlines   &&  rz   Ú_pad_leading_columnsÚ!FCodePrinter._pad_leading_columnsï  sf   € ØˆÛˆDØ�‰˜s×#Ò#Ø—‘˜dŸj™j¨Õ3°d¸2µh·o±oÓ6GÕGÖHà—‘˜dŸj™j¨Õ0°4Õ7Ö8ñ	 ð
 ˆr|   c                óð  aa	€ \        R\        P                  ,           \        P                  ,           4      o\        R4      o	VV	3R lp. pV P                  R,          R8X  d   RpMRpV EF  pVP                  V P                  R,          4      '       dà   \        V4      ^H8”  d¼   VP                  R	^^H4      pVR8X  d   ^HpVR
V pWVR
 P                  4       pVP                  V4       V'       dn   VP                  R	^ ^B4      pVR8X  g   \        V4      ^B8  d   ^BpVR
V pWVR
 P                  4       pVP                  V P                  R,          : V: 24       Ku  K÷  VP                  V4       EK  VP                  V P                  R,          4      '       dÃ   V! V^H4      pVR
V P                  4       pWVR
 P                  4       pV'       d	   Wt,          pVP                  V4       V'       di   V! V^A4      pVR
V P                  4       pWVR
 P                  4       pV'       d	   Wt,          pVP                  V P                  R,          : V: 24       Kp  EKõ  VP                  V4       EK	  	  V# )zÄWrap long Fortran lines

Argument:
  lines  --  a list of lines (without \n character)

A comment line is split at white space. Code lines are split with a more
complex rule to give nice results.
z_+-.z 	()c                ó˜   <a € \        S 4      V8:  d   \        S 4      # TpV VV3R  lpV! V4      '       g   V^,          pV^ 8X  g   K   V# V# )c                ól  <€ SV ,          S9   ;'       d    SV ^,
          ,          S9  ;'       g†    SV ,          S9  ;'       d    SV ^,
          ,          S9   ;'       gW    SV ,          S9   ;'       d    SV ^,
          ,          S9  ;'       g(    SV ,          S9  ;'       d    SV ^,
          ,          S9   # )rÁ   r�   )Úposr¶  Úmy_alnumÚmy_whites   &€€€rz   r]  ÚDFCodePrinter._wrap_fortran.<locals>.split_pos_code.<locals>.<lambda>	  s³   ø€ Ø�c•˜hÑ&×HÐH¨4°°aµ­=ÀÑ+H÷ Jð JØ�c• (Ñ*×HÐH¨t°C¸!µG­}ÀÑ/H÷Jð Jà�c•˜hÑ&×HÐH¨4°°aµ­=ÀÑ+H÷Jð Jð �c• (Ñ*×HÐH¨t°C¸!µG­}ÀÑ/HðJr|   )ræ   )r¶  Úendposr¼  Úsplitr½  r¾  s   f&  €€rz   Úsplit_pos_codeÚ2FCodePrinter._wrap_fortran.<locals>.split_pos_code  sK   ù€ Ü�4‹y˜FÔ"Ü˜4“yÐ ØˆCöJˆEñ
 ˜C—j’jØ�q•�Ø˜!–8Ø!�MØˆJr|   rS   r�   z &r‚   r€   rü   Nr~   r   râ   )rs   ÚstringÚdigitsÚascii_lettersrq   r  rƒ   ræ   Úrfindrµ  r‰   rM  )
ru   r¯   rÂ  r¡  Útrailingr¶  r¼  Úhunkr½  r¾  s
   &&      @@rz   r­   ÚFCodePrinter._wrap_fortranø  s  ù€ ô �v¤§¡Õ-´×0DÑ0DÕDÓEˆÜ�w“<ˆö	ð ˆØ�>‰>˜/Õ*¨fÔ4Ø‰HàˆHÜˆDØ�‰˜tŸz™z¨)Õ4×5Ò5ä�t“9˜r”>ØŸ*™* S¨!¨RÓ0�CØ˜b”yØ ˜Ø  ˜:�DØ ˜:×,Ñ,Ó.�DØ—M‘M $Ô'ßØ"Ÿj™j¨¨a°Ó4˜Ø "œ9¬¨D«	°B¬Ø"$˜CØ# D S˜z˜Ø# D˜z×0Ñ0Ó2˜ØŸ™°·
±
¸9×0EÂtÐ&LÖMñ ð —M‘M $×'Ø—‘ §¡¨FÕ!3×4Ò4á$ T¨2Ó.�Ø˜D˜S�z×(Ñ(Ó*�Ø˜D�z×(Ñ(Ó*�ßØÕ$�DØ—‘˜dÔ#ßÙ(¨¨rÓ2�CØ  ˜:×,Ñ,Ó.�DØ ˜:×,Ñ,Ó.�DßØÕ(˜Ø—M‘M¨D¯J©J°v×,>ÂÐ"EÖFò ð —‘˜d×#ñG ðH ˆr|   c                ó\  € \        V\        4      '       d2   V P                  VP                  R4      4      pRP	                  V4      # V P
                  R,          R8H  pV Uu. uF  qDP                  R4      NK  	  ppR	pR
pV Uu. uF+  p\        \        \        VP                  V4      4      4      NK-  	  ppV Uu. uF+  p\        \        \        VP                  V4      4      4      NK-  	  ppV Uu. uF-  p\        \        \        VP                  RR.4      4      4      NK/  	  p	p^ p
^ p^p. p\        V4       FÀ  w  räVR9   d   VP                  V4       K  W¨V,          ,          p
V'       d   RW¬,          V,           ,          pMRV
,          V,          pV: V: 2pV'       g   V P                  V.4      ^ ,          pVP                  V4       Wž,          '       d   ^V,          pM^ pW§V,          ,          p
KÂ  	  V'       g   V P                  V4      # V# u upi u upi u upi u upi )z0Accepts a string of code or a list of code linesTr‚   rS   r�   z 	Ú&z&
rü   )rÂ   zif(zif zdo
rÜ   ÚprogramÚ	interface)rÄ   ÚenddorÝ   ÚendifrÜ   zend programzend interface)r‚   rÞ   )r  r¨   r®   Ú
splitlinesrç   rq   rµ  r+  ÚanyrÅ   r  Úendswithrå   r‰   r·  r­   )ru   r~   Ú
code_linesr�   r¶  Úinc_keywordÚdec_keywordÚincreaseÚdecreaseÚcontinuationÚlevelÚcont_paddingÚtabwidthÚnew_coder·   Úpaddings   &&              rz   r®   ÚFCodePrinter.indent_code?  s  € ä�dœC× Ò Ø×)Ñ)¨$¯/©/¸$Ó*?Ó@ˆJØ—7‘7˜:Ó&Ð&à�~‰~˜oÕ.°&Ñ8ˆÙ04Ó6±¨—‘˜UÖ#±ˆÐ6àSˆØdˆñ "&ó(Ù!%˜ô œœS §¡°+Ó>Ó?Ö@Ù!%ð 	ð (ñ "&ó(Ù!%˜ô œœS §¡°+Ó>Ó?Ö@Ù!%ð 	ð (ñ &*ó,Ù%)˜Tô œS¤ T§]¡]°S¸%°LÓ!AÓBÖCÙ%)ð 	ð ,ð ˆØˆØˆØˆÜ  –‰GˆAØ�zÔ!Ø—‘ Ô%ÙØ˜a•[Õ ˆEçØ˜u�~°Õ<Õ=‘à˜e�) HÕ,�â$¢dÐ+ˆDßØ×0Ñ0°$°Ó8¸Õ;�à�O‰O˜DÔ!à�ŒØ  �z‘à �Ø˜a•[Õ ŠEñ+ '÷. Ø×%Ñ% hÓ/Ð/ØˆùòS 7ùò
(ùò(ùò,s   Á"HÂ1HÂ<1H$Ã33H)c                	ó  a € VP                   '       dP   R P                  RP                  V 3R lVP                   4       4      S P	                  VP                   4      R7      # VP                  w  pRS P	                  V4      ,          # )zgo to ({labels}), {expr}rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú+FCodePrinter._print_GoTo.<locals>.<genexpr>t  s   øé € Ð!J¹k°s $§+¡+¨c×"2Ð"2»kùr�  )ÚlabelsrŒ   zgo to %s)rŒ   rš   rç   rã  rŸ   )ru   ÚgotoÚlbls   f& rz   Ú_print_GoToÚFCodePrinter._print_GoToq  sk   ø€ Ø�9�9ˆ9Ø-×4Ñ4Ø—y‘yÔ!J¸d¿kºkÓ!JÓKØ—[‘[ §¡Ó+ð 5ó ð ð
 —;‘;‰DˆCØ §¡¨CÓ 0Õ0Ð0r|   c                	óP   a € R P                   ! R/ VP                  V 3R lR7      B # )z"program {name}
{body}
end program
c                ó&   <€ SP                  V 4      # r•   r[  r\  s   &€rz   r]  Ú-FCodePrinter._print_Program.<locals>.<lambda>€  s   ø€ °·±¸SÔ1Ar|   ri  r�   rª  )ru   Úprogs   f&rz   Ú_print_ProgramÚFCodePrinter._print_Program{  s7   ø€ ð÷ ‰&ð	ñ Dð —;‘;Ô%A�;ÓBñ	Dð 	Dr|   c                	óP   a € R P                   ! R/ VP                  V 3R lR7      B # )zAmodule {name}
{declarations}

contains

{definitions}
end module
c                ó&   <€ SP                  V 4      # r•   r[  r\  s   &€rz   r]  Ú,FCodePrinter._print_Module.<locals>.<lambda>‰  s   ø€ °·±¸CÔ0@r|   ri  r�   rª  )ru   Úmods   f&rz   Ú_print_ModuleÚFCodePrinter._print_Module‚  s7   ø€ ð÷
 ‰&ðñ Cð —:‘:Ô$@�:ÓAñCð 	Cr|   c                	ót  € VP                   R 8X  d=   V P                  R,          R8¼  d%   V P                  R,          P                  R4       R# VP                   R8X  d=   V P                  R,          R8¼  d%   V P                  R,          P                  R4       R# VP                   R 8X  d   R	# VP                   # )
r   rV   re   rO   zstdint=>input_unitÚ
input_unitr   zstdint=>error_unitÚ
error_unitÚ*)r‡   rq   rt   r¦   )ru   Ústrms   &&rz   Ú_print_StreamÚFCodePrinter._print_Stream‹  s�   € Ø�9‰9˜Ô  T§^¡^°JÕ%?À4Ô%GØ×Ñ˜_Õ-×1Ñ1Ð2FÔGÙØ�Y‰Y˜(Ô" t§~¡~°jÕ'AÀTÔ'IØ×Ñ˜_Õ-×1Ñ1Ð2FÔGÙà�y‰y˜HÔ$Ùà—y‘yÐ r|   c                	ó<  a € VP                   \        8X  d   R pRpMLRR\        R\        R/P	                  VP
                  R4      /,          pS P                  VP                   4      pVP                  VRP                  V 3R lVP                   4       4      R7      # )	zprint {fmt}, {iolist}r÷  z3write(%(out)s, fmt="{fmt}", advance="no"), {iolist}r—  Ú0Ú6rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú,FCodePrinter._print_Print.<locals>.<genexpr>¢  s   øé € Ð7© #ˆT�[‰[˜×Ð«ùr�  )ÚfmtÚiolist)
Úformat_stringr   r   r   ro   ÚfilerŸ   rš   rç   Ú
print_args)ru   ÚpsÚtemplater   s   f&  rz   Ú_print_PrintÚFCodePrinter._print_Print˜  sŒ   ø€ Ø×ÑœtÔ#Ø.ˆHØ‰CàLØœ ¤V¨SÐ1×5Ñ5°b·g±g¸sÓCðPõ ˆHð —+‘+˜b×.Ñ.Ó/ˆCØ�‰ 3¨t¯y©yÜ7¨¯ªÓ7ó09ˆó :ð 	:r|   c                	ó–   € VP                   w  pR P                  V P                  P                  RR4      V P	                  V4      R7      # )z{result_name} = {arg}Úresult_nameÚsympy_result)r
  r×   )rÓ   rš   Ú_contextro   rŸ   )ru   Úrsr×   s   && rz   Ú_print_ReturnÚFCodePrinter._print_Return¤  sE   € Ø�w‰w‰ˆØ&×-Ñ-ØŸ™×)Ñ)¨-¸ÓHØ—‘˜CÓ ð .ó 
ð 	
r|   c                	ób   € VP                   w  pV'       d   R V P                  V4      ,          # R# )z	return %sÚreturn)rÓ   rŸ   )ru   Úfrsr×   s   && rz   Ú_print_FortranReturnÚ!FCodePrinter._print_FortranReturn«  s'   € Ø�x‰x‰ˆßØ §¡¨SÓ!1Õ1Ð1ár|   c                	óö  a € VP                  R 4      pVf   RpMV'       d   RV^ ,          ,          MRpS P                  P                  RR4      pRP                  TS P	                  VP
                  4      RP                  VP                   Uu. uF  pS P	                  VP                  4      NK   	  up4      V'       d
   RV,          MRVR	P                  V 3R
 lVP                   4       4      R7      # u upi )Úbind_CNr‚   z bind(C, name="%s")z bind(C)r
  z<{entity}{name}({arg_names}){result}{bind}
{arg_declarations}rÃ   z result(%s)rÞ   c              3  óX   <"  € T F  pSP                  \        V4      4      x € K!  	  R # 5ir•   )rŸ   r   r~  s   & €rz   r¹   Ú%FCodePrinter._head.<locals>.<genexpr>Â  s$   øé € Ð'_ÑQ^È#¨¯©´KÀÓ4D×(EÐ(EÓQ^ùs   ƒ'*)Úentityr‡   Ú	arg_namesr¡  ÚbindÚarg_declarations)	rš  rq   ro   rš   rŸ   r‡   rç   Ú
parametersrƒ  )ru   r  Úfpra  Úbind_C_paramsr  r
  r×   s   f&&,    rz   Ú_headÚFCodePrinter._head²  sÍ   ø€ ØŸ™ xÓ0ˆØÒ Ø‰Dç?LÐ(¨=¸Õ+;Ö;ÐR\ˆDØ—n‘n×(Ñ(¨¸Ó=ˆð!ç
‰&ØØ—‘˜RŸW™WÓ%Ø—i‘iÀBÇMÂMÓ RÁM¸S §¡¨S¯Z©ZÖ!8ÁMÑ RÓSß4?�M KÖ/ÀRØØ!ŸY™YÔ'_ÐQS×Q^ÒQ^Ó'_Ó`ð ó 
ð
	
ùò !Ss   Â$C6c                	ó˜   € R P                  V P                  VP                  4      4      pRP                  V P                  W!4      R7      # )ú{} function z4interface
{function_head}
end function
end interface)Úfunction_head)rš   rŸ   Úreturn_typer   )ru   r  r  s   && rz   Ú_print_FunctionPrototypeÚ%FCodePrinter._print_FunctionPrototypeÅ  s@   € Ø×&Ñ& t§{¡{°2·>±>Ó'BÓCˆð÷ ‰&˜tŸz™z¨&Ó5ˆ&Ó
6ð	7r|   c           	     	ó¬  € \         VP                  9   d   R pM\        VP                  9   d   RpMRpRP                  V P	                  VP
                  4      4      p\        WP                  R7      ;_uu_ 4        RP                  VV P                  W14      V P	                  VP                  4      R7      uuRRR4       #   + '       g   i     R# ; i)z
elemental zpure r‚   r#  )r
  z,{prefix}{function_head}
{body}
end function
)Úprefixr$  ro  N)
r!   r›  r"   rš   rŸ   r%  r2   r‡   r   ro  )ru   Úfdr)  r  s   &&  rz   Ú_print_FunctionDefinitionÚ&FCodePrinter._print_FunctionDefinitionÎ  s™   € Ü˜Ÿ™Ô Ø!‰FÜ�R—X‘XÔØ‰FàˆFà×&Ñ& t§{¡{°2·>±>Ó'BÓCˆÜ˜T¯w©w×7Ö7ð!÷ ‰fØØ"Ÿj™j¨Ó4Ø—[‘[ §¡Ó)ð ó ÷ 8×7×7Ó7ús   Á;<CÃC	c                	óz   € R P                  V P                  RV4      V P                  VP                  4      R7      # )z({subroutine_head}
{body}
end subroutine
zsubroutine )Úsubroutine_headro  )rš   r   rŸ   ro  )ru   Úsubs   &&rz   Ú_print_SubroutineÚFCodePrinter._print_Subroutineâ  s;   € ð÷ ‰&Ø ŸJ™J }°cÓ:Ø—‘˜SŸX™XÓ&ð ó 
ð		
r|   c                	ó¢   a € R P                  S P                  VP                  4      RP                  V 3R lVP                   4       4      R7      # )zcall {name}({args})rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú5FCodePrinter._print_SubroutineCall.<locals>.<genexpr>ï  s   øé € ÐNÑ8M°˜DŸK™K¨×,Ð,Ó8Mùr�  )r‡   rÓ   )rš   rŸ   r‡   rç   Úsubroutine_args)ru   Úscalls   f&rz   Ú_print_SubroutineCallÚ"FCodePrinter._print_SubroutineCallì  sC   ø€ Ø$×+Ñ+Ø—‘˜UŸZ™ZÓ(Ø—‘ÔN¸×8MÒ8MÓNÓOð ,ó 
ð 	
r|   c                	óª   a € R \         ;QJ d'    . V 3R lVP                   4       F  NK  	  5,          # ! V 3R lVP                   4       4      ,          # )z%s => %sc              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú1FCodePrinter._print_use_rename.<locals>.<genexpr>ó  s   øé € Ð"H¹x¸ 4§;¡;¨s×#3Ð#3»xùr�  )ÚtuplerÓ   )ru   Úrnms   f&rz   Ú_print_use_renameÚFCodePrinter._print_use_renameò  s5   ø€ ØŸEœEÔ"H¸s¿xºxÓ"HŸEÕIÐI˜EÔ"H¸s¿xºxÓ"HÓIÕIÐIr|   c           
     	ó¾  € R V P                  VP                  4      ,          pVP                  R8w  dH   TRRP                  VP                   Uu. uF  q0P                  V4      NK  	  up4      ,           ,          pVP                  R8w  dH   TRRP                  VP                   Uu. uF  q@P                  V4      NK  	  up4      ,           ,          pV# u upi u upi )zuse %sNrÃ   z, only: )rŸ   Ú	namespaceÚrenamerç   Úonly)ru   Úuser¡  r=  Únlys   &&   rz   Ú
_print_useÚFCodePrinter._print_useõ  s£   € Ø˜DŸK™K¨¯©Ó6Õ6ˆØ�:‰:˜ÔØ�d˜TŸY™YÀCÇJÂJÓ'OÁJ¸S¯©°CÖ(8ÁJÑ'OÓPÕPÕPˆFØ�8‰8�tÔØ�j 4§9¡9È#Ï(Ê(Ó-SÉ(À3¯k©k¸#Ö.>É(Ñ-SÓ#TÕTÕTˆFØˆùò (Pùâ-Ss   ÁCÂ'Cc                	ó   € R # )Úexitr�   ©ru   r†   s   &&rz   Ú_print_BreakTokenÚFCodePrinter._print_BreakTokený  s   € Ùr|   c                	ó   € R # )Úcycler�   rJ  s   &&rz   Ú_print_ContinueTokenÚ!FCodePrinter._print_ContinueToken   s   € Ùr|   c                	ó”   a € S P                   R ,          R8¼  d   RMRpVRP                  V 3R lVP                   4       4      ,          # )rV   re   z[%s]z(/%s/)rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú7FCodePrinter._print_ArrayConstructor.<locals>.<genexpr>  s   øé € Ð"K¹{¸ 4§;¡;¨s×#3Ð#3»{ùr�  )rq   rç   Úelements)ru   ÚacÚfmtstrs   f& rz   Ú_print_ArrayConstructorÚ$FCodePrinter._print_ArrayConstructor  s8   ø€ ØŸ>™>¨*Õ5¸Ô=‘À8ˆØ˜Ÿ	™	Ô"K¸r¿{º{Ó"KÓLÕLÐLr|   c                	ó¢   a € R P                  S P                  VP                  4      RP                  V 3R lVP                   4       4      R7      # )r|  rÃ   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir•   r[  r~  s   & €rz   r¹   Ú3FCodePrinter._print_ArrayElement.<locals>.<genexpr>
  r€  r�  r‚  )rš   rŸ   r‡   rç   rÈ   r…  s   f&rz   Ú_print_ArrayElementÚ FCodePrinter._print_ArrayElement  sA   ø€ Ø!×(Ñ(Ø—;‘;˜tŸy™yÓ)Ø—‘ÔE¸¿ºÓEÓFð )ó 
ð 	
r|   )rn   rg   rt   r_   r`   rh   r•   )]rL  Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚprintmethodÚlanguager   r   r   r   r   r   r_   r   r
   r   r   r   r   r   r   r`   rt  ri   r/   rX   Ú__annotations__Ú
_operatorsr9  rm   Úpropertyrƒ   r‹   r’   r—   rœ   r¡   rª   r°   r¾   rÎ   rÙ   rî   rõ   r  r  r  r  r  r"  r(  r-  r1  r=  rB  rF  rP  rT  rd  rk  rq  ry  r‡  r‹  r¢  r¥  r«  r®  r±  r·  r­   r®   ræ  rì  rò  rù  r  r  r  r   r&  r+  r0  r7  r>  rF  rK  rO  rW  r\  Ú__static_attributes__Ú__classcell__)ry   s   @rz   rK   rK   F   sF  ø‡ ÙKØ€KØ€Hð 	�ØˆgØ�*ð€Lð 	ÐØ�Ø�Ø�Ø�;Ø�LØˆkØˆ{Øˆ{Øˆ{Øˆyð€Mð 	ˆ Ð(ð€Lñ )-¨[×-JÑ-Jñ )Ø�RØ˜"Ø˜Ø�DØ�BØ˜ðOñ )Ð�~ó ð 	ˆwØˆfØˆxØ�gØˆxð€Jð 	ˆdð€L÷,ð( ñ\ó ð\õò"òò#òFòò;òBò	'ò	%ò(KòTJò%6òNGòQòòò6ò6ò&(ò ò9òJòTòFò&ò
ò"
ò
.òò
òòòB=ò1òòòòEòN0òd1òDòCò!ò
:ò
òò
ò&7òò(
ò
òJòòòòM÷
ð 
r|   rK   )Era  Ú
__future__r   Útypingr   Úcollectionsr   Ú	itertoolsr   rÄ  Úsympy.codegen.astr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsympy.codegen.fnodesr   r   r   r   r   r    r!   r"   r#   r$   r%   Ú
sympy.corer&   r'   r(   r)   r*   Úsympy.core.functionr+   Úsympy.core.numbersr,   Úsympy.core.relationalr-   Ú
sympy.setsr.   Úsympy.printing.codeprinterr/   Úsympy.printing.precedencer0   r1   Úsympy.printing.printerr2   r3   r4   rn   rK   r�   r|   rz   Ú<module>rw     sL  ðñõ& #Ý å #Ý Û ÷÷ ÷ ÷ ÷ õ ÷
÷ ÷ ñ ÷ 0Õ /Ý (Ý +Ý $Ý Ý 2ß <Ý 2÷ :ðØ	ˆ5ðà	ˆ5ðð 
ˆ5ðð ˆFð	ð
 ˆFðð ˆFðð ˆWðð ˆFðð ˆFðð ˆFðð 
ˆ5ðð 
ˆ5ðð 
ˆ5ðð 
ˆ5ðð �ðð  
ˆ5ð!ð" 
ˆ5ð#€ô*E
�;ö E
r|   