
    \hI                       S r SSKJr  SSKJrJrJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJr  SSKJrJr  SSKJ r   \" S5      r!\" S5      r"\" S5      r#\" S5      r$\" S5      r%\" S5      r& " S S\
5      r' " S S\
5      r(S r) " S S\
5      r* " S S\
5      r+ " S S\5      r, " S S\
5      r- " S  S!\
5      r. " S" S#\
5      r/ " S$ S%\
5      r0 " S& S'\5      r1\1" 5       r2S( r3\3" S)5      r4SRS+S*S*S,.S- jjr5S. r6S/ r7SSS0 jr8SSS1 jr9SRS2 jr:SSS3 jr;SSS4 jr<SRS5 jr= " S6 S7\
5      r> " S8 S9\
5      r? " S: S;\5      r@ " S< S=\@5      rA " S> S?\@5      rB " S@ SA\@5      rC " SB SC\@5      rD " SD SE\@5      rE " SF SG\A5      rF " SH SI\5      rG " SJ SK\G5      rH " SL SM\G5      rI " SN SO\
\5      rJ " SP SQ\
\5      rKg*)Tz
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                  6    \ rS rSrSrS=rr\r\	" S 5      r
Srg)Program"   a9  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

)namebodyc                    [        U 6 $ Nr   r#   s    L/var/www/auris/envauris/lib/python3.13/site-packages/sympy/codegen/fnodes.py<lambda>Program.<lambda>4   	    	40@     N)__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                  (    \ rS rSrSrS=rr\r\r	Sr
g)
use_rename7   a  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

)localoriginalr-   N)r.   r/   r0   r1   r2   r3   r4   r	   _construct_local_construct_originalr8   r-   r,   r(   r:   r:   7   s     0/I r,   r:   c                R    [        U S5      (       a  U R                  $ [        U 5      $ )Nr"   )hasattrr"   r	   args    r(   _namerD   K   s"    sFxxc{r,   c                  ^    \ rS rSrSrS=rr\\S.r\	" \
5      r\	" S 5      r\	" S 5      rSrg)	useQ   a  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'

)	namespacerenameonly)rI   rJ   c           	     x    [        U  Vs/ s H"  n[        U[        5      (       a  UO[        U6 PM$     sn6 $ s  snf r%   )r   
isinstancer:   argsrC   s     r(   r)   use.<lambda>d   sP    %  C  :D  CwzCQ[A\A\#blnqbr:r  C  :D  3E  :Ds   )7c           	     ~    [        U  Vs/ s H%  n[        U[        5      (       a  UO
[        U5      PM'     sn6 $ s  snf r%   )r   rL   r:   rD   rM   s     r(   r)   rO   e   s7    vz7{vzorz#z?Z?Z`efi`j8jvz7{0|7{s   ,:r-   N)r.   r/   r0   r1   r2   r3   r4   r   defaultsr6   rD   _construct_namespace_construct_rename_construct_onlyr8   r-   r,   r(   rF   rF   Q   sE     :9I-H'.$  &E  F"#|}Or,   rF   c                  X    \ rS rSrSrS=rrS\" 5       0r\	r
\S 5       r\" S 5      rSrg)	Moduleh   a'  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

)r"   declarationsdefinitionsrX   c                    U Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     nn[        U6 $ s  snf r%   )rL   strr   r   )clsrN   rC   s      r(   _construct_declarationsModule._construct_declarations~   s<    EIJTcJsC00Cc9TJ$ Ks   ,;c                    [        U 6 $ r%   r&   rB   s    r(   r)   Module.<lambda>   s    ior,   r-   N)r.   r/   r0   r1   r2   r3   r4   r   rQ   r	   r5   classmethodr]   r6   _construct_definitionsr8   r-   r,   r(   rV   rV   h   sE    " BAI(HO    **EFr,   rV   c                  `    \ rS rSrSrSr\\R                  -   r\r	\
" S 5      r\S 5       rSrg)
Subroutine   a  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

)r"   
parametersr#   c                B    [        [        [        R                  U 5      6 $ r%   )r   mapr   deduced)paramss    r(   r)   Subroutine.<lambda>   s    s8CSCSU[?\8]r,   c                @    [        U[        5      (       a  U$ [        U6 $ r%   )rL   r   )r\   itrs     r(   r7   Subroutine._construct_body   s    c9%%Jc?"r,   r-   N)r.   r/   r0   r1   r2   r3   r   r4   r	   r5   r6   _construct_parametersra   r7   r8   r-   r,   r(   rd   rd      s?    $ /I$,,&GO()]^# #r,   rd   c                  @    \ rS rSrSrS=rr\" \5      r	\" \
5      rSrg)SubroutineCall   zRepresents 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"   subroutine_argsr-   N)r.   r/   r0   r1   r2   r3   r4   r6   rD   r5   r   _construct_subroutine_argsr8   r-   r,   r(   rq   rq      s(    
 65I"5)O!-i!8r,   rq   c                      \ rS rSrSrS=rr\" S5      \S.r	\
" S 5      r\
" \5      r\
" \5      r\
" \5      r\
" \5      r\
" S 5      rSrg	)
Do   a:  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

)r#   counterfirstlaststep
concurrent   )r{   r|   c                    [        U 6 $ r%   r&   r'   s    r(   r)   Do.<lambda>   r+   r,   c                (    U (       a  [         $ [        $ r%   r   rB   s    r(   r)   r      s    ST5Ke5Kr,   r-   N)r.   r/   r0   r1   r2   r3   r4   r   r   rQ   r6   r7   r   _construct_counter_construct_first_construct_last_construct_step_construct_concurrentr8   r-   r,   r(   rv   rv      sc    4 UTI
%8H"#@AO%g.#G,"7+O"7+O()KLr,   rv   c                  0    \ rS rSrSrS=rr\" \5      r	Sr
g)ArrayConstructor   a+  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]'

)elementsr-   N)r.   r/   r0   r1   r2   r3   r4   r6   r   _construct_elementsr8   r-   r,   r(   r   r      s     ('I&y1r,   r   c                      \ rS rSrSrS=rrS\" S5      0r\	" \
5      r\	" \
5      r\	" \
5      r\	" \
5      r\	" \
5      rSrg)ImpliedDoLoop   a  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]'

)exprrx   ry   rz   r{   r{   r}   r-   N)r.   r/   r0   r1   r2   r3   r4   r   rQ   r6   r   _construct_exprr   r   r   r   r8   r-   r,   r(   r   r      sV     GFI
#H"7+O%g.#G,"7+O"7+Or,   r   c                  $    \ rS rSrSrS rS rSrg)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                   [        U5      S:X  a.  Uu  p#[        R                  " U [        U5      [        U5      5      $ [        U5      S:X  d  [        U5      S:X  a  US   S;   a  [        R                  " U 5      $ [	        S5      e)N   r   r}   ):Nz5Expected 0 or 2 args (or one argument == None or ':'))lenr   __new__r   
ValueError)r\   rN   lowhighs       r(   r   Extent.__new__  sj    t9>IC==gclGDMBBY!^D	Q47k3I==%%TUUr,   c                z    [        U R                  5      S:X  a  gSR                  S U R                   5       5      $ )Nr   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr%   )r[   ).0rC   s     r(   	<genexpr>#Extent._sympystr.<locals>.<genexpr>%  s     6ISCIs   )r   rN   join)selfprinters     r(   	_sympystrExtent._sympystr"  s.    tyy>Qxx6DII666r,   r-   N)r.   r/   r0   r1   r2   r   r   r8   r-   r,   r(   r   r     s    $V7r,   r   c                    [        U 5      S:  a  [        S5      e/ nU  H  n[        U[        5      (       a  UR	                  U5        M+  [        U[
        5      (       a=  US:X  a  UR	                  [        5       5        Ma  UR	                  [        U5      5        M}  [        U5      (       a  UR	                  [        U6 5        M  UR	                  [        U5      5        M     [        U 5      S:X  a  [        S5      e[        SU5      $ )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   r   zNeed at least one dimension	dimension)
r   r   rL   r   appendr[   r	   r   r   r   )rN   rf   rC   s      r(   r   r   *  s     4y1}KLLJc6""c"S!!cz!!&(+!!&+.c]]fcl+gcl+  4yA~677[*--r,   *Nr-   )attrsvaluetypec               |   [        U[        5      (       a1  [        UR                  5      S:w  a  [	        S[        U5      -  5      eO[        U6 n[        U5      U/-   nUb;  U[        [        [        4;  a  [        [        [        S.U   nUR                  U5        Uc  [        R                  " XUS9$ [        XXCS9$ )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   )rL   r   r[   r"   r   r   listr   r   r   r   r   ri   )symboldimintentr   r   r   s         r(   arrayr   O  s    : #y!!sxx=K'NQTUXQYYZZ ( oK3%E)Z>>%j<PQWXFV|5AAE??r,   c                X    [        U [        5      (       a  [        U 5      $ [        U 5      $ r%   )rL   r[   r	   r   rB   s    r(   
_printabler   |  s!    $S#..6#;@GCL@r,   c                .    [        S[        U 5      /5      $ )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                    [        S[        U 5      /U(       a  [        U5      /O/ -   U(       a  [        U5      /-   5      $ / -   5      $ )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                    [        S[        U 5      /U(       a  [        U5      /O/ -   U(       a  [        U5      /-   5      $ / -   5      $ )Nuboundr   r   s      r(   r   r     sV    	E	!*S/	r	+#*T
		-  *,	- r,   c                f    [        S[        U 5      /U(       a  [        U5      /-   5      $ / -   5      $ )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                    [        S[        U 5      /U(       a  [        U5      /O/ -   U(       a  [        U5      /-   5      $ / -   5      $ )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                    [        S[        U 5      [        U5      /U(       a  [        U5      /O/ -   U(       a  [        U5      /-   5      $ / -   5      $ )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                H    [        SU (       a  [        U 5      /5      $ / 5      $ )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                  H    \ rS rSrSrS=rrS\0r\	" \
5      r\	" \5      rSrg)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'

)labelsr   r   r-   N)r.   r/   r0   r1   r2   r3   r4   r   rQ   r6   r   _construct_labelsr   r   r8   r-   r,   r(   r   r     s1     -,I~H$Y/"7+Or,   r   c                  8    \ rS rSrSrS=rrS\0r\	" \
5      rSrg)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   r-   N)r.   r/   r0   r1   r2   r3   r4   r   rQ   r6   r   _construct_return_valuer8   r-   r,   r(   r   r   -  s(    ( ,+I%H*73r,   r   c                      \ rS rSrSrS rSrg)	FFunctioniG  M   c           	        U R                   R                  nUR                  S   U R                  :  a  [	        SX R                  4-  5      eSR                  USR                  [        UR                  U R                  5      5      5      $ )Nstandardz%s requires Fortran %d or newerz{}({})z, )
	__class__r.   	_settings_required_standardNotImplementedErrorformatr   rh   _printrN   )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/   r0   r1   r   r   r8   r-   r,   r(   r   r   G  s    Pr,   r   c                      \ rS rSrSrSrg)F95FunctioniR  _   r-   N)r.   r/   r0   r1   r   r8   r-   r,   r(   r   r   R  s    r,   r   c                      \ rS rSrSrSrSrg)isigniV  z.Fortran sign intrinsic for integer arguments. r   r-   Nr.   r/   r0   r1   r2   nargsr8   r-   r,   r(   r   r   V  s
    9Er,   r   c                      \ rS rSrSrSrSrg)dsigni[  z7Fortran sign intrinsic for double precision arguments. r   r-   Nr   r-   r,   r(   r   r   [  s
    BEr,   r   c                      \ rS rSrSrSrSrg)cmplxi`  z%Fortran complex conversion function. r   r-   Nr   r-   r,   r(   r   r   `  s
    0Er,   r   c                      \ rS rSrSrSrSrg)r   ie  zFortran kind function. r}   r-   Nr   r-   r,   r(   r   r   e  
    "Er,   r   c                      \ rS rSrSrSrSrg)mergeij  zFortran merge function    r-   Nr   r-   r,   r(   r   r   j  r   r,   r   c                  0    \ rS rSr% S\S'   S\S'   S rSrg)	_literalio  r[   _tokenint	_decimalsc                2   SR                  U R                  5      U -  R                  S5      u  pEUR                  S5      R	                  S5      nUS   USS  R                  S5      pvUS:X  a  SOUnU=(       d    SU R                  -   U-   U=(       d    S-   $ )	Nz%.{}ee0.r   r}   + )r   r   splitstriprstriplstripr   )r   r   rN   kwargsmantissasgnd_exex_sgnex_nums           r(   r   _literal._fcodes  s    $^^DNN;dBII#N>>#&--c2 WQR[%7%7%<}&C4;;.76=SIIr,   r-   N)r.   r/   r0   r1   __annotations__r   r8   r-   r,   r(   r   r   o  s    KNJr,   r   c                       \ rS rSrSrSrSrSrg)
literal_spi{  z&Fortran single precision real literal r   	   r-   Nr.   r/   r0   r1   r2   r   r   r8   r-   r,   r(   r  r  {  s    1FIr,   r  c                       \ rS rSrSrSrSrSrg)
literal_dpi  z&Fortran double precision real literal d   r-   Nr
  r-   r,   r(   r  r    s    1FIr,   r  c                  F    \ rS rSrS=rr\\S.r\" \	5      r
\" \	5      rSrg)sum_i  r   r   maskr   r  r-   Nr.   r/   r0   r1   r3   r4   r   rQ   r6   r   _construct_array_construct_dimr8   r-   r,   r(   r  r    +    22IT*H#G,!'*Nr,   r  c                  F    \ rS rSrS=rr\\S.r\" \	5      r
\" \	5      rSrg)product_i  r  r  r-   Nr  r-   r,   r(   r  r    r  r,   r  r%   )NN)Lr2   
__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    r:   rD   rF   rV   rd   rq   rv   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 ~+@Rt$ +@ZA: 848$?:,5 ,&4E 44P P) I 
I 
I 
9 
K 
	Ju 	J  +5$ ++ud +r,   