+
    iI                       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   &t/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/codegen/fnodes.py<lambda>Program.<lambda>4   	    	40@     N)namer$   )__name__
__module____qualname____firstlineno____doc__	__slots___fieldsr   _construct_namestaticmethod_construct_body__static_attributes__r*   r)   r%   r   r   "   s#     +*IO"#@AOr)   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"    sFxx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CQ[A\A\#blnqbr: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    vz7{vzorz#z?Z?Z`efi`j8jvz7{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     :9I$-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JTcJsC00Cc9T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AI(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    s8CSCSU[?\8]r)   c                	D    \        V\        4      '       d   V# \        V!  # r!   )rH   r   )rW   itrs   &&r%   r5   Subroutine._construct_body   s    c9%%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# )SubroutineCallzRepresents 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5I"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    ST5Ke5Kr)   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TI
L%8H"#@AO%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FI
#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    t9>IC==gclGDMBBY!^D	Q47k3I==%%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     6ISCIs   )r   rJ   join)selfprinters   &&r%   	_sympystrExtent._sympystr"  s.    tyy>Qxx6DII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     4y1}KLLJc6""c"S!!cz!!&(+!!&+.c]]fcl+gcl+  4yA~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!!sxx=K'NQTUXQYYZZ ( oK3%E)Z>>Iuj'<PQWXF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#;@GCL@r)   c                .    \        R\        V 4      .4      # )zCreates 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      # )zCreates 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  zRepresents 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tTYYs7>>499/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    $^^DNN;dBII#N>>#&--c2 WR[%7%7%<}&C4;;.76==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2ItVT*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<# #>9U 9""M "MJ2u 2&,E ,07U 7B  .F ~+@R +@t +@$ +@ZA: 848$?:,5 ,&4E 44P P) I 
I 
I 
9 
K 
	Ju 	J  +5$ ++ud +r)   