+
    ‹°³jøI  ã                  ó¶  € R t ^ RIHt ^ RIHtHtHtHtHtH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIH t  ]! R4      t!]! R4      t"]! R4      t#]! R4      t$]! R4      t%]! R4      t& ! R R]
4      t' ! R R]
4      t(R t) ! R R]
4      t* ! R R]
4      t+ ! R R]4      t, ! R R]
4      t- ! R R ]
4      t. ! R! R"]
4      t/ ! R# R$]
4      t0 ! R% R&]4      t1]1! 4       t2R' t3]3! R(4      t4RRR*RSR+R)R,R)/R- llt5R. t6R/ t7RTR0 lt8RTR1 lt9RRR2 lt:RTR3 lt;RTR4 lt<RRR5 lt= ! R6 R7]
4      t> ! R8 R9]
4      t? ! R: R;]4      t@ ! R< R=]@4      tA ! R> R?]@4      tB ! R@ RA]@4      tC ! RB RC]@4      tD ! RD RE]@4      tE ! RF RG]A4      tF ! RH RI]4      tG ! RJ RK]G4      tH ! RL RM]G4      tI ! RN RO]
]4      tJ ! RP RQ]
]4      tKR)# )Uz¬
AST nodes specific to Fortran.

The functions defined in this module allows the user to express functions such as ``dsign``
as a SymPy function for symbolic manipulation.
)Úannotations)	Ú	AttributeÚ	CodeBlockÚFunctionCallÚNodeÚnoneÚStringÚTokenÚ	_mk_TupleÚVariable)ÚBasic)ÚTuple)ÚExpr)ÚFunction)ÚFloatÚInteger)ÚStr)Úsympify©ÚtrueÚfalse)ÚiterableÚpureÚ	elementalÚ	intent_inÚ
intent_outÚintent_inoutÚallocatablec                  ó8   € ] tR t^"tRtR;tt]t]	! R 4      t
RtR# )ÚPrograma9  Represents a 'program' block in Fortran.

Examples
========

>>> from sympy.codegen.ast import Print
>>> from sympy.codegen.fnodes import Program
>>> prog = Program('myprogram', [Print([42])])
>>> from sympy import fcode
>>> print(fcode(prog, source_format='free'))
program myprogram
    print *, 42
end program

c                	ó   € \        V !  # ©N©r   ©Úbodys   &ÚU/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/codegen/fnodes.pyÚ<lambda>ÚProgram.<lambda>4   ó	   € ´	¸4Ò0@ó    © N)Únamer$   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__Ú_fieldsr   Ú_construct_nameÚstaticmethodÚ_construct_bodyÚ__static_attributes__r*   r)   r%   r   r   "   s#   † ñð +Ð*€I�Ø€OÙ"Ñ#@ÓA„Or)   r   c                  ó*   € ] tR t^7tRtR;tt]t]t	Rt
R# )Ú
use_renamea�  Represents a renaming in a use statement in Fortran.

Examples
========

>>> from sympy.codegen.fnodes import use_rename, use
>>> from sympy import fcode
>>> ren = use_rename("thingy", "convolution2d")
>>> print(fcode(ren, source_format='free'))
thingy => convolution2d
>>> full = use('signallib', only=['snr', ren])
>>> print(fcode(full, source_format='free'))
use signallib, only: snr, thingy => convolution2d

r*   N)ÚlocalÚoriginal)r,   r-   r.   r/   r0   r1   r2   r   Ú_construct_localÚ_construct_originalr6   r*   r)   r%   r8   r8   7   s   † ñð 0Ð/€I�ØÐØ Ôr)   r8   c                óT   € \        V R 4      '       d   V P                  # \        V 4      # ©r+   )Úhasattrr+   r   ©Úargs   &r%   Ú_namerB   K   s"   € Üˆs�F×ÒØ�x‰xˆä�c‹{Ðr)   c                  ób   € ] tR t^QtRtR;ttR]R]/t]	! ]
4      t]	! R 4      t]	! R 4      tRtR# )	Úusea¤  Represents a use statement in Fortran.

Examples
========

>>> from sympy.codegen.fnodes import use
>>> from sympy import fcode
>>> fcode(use('signallib'), source_format='free')
'use signallib'
>>> fcode(use('signallib', [('metric', 'snr')]), source_format='free')
'use signallib, metric => snr'
>>> fcode(use('signallib', only=['snr', 'convolution2d']), source_format='free')
'use signallib, only: snr, convolution2d'

ÚrenameÚonlyc           	     	ó|   € \        V  Uu. uF$  p\        V\        4      '       d   TM\        V!  NK&  	  up!  # u upi r!   )r   Ú
isinstancer8   ©ÚargsrA   s   & r%   r&   Úuse.<lambda>d   sP   € ´%ñ  Có  :Dñ  CÐwzÄÈCÔQ[×A\ÒA\¹#ÔblÐnqÑbrÒ:rñ  Cñ  :Dò  3Eùò  :Ds   Š*9c           	     	ó€   € \        V  Uu. uF&  p\        V\        4      '       d   TM
\        V4      NK(  	  up!  # u upi r!   )r   rH   r8   rB   rI   s   & r%   r&   rK   e   s7   € ´ÑvzÓ7{ÑvzÐor¼zÈ#Ìz×?ZÒ?Z¹Ô`eÐfiÓ`jÒ8jÑvzÑ7{Ò0|ùÒ7{s   Š,;r*   N)Ú	namespacerE   rF   )r,   r-   r.   r/   r0   r1   r2   r   Údefaultsr4   rB   Ú_construct_namespaceÚ_construct_renameÚ_construct_onlyr6   r*   r)   r%   rD   rD   Q   sI   † ñð :Ð9€I�Ø˜$ ¨Ð-€HÙ'¨Ó.ÐÙ$ñ  &Eó  FÐÙ"Ñ#|Ó}„Or)   rD   c                  óZ   € ] tR t^htRtR;ttR]! 4       /t]	t
]R 4       t]! R 4      tRtR# )ÚModulea'  Represents a module in Fortran.

Examples
========

>>> from sympy.codegen.fnodes import Module
>>> from sympy import fcode
>>> print(fcode(Module('signallib', ['implicit none'], []), source_format='free'))
module signallib
implicit none
<BLANKLINE>
contains
<BLANKLINE>
<BLANKLINE>
end module

Údeclarationsc                	ó‚   € V Uu. uF&  p\        V\        4      '       d   \        V4      MTNK(  	  pp\        V!  # u upi r!   )rH   Ústrr   r   )ÚclsrJ   rA   s   && r%   Ú_construct_declarationsÚModule._construct_declarations~   s<   € áEIÓJÁT¸cœJ s¬C×0Ò0”�C”°cÒ9ÁTˆÐJÜ˜$ÑÐùò Ks   …,<c                	ó   € \        V !  # r!   r"   r@   s   &r%   r&   ÚModule.<lambda>ƒ   s   € ´iÀ²or)   r*   N)r+   rT   Údefinitions)r,   r-   r.   r/   r0   r1   r2   r   rN   r   r3   ÚclassmethodrX   r4   Ú_construct_definitionsr6   r*   r)   r%   rS   rS   h   sE   † ñð" BÐA€I�Ø¡£Ð(€HØ€Oàñ ó ð ñ *Ñ*EÓFÔr)   rS   c                  ój   € ] tR t^†tRtRt]]P                  ,           t]t	]
! R 4      t]R 4       tRtR# )Ú
Subroutinea±  Represents a subroutine in Fortran.

Examples
========

>>> from sympy import fcode, symbols
>>> from sympy.codegen.ast import Print
>>> from sympy.codegen.fnodes import Subroutine
>>> x, y = symbols('x y', real=True)
>>> sub = Subroutine('mysub', [x, y], [Print([x**2 + y**2, x*y])])
>>> print(fcode(sub, source_format='free', standard=2003))
subroutine mysub(x, y)
real*8 :: x
real*8 :: y
print *, x**2 + y**2, x*y
end subroutine

c                	óD   € \        \        \        P                  V 4      !  # r!   )r   Úmapr   Údeduced)Úparamss   &r%   r&   ÚSubroutine.<lambda>œ   s   € ¼¼sÄ8×CSÑCSÐU[Ó?\Ò8]r)   c                	óD   € \        V\        4      '       d   V# \        V!  # r!   )rH   r   )rW   Úitrs   &&r%   r5   ÚSubroutine._construct_bodyž   s   € ä�cœ9×%Ò%ØˆJä˜c‘?Ð"r)   r*   N)r+   Ú
parametersr$   )r,   r-   r.   r/   r0   r1   r   r2   r   r3   r4   Ú_construct_parametersr]   r5   r6   r*   r)   r%   r`   r`   †   s?   † ñð$ /€IØ˜$Ÿ,™,Õ&€GØ€OÙ(Ñ)]Ó^Ðàñ#ó ô#r)   r`   c                  óB   € ] tR t^¥tRtR;tt]! ]4      t	]! ]
4      tRtR# )ÚSubroutineCallzßRepresents a call to a subroutine in Fortran.

Examples
========

>>> from sympy.codegen.fnodes import SubroutineCall
>>> from sympy import fcode
>>> fcode(SubroutineCall('mysub', 'x y'.split()))
'       call mysub(x, y)'

r*   N)r+   Úsubroutine_args)r,   r-   r.   r/   r0   r1   r2   r4   rB   r3   r
   Ú_construct_subroutine_argsr6   r*   r)   r%   rl   rl   ¥   s(   † ñ
ð 6Ð5€I�Ù" 5Ó)€OÙ!-¨iÓ!8Ôr)   rl   c                  óž   € ] tR t^¶tRtR;ttR]! ^4      R]/t	]
! R 4      t]
! ]4      t]
! ]4      t]
! ]4      t]
! ]4      t]
! R 4      tRtR# )	ÚDoa:  Represents a Do loop in in Fortran.

Examples
========

>>> from sympy import fcode, symbols
>>> from sympy.codegen.ast import aug_assign, Print
>>> from sympy.codegen.fnodes import Do
>>> i, n = symbols('i n', integer=True)
>>> r = symbols('r', real=True)
>>> body = [aug_assign(r, '+', 1/i), Print([i, r])]
>>> do1 = Do(body, i, 1, n)
>>> print(fcode(do1, source_format='free'))
do i = 1, n
    r = r + 1d0/i
    print *, i, r
end do
>>> do2 = Do(body, i, 1, n, 2)
>>> print(fcode(do2, source_format='free'))
do i = 1, n, 2
    r = r + 1d0/i
    print *, i, r
end do

ÚstepÚ
concurrentc                	ó   € \        V !  # r!   r"   r#   s   &r%   r&   ÚDo.<lambda>Ó   r(   r)   c                	ó*   € V '       d   \         # \        # r!   r   r@   s   &r%   r&   rt   Ø   s   € ¿S´TÐ5KÄeÐ5Kr)   r*   N)r$   ÚcounterÚfirstÚlastrq   rr   )r,   r-   r.   r/   r0   r1   r2   r   r   rN   r4   r5   r   Ú_construct_counterÚ_construct_firstÚ_construct_lastÚ_construct_stepÚ_construct_concurrentr6   r*   r)   r%   rp   rp   ¶   sg   † ñð4 UÐT€I�Ø™ ›
 L°%Ð8€HÙ"Ñ#@ÓA€OÙ% gÓ.ÐÙ# GÓ,ÐÙ" 7Ó+€OÙ" 7Ó+€OÙ(Ñ)KÓLÔr)   rp   c                  ó2   € ] tR t^ÛtRtR;tt]! ]4      t	Rt
R# )ÚArrayConstructora+  Represents an array constructor.

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.fnodes import ArrayConstructor
>>> ac = ArrayConstructor([1, 2, 3])
>>> fcode(ac, standard=95, source_format='free')
'(/1, 2, 3/)'
>>> fcode(ac, standard=2003, source_format='free')
'[1, 2, 3]'

r*   N)Úelements)r,   r-   r.   r/   r0   r1   r2   r4   r
   Ú_construct_elementsr6   r*   r)   r%   r   r   Û   s   † ñð (Ð'€I�Ù& yÓ1Ôr)   r   c                  ó†   € ] tR t^îtRtR;ttR]! ^4      /t]	! ]
4      t]	! ]
4      t]	! ]
4      t]	! ]
4      t]	! ]
4      tRtR# )ÚImpliedDoLoopa   Represents an implied do loop in Fortran.

Examples
========

>>> from sympy import Symbol, fcode
>>> from sympy.codegen.fnodes import ImpliedDoLoop, ArrayConstructor
>>> i = Symbol('i', integer=True)
>>> idl = ImpliedDoLoop(i**3, i, -3, 3, 2)  # -27, -1, 1, 27
>>> ac = ArrayConstructor([-28, idl, 28]) # -28, -27, -1, 1, 27, 28
>>> fcode(ac, standard=2003, source_format='free')
'[-28, (i**3, i = -3, 3, 2), 28]'

rq   r*   N)Úexprrv   rw   rx   rq   )r,   r-   r.   r/   r0   r1   r2   r   rN   r4   r   Ú_construct_exprry   rz   r{   r|   r6   r*   r)   r%   rƒ   rƒ   î   sV   † ñð GÐF€I�Ø™ ›
Ð#€HÙ" 7Ó+€OÙ% gÓ.ÐÙ# GÓ,ÐÙ" 7Ó+€OÙ" 7Ó+„Or)   rƒ   c                  ó&   € ] tR tRtRtR tR tRtR# )ÚExtenti  a
  Represents a dimension extent.

Examples
========

>>> from sympy.codegen.fnodes import Extent
>>> e = Extent(-3, 3)  # -3, -2, -1, 0, 1, 2, 3
>>> from sympy import fcode
>>> fcode(e, source_format='free')
'-3:3'
>>> from sympy.codegen.ast import Variable, real
>>> from sympy.codegen.fnodes import dimension, intent_out
>>> dim = dimension(e, e)
>>> arr = Variable('x', real, attrs=[dim, intent_out])
>>> fcode(arr.as_Declaration(), source_format='free', standard=2003)
'real*8, dimension(-3:3, -3:3), intent(out) :: x'

c                	ó  € \        V4      ^8X  d/   Vw  r#\        P                  ! V \        V4      \        V4      4      # \        V4      ^ 8X  g   \        V4      ^8X  d%   V^ ,          R9   d   \        P                  ! V 4      # \	        R4      h)é   z5Expected 0 or 2 args (or one argument == None or ':'))Ú:N)Úlenr   Ú__new__r   Ú
ValueError)rW   rJ   ÚlowÚhighs   &*  r%   rŒ   ÚExtent.__new__  sj   € Üˆt‹9˜Œ>Ø‰IˆCÜ—=’= ¤g¨c£l´G¸D³MÓBÐBÜ�‹Y˜!Œ^¤ D£	¨Q¤°4¸µ7¸kÔ3IÜ—=’= Ó%Ð%äÐTÓUÐUr)   c                	ó~   € \        V P                  4      ^ 8X  d   R# RP                  R V P                   4       4      # )é    rŠ   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir!   )rV   )Ú.0rA   s   & r%   Ú	<genexpr>Ú#Extent._sympystr.<locals>.<genexpr>%  s   é € Ð6©I Sœ˜CŸ˜«Iùs   ‚)r‹   rJ   Újoin)ÚselfÚprinters   &&r%   Ú	_sympystrÚExtent._sympystr"  s.   € Üˆt�y‰y‹>˜QÔÙØ�x‰xÑ6¨D¯IªIÓ6Ó6Ð6r)   r*   N)r,   r-   r.   r/   r0   rŒ   rš   r6   r*   r)   r%   r‡   r‡     s   † ñò$Vö7r)   r‡   c                 ó   € \        V 4      ^8”  d   \        R4      h. pV  FÅ  p\        V\        4      '       d   VP	                  V4       K,  \        V\
        4      '       d?   VR8X  d   VP	                  \        4       4       Kd  VP	                  \        V4      4       K€  \        V4      '       d   VP	                  \        V!  4       K«  VP	                  \        V4      4       KÇ  	  \        V 4      ^ 8X  d   \        R4      h\        RV4      # )aÑ  Creates a 'dimension' Attribute with (up to 7) extents.

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.fnodes import dimension, intent_in
>>> dim = dimension('2', ':')  # 2 rows, runtime determined number of columns
>>> from sympy.codegen.ast import Variable, integer
>>> arr = Variable('a', integer, attrs=[dim, intent_in])
>>> fcode(arr.as_Declaration(), source_format='free', standard=2003)
'integer*4, dimension(2, :), intent(in) :: a'

z0Fortran only supports up to 7 dimensional arraysrŠ   zNeed at least one dimensionÚ	dimension)
r‹   r�   rH   r‡   ÚappendrV   r   r   r   r   )rJ   ri   rA   s   *  r%   r�   r�   *  sÎ   € ô ˆ4ƒy�1„}ÜÐKÓLÐLØ€JÛˆÜ�cœ6×"Ò"Ø×Ñ˜cÖ"Ü˜œS×!Ò!Ø�cŒzØ×!Ñ!¤&£(Ö+à×!Ñ!¤&¨£+Ö.Ü�c�]Š]Ø×Ñœf c™lÖ+à×Ñœg c›lÖ+ñ ô ˆ4ƒy�A„~ÜÐ6Ó7Ð7Ü�[ *Ó-Ð-r)   Ú*NÚattrsÚvalueÚtypec               ó°  € \        V\        4      '       d7   \        VP                  4      R8w  d   \	        R\        V4      ,          4      hM	\        V!  p\        V4      V.,           pVeC   V\        \        \        39  d   R\        R\        R\        /V,          pVP                  V4       Vf   \        P                  ! WVR7      # \        WWCR7      # )a’  Convenience function for creating a Variable instance for a Fortran array.

Parameters
==========

symbol : symbol
dim : Attribute or iterable
    If dim is an ``Attribute`` it need to have the name 'dimension'. If it is
    not an ``Attribute``, then it is passed to :func:`dimension` as ``*dim``
intent : str
    One of: 'in', 'out', 'inout' or None
\*\*kwargs:
    Keyword arguments for ``Variable`` ('type' & 'value')

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.ast import integer, real
>>> from sympy.codegen.fnodes import array
>>> arr = array('a', '*', 'in', type=integer)
>>> print(fcode(arr.as_Declaration(), source_format='free', standard=2003))
integer*4, dimension(*), intent(in) :: a
>>> x = array('x', [3, ':', ':'], intent='out', type=real)
>>> print(fcode(x.as_Declaration(value=1), source_format='free', standard=2003))
real*8, dimension(3, :, :), intent(out) :: x = 1

r�   z/Got an unexpected Attribute argument as dim: %sÚinÚoutÚinout)r¡   r    )rH   r   rV   r+   r�   r�   Úlistr   r   r   rž   r   rc   )ÚsymbolÚdimÚintentr    r¡   r¢   s   &&&$$$r%   Úarrayr«   O  s·   € ô: �#”y×!Ò!Üˆs�x‰x‹=˜KÔ'ÜÐNÔQTÐUXÓQYÕYÓZÐZð (ô ˜‰oˆä�‹K˜3˜%Õ€EØÒØœ)¤Z´Ð>Ô>ØœI u¬j¸'Ä<ÐPÐQWÕXˆFØ�‰�VÔØ‚|Ü×Ò ¸5ÔAÐAä˜¨EÔ?Ð?r)   c                óZ   € \        V \        4      '       d   \        V 4      # \        V 4      # r!   )rH   rV   r   r   r@   s   &r%   Ú
_printabler­   |  s!   € Ü$ S¬#×.Ò.Œ6�#‹;Ð@´G¸C³LÐ@r)   c                ó.   € \        R\        V 4      .4      # )z÷Creates an AST node for a function call to Fortran's "allocated(...)"

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.fnodes import allocated
>>> alloc = allocated('x')
>>> fcode(alloc, source_format='free')
'allocated(x)'

Ú	allocated©r   r­   )r«   s   &r%   r¯   r¯   €  s   € ô ˜¤j°Ó&7Ð%8Ó9Ð9r)   c                ó®   € \        R\        V 4      .V'       d   \        V4      .M. ,           V'       d   \        V4      .,           4      # . ,           4      # )a;  Creates an AST node for a function call to Fortran's "lbound(...)"

Parameters
==========

array : Symbol or String
dim : expr
kind : expr

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.fnodes import lbound
>>> lb = lbound('arr', dim=2)
>>> fcode(lb, source_format='free')
'lbound(arr, 2)'

Úlboundr°   ©r«   r©   Úkinds   &&&r%   r²   r²   �  sX   € ô( ØÜ	�EÓ	Ðß!Œ*�S‹/Ñ	 rõ	+ç#Œ*�TÓ
Ð	õ	-óð ð *,õ	-óð r)   c                ó®   € \        R \        V 4      .V'       d   \        V4      .M. ,           V'       d   \        V4      .,           4      # . ,           4      # )Úuboundr°   r³   s   &&&r%   r¶   r¶   ¬  sV   € ÜØÜ	�EÓ	Ðß!Œ*�S‹/Ñ	 rõ	+ç#Œ*�TÓ
Ð	õ	-óð ð *,õ	-óð r)   c                óx   € \        R\        V 4      .V'       d   \        V4      .,           4      # . ,           4      # )a!  Creates an AST node for a function call to Fortran's "shape(...)"

Parameters
==========

source : Symbol or String
kind : expr

Examples
========

>>> from sympy import fcode
>>> from sympy.codegen.fnodes import shape
>>> shp = shape('x')
>>> fcode(shp, source_format='free')
'shape(x)'

Úshaper°   )Úsourcer´   s   &&r%   r¸   r¸   µ  sE   € ô& ØÜ	�FÓ	Ðß#Œ*�TÓ
Ð	õ	-óð ð *,õ	-óð r)   c                ó®   € \        R\        V 4      .V'       d   \        V4      .M. ,           V'       d   \        V4      .,           4      # . ,           4      # )aH  Creates an AST node for a function call to Fortran's "size(...)"

Examples
========

>>> from sympy import fcode, Symbol
>>> from sympy.codegen.ast import FunctionDefinition, real, Return
>>> from sympy.codegen.fnodes import array, sum_, size
>>> a = Symbol('a', real=True)
>>> body = [Return((sum_(a**2)/size(a))**.5)]
>>> arr = array(a, dim=[':'], intent='in')
>>> fd = FunctionDefinition(real, 'rms', [arr], body)
>>> print(fcode(fd, source_format='free', standard=2003))
real*8 function rms(a)
real*8, dimension(:), intent(in) :: a
rms = sqrt(sum(a**2)*1d0/size(a))
end function

Úsizer°   r³   s   &&&r%   r»   r»   Ï  sX   € ô( ØÜ	�EÓ	Ðß!Œ*�S‹/Ñ	 rõ	+ç#Œ*�TÓ
Ð	õ	-óð ð *,õ	-óð r)   c                óÂ   € \        R\        V 4      \        V4      .V'       d   \        V4      .M. ,           V'       d   \        V4      .,           4      # . ,           4      # )z‰Creates an AST node for a function call to Fortran's "reshape(...)"

Parameters
==========

source : Symbol or String
shape : ArrayExpr

Úreshaper°   )r¹   r¸   ÚpadÚorders   &&&&r%   r½   r½   ë  s_   € ô ØÜ	�FÓ	œZ¨Ó.Ð/ß!Œ*�S‹/Ñ	 rõ	+ç #Œ*�UÓ
Ð	õ	-óð ð *,õ	-óð r)   c                óJ   € \        RV '       d   \        V 4      .4      # . 4      # )a©  Creates an Attribute ``bind_C`` with a name.

Parameters
==========

name : str

Examples
========

>>> from sympy import fcode, Symbol
>>> from sympy.codegen.ast import FunctionDefinition, real, Return
>>> from sympy.codegen.fnodes import array, sum_, bind_C
>>> a = Symbol('a', real=True)
>>> s = Symbol('s', integer=True)
>>> arr = array(a, dim=[s], intent='in')
>>> body = [Return((sum_(a**2)/s)**.5)]
>>> fd = FunctionDefinition(real, 'rms', [arr, s], body, attrs=[bind_C('rms')])
>>> print(fcode(fd, source_format='free', standard=2003))
real*8 function rms(a, s) bind(C, name="rms")
real*8, dimension(s), intent(in) :: a
integer*4 :: s
rms = sqrt(sum(a**2)/s)
end function

Úbind_C)r   r   r>   s   &r%   rÁ   rÁ   ý  s!   € ô6 �X·¤ t£˜~Ó>Ð>¸2Ó>Ð>r)   c                  óJ   € ] tR tRtRtR;ttR]/t]	! ]
4      t]	! ]4      tRtR# )ÚGoToi  zßRepresents a goto statement in Fortran

Examples
========

>>> from sympy.codegen.fnodes import GoTo
>>> go = GoTo([10, 20, 30], 'i')
>>> from sympy import fcode
>>> fcode(go, source_format='free')
'go to (10, 20, 30), i'

r„   r*   N)Úlabelsr„   )r,   r-   r.   r/   r0   r1   r2   r   rN   r4   r
   Ú_construct_labelsr   r…   r6   r*   r)   r%   rÃ   rÃ     s1   † ñð -Ð,€I�Ø˜ˆ~€HÙ$ YÓ/ÐÙ" 7Ó+„Or)   rÃ   c                  ó:   € ] tR tRtRtR;ttR]/t]	! ]
4      tRtR# )ÚFortranReturni-  a  AST node explicitly mapped to a fortran "return".

Explanation
===========

Because a return statement in fortran is different from C, and
in order to aid reuse of our codegen ASTs the ordinary
``.codegen.ast.Return`` is interpreted as assignment to
the result variable of the function. If one for some reason needs
to generate a fortran RETURN statement, this node should be used.

Examples
========

>>> from sympy.codegen.fnodes import FortranReturn
>>> from sympy import fcode
>>> fcode(FortranReturn('x'))
'       return x'

Úreturn_valuer*   N)rÈ   )r,   r-   r.   r/   r0   r1   r2   r   rN   r4   r   Ú_construct_return_valuer6   r*   r)   r%   rÇ   rÇ   -  s(   † ñð( ,Ð+€I�Ø Ð%€HÙ*¨7Ó3Ôr)   rÇ   c                  ó    € ] tR tRt^MtR tRtR# )Ú	FFunctioniG  c           	     	ó*  € V P                   P                  pVP                  R ,          V P                  8  d   \	        RW P                  3,          4      hRP                  VRP                  \        VP                  V P                  4      4      4      # )Ústandardz%s requires Fortran %d or newerz{}({})z, )
Ú	__class__r,   Ú	_settingsÚ_required_standardÚNotImplementedErrorÚformatr—   rb   Ú_printrJ   )r˜   r™   r+   s   && r%   Ú_fcodeÚFFunction._fcodeJ  sw   € Ø�~‰~×&Ñ&ˆØ×Ñ˜ZÕ(¨4×+BÑ+BÔBÜ%Ð&GØ'+×-DÑ-DÐ&Eõ'Fó Gð Gà�‰˜t T§Y¡Y¬s°7·>±>À4Ç9Á9Ó/MÓ%NÓOÐOr)   r*   N)r,   r-   r.   r/   rÐ   rÔ   r6   r*   r)   r%   rË   rË   G  s   † ØÐöPr)   rË   c                  ó   € ] tR tRt^_tRtR# )ÚF95FunctioniR  r*   N)r,   r-   r.   r/   rÐ   r6   r*   r)   r%   r×   r×   R  s   † ØÔr)   r×   c                  ó   € ] tR tRtRt^tRtR# )ÚisigniV  z.Fortran sign intrinsic for integer arguments. r*   N©r,   r-   r.   r/   r0   Únargsr6   r*   r)   r%   rÙ   rÙ   V  s
   † Ù9Ø„Er)   rÙ   c                  ó   € ] tR tRtRt^tRtR# )Údsigni[  z7Fortran sign intrinsic for double precision arguments. r*   NrÚ   r*   r)   r%   rÝ   rÝ   [  s
   † ÙBØ„Er)   rÝ   c                  ó   € ] tR tRtRt^tRtR# )Úcmplxi`  z%Fortran complex conversion function. r*   NrÚ   r*   r)   r%   rß   rß   `  s
   † Ù0Ø„Er)   rß   c                  ó   € ] tR tRtRt^tRtR# )r´   ie  zFortran kind function. r*   NrÚ   r*   r)   r%   r´   r´   e  ó
   † Ù"Ø„Er)   r´   c                  ó   € ] tR tRtRt^tRtR# )Úmergeij  zFortran merge function r*   NrÚ   r*   r)   r%   rã   rã   j  rá   r)   rã   c                  ó2   € ] tR tRt$ R]R&   R]R&   R tRtR# )	Ú_literalio  rV   Ú_tokenÚintÚ	_decimalsc                	óh  € R P                  V P                  4      V ,          P                  R4      w  rEVP                  R4      P	                  R4      pV^ ,          VR,          P                  R4      rvVR8X  d   RMTpT;'       g    RV P                  ,           V,           T;'       g    R,           # )z%.{}eÚeÚ0Ú.:é   NNÚ+Ú )rÒ   rè   ÚsplitÚstripÚrstripÚlstripræ   )r˜   r™   rJ   ÚkwargsÚmantissaÚsgnd_exÚex_sgnÚex_nums   &&*,    r%   rÔ   Ú_literal._fcodes  sŒ   € Ø$Ÿ^™^¨D¯N©NÓ;¸dÕB×IÑIÈ#ÓNÑˆØ—>‘> #Ó&×-Ñ-¨cÓ2ˆØ  � W¨R¥[×%7Ñ%7¸Ó%<�Ø ”}‘¨&ˆØ—�˜C 4§;¡;Õ.°Õ7¸6¿=¸=ÀSÕIÐIr)   r*   N)r,   r-   r.   r/   Ú__annotations__rÔ   r6   r*   r)   r%   rå   rå   o  s   ‡ ØƒKØƒNöJr)   rå   c                  ó"   € ] tR tRtRtRt^	tRtR# )Ú
literal_spi{  z&Fortran single precision real literal rê   r*   N©r,   r-   r.   r/   r0   ræ   rè   r6   r*   r)   r%   rü   rü   {  s   † Ù1Ø€FØ„Ir)   rü   c                  ó"   € ] tR tRtRtRt^tRtR# )Ú
literal_dpi�  z&Fortran double precision real literal Údr*   Nrý   r*   r)   r%   rÿ   rÿ   �  s   † Ù1Ø€FØ„Ir)   rÿ   c                  óJ   € ] tR tRtR;ttR]R]/t]! ]	4      t
]! ]	4      tRtR# )Úsum_i‡  r©   Úmaskr*   N©r«   r©   r  ©r,   r-   r.   r/   r1   r2   r   rN   r4   r   Ú_construct_arrayÚ_construct_dimr6   r*   r)   r%   r  r  ‡  ó/   † Ø2Ð2€I�Ø�t˜V TÐ*€HÙ# GÓ,ÐÙ! 'Ó*„Nr)   r  c                  óJ   € ] tR tRtR;ttR]R]/t]! ]	4      t
]! ]	4      tRtR# )Úproduct_iŽ  r©   r  r*   Nr  r  r*   r)   r%   r
  r
  Ž  r  r)   r
  r!   r*   )NN)Lr0   Ú
__future__r   Úsympy.codegen.astr   r   r   r   r   r   r	   r
   r   Úsympy.core.basicr   Úsympy.core.containersr   Úsympy.core.exprr   Úsympy.core.functionr   Úsympy.core.numbersr   r   Úsympy.core.symbolr   Úsympy.core.sympifyr   Úsympy.logicr   r   Úsympy.utilities.iterablesr   r   r   r   r   r   r   r   r8   rB   rD   rS   r`   rl   rp   r   rƒ   r‡   Úassumed_extentr�   Úassumed_sizer«   r­   r¯   r²   r¶   r¸   r»   r½   rÁ   rÃ   rÇ   rË   r×   rÙ   rÝ   rß   r´   rã   rå   rü   rÿ   r  r
  r*   r)   r%   Ú<module>r     s  ðñõ #÷÷ õ õ #Ý 'Ý  Ý (ß -Ý !Ý &ß #Ý .ñ �Ó€Ù�kÓ"€	á�kÓ"€	Ù�|Ó$€
Ù˜Ó(€á˜Ó&€ôBˆeô Bô*!�ô !ò(ô~ˆ%ô ~ô.GˆUô Gô<#�ô #ô>9�Uô 9ô""Mˆô "MôJ2�uô 2ô&,�Eô ,ô07ˆUô 7ñB “€ò .ñF ˜‹~€ñ+@¨Rð +@°tð +@À$õ +@òZAò:ô ô8ôô4ô8ô$?ô:,ˆ5ô ,ô&4�Eô 4ô4P�ô Pô�)ô ôˆIô ô
ˆIô ô
ˆIô ô
ˆ9ô ô
ˆKô ô
	Jˆuô 	Jô�ô ô�ô ô+ˆ5�$ô +ô+ˆu�dö +r)   