§
    OŠtj}c  ã            	      ó*  — 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i dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.d/d0d1d2d3d4œ¥Z G d5„ d6e¦  «        Zd:d8„Zd9„ Zd7S );ai  
Octave (and Matlab) code printer

The `OctaveCodePrinter` converts SymPy expressions into Octave expressions.
It uses a subset of the Octave language for Matlab compatibility.

A complete code generator, which uses `octave_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)1ÚsinÚcosÚtanÚcotÚsecÚcscÚasinÚacosÚacotÚatanÚatan2ÚasecÚacscÚsinhÚcoshÚtanhÚcothÚcschÚsechÚasinhÚacoshÚatanhÚacothÚasechÚacschÚerfcÚerfiÚerfÚerfinvÚerfcinvÚbesseliÚbesseljÚbesselkÚbesselyÚ	bernoulliÚbetaÚeulerÚexpÚ	factorialÚfloorÚfresnelcÚfresnelsÚgammaÚharmonicÚlogÚpolylogÚsignÚzetaÚlegendreÚAbsÚabsÚargÚangleÚbinomialÚbincoeffÚceilingÚceilÚ
chebyshevuÚ
chebyshevUÚ
chebyshevtÚ
chebyshevTÚChiÚcoshintÚCiÚcosintÚ	conjugateÚconjÚ
DiracDeltaÚdiracÚ	HeavisideÚ	heavisideÚimÚimagÚlaguerreÚ	laguerreLÚLambertWÚlambertwÚliÚlogintÚloggammaÚgammalnÚMaxÚmaxÚminÚmodÚpsiÚrealÚ
pochhammerÚsinhintÚsinint)ÚMinÚModÚ	polygammaÚreÚRisingFactorialÚShiÚSic            	      ó´  ‡ — 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d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Zd"„ Z e Z!e 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.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9d9„ Z:d:„ Z;d;„ Z<e<xZ=Z>d<„ Z?e?xZ@ZAd=„ ZBd>„ ZCd?„ ZDˆ xZES )@ÚOctaveCodePrinterzL
    A printer to convert expressions to strings of Octave/Matlab code.
    Ú_octaveÚOctaveú&ú|ú~)Ú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 )Nr}   )	ÚsuperÚ__init__ÚdictÚzipÚknown_fcns_src1Úknown_functionsÚupdateÚknown_fcns_src2Úget)ÚselfÚsettingsÚ	userfuncsÚ	__class__s      €úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/octave.pyrƒ   zOctaveCodePrinter.__init__Y   s…   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ý#¥C­½Ñ$IÔ$IÑJÔJˆÔØÔ×#Ò#¥D­Ñ$9Ô$9Ñ:Ô:Ð:Ø—L’LÐ!1°2Ñ6Ô6ˆ	ØÔ×#Ò# IÑ.Ô.Ð.Ð.Ð.ó    c                ó   — |dz  S )Né   © )r‹   Úps     r�   Ú_rate_index_positionz&OctaveCodePrinter._rate_index_positiona   s   € Ø�‰sˆ
r�   c                ó   — d|z  S )Nz%s;r“   )r‹   Ú
codestrings     r�   Ú_get_statementz OctaveCodePrinter._get_statemente   s   € Ø�zÑ!Ð!r�   c                ó,   — d                      |¦  «        S )Nz% {}©Úformat)r‹   Útexts     r�   Ú_get_commentzOctaveCodePrinter._get_commenti   s   € Ø�}Š}˜TÑ"Ô"Ð"r�   c                ó.   — d                      ||¦  «        S )Nz{} = {};rš   )r‹   ÚnameÚvalues      r�   Ú_declare_number_constz'OctaveCodePrinter._declare_number_constm   s   € Ø× Ò   uÑ-Ô-Ð-r�   c                ó,   — |                       |¦  «        S ©N)Úindent_code)r‹   Úliness     r�   Ú_format_codezOctaveCodePrinter._format_codeq   s   € Ø×Ò Ñ&Ô&Ð&r�   c                óN   ‡— |j         \  Š}ˆfd„t          |¦  «        D ¦   «         S )Nc              3  óD   •K  — | ]}t          ‰¦  «        D ]}||fV — Œ	Œd S r£   )Úrange)Ú.0ÚjÚiÚrowss      €r�   ú	<genexpr>z=OctaveCodePrinter._traverse_matrix_indices.<locals>.<genexpr>x   s:   øè è € ÐAÐA˜1µU¸4±[´[ÐAÐA°��A�ÐAÐAÐAÐAÐAÐAÐAr�   )Úshaper©   )r‹   ÚmatÚcolsr­   s      @r�   Ú_traverse_matrix_indicesz*OctaveCodePrinter._traverse_matrix_indicesu   s.   ø€ à”Y‰
ˆˆdØAÐAÐAÐA¥ d¡¤ÐAÑAÔAÐAr�   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)r‹   ÚindicesÚ
open_linesÚclose_linesr¬   ÚvarÚstartÚstops           r�   Ú_get_loop_opening_endingz*OctaveCodePrinter._get_loop_opening_ending{   s—   € Øˆ
ØˆØð 	&ð 	&ˆAå" 4¤;Ø”W˜aœg¨™k¨1¬7°Q©;Ð7ñ 9ô  9ÑˆC�˜à×ÒÐ°#°#°#°u°u°u¸d¸dÐCÑDÔDÐDØ×Ò˜uÑ%Ô%Ð%Ð%Ø˜;Ð&Ð&r�   c                ó”  ‡ ‡— |j         rA|j        r:t          j        |z  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 �]v}	|	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        rt|	t          j        urf|	j        d	k    r'|                     t5          |	j        ¦  «        ¦  «         |	j        d	k    r'|                     t5          |	j        ¦  «        ¦  «         �Œa|                     |	¦  «         �Œx|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   |z   |d         z   S t=          d„ |D ¦   «         ¦  «        rdnd}| |||
¦  «        z   |z   d |||¦  «        z  z   S )Nz%sir   ú-Ú )ÚoldÚnoneéÿÿÿÿF)Úevaluater´   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r“   ©Úparenthesize©rª   ÚxÚprecr‹   s     €€r�   ú
<listcomp>z0OctaveCodePrinter._print_Mul.<locals>.<listcomp>¶   ó)   ø€ Ð7Ð7Ð7°�×"Ò" 1 dÑ+Ô+Ð7Ð7Ð7r�   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r“   rÍ   rÏ   s     €€r�   rÒ   z0OctaveCodePrinter._print_Mul.<locals>.<listcomp>·   rÓ   r�   z(%s)c                óš   — |d         }t          dt          | ¦  «        ¦  «        D ]$}| |dz
           j        rdnd}||z   ||         z   }Œ%|S )Nr   r´   Ú*ú.*)r©   ÚlenÚ	is_number)ÚaÚa_strÚrr¬   Úmulsyms        r�   Úmultjoinz.OctaveCodePrinter._print_Mul.<locals>.multjoin¿   s\   € à�a”ˆAÝ˜1�c !™fœfÑ%Ô%ð *ð *�Ø ! ! A¡#¤Ô 0Ð:˜˜°d�Ø˜‘J  q¤Ñ)��ØˆHr�   ú/ú./c              3  ó$   K  — | ]}|j         V — Œd S r£   ©rÙ   )rª   Úbis     r�   r®   z/OctaveCodePrinter._print_Mul.<locals>.<genexpr>Í   s$   è è € Ð9Ð9° ¤Ð9Ð9Ð9Ð9Ð9Ð9r�   )rÙ   Úis_imaginaryr   ÚImaginaryUnitÚ
is_Integerr¹   r   Úas_coeff_Mulr	   ÚorderÚas_ordered_factorsr   Ú	make_argsÚis_commutativeÚis_Powr5   Úis_RationalÚis_negativer½   r   ÚbaserØ   ÚargsÚ
isinstanceÚInfinityr”   r   ÚqÚOneÚindexÚall)r‹   ÚexprÚcÚer>   rÚ   ÚbÚ	pow_parenrð   ÚitemrÛ   Úb_strrÞ   ÚdivsymrÑ   s   `             @r�   Ú
_print_MulzOctaveCodePrinter._print_Mul‡   s�  øø€ àŒNð 	>˜tÔ0ð 	>Ý” Ñ%Ô1ð	>à˜4Ÿ;š;­¬Ð'7¸Ñ'<Ñ=Ô=Ñ=Ð=õ ˜$ÑÔˆà× Ò Ñ"Ô"‰ˆˆ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µ!´*Ð&<Ð&<Ø”6˜Q’;�;Ø—H’H�X d¤fÑ-Ô-Ñ.Ô.Ð.Ø”6˜Q’;�;Ø—H’H�X d¤fÑ-Ô-Ñ.Ô.Ð.ùà—’˜‘”�‘àˆ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Ñ(Ô(Ñ)øð	ð 	ð 	ð ð 	:Ø˜(˜( 1 eÑ,Ô,Ñ,Ð,Ý�‰VŒV�qŠ[ˆ[Ø˜aœDœNÐ4�S�S°ˆFØ˜(˜( 1 eÑ,Ô,Ñ,¨vÑ5¸¸a¼Ñ@Ð@åÐ9Ð9°qÐ9Ñ9Ô9Ñ9Ô9ÐC�S�S¸tˆFØ˜8˜8 A uÑ-Ô-Ñ-ØñØ# h h¨q°%Ñ&8Ô&8Ñ8ñ9ð :r�   c                ó¦   — |                       |j        ¦  «        }|                       |j        ¦  «        }|j        }d                     |||¦  «        S )Nz{} {} {})r¹   ÚlhsÚrhsÚrel_opr›   )r‹   r÷   Úlhs_codeÚrhs_codeÚops        r�   Ú_print_Relationalz#OctaveCodePrinter._print_RelationalÑ   sG   € Ø—;’;˜tœxÑ(Ô(ˆØ—;’;˜tœxÑ(Ô(ˆØŒ[ˆØ× Ò  ¨2¨xÑ8Ô8Ð8r�   c                ól  — t          d„ |j        D ¦   «         ¦  «        rdnd}t          |¦  «        }t          |j        d¦  «        rd|                      |j        ¦  «        z  S |j        r‘t          |j        d¦  «        r3|j        j        rdnd}d	|z   d|                      |j        ¦  «        z  z   S t          |j        d
¦  «        r4|j        j        rdnd}d	|z   d|  	                    |j        |¦  «        z  z   S |  	                    |j        |¦  «        ›|›|  	                    |j        |¦  «        ›�S )Nc              3  ó$   K  — | ]}|j         V — Œd S r£   râ   )rª   rÐ   s     r�   r®   z/OctaveCodePrinter._print_Pow.<locals>.<genexpr>Ø   s$   è è € Ð>Ð>¨q˜qœ{Ð>Ð>Ð>Ð>Ð>Ð>r�   ú^z.^g      à?zsqrt(%s)g      à¿rß   rà   Ú1rÊ   ú%s)
rö   rð   r   r
   r5   r¹   rï   rë   rÙ   rÎ   )r‹   r÷   Ú	powsymbolÚPRECÚsyms        r�   Ú
_print_PowzOctaveCodePrinter._print_Pow×   sE  € ÝÐ>Ð>°D´IÐ>Ñ>Ô>Ñ>Ô>ÐH�C�CÀDˆ	å˜$ÑÔˆå˜œ #Ñ&Ô&ð 	7Ø §¢¨D¬IÑ 6Ô 6Ñ6Ð6àÔð 	MÝ˜DœH dÑ+Ô+ð GØ!œYÔ0Ð:�c�c°d�Ø˜S‘y :°·²¸D¼IÑ0FÔ0FÑ#FÑFÐFÝ˜DœH bÑ)Ô)ð MØ!œYÔ0Ð:�c�c°d�Ø˜S‘y 4¨$×*;Ò*;¸D¼IÀtÑ*LÔ*LÑ#LÑLÐLà×,Ò,¨T¬Y¸Ñ=Ô=Ð=¸y¸yØ×,Ò,¨T¬X°tÑ<Ô<Ð<ð>ð 	>r�   c                ó’   — t          |¦  «        }|                      |j        |¦  «        ›d|                      |j        |¦  «        ›�S )Nr
  )r   rÎ   rï   r5   ©r‹   r÷   r  s      r�   Ú_print_MatPowzOctaveCodePrinter._print_MatPowë   sL   € Ý˜$ÑÔˆØ×+Ò+¨D¬I°tÑ<Ô<Ð<Ð<Ø×+Ò+¨D¬H°dÑ;Ô;Ð;ð=ð 	=r�   c                ó’   — t          |¦  «        }|                      |j        |¦  «        ›d|                      |j        |¦  «        ›�S )Nz \ )r   rÎ   ÚmatrixÚvectorr  s      r�   Ú_print_MatrixSolvez$OctaveCodePrinter._print_MatrixSolveð   sN   € Ý˜$ÑÔˆØ!×.Ò.¨t¬{¸DÑAÔAÐAÐAØ!×.Ò.¨t¬{¸DÑAÔAÐAðCð 	Cr�   c                ó   — dS )NÚpir“   ©r‹   r÷   s     r�   Ú	_print_PizOctaveCodePrinter._print_Piõ   ó   € Øˆtr�   c                ó   — dS )NÚ1ir“   r  s     r�   Ú_print_ImaginaryUnitz&OctaveCodePrinter._print_ImaginaryUnitù   r  r�   c                ó   — dS )Nzexp(1)r“   r  s     r�   Ú_print_Exp1zOctaveCodePrinter._print_Exp1ý   s   € Øˆxr�   c                ó   — dS )Nz(1+sqrt(5))/2r“   r  s     r�   Ú_print_GoldenRatioz$OctaveCodePrinter._print_GoldenRatio  s	   € ð ˆr�   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  Ú	_settingsrñ   rð   r½   r…   r¹   ÚhasÚ_doprint_loopsr˜   )r‹   r÷   r%  r&  r'  r  r  ÚexpressionsÚ
conditionsrù   rø   Útempr  r  s                 r�   Ú_print_Assignmentz#OctaveCodePrinter._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ÐHr�   c                ó   — dS )NÚinfr“   r  s     r�   Ú_print_Infinityz!OctaveCodePrinter._print_Infinity$  ó   € Øˆur�   c                ó   — dS )Nz-infr“   r  s     r�   Ú_print_NegativeInfinityz)OctaveCodePrinter._print_NegativeInfinity(  ó   € Øˆvr�   c                ó   — dS )NÚNaNr“   r  s     r�   Ú
_print_NaNzOctaveCodePrinter._print_NaN,  r5  r�   c                óR   ‡ — dd                      ˆ fd„|D ¦   «         ¦  «        z   dz   S )NÚ{ú, c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r£   ©r¹   ©rª   rÚ   r‹   s     €r�   r®   z0OctaveCodePrinter._print_list.<locals>.<genexpr>1  s-   øè è € Ð<Ð<°!˜tŸ{š{¨1™~œ~Ð<Ð<Ð<Ð<Ð<Ð<r�   Ú}©Újoinr  s   ` r�   Ú_print_listzOctaveCodePrinter._print_list0  s4   ø€ Ø�T—Y’YÐ<Ð<Ð<Ð<°tÐ<Ñ<Ô<Ñ<Ô<Ñ<¸sÑBÐBr�   c                ó   — dS )NÚtruer“   r  s     r�   Ú_print_BooleanTruez$OctaveCodePrinter._print_BooleanTrue7  r8  r�   c                ó   — dS )NÚfalser“   r  s     r�   Ú_print_BooleanFalsez%OctaveCodePrinter._print_BooleanFalse;  s   € Øˆwr�   c                óD   — t          |¦  «                             ¦   «         S r£   )Ústrr»   r  s     r�   Ú_print_boolzOctaveCodePrinter._print_bool?  s   € Ý�4‰yŒy�ŠÑ Ô Ð r�   c                óB  ‡ ‡— ‰j         ‰j        fdk    rdS t          j        ‰j        v rd‰j         ›d‰j        ›d�S ‰j         ‰j        fdk    r‰                      ‰d         ¦  «        S dd                     ˆˆ fd	„t          ‰j         ¦  «        D ¦   «         ¦  «        z  S )
N)r   r   z[]zzeros(r>  ú))r´   r´   z[%s]z; c              3  ón   •K  — | ]/}d                       ˆfd„‰|dd…f         D ¦   «         ¦  «        V — Œ0dS )ú c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r“   r@  rA  s     €r�   rÒ   zAOctaveCodePrinter._print_MatrixBase.<locals>.<genexpr>.<listcomp>P  s#   ø€ Ð+LÐ+LÐ+L¸q¨D¯KªK¸©N¬NÐ+LÐ+LÐ+Lr�   NrC  )rª   rÜ   ÚAr‹   s     €€r�   r®   z6OctaveCodePrinter._print_MatrixBase.<locals>.<genexpr>P  sd   øè è € ð ":ð ":Ø&'ð #&§(¢(Ð+LÐ+LÐ+LÐ+LÀAÀaÈÈÈÀdÄGÐ+LÑ+LÔ+LÑ"MÔ"Mð ":ð ":ð ":ð ":ð ":ð ":r�   )r­   r±   r   ÚZeror¯   r¹   rD  r©   )r‹   rT  s   ``r�   Ú_print_MatrixBasez#OctaveCodePrinter._print_MatrixBaseG  sÀ   øø€ àŒF�A”FÐ˜vÒ%Ð%Ø�4ÝŒV�q”wÐÐÐØ&'¤f f f¨a¬f¨f¨fÐ5Ð5ØŒf�a”fÐ Ò'Ð'à—;’;˜q œwÑ'Ô'Ð'Ø˜Ÿ	š	ð ":ð ":ð ":ð ":ð ":Ý+0°´©=¬=ð":ñ ":ô ":ñ :ô :ñ :ð 	:r�   c                ód  — ddl m} |                     ¦   «         } |d„ |D ¦   «         g¦  «        } |d„ |D ¦   «         g¦  «        } |d„ |D ¦   «         g¦  «        }d|                      |¦  «        ›d|                      |¦  «        ›d|                      |¦  «        ›d|j        ›d|j        ›d�S )	Nr   )ÚMatrixc                ó$   — g | ]}|d          dz   ‘ŒS )r   r´   r“   ©rª   Úks     r�   rÒ   z<OctaveCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>X  ó    € Ð)Ð)Ð) !�Q�q”T˜A‘XÐ)Ð)Ð)r�   c                ó$   — g | ]}|d          d z   ‘ŒS )r´   r“   rZ  s     r�   rÒ   z<OctaveCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>Y  r\  r�   c                ó   — g | ]
}|d          ‘ŒS )é   r“   rZ  s     r�   rÒ   z<OctaveCodePrinter._print_SparseRepMatrix.<locals>.<listcomp>Z  s   € Ð'Ð'Ð' �q˜”tÐ'Ð'Ð'r�   zsparse(r>  rP  )Úsympy.matricesrX  Úcol_listr¹   r­   r±   )r‹   rT  rX  ÚLÚIÚJÚAIJs          r�   Ú_print_SparseRepMatrixz(OctaveCodePrinter._print_SparseRepMatrixT  sØ   € Ø)Ð)Ð)Ð)Ð)Ð)Ø�JŠJ‰LŒLˆàˆFÐ)Ð) qÐ)Ñ)Ô)Ð*Ñ+Ô+ˆØˆFÐ)Ð) qÐ)Ñ)Ô)Ð*Ñ+Ô+ˆØˆfÐ'Ð' QÐ'Ñ'Ô'Ð(Ñ)Ô)ˆˆØ/3¯{ª{¸1©~¬~¨~¨~¸t¿{º{È1¹~¼~¸~¸~Ø,0¯KªK¸Ñ,<Ô,<Ð,<Ð,<¸a¼f¸f¸fÀaÄfÀfÀfðNð 	Nr�   c                ó†   — |                       |j        t          d         d¬¦  «        d|j        dz   ›d|j        dz   ›d�z   S )NÚAtomT)Ústrictú(r´   r>  rP  )rÎ   Úparentr   r¬   r«   r  s     r�   Ú_print_MatrixElementz&OctaveCodePrinter._print_MatrixElement_  sJ   € Ø× Ò  ¤­j¸Ô.@ÈÐ ÑNÔNÐNØ œF Q™J˜J˜J¨¬°©
¨
¨
Ð3ñ4ð 	4r�   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´   r_  r·   r¶   )r¹   rD  )rÐ   ÚlimÚlÚhÚstepÚlstrÚhstrr‹   s          €r�   Ústrslicez6OctaveCodePrinter._print_MatrixSlice.<locals>.strslicee  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¸$Ð ?Ñ@Ô@Ð@r�   rj  r   r>  r´   rP  )r¹   rk  Úrowslicer¯   Úcolslice)r‹   r÷   ru  s   `  r�   Ú_print_MatrixSlicez$OctaveCodePrinter._print_MatrixSliced  s‘   ø€ ð	Að 	Að 	Að 	Að 	Að —’˜DœKÑ(Ô(¨3Ñ.Ø�˜œ¨¬Ô(9¸!Ô(<Ñ=Ô=ñ>Ø@DñEà�˜œ¨¬Ô(9¸!Ô(<Ñ=Ô=ñ>à@CñDð 	Er�   c                óš   ‡ — ˆ fd„|j         D ¦   «         }‰                      |j        j        ¦  «        ›dd                     |¦  «        ›d�S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r“   r@  )rª   r¬   r‹   s     €r�   rÒ   z4OctaveCodePrinter._print_Indexed.<locals>.<listcomp>z  s#   ø€ Ð7Ð7Ð7 A�—’˜Q‘”Ð7Ð7Ð7r�   rj  r>  rP  )r¾   r¹   rï   rº   rD  )r‹   r÷   Úindss   `  r�   Ú_print_Indexedz OctaveCodePrinter._print_Indexedy  sM   ø€ Ø7Ð7Ð7Ð7¨¬Ð7Ñ7Ô7ˆØŸ;š; t¤y¤Ñ7Ô7Ð7Ð7¸¿ºÀ4¹¼¸¸ÐIÐIr�   c                óh   ‡ ‡— t           d         Šdt          ˆˆ fd„|j        D ¦   «         ¦  «        z  S )Nr   zdouble(%s == %s)c              3  óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r£   rÍ   rÏ   s     €€r�   r®   z:OctaveCodePrinter._print_KroneckerDelta.<locals>.<genexpr>€  sG   øè è € ð *>ð *>Ø./ð +/×*;Ò*;¸A¸tÑ*DÔ*Dð *>ð *>ð *>ð *>ð *>ð *>r�   )r   Útuplerð   )r‹   r÷   rÑ   s   ` @r�   Ú_print_KroneckerDeltaz'OctaveCodePrinter._print_KroneckerDelta~  sT   øø€ Ý˜%Ô ˆØ!¥Eð *>ð *>ð *>ð *>ð *>Ø37´9ð*>ñ *>ô *>ñ %>ô %>ñ >ð 	>r�   c                óT   ‡ ‡— d                      ˆˆ fd„‰j        D ¦   «         ¦  «        S )Nr×   c                óV   •— g | ]%}‰                      |t          ‰¦  «        ¦  «        ‘Œ&S r“   )rÎ   r   )rª   rC   r÷   r‹   s     €€r�   rÒ   z<OctaveCodePrinter._print_HadamardProduct.<locals>.<listcomp>„  sA   ø€ ð 0ð 0ð 0Ø!ð ×+Ò+¨Cµ¸DÑ1AÔ1AÑBÔBð 0ð 0ð 0r�   )rD  rð   r  s   ``r�   Ú_print_HadamardProductz(OctaveCodePrinter._print_HadamardProductƒ  sG   øø€ Ø�yŠyð 0ð 0ð 0ð 0ð 0Ø%)¤Yð0ñ 0ô 0ñ 1ô 1ð 	1r�   c                ó²   — t          |¦  «        }d                     |                      |j        |¦  «        |                      |j        |¦  «        g¦  «        S )Nz.**)r   rD  rÎ   rï   r5   r  s      r�   Ú_print_HadamardPowerz&OctaveCodePrinter._print_HadamardPower‡  sT   € Ý˜$ÑÔˆØ�zŠzØ×Ò˜dœi¨Ñ.Ô.Ø×Ò˜dœh¨Ñ-Ô-ðñ ô ð 	r�   c                óÀ   ‡ — |j         }t          |¦  «        dk    r|d         |d         k    r	|d         g}d                     ˆ fd„|D ¦   «         ¦  «        }d|z   dz   S )Nr_  r   r´   r>  c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r£   r@  )rª   Únr‹   s     €r�   r®   z4OctaveCodePrinter._print_Identity.<locals>.<genexpr>’  s-   øè è € Ð4Ð4¨�d—k’k !‘n”nÐ4Ð4Ð4Ð4Ð4Ð4r�   zeye(rP  )r¯   rØ   rD  )r‹   r÷   r¯   Úss   `   r�   Ú_print_Identityz!OctaveCodePrinter._print_IdentityŽ  sk   ø€ Ø”
ˆÝˆu‰:Œ:˜Š?ˆ?˜u Qœx¨5°¬8Ò3Ð3Ø˜1”X�JˆEØ�IŠIÐ4Ð4Ð4Ð4¨eÐ4Ñ4Ô4Ñ4Ô4ˆØ˜‰z˜CÑÐr�   c                ó¦   — d                      |                      |j        d         ¦  «        |                      |j        d         ¦  «        ¦  «        S )Nz (gammainc({1}, {0}).*gamma({0}))r   r´   ©r›   r¹   rð   r  s     r�   Ú_print_lowergammaz#OctaveCodePrinter._print_lowergamma•  sF   € à1×8Ò8Ø�KŠK˜œ	 !œÑ%Ô% t§{¢{°4´9¸Q´<Ñ'@Ô'@ñBô Bð 	Br�   c                ó¦   — d                      |                      |j        d         ¦  «        |                      |j        d         ¦  «        ¦  «        S )Nz)(gammainc({1}, {0}, 'upper').*gamma({0}))r   r´   rŒ  r  s     r�   Ú_print_uppergammaz#OctaveCodePrinter._print_uppergamma›  sF   € Ø:×AÒAØ�KŠK˜œ	 !œÑ%Ô% t§{¢{°4´9¸Q´<Ñ'@Ô'@ñBô Bð 	Br�   c                ób   — d|                       |j        d         t          j        z  ¦  «        z  S )Nzsinc(%s)r   )r¹   rð   r   ÚPir  s     r�   Ú_print_sinczOctaveCodePrinter._print_sinc   s&   € à˜DŸKšK¨¬	°!¬µQ´TÑ(9Ñ:Ô:Ñ:Ð:r�   c                ót   — d|                       |j        ¦  «        ›d|                       |j        ¦  «        ›d�S )Núbesselh(z, 1, rP  ©r¹   rè   Úargumentr  s     r�   Ú_print_hankel1z OctaveCodePrinter._print_hankel1¥  ó>   € € Ø'+§{¢{°4´:Ñ'>Ô'>Ð'>Ð'>Ø'+§{¢{°4´=Ñ'AÔ'AÐ'AÐ'AðCð 	Cr�   c                ót   — d|                       |j        ¦  «        ›d|                       |j        ¦  «        ›d�S )Nr”  z, 2, rP  r•  r  s     r�   Ú_print_hankel2z OctaveCodePrinter._print_hankel2ª  r˜  r�   c                ó¾   — ddl m}m} |j        } |t          j        d|z  z  ¦  «         ||j        t          j        z   |¦  «        z  }|                      |¦  «        S )Nr   )Úsqrtr/   r_  )	Úsympy.functionsrœ  r/   r–  r   r‘  rè   ÚHalfr¹   )r‹   r÷   rœ  r/   rÐ   Úexpr2s         r�   Ú	_print_jnzOctaveCodePrinter._print_jn°  óf   € Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØŒMˆØ�•Q”T˜1˜Q™3‘ZÑ Ô   ¨¬µa´fÑ)<¸aÑ!@Ô!@Ñ@ˆØ�{Š{˜5Ñ!Ô!Ð!r�   c                ó¾   — ddl m}m} |j        } |t          j        d|z  z  ¦  «         ||j        t          j        z   |¦  «        z  }|                      |¦  «        S )Nr   )rœ  r1   r_  )	r�  rœ  r1   r–  r   r‘  rè   rž  r¹   )r‹   r÷   rœ  r1   rÐ   rŸ  s         r�   Ú	_print_ynzOctaveCodePrinter._print_yn·  r¡  r�   c                óH   — d|                       |j        d         ¦  «        z  S )Nzairy(0, %s)r   ©r¹   rð   r  s     r�   Ú_print_airyaizOctaveCodePrinter._print_airyai¾  ó   € Ø˜tŸ{š{¨4¬9°Q¬<Ñ8Ô8Ñ8Ð8r�   c                óH   — d|                       |j        d         ¦  «        z  S )Nzairy(1, %s)r   r¥  r  s     r�   Ú_print_airyaiprimez$OctaveCodePrinter._print_airyaiprimeÂ  r§  r�   c                óH   — d|                       |j        d         ¦  «        z  S )Nzairy(2, %s)r   r¥  r  s     r�   Ú_print_airybizOctaveCodePrinter._print_airybiÆ  r§  r�   c                óH   — d|                       |j        d         ¦  «        z  S )Nzairy(3, %s)r   r¥  r  s     r�   Ú_print_airybiprimez$OctaveCodePrinter._print_airybiprimeÊ  r§  r�   c                ó|   — |j         \  }}|dk    r|                      |¦  «        S d|                      |¦  «        z  S )Nr´   z
expint(%s))rð   Ú_print_not_supportedr¹   )r‹   r÷   ÚmurÐ   s       r�   Ú_print_expintzOctaveCodePrinter._print_expintÎ  s?   € Ø”	‰ˆˆAØ�Š7ˆ7Ø×,Ò,¨TÑ2Ô2Ð2Ø˜dŸkšk¨!™nœnÑ,Ð,r�   c           	     óò   ‡ — t          |j        ¦  «        dk    sJ ‚d                     ‰ j        |j        j                 d                     ˆ fd„t          |j        ¦  «        D ¦   «         ¦  «        ¬¦  «        S )Nr_  z{name}({args})r>  c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r“   r@  )rª   rÐ   r‹   s     €r�   rÒ   z?OctaveCodePrinter._one_or_two_reversed_args.<locals>.<listcomp>Ù  s#   ø€ ÐHÐHÐH¨q˜DŸKšK¨™NœNÐHÐHÐHr�   )rŸ   rð   )rØ   rð   r›   r‡   rŽ   Ú__name__rD  Úreversedr  s   ` r�   Ú_one_or_two_reversed_argsz+OctaveCodePrinter._one_or_two_reversed_argsÕ  sw   ø€ Ý�4”9‰~Œ~ Ò"Ð"Ð"Ð"Ø×&Ò&ØÔ% d¤nÔ&=Ô>Ø—’ÐHÐHÐHÐHµH¸T¼YÑ4GÔ4GÐHÑHÔHÑIÔIð 'ñ 
ô 
ð 	
r�   c                óè   — d                      | j        |j        j                 |                      |j        d         ¦  «        |                       |j        |j        dd …         Ž ¦  «        ¬¦  «        S )Nz{name}({arg1}, {arg2})r   r´   )rŸ   Úarg1Úarg2)r›   r‡   rŽ   r´  r¹   rð   Úfuncr  s     r�   Ú_nested_binary_math_funcz*OctaveCodePrinter._nested_binary_math_funcà  sf   € Ø'×.Ò.ØÔ% d¤nÔ&=Ô>Ø—’˜TœY qœ\Ñ*Ô*Ø—’˜Y˜TœY¨¬	°!°"°"¬Ð6Ñ7Ô7ð /ñ ô ð 	r�   c                ó˜  ‡ — |j         d         j        dk    rt          d¦  «        ‚g }‰ j        d         rvˆ fd„|j         d d…         D ¦   «         }d‰                      |j         d         j        ¦  «        z  }d                     |¦  «        |z   dt          |¦  «        z  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({0}).*({1}) + (~({0})).*()r›   r¹   )rª   rù   rø   r‹   s      €r�   rÒ   z6OctaveCodePrinter._print_Piecewise.<locals>.<listcomp>ø  sV   ø€ ð 3ð 3ð 3á˜1˜að 4×:Ò:ØŸš A™œ¨¯ª°A©¬ñ8ô 8ð 3ð 3ð 3r�   r  z ...
rP  rj  r   zif (%s)r´   Úelsezelseif (%s)r·   ú
)
rð   ÚcondÚ
ValueErrorr+  r¹   r÷   rD  rØ   Ú	enumerater½   )
r‹   r÷   r¥   ÚecpairsÚelastÚpwr¬   rù   rø   Úcode0s
   `         r�   Ú_print_Piecewisez"OctaveCodePrinter._print_Piecewiseê  sÑ  ø€ ØŒ9�RŒ=Ô Ò%Ð%õ ð /ñ 0ô 0ð 0ð
 ˆØŒ>˜(Ô#ð 	$ð3ð 3ð 3ð 3à#'¤9¨S¨b¨S¤>ð3ñ 3ô 3ˆGð ˜4Ÿ;š; t¤y°¤}Ô'9Ñ:Ô:Ñ:ˆEØ—’˜wÑ'Ô'¨%Ñ/°#µc¸'±l´lÑ2BÑBˆ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Ñ#Ô#Ð#r�   c                ó¢   — t          |j        ¦  «        dk    r#d|                      |j        d         ¦  «        z  S |                      |¦  «        S )Nr´   zzeta(%s)r   )rØ   rð   r¹   r¯  r  s     r�   Ú_print_zetazOctaveCodePrinter._print_zeta  sH   € ÝˆtŒy‰>Œ>˜QÒÐØ §¢¨D¬I°a¬LÑ 9Ô 9Ñ9Ð9ð ×,Ò,¨TÑ2Ô2Ð2r�   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     r�   rÒ   z1OctaveCodePrinter.indent_code.<locals>.<listcomp>$  s$   € Ð6Ð6Ð6¨�—’˜UÑ#Ô#Ð6Ð6Ð6r�   c                ób   •‡— g | ]*Št          t          ˆfd „‰D ¦   «         ¦  «        ¦  «        ‘Œ+S )c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r£   r   ©rª   rm   rÏ  s     €r�   r®   z;OctaveCodePrinter.indent_code.<locals>.<listcomp>.<genexpr>&  ó-   øè è € ÐBÐB°"�V B¨Ñ-Ô-ÐBÐBÐBÐBÐBÐBr�   ©ÚintÚany)rª   rÏ  Ú	inc_regexs    @€r�   rÒ   z1OctaveCodePrinter.indent_code.<locals>.<listcomp>&  óO   øø€ ð (ð (ð (Øõ �ÐBÐBÐBÐB¸	ÐBÑBÔBÑBÔBÑCÔCð (ð (ð (r�   c                ób   •‡— g | ]*Št          t          ˆfd „‰D ¦   «         ¦  «        ¦  «        ‘Œ+S )c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r£   r   rÒ  s     €r�   r®   z;OctaveCodePrinter.indent_code.<locals>.<listcomp>.<genexpr>(  rÓ  r�   rÔ  )rª   rÏ  Ú	dec_regexs    @€r�   rÒ   z1OctaveCodePrinter.indent_code.<locals>.<listcomp>(  rØ  r�   r   )rÇ   r¿  )rñ   rM  r¤   Ú
splitlinesrD  rÂ  r½   )r‹   ÚcodeÚ
code_linesÚtabÚincreaseÚdecreaseÚprettyÚlevelrˆ  rÏ  rÛ  r×  s             @@r�   r¤   zOctaveCodePrinter.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Øˆr�   )Fr´  Ú
__module__Ú__qualname__Ú__doc__ÚprintmethodÚlanguageÚ
_operatorsr„   r   r€   Ú__annotations__rƒ   r•   r˜   r�   r¡   r¦   r²   rÄ   rÿ   r  r  r  r  r  r  r!  r#  r1  r4  r7  r;  rE  Ú_print_tupleÚ_print_TupleÚ_print_ListrH  rK  rN  rV  rf  rl  rx  r|  r€  rƒ  r…  rŠ  r�  r�  r’  r—  rš  r   r£  r¦  r©  r«  r­  r±  r¶  Ú_print_DiracDeltaÚ_print_LambertWr»  Ú
_print_MaxÚ
_print_MinrÇ  rÉ  r¤   Ú__classcell__)rŽ   s   @r�   rr   rr   A   sý  ø€ € € € € € ðð ð €KØ€Hð ØØðð €Jð )-¨¨[Ô-Jð )ð )ØØØØð	Oð Oð )ð )Ðð ð ð ñ ð !#ð /ð /ð /ð /ð /ð /ðð ð ð"ð "ð "ð#ð #ð #ð.ð .ð .ð'ð 'ð 'ðBð Bð Bð	'ð 	'ð 	'ðH:ð H:ð H:ðT9ð 9ð 9ð>ð >ð >ð(=ð =ð =ð
Cð Cð Cð
ð ð ðð ð ðð ð ðð ð ðIð Ið Ið:ð ð ðð ð ðð ð ðCð Cð Cà€LØ€LØ€Kðð ð ðð ð ð!ð !ð !ð
:ð 
:ð 
:ðNð Nð Nð4ð 4ð 4ð
Eð Eð Eð*Jð Jð Jð
>ð >ð >ð
1ð 1ð 1ðð ð ð ð  ð  ðBð Bð BðBð Bð Bð
;ð ;ð ;ð
Cð Cð Cð
Cð Cð Cð"ð "ð "ð"ð "ð "ð9ð 9ð 9ð9ð 9ð 9ð9ð 9ð 9ð9ð 9ð 9ð-ð -ð -ð
ð 
ð 
ð +DÐCÐ˜ðð ð ð 7Ð6€J�ð"$ð "$ð "$ðJ3ð 3ð 3ðð ð ð ð ð ð r�   rr   Nc                óH   — t          |¦  «                             | |¦  «        S )aŠ  Converts `expr` to a string of Octave (or Matlab) code.

    The string uses a subset of the Octave language for Matlab compatibility.

    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 octave_code, symbols, sin, pi
    >>> x = symbols('x')
    >>> octave_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")
    >>> octave_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 very common in Octave to write "vectorized"
    code.  It is harmless if the values are scalars.

    >>> octave_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)
    >>> octave_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:

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

    Matrices are supported using Octave 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)]])
    >>> octave_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))
    >>> octave_code(pw, assign_to=tau)
    'tau = ((x > 0).*(x + 1) + (~(x > 0)).*(x));'

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

    >>> mat = Matrix([[x**2, pw, sin(x)]])
    >>> octave_code(mat, assign_to='A')
    'A = [x.^2 ((x > 0).*(x + 1) + (~(x > 0)).*(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 Octave function.

    >>> from sympy import Function
    >>> f = Function('f')
    >>> g = Function('g')
    >>> custom_functions = {
    ...   "f": "existing_octave_fcn",
    ...   "g": [(lambda x: x.is_Matrix, "my_mat_fcn"),
    ...         (lambda x: not x.is_Matrix, "my_fcn")]
    ... }
    >>> mat = Matrix([[1, x]])
    >>> octave_code(f(x) + g(x) + g(mat), user_functions=custom_functions)
    'existing_octave_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]))
    >>> octave_code(e.rhs, assign_to=e.lhs, contract=False)
    'Dy(i) = (y(i + 1) - y(i))./(t(i + 1) - t(i));'
    )rr   Údoprint)r÷   Ú	assign_torŒ   s      r�   Úoctave_coderö  7  s#   € õP ˜XÑ&Ô&×.Ò.¨t°YÑ?Ô?Ð?r�   c                ó:   — t          t          | fi |¤Ž¦  «         dS )zŒPrints the Octave (or Matlab) representation of the given expression.

    See `octave_code` for the meaning of the optional arguments.
    N)Úprintrö  )r÷   rŒ   s     r�   Úprint_octave_coderù  Â  s(   € õ
 
�+�dÐ
'Ð
'˜hÐ
'Ð
'Ñ(Ô(Ð(Ð(Ð(r�   r£   )ræ  Ú
__future__r   Útypingr   Ú
sympy.corer   r   r   r   Úsympy.core.mulr	   Úsympy.core.numbersr
   Úsympy.printing.codeprinterr   Úsympy.printing.precedencer   r   rm   r   r†   r‰   rr   rö  rù  r“   r�   r�   ú<module>r     s(  ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð ð:ð :ð :€ðØ	ˆ5ðà	ˆ7ðð �
ðð ˆvð	ð
 �,ðð �,ðð 
ˆ9ðð 	ˆ(ðð �ðð �'ðð �ðð 	ˆ&ðð �ðð �
ðð 	ˆ(ðð  �	ð!ð" 
ˆ5ð#ð$ ØØØ
Ø#ØØ
ð1ð ð €ð8sð sð sð sð s˜ñ sô sð sðlH@ð H@ð H@ð H@ðV)ð )ð )ð )ð )r�   