§
    OŠtjõ[  ã                  óÀ   — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZmZ dd	lmZ g d
¢ZddddddddœZ G d„ de¦  «        Zdd„Zd„ ZdS )a  
Julia code printer

The `JuliaCodePrinter` converts SymPy expressions into Julia expressions.

A complete code generator, which uses `julia_code` extensively, can be found
in `sympy.utilities.codegen`.  The `codegen` module can be used to generate
complete source code files.

é    )Úannotations)ÚAny)ÚMulÚPowÚSÚRational)Ú_keep_coeff)Úequal_valued)ÚCodePrinter)Ú
precedenceÚ
PRECEDENCE©Úsearch)2ÚsinÚcosÚtanÚcotÚsecÚcscÚasinÚacosÚatanÚacotÚasecÚacscÚsinhÚcoshÚtanhÚcothÚsechÚcschÚasinhÚacoshÚatanhÚacothÚasechÚacschÚatan2ÚsignÚfloorÚlogÚexpÚcbrtÚsqrtÚerfÚerfcÚerfiÚ	factorialÚgammaÚdigammaÚtrigammaÚ	polygammaÚbetaÚairyaiÚairyaiprimeÚairybiÚairybiprimeÚbesseljÚbesselyÚbesseliÚbesselkÚerfinvÚerfcinvÚabsÚceilÚconjÚhankelh1Úhankelh2ÚimagÚreal)ÚAbsÚceilingÚ	conjugateÚhankel1Úhankel2ÚimÚrec            	      óz  ‡ — e Zd ZU dZdZdZddddœZ eej	        fi di d	d	d
œ¤ŽZ	de
d<   i fˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ fd„Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Zd „ Zd!„ Zd"„ Z d#„ Z!d$„ Z"e"Z#d%„ Z$d&„ Z%d'„ Z&d(„ Z'd)„ Z(d*„ Z)d+„ Z*d,„ Z+d-„ Z,d.„ Z-d/„ Z.d0„ Z/d1„ Z0d2„ Z1d3„ Z2d4„ Z3d5„ Z4d6„ Z5ˆ xZ6S )7ÚJuliaCodePrinterzD
    A printer to convert expressions to strings of Julia code.
    Ú_juliaÚJuliaz&&z||ú!)ÚandÚorÚnoté   T)Ú	precisionÚuser_functionsÚcontractÚinlinezdict[str, Any]Ú_default_settingsc                óZ  •— t          ¦   «                              |¦  «         t          t          t          t          ¦  «        ¦  «        | _        | j                             t          t          ¦  «        ¦  «         |                     di ¦  «        }| j                             |¦  «         d S )NrZ   )	ÚsuperÚ__init__ÚdictÚzipÚknown_fcns_src1Úknown_functionsÚupdateÚknown_fcns_src2Úget)ÚselfÚsettingsÚ	userfuncsÚ	__class__s      €úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/julia.pyr`   zJuliaCodePrinter.__init__G   s…   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ý#¥C­½Ñ$IÔ$IÑJÔJˆÔØÔ×#Ò#¥D­Ñ$9Ô$9Ñ:Ô:Ð:Ø—L’LÐ!1°2Ñ6Ô6ˆ	ØÔ×#Ò# IÑ.Ô.Ð.Ð.Ð.ó    c                ó   — |dz  S )Né   © )rh   Úps     rl   Ú_rate_index_positionz%JuliaCodePrinter._rate_index_positionO   s   € Ø�‰sˆ
rm   c                ó   — d|z  S )Nz%srp   )rh   Ú
codestrings     rl   Ú_get_statementzJuliaCodePrinter._get_statementS   s   € Ø�jÑ Ð rm   c                ó,   — d                      |¦  «        S )Nz# {}©Úformat)rh   Útexts     rl   Ú_get_commentzJuliaCodePrinter._get_commentW   s   € Ø�}Š}˜TÑ"Ô"Ð"rm   c                ó.   — d                      ||¦  «        S )Nzconst {} = {}rw   )rh   ÚnameÚvalues      rl   Ú_declare_number_constz&JuliaCodePrinter._declare_number_const[   s   € Ø×%Ò% d¨EÑ2Ô2Ð2rm   c                ó,   — |                       |¦  «        S ©N)Úindent_code)rh   Úliness     rl   Ú_format_codezJuliaCodePrinter._format_code_   s   € Ø×Ò Ñ&Ô&Ð&rm   c                óN   ‡— |j         \  Š}ˆfd„t          |¦  «        D ¦   «         S )Nc              3  óD   •K  — | ]}t          ‰¦  «        D ]}||fV — Œ	Œd S r€   )Úrange)Ú.0ÚjÚiÚrowss      €rl   ú	<genexpr>z<JuliaCodePrinter._traverse_matrix_indices.<locals>.<genexpr>f   s:   øè è € ÐAÐA˜1µU¸4±[´[ÐAÐA°��A�ÐAÐAÐAÐAÐAÐAÐArm   )Úshaper†   )rh   ÚmatÚcolsrŠ   s      @rl   Ú_traverse_matrix_indicesz)JuliaCodePrinter._traverse_matrix_indicesc   s.   ø€ à”Y‰
ˆˆdØAÐAÐAÐA¥ d¡¤ÐAÑAÔAÐArm   c           	     óä   — g }g }|D ]f}t          | j        |j        |j        dz   |j        dz   g¦  «        \  }}}|                     d|›d|›d|›�¦  «         |                     d¦  «         Œg||fS )Né   zfor ú = ú:Úend)ÚmapÚ_printÚlabelÚlowerÚupperÚappend)rh   ÚindicesÚ
open_linesÚclose_linesr‰   ÚvarÚstartÚstops           rl   Ú_get_loop_opening_endingz)JuliaCodePrinter._get_loop_opening_endingi   s—   € Øˆ
ØˆØð 	&ð 	&ˆAå" 4¤;Ø”W˜aœg¨™k¨1¬7°Q©;Ð7ñ 9ô  9ÑˆC�˜à×ÒÐ°#°#°#°u°u°u¸d¸dÐCÑDÔDÐDØ×Ò˜uÑ%Ô%Ð%Ð%Ø˜;Ð&Ð&rm   c                óJ  ‡ ‡— |j         rL|j        rE|                     ¦   «         d         j        r&d‰                      t
          j         |z  ¦  «        z  S t          |¦  «        Š|                     ¦   «         \  }}|dk     rt          | |¦  «        }d}nd}g }g }g }‰ j	        dvr| 
                    ¦   «         }nt          j        |¦  «        }|D �]D}	|	j        rÜ|	j        rÕ|	j        j        rÉ|	j        j        r½|	j        dk    r1|                     t'          |	j        |	j         d¬¦  «        ¦  «         Œet+          |	j        d         j        ¦  «        d	k    r/t/          |	j        t          ¦  «        r|                     |	¦  «         |                     t'          |	j        |	j         ¦  «        ¦  «         Œæ|	j        rB|	t
          j        ur4|	j        d	k    r)|                     t5          |	j        ¦  «        ¦  «         �Œ/|                     |	¦  «         �ŒF|pt
          j        g}ˆˆ fd
„|D ¦   «         }
ˆˆ fd„|D ¦   «         }|D ]I}	|	j        |v r>d||                     |	j        ¦  «                 z  ||                     |	j        ¦  «        <   ŒJd„ }|s| |||
¦  «        z   S t+          |¦  «        d	k    r.|d         j         rdnd}| |||
¦  «        z   ›d|›d|d         ›�S t=          d„ |D ¦   «         ¦  «        rdnd}| |||
¦  «        z   ›d|›d |||¦  «        ›d�S )Nr   z%simú-Ú )ÚoldÚnoneéÿÿÿÿF)Úevaluater‘   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS rp   ©Úparenthesize©r‡   ÚxÚprecrh   s     €€rl   ú
<listcomp>z/JuliaCodePrinter._print_Mul.<locals>.<listcomp>¥   ó)   ø€ Ð7Ð7Ð7°�×"Ò" 1 dÑ+Ô+Ð7Ð7Ð7rm   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS rp   rª   r¬   s     €€rl   r¯   z/JuliaCodePrinter._print_Mul.<locals>.<listcomp>¦   r°   rm   ú(%s)c                óž   — |d         }t          dt          | ¦  «        ¦  «        D ]&}| |dz
           j        rdnd}|›d|›d||         ›�}Œ'|S )Nr   r‘   Ú*z.*ú )r†   ÚlenÚ	is_number)ÚaÚa_strÚrr‰   Úmulsyms        rl   Úmultjoinz-JuliaCodePrinter._print_Mul.<locals>.multjoin®   sd   € à�a”ˆAÝ˜1�c !™fœfÑ%Ô%ð 7ð 7�Ø ! ! A¡#¤Ô 0Ð:˜˜°d�Ø"# ! ! V V V¨U°1¬X¨XÐ6��ØˆHrm   ú/ú./rµ   c              3  ó$   K  — | ]}|j         V — Œd S r€   ©r·   )r‡   Úbis     rl   r‹   z.JuliaCodePrinter._print_Mul.<locals>.<genexpr>¼   s$   è è € Ð9Ð9° ¤Ð9Ð9Ð9Ð9Ð9Ð9rm   z (ú))r·   Úis_imaginaryÚas_coeff_MulÚ
is_integerr–   r   ÚImaginaryUnitr   r	   ÚorderÚas_ordered_factorsr   Ú	make_argsÚis_commutativeÚis_Powr,   Úis_RationalÚis_negativerš   r   Úbaser¶   ÚargsÚ
isinstanceÚInfinityrq   r   ÚqÚOneÚindexÚall)rh   ÚexprÚcÚer)   r¸   ÚbÚ	pow_parenrÏ   Úitemr¹   Úb_strr¼   Údivsymr®   s   `             @rl   Ú
_print_MulzJuliaCodePrinter._print_Mulu   s�  øø€ àŒNð 	?˜tÔ0ð 	?Ø×!Ò!Ñ#Ô# AÔ&Ô1ð	?à˜DŸKšK­¬Ð(8¸Ñ(=Ñ>Ô>Ñ>Ð>õ ˜$ÑÔˆà× Ò Ñ"Ô"‰ˆˆ1ØˆqŠ5ˆ5Ý ˜r 1Ñ%Ô%ˆDØˆDˆDàˆDàˆØˆàˆ	àŒ:˜_Ð,Ð,Ø×*Ò*Ñ,Ô,ˆDˆDõ ”= Ñ&Ô&ˆDð ð 	ñ 	ˆDØÔ#ð ¨¬ð ¸¼Ô8Lð ØœÔ,ðà”8˜r’>�>Ø—H’H�S ¤¨T¬X¨IÀÐFÑFÔFÑGÔGÐGÐGå˜4œ9 Qœ<Ô,Ñ-Ô-°Ò2Ð2µzÀ$Ä)ÍSÑ7QÔ7QÐ2Ø!×(Ò(¨Ñ.Ô.Ð.Ø—H’H�S ¤¨T¬X¨IÑ6Ô6Ñ7Ô7Ð7Ð7ØÔ!ð  dµ!´*Ð&<Ð&<ÀÄÈ1ÂÀð
 —’� $¤&Ñ)Ô)Ñ*Ô*Ð*Ñ*à—’˜‘”�‘àˆL•!”%�ˆà7Ð7Ð7Ð7Ð7°QÐ7Ñ7Ô7ˆØ7Ð7Ð7Ð7Ð7°QÐ7Ñ7Ô7ˆð ð 	Oð 	OˆDØŒy˜Aˆ~ˆ~Ø,2°U¸1¿7º7À4Ä9Ñ;MÔ;MÔ5NÑ,N��a—g’g˜dœiÑ(Ô(Ñ)øð	ð 	ð 	ð ð 	ZØ˜(˜( 1 eÑ,Ô,Ñ,Ð,Ý�‰VŒV�qŠ[ˆ[Ø˜aœDœNÐ4�S�S°ˆFØ!% h h¨q°%Ñ&8Ô&8Ñ!8Ð!8Ð!8¸&¸&¸&À%ÈÄ(À(ÐKÐKåÐ9Ð9°qÐ9Ñ9Ô9Ñ9Ô9ÐC�S�S¸tˆFØ#'¨(¨(°1°eÑ*<Ô*<Ñ#<Ð#<Ð#<¸f¸f¸fÀhÀhÈqÐRWÑFXÔFXÐFXÐFXÐYÐYrm   c                ó¦   — |                       |j        ¦  «        }|                       |j        ¦  «        }|j        }d                     |||¦  «        S )Nz{} {} {})r–   ÚlhsÚrhsÚrel_oprx   )rh   rÖ   Úlhs_codeÚrhs_codeÚops        rl   Ú_print_Relationalz"JuliaCodePrinter._print_Relational¿   sG   € Ø—;’;˜tœxÑ(Ô(ˆØ—;’;˜tœxÑ(Ô(ˆØŒ[ˆØ× Ò  ¨2¨xÑ8Ô8Ð8rm   c                óf  — t          d„ |j        D ¦   «         ¦  «        rdnd}t          |¦  «        }t          |j        d¦  «        rd|                      |j        ¦  «        z  S |j        rŒt          |j        d¦  «        r1|j        j        rdnd}d	|›d
|                      |j        ¦  «        ›d�S t          |j        d¦  «        r1|j        j        rdnd}d	|›d|  	                    |j        |¦  «        ›�S |  	                    |j        |¦  «        ›d|›d|  	                    |j        |¦  «        ›�S )Nc              3  ó$   K  — | ]}|j         V — Œd S r€   rÀ   )r‡   r­   s     rl   r‹   z.JuliaCodePrinter._print_Pow.<locals>.<genexpr>Æ   s$   è è € Ð>Ð>¨q˜qœ{Ð>Ð>Ð>Ð>Ð>Ð>rm   ú^z.^g      à?zsqrt(%s)g      à¿r½   r¾   z1 z sqrt(rÂ   r§   rµ   )
rÕ   rÏ   r   r
   r,   r–   rÎ   rÊ   r·   r«   )rh   rÖ   Ú	powsymbolÚPRECÚsyms        rl   Ú
_print_PowzJuliaCodePrinter._print_PowÅ   sM  € ÝÐ>Ð>°D´IÐ>Ñ>Ô>Ñ>Ô>ÐH�C�CÀDˆ	å˜$ÑÔˆå˜œ #Ñ&Ô&ð 	7Ø §¢¨D¬IÑ 6Ô 6Ñ6Ð6àÔð 	NÝ˜DœH dÑ+Ô+ð GØ!œYÔ0Ð:�c�c°d��Ø*-¨#¨#¨t¯{ª{¸4¼9Ñ/EÔ/EÐ/EÐ/EÐFÐFÝ˜DœH bÑ)Ô)ð NØ!œYÔ0Ð:�c�c°d��Ø%( S S¨$×*;Ò*;¸D¼IÀtÑ*LÔ*LÐ*LÐMÐMà!×.Ò.¨t¬y¸$Ñ?Ô?Ð?Ð?ÀÀÀØ×,Ò,¨T¬X°tÑ<Ô<Ð<ð>ð 	>rm   c                ó’   — t          |¦  «        }|                      |j        |¦  «        ›d|                      |j        |¦  «        ›�S )Nz ^ )r   r«   rÎ   r,   ©rh   rÖ   rë   s      rl   Ú_print_MatPowzJuliaCodePrinter._print_MatPowÙ   sL   € Ý˜$ÑÔˆØ ×-Ò-¨d¬i¸Ñ>Ô>Ð>Ð>Ø×+Ò+¨D¬H°dÑ;Ô;Ð;ð=ð 	=rm   c                ód   •— | j         d         rdS t          ¦   «                              |¦  «        S )Nr\   Úpi©Ú	_settingsr_   Ú_print_NumberSymbol©rh   rÖ   rk   s     €rl   Ú	_print_PizJuliaCodePrinter._print_Piß   s/   ø€ ØŒ>˜(Ô#ð 	5Ø�4å‘7”7×.Ò.¨tÑ4Ô4Ð4rm   c                ó   — dS )NrN   rp   ©rh   rÖ   s     rl   Ú_print_ImaginaryUnitz%JuliaCodePrinter._print_ImaginaryUnitæ   s   € Øˆtrm   c                ód   •— | j         d         rdS t          ¦   «                              |¦  «        S )Nr\   rØ   ró   rö   s     €rl   Ú_print_Exp1zJuliaCodePrinter._print_Exp1ê   s/   ø€ ØŒ>˜(Ô#ð 	5Ø�3å‘7”7×.Ò.¨tÑ4Ô4Ð4rm   c                ód   •— | j         d         rdS t          ¦   «                              |¦  «        S )Nr\   Ú
eulergammaró   rö   s     €rl   Ú_print_EulerGammaz"JuliaCodePrinter._print_EulerGammañ   s/   ø€ ØŒ>˜(Ô#ð 	5Ø�<å‘7”7×.Ò.¨tÑ4Ô4Ð4rm   c                ód   •— | j         d         rdS t          ¦   «                              |¦  «        S )Nr\   Úcatalanró   rö   s     €rl   Ú_print_CatalanzJuliaCodePrinter._print_Catalanø   s/   ø€ ØŒ>˜(Ô#ð 	5Ø�9å‘7”7×.Ò.¨tÑ4Ô4Ð4rm   c                ód   •— | j         d         rdS t          ¦   «                              |¦  «        S )Nr\   Úgoldenró   rö   s     €rl   Ú_print_GoldenRatioz#JuliaCodePrinter._print_GoldenRatioÿ   s/   ø€ ØŒ>˜(Ô#ð 	5Ø�8å‘7”7×.Ò.¨tÑ4Ô4Ð4rm   c                ó‚  — ddl m} ddlm} ddlm} |j        }|j        }| j        d         s‚t          |j        |¦  «        rmg }g }|j
        D ]9\  }	}
|                      |||	¦  «        ¦  «         |                     |
¦  «         Œ: |t          ||¦  «        Ž }|                      |¦  «        S | j        d         r@|                     |¦  «        s|                     |¦  «        r|                      ||¦  «        S |                      |¦  «        }|                      |¦  «        }|                      |›d|›�¦  «        S )Nr   )Ú
Assignment)Ú	Piecewise)ÚIndexedBaser\   r[   r’   )Úsympy.codegen.astr  Ú$sympy.functions.elementary.piecewiser  Úsympy.tensor.indexedr	  rà   rá   rô   rÐ   rÏ   rš   rb   r–   ÚhasÚ_doprint_loopsru   )rh   rÖ   r  r  r	  rà   rá   ÚexpressionsÚ
conditionsrØ   r×   Útemprã   rä   s                 rl   Ú_print_Assignmentz"JuliaCodePrinter._print_Assignment  sz  € Ø0Ð0Ð0Ð0Ð0Ð0ØBÐBÐBÐBÐBÐBØ4Ð4Ð4Ð4Ð4Ð4àŒhˆØŒhˆàŒ~˜hÔ'ð 		%­J°t´xÀÑ,KÔ,Kð 		%ð ˆKØˆJØœ(ð %ð %‘��AØ×"Ò" : :¨c°1Ñ#5Ô#5Ñ6Ô6Ð6Ø×!Ò! !Ñ$Ô$Ð$Ð$Ø�9�c +¨zÑ:Ô:Ð;ˆDØ—;’;˜tÑ$Ô$Ð$ØŒ>˜*Ô%ð 	I¨3¯7ª7°;Ñ+?Ô+?ð 	IØ—’˜Ñ$Ô$ð	Ið ×&Ò& s¨CÑ0Ô0Ð0à—{’{ 3Ñ'Ô'ˆHØ—{’{ 3Ñ'Ô'ˆHØ×&Ò&°H°H°H¸h¸hÐ'GÑHÔHÐHrm   c                ó   — dS )NÚInfrp   rù   s     rl   Ú_print_Infinityz JuliaCodePrinter._print_Infinity#  ó   € Øˆurm   c                ó   — dS )Nz-Infrp   rù   s     rl   Ú_print_NegativeInfinityz(JuliaCodePrinter._print_NegativeInfinity'  ó   € Øˆvrm   c                ó   — dS )NÚNaNrp   rù   s     rl   Ú
_print_NaNzJuliaCodePrinter._print_NaN+  r  rm   c                óR   ‡ — dd                      ˆ fd„|D ¦   «         ¦  «        z   dz   S )NzAny[ú, c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r€   ©r–   ©r‡   r¸   rh   s     €rl   r‹   z/JuliaCodePrinter._print_list.<locals>.<genexpr>0  s-   øè è € Ð!?Ð!?°Q $§+¢+¨a¡.¤.Ð!?Ð!?Ð!?Ð!?Ð!?Ð!?rm   ú])Újoinrù   s   ` rl   Ú_print_listzJuliaCodePrinter._print_list/  s4   ø€ Ø˜Ÿ	š	Ð!?Ð!?Ð!?Ð!?¸$Ð!?Ñ!?Ô!?Ñ?Ô?Ñ?À#ÑEÐErm   c                ó–   — t          |¦  «        dk    rd|                      |d         ¦  «        z  S d|                      |d¦  «        z  S )Nr‘   z(%s,)r   r²   r  )r¶   r–   Ú	stringifyrù   s     rl   Ú_print_tuplezJuliaCodePrinter._print_tuple3  sE   € Ýˆt‰9Œ9˜Š>ˆ>Ø˜TŸ[š[¨¨a¬Ñ1Ô1Ñ1Ð1à˜DŸNšN¨4°Ñ6Ô6Ñ6Ð6rm   c                ó   — dS )NÚtruerp   rù   s     rl   Ú_print_BooleanTruez#JuliaCodePrinter._print_BooleanTrue;  r  rm   c                ó   — dS )NÚfalserp   rù   s     rl   Ú_print_BooleanFalsez$JuliaCodePrinter._print_BooleanFalse?  s   € Øˆwrm   c                óD   — t          |¦  «                             ¦   «         S r€   )Ústrr˜   rù   s     rl   Ú_print_boolzJuliaCodePrinter._print_boolC  s   € Ý�4‰yŒy�ŠÑ Ô Ð rm   c                óp  ‡ — t           j        |j        v rd|j        ›d|j        ›d�S |j        |j        fdk    rd|d         z  S |j        dk    rd|                     ‰ ddd	¬
¦  «        z  S |j        dk    r$dd                     ˆ fd„|D ¦   «         ¦  «        z  S d|                     ‰ dddd	¬¦  «        z  S )Nzzeros(r  rÂ   )r‘   r‘   z[%s])r   r   r‘   r¤   rµ   )ÚrowstartÚrowendÚcolsepc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rp   r   r!  s     €rl   r¯   z6JuliaCodePrinter._print_MatrixBase.<locals>.<listcomp>U  s#   ø€ Ð&AÐ&AÐ&A¸! t§{¢{°1¡~¤~Ð&AÐ&AÐ&Arm   z;
)r2  r3  Úrowsepr4  )r   ÚZerorŒ   rŠ   rŽ   Útabler#  )rh   ÚAs   ` rl   Ú_print_MatrixBasez"JuliaCodePrinter._print_MatrixBaseK  sÝ   ø€ åŒ6�Q”WÐÐÐØ&'¤f f f¨a¬f¨f¨fÐ5Ð5ØŒf�a”fÐ Ò'Ð'Ø˜A˜dœGÑ#Ð#ØŒV�qŠ[ˆ[Ø˜AŸGšG D°2¸bÈ˜GÑMÔMÑMÐMØŒV�qŠ[ˆ[à˜DŸIšIÐ&AÐ&AÐ&AÐ&A¸qÐ&AÑ&AÔ&AÑBÔBÑBÐBØ˜Ÿš ¨r¸"Ø',°Sð  ñ :ô :ñ :ð 	:rm   c                ó^  — ddl m} |                     ¦   «         } |d„ |D ¦   «         ¦  «        } |d„ |D ¦   «         ¦  «        } |d„ |D ¦   «         ¦  «        }d|                      |¦  «        ›d|                      |¦  «        ›d|                      |¦  «        ›d|j        ›d|j        ›d�S )	Nr   )ÚMatrixc                ó$   — g | ]}|d          dz   ‘ŒS )r   r‘   rp   ©r‡   Úks     rl   r¯   z;JuliaCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>^  ó    € Ð(Ð(Ð( �A�a”D˜1‘HÐ(Ð(Ð(rm   c                ó$   — g | ]}|d          d z   ‘ŒS )r‘   rp   r>  s     rl   r¯   z;JuliaCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>_  r@  rm   c                ó   — g | ]
}|d          ‘ŒS )é   rp   r>  s     rl   r¯   z;JuliaCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>`  s   € Ð&Ð&Ð&˜q�a˜”dÐ&Ð&Ð&rm   zsparse(r  rÂ   )Úsympy.matricesr<  Úcol_listr–   rŠ   rŽ   )rh   r9  r<  ÚLÚIÚJÚAIJs          rl   Ú_print_SparseRepMatrixz'JuliaCodePrinter._print_SparseRepMatrixZ  sÏ   € Ø)Ð)Ð)Ð)Ð)Ð)Ø�JŠJ‰LŒLˆàˆFÐ(Ð( aÐ(Ñ(Ô(Ñ)Ô)ˆØˆFÐ(Ð( aÐ(Ñ(Ô(Ñ)Ô)ˆØˆfÐ&Ð& AÐ&Ñ&Ô&Ñ'Ô'ˆˆØ/3¯{ª{¸1©~¬~¨~¨~¸t¿{º{È1¹~¼~¸~¸~Ø,0¯KªK¸Ñ,<Ô,<Ð,<Ð,<¸a¼f¸f¸fÀaÄfÀfÀfðNð 	Nrm   c                ó†   — |                       |j        t          d         d¬¦  «        d|j        dz   ›d|j        dz   ›d�z   S )NÚAtomT)Ústrictú[r‘   ú,r"  )r«   Úparentr   r‰   rˆ   rù   s     rl   Ú_print_MatrixElementz%JuliaCodePrinter._print_MatrixElemente  sJ   € Ø× Ò  ¤­j¸Ô.@ÈÐ ÑNÔNÐNØœ6 A™:˜:˜: t¤v°¡z z zÐ2ñ3ð 	3rm   c                óÜ   ‡ — ˆ fd„}‰                       |j        ¦  «        dz    ||j        |j        j        d         ¦  «        z   dz    ||j        |j        j        d         ¦  «        z   dz   S )Nc                ó<  •— | d         dz   }| d         }| d         }‰                      |¦  «        }||k    rdn‰                      |¦  «        }|dk    r|dk    r||k    rdS ||k    r|S |dz   |z   S d                     |‰                      |¦  «        |f¦  «        S )Nr   r‘   rC  r”   r“   )r–   r#  )r­   ÚlimÚlÚhÚstepÚlstrÚhstrrh   s          €rl   Ústrslicez5JuliaCodePrinter._print_MatrixSlice.<locals>.strslicek  s­   ø€ Ø�!”�q‘ˆAØ�!”ˆAØ�Q”4ˆDØ—;’;˜q‘>”>ˆDØ šH˜H�5�5¨$¯+ª+°a©.¬.ˆDØ�qŠyˆyØ˜’6�6˜a 3šh˜hØ˜3Ø˜’6�6Ø�Kà #™:¨Ñ,Ð,à—x’x  t§{¢{°4Ñ'8Ô'8¸$Ð ?Ñ@Ô@Ð@rm   rN  r   rO  r‘   r"  )r–   rP  ÚrowslicerŒ   Úcolslice)rh   rÖ   rZ  s   `  rl   Ú_print_MatrixSlicez#JuliaCodePrinter._print_MatrixSlicej  s‘   ø€ ð	Að 	Að 	Að 	Að 	Að —’˜DœKÑ(Ô(¨3Ñ.Ø�˜œ¨¬Ô(9¸!Ô(<Ñ=Ô=ñ>Ø@CñDà�˜œ¨¬Ô(9¸!Ô(<Ñ=Ô=ñ>à@CñDð 	Erm   c                óš   ‡ — ˆ fd„|j         D ¦   «         }‰                      |j        j        ¦  «        ›dd                     |¦  «        ›d�S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rp   r   )r‡   r‰   rh   s     €rl   r¯   z3JuliaCodePrinter._print_Indexed.<locals>.<listcomp>€  s#   ø€ Ð7Ð7Ð7 A�—’˜Q‘”Ð7Ð7Ð7rm   rN  rO  r"  )r›   r–   rÎ   r—   r#  )rh   rÖ   Úindss   `  rl   Ú_print_IndexedzJuliaCodePrinter._print_Indexed  sM   ø€ Ø7Ð7Ð7Ð7¨¬Ð7Ñ7Ô7ˆØŸ;š; t¤y¤Ñ7Ô7Ð7Ð7¸¿ºÀ$¹¼¸¸ÐHÐHrm   c                óH   — d|                       |j        d         ¦  «        z  S )Nzeye(%s)r   )r–   rŒ   rù   s     rl   Ú_print_Identityz JuliaCodePrinter._print_Identityƒ  s   € Ø˜4Ÿ;š; t¤z°!¤}Ñ5Ô5Ñ5Ð5rm   c                óT   ‡ ‡— d                      ˆˆ fd„‰j        D ¦   «         ¦  «        S )Nz .* c                óV   •— g | ]%}‰                      |t          ‰¦  «        ¦  «        ‘Œ&S rp   ©r«   r   ©r‡   ÚargrÖ   rh   s     €€rl   r¯   z;JuliaCodePrinter._print_HadamardProduct.<locals>.<listcomp>‡  sA   ø€ ð 0ð 0ð 0Ø!ð !×-Ò-¨cµ:¸dÑ3CÔ3CÑDÔDð 0ð 0ð 0rm   )r#  rÏ   rù   s   ``rl   Ú_print_HadamardProductz'JuliaCodePrinter._print_HadamardProduct†  sG   øø€ Ø�{Š{ð 0ð 0ð 0ð 0ð 0Ø%)¤Yð0ñ 0ô 0ñ 1ô 1ð 	1rm   c                ó²   — t          |¦  «        }d                     |                      |j        |¦  «        |                      |j        |¦  «        g¦  «        S )Nz.**)r   r#  r«   rÎ   r,   rï   s      rl   Ú_print_HadamardPowerz%JuliaCodePrinter._print_HadamardPowerŠ  sT   € Ý˜$ÑÔˆØ�zŠzØ×Ò˜dœi¨Ñ.Ô.Ø×Ò˜dœh¨Ñ-Ô-ðñ ô ð 	rm   c                ób   — |j         dk    rt          |j        ¦  «        S |j        ›d|j         ›�S )Nr‘   z // )rÒ   r/  rq   rù   s     rl   Ú_print_Rationalz JuliaCodePrinter._print_Rational‘  s0   € ØŒ6�QŠ;ˆ;Ý�t”v‘;”;ÐØ!œV˜V˜V T¤V VÐ,Ð,rm   c                ó¾   — ddl m}m} |j        } |t          j        d|z  z  ¦  «         ||j        t          j        z   |¦  «        z  }|                      |¦  «        S )Nr   )r.   r<   rC  )	Úsympy.functionsr.   r<   Úargumentr   ÚPirÇ   ÚHalfr–   )rh   rÖ   r.   r<   r­   Úexpr2s         rl   Ú	_print_jnzJuliaCodePrinter._print_jn—  óf   € Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØŒMˆØ�•Q”T˜1˜Q™3‘ZÑ Ô   ¨¬µa´fÑ)<¸aÑ!@Ô!@Ñ@ˆØ�{Š{˜5Ñ!Ô!Ð!rm   c                ó¾   — ddl m}m} |j        } |t          j        d|z  z  ¦  «         ||j        t          j        z   |¦  «        z  }|                      |¦  «        S )Nr   )r.   r=   rC  )	ro  r.   r=   rp  r   rq  rÇ   rr  r–   )rh   rÖ   r.   r=   r­   rs  s         rl   Ú	_print_ynzJuliaCodePrinter._print_ynž  ru  rm   c                ó‚   — d                      |                      |j        d         t          j        z  ¦  «        ¦  «        S )Nzsinc({})r   )rx   r–   rÏ   r   rq  rù   s     rl   Ú_print_sinczJuliaCodePrinter._print_sinc¤  s/   € à× Ò  §¢¨T¬Y°q¬\½A¼DÑ-@Ñ!AÔ!AÑBÔBÐBrm   c                ór  ‡ — |j         d         j        dk    rt          d¦  «        ‚g }‰ j        d         rcˆ fd„|j         d d…         D ¦   «         }d‰                      |j         d         j        ¦  «        z  }d                     |¦  «        |z   }d|z   d	z   S t          |j         ¦  «        D ]ö\  }\  }}|d
k    r,|                     d‰                      |¦  «        z  ¦  «         nb|t          |j         ¦  «        dz
  k    r|dk    r|                     d¦  «         n+|                     d‰                      |¦  «        z  ¦  «         ‰                      |¦  «        }	|                     |	¦  «         |t          |j         ¦  «        dz
  k    r|                     d¦  «         Œ÷d                     |¦  «        S )Nr§   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.r\   c                óŽ   •— g | ]A\  }}d                       ‰                     |¦  «        ‰                     |¦  «        ¦  «        ‘ŒBS )z({}) ? ({}) :)rx   r–   )r‡   rØ   r×   rh   s      €rl   r¯   z5JuliaCodePrinter._print_Piecewise.<locals>.<listcomp>¶  sV   ø€ ð 3ð 3ð 3á˜1˜að '×-Ò-ØŸš A™œ¨¯ª°A©¬ñ8ô 8ð 3ð 3ð 3rm   z (%s)ú
ú(rÂ   r   zif (%s)r‘   Úelsezelseif (%s)r”   )
rÏ   ÚcondÚ
ValueErrorrô   r–   rÖ   r#  Ú	enumeraterš   r¶   )
rh   rÖ   r‚   ÚecpairsÚelastÚpwr‰   rØ   r×   Úcode0s
   `         rl   Ú_print_Piecewisez!JuliaCodePrinter._print_Piecewise¨  sÁ  ø€ ØŒ9�RŒ=Ô Ò%Ð%õ ð /ñ 0ô 0ð 0ð
 ˆØŒ>˜(Ô#ð 	$ð3ð 3ð 3ð 3à#'¤9¨S¨b¨S¤>ð3ñ 3ô 3ˆGð ˜dŸkšk¨$¬)°B¬-Ô*<Ñ=Ô=Ñ=ˆEØ—’˜7Ñ#Ô# eÑ+ˆBð ˜‘8˜c‘>Ð!å& t¤yÑ1Ô1ð 
(ð 
(‘	�‘6�A�qØ˜’6�6Ø—L’L ¨T¯[ª[¸©^¬^Ñ!;Ñ<Ô<Ð<Ð<Ø�#˜dœi™.œ.¨1Ñ,Ò,Ð,°°d²°Ø—L’L Ñ(Ô(Ð(Ð(à—L’L °·²¸Q±´Ñ!?Ñ@Ô@Ð@ØŸš A™œ�Ø—’˜UÑ#Ô#Ð#Ø�˜DœI™œ¨Ñ*Ò*Ð*Ø—L’L Ñ'Ô'Ð'øØ—9’9˜UÑ#Ô#Ð#rm   c                óN  ‡ ‡— ‰                      ¦   «         \  }}d}|j        rZ|                     ¦   «         \  }}|j        r|j        rt          | |¦  «        Šd}n!|j        r|j        rt          | |¦  «        Šd}|d                     ˆˆ fd„‰j        D ¦   «         ¦  «        z   S )Nr¤   r£   z * c              3  ó^   •K  — | ]'}‰                      |t          ‰¦  «        ¦  «        V — Œ(d S r€   rf  rg  s     €€rl   r‹   z1JuliaCodePrinter._print_MatMul.<locals>.<genexpr>Ú  s;   øè è € ÐKÐK¸#ˆT×Ò˜s¥J¨tÑ$4Ô$4Ñ5Ô5ÐKÐKÐKÐKÐKÐKrm   )Úas_coeff_mmulr·   Úas_real_imagÚis_zerorÍ   r	   r#  rÏ   )rh   rÖ   r×   Úmr)   rO   rN   s   ``     rl   Ú_print_MatMulzJuliaCodePrinter._print_MatMulÌ  sÈ   øø€ Ø×!Ò!Ñ#Ô#‰ˆˆ1àˆØŒ;ð 	Ø—^’^Ñ%Ô%‰FˆB�ØŒzð ˜bœnð Ý" A 2 qÑ)Ô)�Ø��Ø”ð  ¤ð Ý" A 2 qÑ)Ô)�Ø�à�e—j’jØKÐKÐKÐKÐKÀÄÐKÑKÔKñ
ô 
ñ 
ð 	
rm   c                óÔ  ‡
‡— t          |t          ¦  «        r=|                      |                     d¦  «        ¦  «        }d                     |¦  «        S d}dŠdŠ
d„ |D ¦   «         }ˆfd„|D ¦   «         }ˆ
fd„|D ¦   «         }g }d	}t          |¦  «        D ]Q\  }}	|	d
v r|                     |	¦  «         Œ|||         z  }|                     ||z  ›|	›�¦  «         |||         z  }ŒR|S )z0Accepts a string of code or a list of code linesTr¤   z    )z
^function z^if ú^elseif ú^else$z^for )z^end$r�  r�  c                ó8   — g | ]}|                      d ¦  «        ‘ŒS )z 	)Úlstrip)r‡   Úlines     rl   r¯   z0JuliaCodePrinter.indent_code.<locals>.<listcomp>ë  s$   € Ð6Ð6Ð6¨�—’˜UÑ#Ô#Ð6Ð6Ð6rm   c                ób   •‡— g | ]*Št          t          ˆfd „‰D ¦   «         ¦  «        ¦  «        ‘Œ+S )c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r€   r   ©r‡   rO   r“  s     €rl   r‹   z:JuliaCodePrinter.indent_code.<locals>.<listcomp>.<genexpr>í  ó-   øè è € ÐBÐB°"�V B¨Ñ-Ô-ÐBÐBÐBÐBÐBÐBrm   ©ÚintÚany)r‡   r“  Ú	inc_regexs    @€rl   r¯   z0JuliaCodePrinter.indent_code.<locals>.<listcomp>í  óO   øø€ ð (ð (ð (Øõ �ÐBÐBÐBÐB¸	ÐBÑBÔBÑBÔBÑCÔCð (ð (ð (rm   c                ób   •‡— g | ]*Št          t          ˆfd „‰D ¦   «         ¦  «        ¦  «        ‘Œ+S )c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r€   r   r–  s     €rl   r‹   z:JuliaCodePrinter.indent_code.<locals>.<listcomp>.<genexpr>ï  r—  rm   r˜  )r‡   r“  Ú	dec_regexs    @€rl   r¯   z0JuliaCodePrinter.indent_code.<locals>.<listcomp>ï  rœ  rm   r   )r¤   r|  )rÐ   r/  r�   Ú
splitlinesr#  r�  rš   )rh   ÚcodeÚ
code_linesÚtabÚincreaseÚdecreaseÚprettyÚlevelÚnr“  rŸ  r›  s             @@rl   r�   zJuliaCodePrinter.indent_codeÞ  sD  øø€ õ �d�CÑ Ô ð 	'Ø×)Ò)¨$¯/ª/¸$Ñ*?Ô*?Ñ@Ô@ˆJØ—7’7˜:Ñ&Ô&Ð&àˆØIˆ	Ø3ˆ	ð 7Ð6°Ð6Ñ6Ô6ˆð(ð (ð (ð (Ø!%ð(ñ (ô (ˆð(ð (ð (ð (Ø!%ð(ñ (ô (ˆð ˆØˆÝ  ‘”ð 	!ð 	!‰GˆAˆtØ�zÐ!Ð!Ø—’˜dÑ#Ô#Ð#ØØ�X˜a”[Ñ ˆEØ�MŠM C¨¡I I¨t¨tÐ4Ñ5Ô5Ð5Ø�X˜a”[Ñ ˆEˆEØˆrm   )7Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚprintmethodÚlanguageÚ
_operatorsra   r   r]   Ú__annotations__r`   rr   ru   rz   r~   rƒ   r�   r¡   rÞ   ræ   rí   rð   r÷   rú   rü   rÿ   r  r  r  r  r  r  r$  r'  Ú_print_Tupler*  r-  r0  r:  rJ  rQ  r]  ra  rc  ri  rk  rm  rt  rw  ry  r†  r�  r�   Ú__classcell__)rk   s   @rl   rQ   rQ   0   s}  ø€ € € € € € ðð ð €KØ€Hð ØØðð €Jð )-¨¨[Ô-Jð )ð )ØØØØð	Oð Oð )ð )Ðð ð ð ñ ð !#ð /ð /ð /ð /ð /ð /ðð ð ð!ð !ð !ð#ð #ð #ð3ð 3ð 3ð'ð 'ð 'ðBð Bð Bð	'ð 	'ð 	'ðHZð HZð HZðT9ð 9ð 9ð>ð >ð >ð(=ð =ð =ð5ð 5ð 5ð 5ð 5ðð ð ð5ð 5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð 5ðIð Ið Ið:ð ð ðð ð ðð ð ðFð Fð Fð7ð 7ð 7ð
  €Lðð ð ðð ð ð!ð !ð !ð:ð :ð :ðNð Nð Nð3ð 3ð 3ð
Eð Eð Eð*Ið Ið Ið6ð 6ð 6ð1ð 1ð 1ðð ð ð-ð -ð -ð"ð "ð "ð"ð "ð "ðCð Cð Cð"$ð "$ð "$ðH
ð 
ð 
ð$ð ð ð ð ð ð rm   rQ   Nc                óH   — t          |¦  «                             | |¦  «        S )a)  Converts `expr` to a string of Julia code.

    Parameters
    ==========

    expr : Expr
        A SymPy expression to be converted.
    assign_to : optional
        When given, the argument is used as the name of the variable to which
        the expression is assigned.  Can be a string, ``Symbol``,
        ``MatrixSymbol``, or ``Indexed`` type.  This can be helpful for
        expressions that generate multi-line statements.
    precision : integer, optional
        The precision for numbers such as pi  [default=16].
    user_functions : dict, optional
        A dictionary where keys are ``FunctionClass`` instances and values are
        their string representations.  Alternatively, the dictionary value can
        be a list of tuples i.e. [(argument_test, cfunction_string)].  See
        below for examples.
    human : bool, optional
        If True, the result is a single string that may contain some constant
        declarations for the number symbols.  If False, the same information is
        returned in a tuple of (symbols_to_declare, not_supported_functions,
        code_text).  [default=True].
    contract: bool, optional
        If True, ``Indexed`` instances are assumed to obey tensor contraction
        rules and the corresponding nested loops over indices are generated.
        Setting contract=False will not generate loops, instead the user is
        responsible to provide values for the indices in the code.
        [default=True].
    inline: bool, optional
        If True, we try to create single-statement code instead of multiple
        statements.  [default=True].

    Examples
    ========

    >>> from sympy import julia_code, symbols, sin, pi
    >>> x = symbols('x')
    >>> julia_code(sin(x).series(x).removeO())
    'x .^ 5 / 120 - x .^ 3 / 6 + x'

    >>> from sympy import Rational, ceiling
    >>> x, y, tau = symbols("x, y, tau")
    >>> julia_code((2*tau)**Rational(7, 2))
    '8 * sqrt(2) * tau .^ (7 // 2)'

    Note that element-wise (Hadamard) operations are used by default between
    symbols.  This is because its possible in Julia to write "vectorized"
    code.  It is harmless if the values are scalars.

    >>> julia_code(sin(pi*x*y), assign_to="s")
    's = sin(pi * x .* y)'

    If you need a matrix product "*" or matrix power "^", you can specify the
    symbol as a ``MatrixSymbol``.

    >>> from sympy import Symbol, MatrixSymbol
    >>> n = Symbol('n', integer=True, positive=True)
    >>> A = MatrixSymbol('A', n, n)
    >>> julia_code(3*pi*A**3)
    '(3 * pi) * A ^ 3'

    This class uses several rules to decide which symbol to use a product.
    Pure numbers use "*", Symbols use ".*" and MatrixSymbols use "*".
    A HadamardProduct can be used to specify componentwise multiplication ".*"
    of two MatrixSymbols.  There is currently there is no easy way to specify
    scalar symbols, so sometimes the code might have some minor cosmetic
    issues.  For example, suppose x and y are scalars and A is a Matrix, then
    while a human programmer might write "(x^2*y)*A^3", we generate:

    >>> julia_code(x**2*y*A**3)
    '(x .^ 2 .* y) * A ^ 3'

    Matrices are supported using Julia inline notation.  When using
    ``assign_to`` with matrices, the name can be specified either as a string
    or as a ``MatrixSymbol``.  The dimensions must align in the latter case.

    >>> from sympy import Matrix, MatrixSymbol
    >>> mat = Matrix([[x**2, sin(x), ceiling(x)]])
    >>> julia_code(mat, assign_to='A')
    'A = [x .^ 2 sin(x) ceil(x)]'

    ``Piecewise`` expressions are implemented with logical masking by default.
    Alternatively, you can pass "inline=False" to use if-else conditionals.
    Note that if the ``Piecewise`` lacks a default term, represented by
    ``(expr, True)`` then an error will be thrown.  This is to prevent
    generating an expression that may not evaluate to anything.

    >>> from sympy import Piecewise
    >>> pw = Piecewise((x + 1, x > 0), (x, True))
    >>> julia_code(pw, assign_to=tau)
    'tau = ((x > 0) ? (x + 1) : (x))'

    Note that any expression that can be generated normally can also exist
    inside a Matrix:

    >>> mat = Matrix([[x**2, pw, sin(x)]])
    >>> julia_code(mat, assign_to='A')
    'A = [x .^ 2 ((x > 0) ? (x + 1) : (x)) sin(x)]'

    Custom printing can be defined for certain types by passing a dictionary of
    "type" : "function" to the ``user_functions`` kwarg.  Alternatively, the
    dictionary value can be a list of tuples i.e., [(argument_test,
    cfunction_string)].  This can be used to call a custom Julia function.

    >>> from sympy import Function
    >>> f = Function('f')
    >>> g = Function('g')
    >>> custom_functions = {
    ...   "f": "existing_julia_fcn",
    ...   "g": [(lambda x: x.is_Matrix, "my_mat_fcn"),
    ...         (lambda x: not x.is_Matrix, "my_fcn")]
    ... }
    >>> mat = Matrix([[1, x]])
    >>> julia_code(f(x) + g(x) + g(mat), user_functions=custom_functions)
    'existing_julia_fcn(x) + my_fcn(x) + my_mat_fcn([1 x])'

    Support for loops is provided through ``Indexed`` types. With
    ``contract=True`` these expressions will be turned into loops, whereas
    ``contract=False`` will just print the assignment expression that should be
    looped over:

    >>> from sympy import Eq, IndexedBase, Idx
    >>> len_y = 5
    >>> y = IndexedBase('y', shape=(len_y,))
    >>> t = IndexedBase('t', shape=(len_y,))
    >>> Dy = IndexedBase('Dy', shape=(len_y-1,))
    >>> i = Idx('i', len_y-1)
    >>> e = Eq(Dy[i], (y[i+1]-y[i])/(t[i+1]-t[i]))
    >>> julia_code(e.rhs, assign_to=e.lhs, contract=False)
    'Dy[i] = (y[i + 1] - y[i]) ./ (t[i + 1] - t[i])'
    )rQ   Údoprint)rÖ   Ú	assign_tori   s      rl   Ú
julia_coder¶  þ  s#   € õL ˜HÑ%Ô%×-Ò-¨d°IÑ>Ô>Ð>rm   c                ó:   — t          t          | fi |¤Ž¦  «         dS )z~Prints the Julia representation of the given expression.

    See `julia_code` for the meaning of the optional arguments.
    N)Úprintr¶  )rÖ   ri   s     rl   Úprint_julia_coder¹  ‡  s(   € õ
 
�*�TÐ
&Ð
&˜XÐ
&Ð
&Ñ'Ô'Ð'Ð'Ð'rm   r€   )r¬  Ú
__future__r   Útypingr   Ú
sympy.corer   r   r   r   Úsympy.core.mulr	   Úsympy.core.numbersr
   Úsympy.printing.codeprinterr   Úsympy.printing.precedencer   r   rO   r   rc   rf   rQ   r¶  r¹  rp   rm   rl   ú<module>rÁ     sR  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð ð
(ð 
(ð 
(€ð ØØØØØ
Ø
ðð €ðKð Kð Kð Kð K�{ñ Kô Kð Kð\F?ð F?ð F?ð F?ðR(ð (ð (ð (ð (rm   