§
    OŠtjƒi  ã                  óÆ  — d Z ddlmZ ddl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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) dd	l*m+Z+m,Z, dd
l-m.Z.m/Z/ ddl0m1Z1 ddl*m2Z2m3Z3 i dd„ dfd„ dfg“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"“Z4 e5e4fi i d#d#“d$d$“d%d%“d&d&“d'd(“d)d)“d*d*“d+d,“d-d-“d.d/“d0d1“d2d2“d3d3“d4d4“d5d5“d6d7“¤ŽZ6g d8¢Z7d9d:gZ8d;„ Z9d<„ Z: G d=„ d>e+¦  «        Z; G d?„ d@e;¦  «        Z<dA =                    ¦   «         D ]Z> e?e<dBe>z  e<j@        ¦  «         Œ G dC„ dDe<¦  «        ZAe;e<eAdEœZBdFS )Ga†  
C code printer

The C89CodePrinter & C99CodePrinter converts single SymPy expressions into
single C expressions, using the functions defined in math.h where possible.

A complete code generator, which uses ccode extensively, can be found in
sympy.utilities.codegen. The codegen module can be used to generate complete
source code files that are compilable without further modifications.


é    )Úannotations)ÚAny©Úwraps)Úchain)ÚS)Úequal_valuedÚFloat)Ú
AssignmentÚPointerÚVariableÚDeclarationÚTypeÚrealÚcomplex_ÚintegerÚbool_Úfloat32Úfloat64Úfloat80Ú	complex64Ú
complex128ÚintcÚvalue_constÚpointer_constÚint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64ÚuntypedÚnone)ÚCodePrinterÚrequires)Ú
precedenceÚ
PRECEDENCE)ÚRange)ÚccodeÚprint_ccodeÚAbsc                ó   — | j          S ©N©Ú
is_integer©Úxs    úN/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/c.pyú<lambda>r5   (   s   € ˜1œ<Ð'€ ó    Úfabsc                ó   — | j         S r/   r0   r2   s    r4   r5   r5   (   s   € ¸Q¼\€ r6   ÚabsÚsinÚcosÚtanÚasinÚacosÚatanÚatan2ÚexpÚlogÚlog10ÚsinhÚcoshÚtanhÚfloorÚceilingÚceilÚsqrtÚexp2Úexpm1Úlog2Úlog1pÚCbrtÚcbrtÚhypotÚfmaÚloggammaÚlgammaÚerfcÚMaxÚfmaxÚMinÚfminÚasinhÚacoshÚatanhÚerfÚgammaÚtgamma)!ÚautoÚbreakÚcaseÚcharÚconstÚcontinueÚdefaultÚdoÚdoubleÚelseÚenumÚexternÚfloatÚforÚgotoÚifÚintÚlongÚregisterÚreturnÚshortÚsignedÚsizeofÚstaticÚstructÚentryÚswitchÚtypedefÚunionÚunsignedÚvoidÚvolatileÚwhileÚinlineÚrestrictc                 ó,  — ddl m} m} ddlm} ddlm} i t          j        d“ | t          j        ¦  «        d“d |d¦  «        z  d“ |d¦  «        d	“ |d
¦  «        d“t          j	        d“t          j	        dz  d“t          j	        dz  d“dt          j	        z  d“dt          j	        z  d“d |t          j	        ¦  «        z  d“d |t          j	        ¦  «        z  d“ |d¦  «        d“ |d¦  «        d“d |d¦  «        z  d“d |d¦  «        z  d“S )aV   Returns a dictionary with math-related macros from math.h/cmath

    Note that these macros are not strictly required by the C/C++-standard.
    For MSVC they are enabled by defining "_USE_MATH_DEFINES" (preferably
    via a compilation flag).

    Returns
    =======

    Dictionary mapping SymPy expressions to strings (macro names)

    r   )rM   ÚSqrt)rB   )rJ   ÚM_EÚM_LOG2Eé   é   ÚM_LN2é
   ÚM_LN10ÚM_PIÚM_PI_2é   ÚM_PI_4ÚM_1_PIÚM_2_PIÚ
M_2_SQRTPIÚM_SQRT2Ú	M_SQRT1_2)
Úsympy.codegen.cfunctionsrM   r„   Ú&sympy.functions.elementary.exponentialrB   Ú(sympy.functions.elementary.miscellaneousrJ   r   ÚExp1ÚPi)rM   r„   rB   rJ   s       r4   Úget_math_macrosrš   [   sŒ  € ð 4Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø:Ð:Ð:Ð:Ð:Ð:Ø=Ð=Ð=Ð=Ð=Ð=ðÝ	Œ�ðàˆ�QŒV‰Œ�iðð 	
ˆ#ˆ#ˆa‰&Œ&‰�)ðð 	ˆˆA‰Œ�ð	ð
 	ˆˆB‰Œ�ðõ 	
Œˆfðõ 	
ŒˆQ‰�ðõ 	
ŒˆQ‰�ðð 	
�!Œ$‰�ðð 	
�!Œ$‰�ðð 	
ˆ$ˆ$�qŒt‰*Œ*‰�lðð 	
ˆ$ˆ$�qŒt‰*Œ*‰�lðð 	ˆˆQ‰Œ�ðð 	ˆˆQ‰Œ�ðð 	
ˆ$ˆ$ˆq‰'Œ'‰	�;ðð  	
ˆ$ˆ$ˆq‰'Œ'‰	�;ð!ð r6   c                ó<   ‡ — t          ‰ ¦  «        ˆ fd„¦   «         }|S )a�   Decorator for printer methods

    When a Printer's method is decorated using this decorator the expressions printed
    will first be looked for in the attribute ``math_macros``, and if present it will
    print the macro name in ``math_macros`` followed by a type suffix for the type
    ``real``. e.g. printing ``sympy.pi`` would print ``M_PIl`` if real is mapped to float80.

    c                ó|   •— || j         v r)| j         |         ›|                      t          ¦  «        ›�S  ‰| |fi |¤ŽS r/   )Úmath_macrosÚ_get_math_macro_suffixr   )ÚselfÚexprÚkwargsÚmeths      €r4   Ú_meth_wrapperz+_as_macro_if_defined.<locals>._meth_wrapper‰   sS   ø€ à�4Ô#Ð#Ð#Ø!Ô-¨dÔ3Ð3°T×5PÒ5PÕQUÑ5VÔ5VÐ5VÐWÐWà�4˜˜dÐ-Ð- fÐ-Ð-Ð-r6   r   )r¢   r£   s   ` r4   Ú_as_macro_if_definedr¤   €   s6   ø€ õ ˆ4�[„[ð.ð .ð .ð .ñ „[ð.ð Ðr6   c                  óT  ‡ — e Zd ZU dZdZdZdZ ee¦  «        Z e	e
j        fi di d e¦   «         ddœ¤ŽZd	ed
<   eeeeeeiZedededededededededededededediZded<   edhedhedhedhedhedhedhedhedhi	Zi Z ded<   edede!diZ"edede!diZ#e!diZ$dZ%dZ&e'Z(d	ed<   dWˆ fd „	Z)d!„ Z*d"„ Z+d#„ Z,d$„ Z-d%„ Z.d&„ Z/e0ˆ fd'„¦   «         Z1e0d(„ ¦   «         Z2d)„ Z3d*„ Z4d+„ Z5e0ˆ fd,„¦   «         Z6d-„ Z7d.„ Z8d/„ Z9d0„ Z:d1„ Z;ˆ fd2„Z<d3„ Z=d4„ Z>d5„ Z?d6„ Z@d7„ ZAd8„ ZBd9„ ZCd:„ ZDd;„ ZEd<„ ZFeFZGd=„ ZHd>„ ZId?„ ZJ eKdh¬@¦  «        dA„ ¦   «         ZL eKdh¬@¦  «        dB„ ¦   «         ZMdC„ ZNdD„ ZOdE„ ZPdF„ ZQ eKdGh¬@¦  «        dH„ ¦   «         ZRdI„ ZSdJ„ ZTdK„ ZUdL„ ZVdM„ ZWdN„ ZXdO„ ZYdP„ ZZdQ„ Z[dR„ Z\dS„ Z]dT„ Z^dU„ Z_dV„ Z`e^Zaˆ xZbS )XÚC89CodePrinterz<A printer to convert Python expressions to strings of C codeÚ_ccodeÚCÚC89é   TF)Ú	precisionÚuser_functionsÚcontractÚdereferenceÚerror_on_reservedúdict[str, Any]Ú_default_settingsrh   rp   rl   ÚboolÚint8_tÚint16_tÚint32_tÚint64_tzdict[Type, Any]Útype_mappingsz	stdbool.hzstdint.hzdict[Type, tuple[str, ...]]Útype_macrosÚfÚ ÚlÚFÚLNÚ_kfc           	     óø  •— |pi }| j         €'|                     dt          ¦   «         ¦  «        | _         t          t	          | j                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _        t          t	          | j                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _        t          t	          | j                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _        t          t	          | j	                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _	        t          t	          | j
                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _
        t          t	          | j                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _        t          t	          | j                             ¦   «         |                     di ¦  «                             ¦   «         ¦  «        ¦  «        | _        t          ¦   «                              |¦  «         t          | j        fi |                     d	i ¦  «        ¤Ž| _        t%          |                     d
g ¦  «        ¦  «        | _        t%          ¦   «         | _        t%          ¦   «         | _        t%          ¦   «         | _        d S )Nr�   Útype_aliasesr·   Útype_headersr¸   Útype_func_suffixesÚtype_literal_suffixesÚtype_math_macro_suffixesr¬   r®   )r�   Úpoprš   Údictr   rÀ   Úitemsr·   rÁ   r¸   rÂ   rÃ   rÄ   ÚsuperÚ__init__r¾   ÚgetÚknown_functionsÚsetÚ_dereferenceÚheadersÚ	librariesÚmacros)rŸ   ÚsettingsÚ	__class__s     €r4   rÉ   zC89CodePrinter.__init__Þ   sé  ø€ Ø�>˜rˆØÔÐ#Ø'Ÿ|š|¨M½?Ñ;LÔ;LÑMÔMˆDÔÝ ¥ tÔ'8×'>Ò'>Ñ'@Ô'@Ø'/§|¢|°NÀBÑ'GÔ'G×'MÒ'MÑ'OÔ'Oñ"Qô "Qñ Rô RˆÔå!¥%¨Ô(:×(@Ò(@Ñ(BÔ(BØ(0¯ª°_ÀbÑ(IÔ(I×(OÒ(OÑ(QÔ(Qñ#Sô #Sñ Tô TˆÔå ¥ tÔ'8×'>Ò'>Ñ'@Ô'@Ø'/§|¢|°NÀBÑ'GÔ'G×'MÒ'MÑ'OÔ'Oñ"Qô "Qñ Rô RˆÔå¥ dÔ&6×&<Ò&<Ñ&>Ô&>Ø'/§|¢|°MÀ2Ñ'FÔ'F×'LÒ'LÑ'NÔ'Nñ!Pô !Pñ Qô QˆÔå"&¥u¨TÔ-D×-JÒ-JÑ-LÔ-LØ(0¯ªÐ5IÈ2Ñ(NÔ(N×(TÒ(TÑ(VÔ(Vñ(Xô (Xñ #Yô #YˆÔå%)­%°Ô0J×0PÒ0PÑ0RÔ0RØ(0¯ªÐ5LÈbÑ(QÔ(Q×(WÒ(WÑ(YÔ(Yñ+[ô +[ñ &\ô &\ˆÔ"å(,­U°4Ô3P×3VÒ3VÑ3XÔ3XØ(0¯ªÐ5OÐQSÑ(TÔ(T×(ZÒ(ZÑ(\Ô(\ñ.^ô .^ñ )_ô )_ˆÔ%å‰Œ×Ò˜Ñ"Ô"Ð"Ý# D¤HÐSÐS°·²Ð=MÈrÑ0RÔ0RÐSÐSˆÔÝ §¢¨]¸BÑ ?Ô ?Ñ@Ô@ˆÔÝ‘u”uˆŒÝ™œˆŒÝ‘e”eˆŒˆˆr6   c                ó   — |dz  S )Né   © )rŸ   Úps     r4   Ú_rate_index_positionz#C89CodePrinter._rate_index_position÷   s   € Ø�‰sˆ
r6   c                ó:   — |                      d¦  «        r|n|dz   S )z@ Get code string as a statement - i.e. ending with a semicolon. ú;)Úendswith)rŸ   Ú
codestrings     r4   Ú_get_statementzC89CodePrinter._get_statementú   s$   € à'×0Ò0°Ñ5Ô5ÐKˆzˆz¸:ÈÑ;KÐKr6   c                ó,   — d                      |¦  «        S )Nz/* {} */)Úformat)rŸ   Útexts     r4   Ú_get_commentzC89CodePrinter._get_commentþ   s   € Ø× Ò  Ñ&Ô&Ð&r6   c                óö   — | j         t                   }t          |||                     |j        ¦  «        t
          h¬¦  «        }t          |¦  «        }|                      |                      |¦  «        ¦  «        S )N)ÚtypeÚvalueÚattrs)	rÀ   r   r   ÚevalfÚdecimal_digr   r   rÜ   Ú_print)rŸ   Únamerã   Útype_ÚvarÚdecls         r4   Ú_declare_number_constz$C89CodePrinter._declare_number_const  se   € ØÔ!¥$Ô'ˆÝ�t %¨u¯{ª{¸5Ô;LÑ/MÔ/MÕVaÐUbÐcÑcÔcˆÝ˜3ÑÔˆØ×"Ò" 4§;¢;¨tÑ#4Ô#4Ñ5Ô5Ð5r6   c                ó,   — |                       |¦  «        S r/   )Úindent_code)rŸ   Úliness     r4   Ú_format_codezC89CodePrinter._format_code  s   € Ø×Ò Ñ&Ô&Ð&r6   c                óN   ‡— |j         \  }Šˆfd„t          |¦  «        D ¦   «         S )Nc              3  óD   •K  — | ]}t          ‰¦  «        D ]}||fV — Œ	Œd S r/   )Úrange)Ú.0ÚiÚjÚcolss      €r4   ú	<genexpr>z:C89CodePrinter._traverse_matrix_indices.<locals>.<genexpr>  s:   øè è € ÐAÐA˜1µU¸4±[´[ÐAÐA°��A�ÐAÐAÐAÐAÐAÐAÐAr6   )Úshaperó   )rŸ   ÚmatÚrowsr÷   s      @r4   Ú_traverse_matrix_indicesz'C89CodePrinter._traverse_matrix_indices
  s.   ø€ Ø”Y‰
ˆˆdØAÐAÐAÐA¥ d¡¤ÐAÑAÔAÐAr6   c                ó8   •—  t          ¦   «         j        |fi |¤ŽS r/   )rÈ   Ú
_print_Mul)rŸ   r    r¡   rÒ   s      €r4   rþ   zC89CodePrinter._print_Mul  s"   ø€ à!�u‰wŒwÔ! $Ð1Ð1¨&Ð1Ð1Ð1r6   c           	     óÐ  — d| j         v r|                      |¦  «        S t          |¦  «        }|                      t          ¦  «        }t          |j        d¦  «        r@|                      t          d¦  «        ¦  «        ›d|  	                    |j
        |¦  «        ›�S t          |j        d¦  «        r(| j        ›d|›d|                      |j
        ¦  «        ›d�S |j        t          j        d	z  k    r3| j        d
k    r(| j        ›d|›d|                      |j
        ¦  «        ›d�S | j        ›d|›d|                      |j
        ¦  «        ›d|                      |j        ¦  «        ›d�S )NÚPowéÿÿÿÿg      ð?ú/g      à?rJ   ú(ú)é   r©   rP   Úpowú, )rË   Ú_print_Functionr(   Ú_get_func_suffixr   r	   rA   Ú_print_Floatr
   ÚparenthesizeÚbaseÚ_nsrç   r   ÚOneÚstandard)rŸ   r    ÚPRECÚsuffixs       r4   Ú
_print_PowzC89CodePrinter._print_Pow  sb  € à�DÔ(Ð(Ð(Ø×'Ò'¨Ñ-Ô-Ð-Ý˜$ÑÔˆØ×&Ò&¥tÑ,Ô,ˆÝ˜œ "Ñ%Ô%ð 	:Ø"×/Ò/µ°c±
´
Ñ;Ô;Ð;Ð;¸T×=NÒ=NÈtÌyÐZ^Ñ=_Ô=_Ð=_Ð`Ð`Ý˜$œ( CÑ(Ô(ð 	:Ø%)¤X X X¨v¨v¨v°t·{²{À4Ä9Ñ7MÔ7MÐ7MÐ7MÐNÐNØŒX�œ˜q™Ò Ð  T¤]°eÒ%;Ð%;Ø%)¤X X X¨v¨v¨v°t·{²{À4Ä9Ñ7MÔ7MÐ7MÐ7MÐNÐNà(,¬¨¨°&°&°&¸$¿+º+ÀdÄiÑ:PÔ:PÐ:PÐ:PØ#'§;¢;¨t¬xÑ#8Ô#8Ð#8Ð#8ð:ð :r6   c                ó  ‡ ‡— |j         \  }}|j        r^|j        rWt          |¦  «        Šˆˆ fd„|j         D ¦   «         \  }}|j        r|j        s|j        r|j        r|› d|› �S d|› d|› d|› d|› �S ‰                      |d¬¦  «        S )Nc                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS rÕ   )r  )rô   Úargr  rŸ   s     €€r4   ú
<listcomp>z-C89CodePrinter._print_Mod.<locals>.<listcomp>&  s)   ø€ ÐLÐLÐL¸3˜$×+Ò+¨C°Ñ6Ô6ÐLÐLÐLr6   z % ú((z) + z) % Úfmod)Úknown)Úargsr1   r(   Úis_nonnegativeÚis_nonpositiveÚ_print_math_func)rŸ   r    ÚnumÚdenÚsnumÚsdenr  s   `     @r4   Ú
_print_ModzC89CodePrinter._print_Mod"  sÑ   øø€ Ø”9‰ˆˆSØŒ>ð 		<˜cœnð 		<Ý˜dÑ#Ô#ˆDØLÐLÐLÐLÐLÀ$Ä)ÐLÑLÔL‰JˆD�$ð Ô"ð * sÔ'9ð *ØÔ"ð*Ø'*Ô'9ð*àÐ)Ð) 4Ð)Ð)Ð)Ø;˜Ð;Ð; Ð;Ð;¨4Ð;Ð;°TÐ;Ð;Ð;à×$Ò$ T°Ð$Ñ8Ô8Ð8r6   c                ó˜   — t          |j        ¦  «        t          |j        ¦  «        }}|                      t          ¦  «        }d||||fz  S )Nz%d.0%s/%d.0%s)rp   rÖ   ÚqÚ_get_literal_suffixr   )rŸ   r    rÖ   r$  r  s        r4   Ú_print_RationalzC89CodePrinter._print_Rational1  sB   € Ý�4”6‰{Œ{�C ¤™KœKˆ1ˆØ×)Ò)­$Ñ/Ô/ˆØ ! V¨Q°Ð!7Ñ7Ð7r6   c                óf  — t          |j        dt          j        ¦  «        }t          |j        dd ¦  «        }|j        }|�t          |t          ¦  «        r||j        }t          j        }d}|dk    s|€-t          t          |j        ¦  «        ¦  «        }|d d d…         }n|dk    rt          |j        ¦  «        }|D ]}	||fz  }|||	         z  }Œ|}t          d„ t          ||¦  «        D ¦   «         ¦  «        |z   }
|                      |j        j        ¦  «        ›d|                      |
¦  «        ›d	�S )
NÚoffsetÚstridesrÕ   r¨   r  r¼   c              3  ó8   K  — | ]}|d          |d         z  V — ŒdS )r   r‡   NrÕ   )rô   r3   s     r4   rø   z0C89CodePrinter._print_Indexed.<locals>.<genexpr>J  s.   è è € ÐBÐB q˜˜1œ˜a œd™ÐBÐBÐBÐBÐBÐBr6   ú[ú])Úgetattrr  r   ÚZeroÚindicesÚ
isinstanceÚstrrù   r  Úreversedró   ÚrankÚsumÚziprç   Úlabel)rŸ   r    r(  r)  r/  ÚdimsÚshiftÚtempÚ	traversalrõ   Ú
flat_indexs              r4   Ú_print_IndexedzC89CodePrinter._print_Indexed6  s7  € å˜œ H­a¬fÑ5Ô5ˆÝ˜$œ) Y°Ñ5Ô5ˆØ”,ˆàˆ?�j¨µ#Ñ6Ô6ˆ?Ø”:ˆDÝ”EˆEØˆDØ˜#Š~ˆ~  Ý$¥U¨4¬9Ñ%5Ô%5Ñ6Ô6�	Ø! $ $ B $œ-��Ø˜C’�Ý! $¤)Ñ,Ô,�	àð !ð !�Ø˜˜Ñ �Ø˜˜aœÑ ��ØˆGÝÐBÐB­C°¸Ñ,AÔ,AÐBÑBÔBÑBÔBÀVÑKˆ
ØŸ;š; t¤y¤Ñ7Ô7Ð7Ð7ØŸ;š; zÑ2Ô2Ð2Ð2ð4ð 	4r6   c                óF   •— t          ¦   «                              |¦  «        S r/   )rÈ   Ú_print_NumberSymbol)rŸ   r    rÒ   s     €r4   r>  z"C89CodePrinter._print_NumberSymbolN  s   ø€ å‰wŒw×*Ò*¨4Ñ0Ô0Ð0r6   c                ó   — dS )NÚHUGE_VALrÕ   ©rŸ   r    s     r4   Ú_print_InfinityzC89CodePrinter._print_InfinityR  ó   € Øˆzr6   c                ó   — dS )Nz	-HUGE_VALrÕ   rA  s     r4   Ú_print_NegativeInfinityz&C89CodePrinter._print_NegativeInfinityU  ó   € Øˆ{r6   c                ó–  ‡ — |j         d         j        dk    rt          d¦  «        ‚g }|                     t          ¦  «        �rt          |j         ¦  «        D ]Û\  }\  }}|dk    r,|                     d‰                      |¦  «        z  ¦  «         nb|t          |j         ¦  «        dz
  k    r|dk    r|                     d¦  «         n+|                     d‰                      |¦  «        z  ¦  «         ‰                      |¦  «        }|                     |¦  «         |                     d	¦  «         ŒÜd
 	                    |¦  «        S ˆ fd„|j         d d…         D ¦   «         }d‰                      |j         d         j
        ¦  «        z  }d 	                    |¦  «        |z   d 	                    dt          |¦  «        z  g¦  «        z   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   z	if (%s) {r‡   zelse {zelse if (%s) {Ú}ú
c                ót   •— g | ]4\  }}d ‰                      |¦  «        ›d‰                      |¦  «        ›d�‘Œ5S )r  z) ? (
z
)
©rç   )rô   ÚeÚcrŸ   s      €r4   r  z3C89CodePrinter._print_Piecewise.<locals>.<listcomp>s  sS   ø€ ð 0ð 0ð 0á˜˜1˜1ð 04¯{ª{¸1©~¬~¨~¨~Ø/3¯{ª{¸1©~¬~¨~¨~ð?ð 0ð 0ð 0r6   z: (
%s
)z: ú r  )r  ÚcondÚ
ValueErrorÚhasr   Ú	enumerateÚappendrç   ÚlenÚjoinr    )	rŸ   r    rï   rõ   rL  rM  Úcode0ÚecpairsÚ	last_lines	   `        r4   Ú_print_PiecewisezC89CodePrinter._print_PiecewiseX  sÂ  ø€ ØŒ9�RŒ=Ô Ò%Ð%õ ð /ñ 0ô 0ð 0ð
 ˆØ�8Š8•JÑÔñ 	QÝ& t¤yÑ1Ô1ð 	"ð 	"‘	�‘6�A�qØ˜’6�6Ø—L’L ¨t¯{ª{¸1©~¬~Ñ!=Ñ>Ô>Ð>Ð>Ø�#˜dœi™.œ.¨1Ñ,Ò,Ð,°°d²°Ø—L’L Ñ*Ô*Ð*Ð*à—L’LÐ!1°D·K²KÀ±N´NÑ!BÑCÔCÐCØŸš A™œ�Ø—’˜UÑ#Ô#Ð#Ø—’˜SÑ!Ô!Ð!Ð!Ø—9’9˜UÑ#Ô#Ð#ð0ð 0ð 0ð 0à $¤	¨#¨2¨#¤ð0ñ 0ô 0ˆGð % t§{¢{°4´9¸R´=Ô3EÑ'FÔ'FÑFˆIØ—9’9˜WÑ%Ô%¨	Ñ1°C·H²H¸cÅ#ÀgÁ,Ä,Ñ>NÐ=OÑ4PÔ4PÑPÐPr6   c                ób   — ddl m} |                      |                     |d¬¦  «        ¦  «        S )Nr   )Ú	PiecewiseF)Údeep)Úsympy.functionsr[  rç   Úrewrite)rŸ   r    r[  s      r4   Ú
_print_ITEzC89CodePrinter._print_ITEy  s6   € Ø-Ð-Ð-Ð-Ð-Ð-Ø�{Š{˜4Ÿ<š<¨	¸˜<Ñ>Ô>Ñ?Ô?Ð?r6   c                óº   — d                      |                      |j        t          d         d¬¦  «        |j        |j        |j        j        d         z  z   ¦  «        S )Nz{}[{}]ÚAtomT)Ústrictr‡   )rÞ   r  Úparentr)   rö   rõ   rù   rA  s     r4   Ú_print_MatrixElementz#C89CodePrinter._print_MatrixElement}  s[   € Ø�Š˜t×0Ò0°´½jÈÔ>PØð  1ñ  ô  Øœ& 4¤6¨$¬+Ô*;¸AÔ*>Ñ#>Ñ>ñ@ô @ð 	@r6   c                ó’   •— t          ¦   «                              |¦  «        }|| j        d         v rd                     |¦  «        S |S )Nr®   z(*{}))rÈ   Ú_print_SymbolÚ	_settingsrÞ   )rŸ   r    rè   rÒ   s      €r4   rf  zC89CodePrinter._print_Symbol�  sC   ø€ Ý‰wŒw×$Ò$ TÑ*Ô*ˆØ�4”> -Ô0Ð0Ð0Ø—>’> $Ñ'Ô'Ð'àˆKr6   c                ó¦   — |                       |j        ¦  «        }|                       |j        ¦  «        }|j        }d                     |||¦  «        S )Nz{} {} {})rç   ÚlhsÚrhsÚrel_oprÞ   )rŸ   r    Úlhs_codeÚrhs_codeÚops        r4   Ú_print_Relationalz C89CodePrinter._print_Relationalˆ  sG   € Ø—;’;˜tœxÑ(Ô(ˆØ—;’;˜tœxÑ(Ô(ˆØŒ[ˆØ× Ò  ¨2¨xÑ8Ô8Ð8r6   c                ó  — |                       |j        ¦  «        }t          |j        t          ¦  «        r|j        j        \  }}}nt          d¦  «        ‚|                       |j        ¦  «        }d                     |||||¬¦  «        S )Nz*Only iterable currently supported is RangezLfor ({target} = {start}; {target} < {stop}; {target} += {step}) {{
{body}
}})ÚtargetÚstartÚstopÚstepÚbody)	rç   rq  r0  Úiterabler*   r  ÚNotImplementedErrorru  rÞ   )rŸ   r    rq  rr  rs  rt  ru  s          r4   Ú
_print_ForzC89CodePrinter._print_ForŽ  sˆ   € Ø—’˜Tœ[Ñ)Ô)ˆÝ�d”m¥UÑ+Ô+ð 	TØ $¤Ô 2ÑˆE�4˜˜å%Ð&RÑSÔSÐSØ�{Š{˜4œ9Ñ%Ô%ˆð)ß*0ª&¸ÀeØ ¨4ð +1ñ +1ô +1ð	1r6   c                óh   — d                      |                      |j        d         ¦  «        ¦  «        S )Nz((({0}) > 0) - (({0}) < 0))r   )rÞ   rç   r  )rŸ   Úfuncs     r4   Ú_print_signzC89CodePrinter._print_sign™  s(   € Ø,×3Ò3°D·K²KÀÄ	È!ÄÑ4MÔ4MÑNÔNÐNr6   c                ón   ‡ ‡— d‰ j         v r‰                      |¦  «        S ˆˆ fd„Š ‰|j        ¦  «        S )NrV   c                óØ   •— t          | ¦  «        dk    r‰                     | d         ¦  «        S t          | ¦  «        dz  }d ‰| d |…         ¦  «         ‰| |d …         ¦  «        dœz  S )Nr‡   r   rˆ   z!((%(a)s > %(b)s) ? %(a)s : %(b)s)©ÚaÚb©rT  rç   )r  ÚhalfÚinner_print_maxrŸ   s     €€r4   rƒ  z2C89CodePrinter._print_Max.<locals>.inner_print_maxŸ  óx   ø€ Ý�4‰yŒy˜AŠ~ˆ~Ø—{’{ 4¨¤7Ñ+Ô+Ð+Ý�t‘9”9 ‘>ˆDØ6Ø$�_ T¨%¨4¨%¤[Ñ1Ô1Ø$�_ T¨$¨%¨%¤[Ñ1Ô1ð:ð :ñ ð r6   ©rË   r  r  )rŸ   r    rƒ  s   ` @r4   Ú
_print_MaxzC89CodePrinter._print_Maxœ  óX   øø€ Ø�DÔ(Ð(Ð(Ø×'Ò'¨Ñ-Ô-Ð-ð	ð 	ð 	ð 	ð 	ð 	ð ˆ˜tœyÑ)Ô)Ð)r6   c                ón   ‡ ‡— d‰ j         v r‰                      |¦  «        S ˆˆ fd„Š ‰|j        ¦  «        S )NrX   c                óØ   •— t          | ¦  «        dk    r‰                     | d         ¦  «        S t          | ¦  «        dz  }d ‰| d |…         ¦  «         ‰| |d …         ¦  «        dœz  S )Nr‡   r   rˆ   z!((%(a)s < %(b)s) ? %(a)s : %(b)s)r~  r�  )r  r‚  Úinner_print_minrŸ   s     €€r4   rŠ  z2C89CodePrinter._print_Min.<locals>.inner_print_min¬  r„  r6   r…  )rŸ   r    rŠ  s   ` @r4   Ú
_print_MinzC89CodePrinter._print_Min©  r‡  r6   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   )Ú{r  z{
z(
)rH  r  c                ó8   — g | ]}|                      d ¦  «        ‘ŒS )z 	)Úlstrip)rô   Úlines     r4   r  z.C89CodePrinter.indent_code.<locals>.<listcomp>Á  s$   € Ð4Ð4Ð4 t�—’˜EÑ"Ô"Ð4Ð4Ð4r6   c           
     ón   •— g | ]1}t          t          t          |j        ‰¦  «        ¦  «        ¦  «        ‘Œ2S rÕ   )rp   ÚanyÚmaprÚ   )rô   r�  Ú	inc_tokens     €r4   r  z.C89CodePrinter.indent_code.<locals>.<listcomp>Ã  s5   ø€ ÐMÐMÐMÀ•C��C ¤¨yÑ9Ô9Ñ:Ô:Ñ;Ô;ÐMÐMÐMr6   c           
     ón   •— g | ]1}t          t          t          |j        ‰¦  «        ¦  «        ¦  «        ‘Œ2S rÕ   )rp   r’  r“  Ú
startswith)rô   r�  Ú	dec_tokens     €r4   r  z.C89CodePrinter.indent_code.<locals>.<listcomp>Ä  s5   ø€ ÐOÐOÐOÀ$•C��C ¤°Ñ;Ô;Ñ<Ô<Ñ=Ô=ÐOÐOÐOr6   r   )rº   rI  )r0  r1  rî   Ú
splitlinesrU  rR  rS  )rŸ   ÚcodeÚ
code_linesÚtabÚincreaseÚdecreaseÚprettyÚlevelÚnr�  r—  r”  s             @@r4   rî   zC89CodePrinter.indent_code¶  s"  øø€ õ �d�CÑ Ô ð 	'Ø×)Ò)¨$¯/ª/¸$Ñ*?Ô*?Ñ@Ô@ˆJØ—7’7˜:Ñ&Ô&Ð&àˆØ,ˆ	Øˆ	à4Ð4¨tÐ4Ñ4Ô4ˆàMÐMÐMÐMÈÐMÑMÔMˆØOÐOÐOÐOÈ$ÐOÑOÔOˆàˆØˆÝ  ‘”ð 	!ð 	!‰GˆAˆtØ�zÐ!Ð!Ø—’˜dÑ#Ô#Ð#ØØ�X˜a”[Ñ ˆEØ�MŠM C¨¡I I¨t¨tÐ4Ñ5Ô5Ð5Ø�X˜a”[Ñ ˆEˆEØˆr6   c                óN   — | j         | j                             ||¦  «                 S r/   )rÂ   rÀ   rÊ   ©rŸ   ré   s     r4   r	  zC89CodePrinter._get_func_suffixÑ  s#   € ØÔ& tÔ'8×'<Ò'<¸UÀEÑ'JÔ'JÔKÐKr6   c                óN   — | j         | j                             ||¦  «                 S r/   )rÃ   rÀ   rÊ   r¢  s     r4   r%  z"C89CodePrinter._get_literal_suffixÔ  s#   € ØÔ)¨$Ô*;×*?Ò*?ÀÀuÑ*MÔ*MÔNÐNr6   c                ó¤   — | j                              ||¦  «        }| j                             |d¦  «        }| j                             ||¦  «        S )Nrº   )rÀ   rÊ   rÄ   )rŸ   ré   ÚaliasÚdflts       r4   rž   z%C89CodePrinter._get_math_macro_suffix×  sK   € ØÔ!×%Ò% e¨UÑ3Ô3ˆØÔ,×0Ò0°¸Ñ;Ô;ˆØÔ,×0Ò0°¸Ñ=Ô=Ð=r6   c                óR   ‡ — dd                      ˆ fd„|D ¦   «         ¦  «        z   dz   S )Nr�  r  c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  )rô   rL  rŸ   s     €r4   rø   z.C89CodePrinter._print_Tuple.<locals>.<genexpr>Ý  s-   øè è € Ð:Ð:°˜TŸ[š[¨™^œ^Ð:Ð:Ð:Ð:Ð:Ð:r6   rH  )rU  rA  s   ` r4   Ú_print_TuplezC89CodePrinter._print_TupleÜ  s4   ø€ Ø�4—9’9Ð:Ð:Ð:Ð:°TÐ:Ñ:Ô:Ñ:Ô:Ñ:¸3Ñ>Ð>r6   c                ód  — | j                              | j                             |t	          ¦   «         ¦  «        ¦  «         | j                             | j                             |t	          ¦   «         ¦  «        ¦  «         |                      | j                             ||j	        ¦  «        ¦  «        S r/   )
rÎ   ÚupdaterÁ   rÊ   rÌ   rÐ   r¸   rç   r·   rè   r¢  s     r4   Ú_print_TypezC89CodePrinter._print_Typeá  sƒ   € ØŒ×Ò˜DÔ-×1Ò1°%½¹¼Ñ?Ô?Ñ@Ô@Ð@ØŒ×Ò˜4Ô+×/Ò/°µs±u´uÑ=Ô=Ñ>Ô>Ð>Ø�{Š{˜4Ô-×1Ò1°%¸¼ÑDÔDÑEÔEÐEr6   c           	     óÞ  — ddl m} |j        }|j        }|j        t
          k    rt          d¦  «        ‚t          |t          ¦  «        rvd 	                    t          |j        v rdnd|                      |j        ¦  «        t          |j        v rdnd||j        v rdnd|                      |j        ¦  «        ¬	¦  «        }n�t          |t          ¦  «        rYd
 	                    t          |j        v rdnd|                      |j        ¦  «        |                      |j        ¦  «        ¬¦  «        }nt!          dt	          |¦  «        z  ¦  «        ‚|d k    r|d|                      |¦  «        z  z  }|S )Nr   )r‚   z$C does not support untyped variablesz{vc}{t} *{pc} {r}{s}zconst rº   z constz	restrict )ÚvcÚtÚpcÚrÚsz{vc}{t} {s})r®  r¯  r²  zUnknown type of var: %sz = %s)Úsympy.codegen.cnodesr‚   Úvariablerã   râ   r$   rP  r0  r   rÞ   r   rä   rç   r   Úsymbolr   rw  )rŸ   rë   r‚   rê   ÚvalÚresults         r4   Ú_print_Declarationz!C89CodePrinter._print_Declarationæ  ss  € Ø1Ð1Ð1Ð1Ð1Ð1ØŒmˆØŒiˆØŒ8•wÒÐÝÐCÑDÔDÐDå�c�7Ñ#Ô#ð 	MØ+×2Ò2Ý*¨c¬iÐ7Ð7�8�8¸RØ—+’+˜cœhÑ'Ô'Ý,°´	Ð9Ð9�8�8¸rØ!)¨S¬YÐ!6Ð!6�+�+¸BØ—+’+˜cœjÑ)Ô)ð 3ñ ô ˆFˆFõ ˜�XÑ&Ô&ð 	MØ"×)Ò)Ý*¨c¬iÐ7Ð7�8�8¸RØ—+’+˜cœhÑ'Ô'Ø—+’+˜cœjÑ)Ô)ð *ñ ô ˆFˆFõ &Ð&?Å$ÀsÁ)Ä)Ñ&KÑLÔLÐLØ�$Š;ˆ;Ø�g §¢¨CÑ 0Ô 0Ñ0Ñ0ˆFØˆr6   c                óH  — | j                              t          t          ¦  «        }| j                             | j                             |t          ¦   «         ¦  «        ¦  «         |                      |¦  «        }t          | 	                    |j
        ¦  «        ¦  «        }d|vr	d|vr|dz  }|                     d¦  «        }|d                              d¦  «        |d<   |d                              d¦  «        r|dxx         dz  cc<   d                     |¦  «        |z   S )NrL  ú.z.0r   Ú0)rÀ   rÊ   r   rÐ   r«  r¸   rÌ   r%  r1  rå   ræ   ÚsplitÚrstriprÚ   rU  )rŸ   Úfltré   r  r  Ú	num_partss         r4   r
  zC89CodePrinter._print_Float  s  € ØÔ!×%Ò%¥d­DÑ1Ô1ˆØŒ×Ò˜4Ô+×/Ò/°µs±u´uÑ=Ô=Ñ>Ô>Ð>Ø×)Ò)¨%Ñ0Ô0ˆÝ�#—)’)˜EÔ-Ñ.Ô.Ñ/Ô/ˆØ�cˆ>ˆ>˜c¨˜n˜nØ�4‰KˆCØ—I’I˜c‘N”Nˆ	Ø  ”|×*Ò*¨3Ñ/Ô/ˆ	�!‰Ø�QŒ<× Ò  Ñ%Ô%ð 	 Ø�aˆLˆLŒL˜CÑˆLˆL‰LØ�xŠx˜	Ñ"Ô" VÑ+Ð+r6   ©rÎ   c                ó   — dS )NÚtruerÕ   rA  s     r4   Ú_print_BooleanTruez!C89CodePrinter._print_BooleanTrue  s   € àˆvr6   c                ó   — dS )NÚfalserÕ   rA  s     r4   Ú_print_BooleanFalsez"C89CodePrinter._print_BooleanFalse  s   € àˆwr6   c                ó°  ‡ — |j         d k    rA|j        d k    rt          d¦  «        ‚d                     ˆ fd„|j        D ¦   «         ¦  «        }n[t          d„ t          |j        |j         ¦  «        D ¦   «         ¦  «        }|j        d k    r
||j        z  }‰                      |¦  «        }d                     ‰                      |j	        ¦  «        |¬¦  «        S )Nz%Expected strides when offset is givenz][c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  ©rô   r  rŸ   s     €r4   rø   z0C89CodePrinter._print_Element.<locals>.<genexpr>  s/   øè è € ÐGÐG°3˜dŸkšk¨#Ñ.Ô.ÐGÐGÐGÐGÐGÐGr6   c              3  ó&   K  — | ]\  }}||z  V — Œd S r/   rÕ   )rô   rõ   r²  s      r4   rø   z0C89CodePrinter._print_Element.<locals>.<genexpr>  s*   è è € ÐMÐM¡T Q¨˜Q˜q™SÐMÐMÐMÐMÐMÐMr6   z{symb}[{idxs}])ÚsymbÚidxs)
r)  r(  rP  rU  r/  r4  r5  rç   rÞ   rµ  )rŸ   ÚelemrÌ  Ú
global_idxs   `   r4   Ú_print_ElementzC89CodePrinter._print_Element  sÛ   ø€ ØŒ<˜4ÒÐØŒ{˜dÒ"Ð"Ý Ð!HÑIÔIÐIØ—9’9ÐGÐGÐGÐG¸$¼,ÐGÑGÔGÑHÔHˆDˆDåÐMÐM­S°´¸t¼|Ñ-LÔ-LÐMÑMÔMÑMÔMˆJØŒ{˜dÒ"Ð"Ø˜dœkÑ)�
Ø—;’;˜zÑ*Ô*ˆDà×&Ò&Ø—’˜Tœ[Ñ)Ô)Øð 'ñ 
ô 
ð 	
r6   c                óP   ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        S )z0 Elements of code blocks printed as statements. rI  c                ó`   •— g | ]*}‰                      ‰                     |¦  «        ¦  «        ‘Œ+S rÕ   )rÜ   rç   )rô   rõ   rŸ   s     €r4   r  z3C89CodePrinter._print_CodeBlock.<locals>.<listcomp>(  s1   ø€ ÐQÐQÐQÀ!˜$×-Ò-¨d¯kªk¸!©n¬nÑ=Ô=ÐQÐQÐQr6   ©rU  r  rA  s   ` r4   Ú_print_CodeBlockzC89CodePrinter._print_CodeBlock&  s,   ø€ à�yŠyÐQÐQÐQÐQÀtÄyÐQÑQÔQÑRÔRÐRr6   c                óL   ‡ —  dj         di |                     ˆ fd„¬¦  «        ¤ŽS )Nz while ({condition}) {{
{body}
}}c                ó.   •— ‰                      | ¦  «        S r/   rK  )r  rŸ   s    €r4   r5   z-C89CodePrinter._print_While.<locals>.<lambda>,  s   ø€ ˜dŸkšk¨#Ñ.Ô.€ r6   )ÚapplyrÕ   )rÞ   r¡   rA  s   ` r4   Ú_print_WhilezC89CodePrinter._print_While*  sG   ø€ Ø:Ð3Ô:ð 1ð 1¸T¿[º[Ø.Ð.Ð.Ð.ð >Iñ >0ô >0ð 1ð 1ð 	1r6   c                ó<   — d|                       |j        ¦  «        z  S )Nz{
%s
})rÓ  ru  rA  s     r4   Ú_print_ScopezC89CodePrinter._print_Scope.  s   € Ø˜D×1Ò1°$´)Ñ<Ô<Ñ<Ð<r6   zstdio.hc                ó2  ‡ — |j         t          k    rd}ndd‰                      |j         ¦  «        iz  }|                     |j        t          k    rdn‰                      |j        ¦  «        d                     ˆ fd„|j        D ¦   «         ¦  «        ¬¦  «        S )Nzprintf({fmt}, {pargs})z fprintf(%(out)s, {fmt}, {pargs})Úoutz%s
r  c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  rÉ  s     €r4   rø   z.C89CodePrinter._print_Print.<locals>.<genexpr>;  s/   øè è € ÐIÐI°#˜TŸ[š[¨Ñ-Ô-ÐIÐIÐIÐIÐIÐIr6   )ÚfmtÚpargs)Úfiler%   rç   rÞ   Úformat_stringrU  Ú
print_args)rŸ   r    Útemplates   `  r4   Ú_print_PrintzC89CodePrinter._print_Print1  sŸ   ø€ àŒ9�ÒÐØ/ˆHˆHà9Ø�t—{’{ 4¤9Ñ-Ô-ð=ñ ˆHð �ŠØÔ,µÒ4Ð4��¸$¿+º+ÀdÔFXÑ:YÔ:YØ—)’)ÐIÐIÐIÐI¸¼ÐIÑIÔIÑJÔJð ñ 
ô 
ð 	
r6   c                ó   — |j         S r/   )rè   )rŸ   Ústrms     r4   Ú_print_StreamzC89CodePrinter._print_Stream>  s
   € ØŒyÐr6   c                ó¬   ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        }dt          ˆ fd„|j        |j        fD ¦   «         ¦  «        |fz   z  S )Nr  c              3  ó\   •K  — | ]&}‰                      t          |¦  «        ¦  «        V — Œ'd S r/   )rç   r   rÉ  s     €r4   rø   z:C89CodePrinter._print_FunctionPrototype.<locals>.<genexpr>B  s7   øè è € ÐSÐS¸C˜$Ÿ+š+¥k°#Ñ&6Ô&6Ñ7Ô7ÐSÐSÐSÐSÐSÐSr6   z	%s %s(%s)c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  rÉ  s     €r4   rø   z:C89CodePrinter._print_FunctionPrototype.<locals>.<genexpr>D  s/   øè è € ÐMÐM¨�4—;’;˜sÑ#Ô#ÐMÐMÐMÐMÐMÐMr6   )rU  Ú
parametersÚtupleÚreturn_typerè   )rŸ   r    Úparss   `  r4   Ú_print_FunctionPrototypez'C89CodePrinter._print_FunctionPrototypeA  sk   ø€ Ø�yŠyÐSÐSÐSÐSÀ4Ä?ÐSÑSÔSÑTÔTˆØÝÐMÐMÐMÐM°Ô0@À$Ä)Ð/LÐMÑMÔMÑNÔNÐRVÐQXÑXñ
ð 	
r6   c                óZ   — |                       |¦  «        ›|                      |¦  «        ›�S r/   )rî  rÙ  rA  s     r4   Ú_print_FunctionDefinitionz(C89CodePrinter._print_FunctionDefinitionG  s4   € Ø×6Ò6°tÑ<Ô<Ð<Ø×*Ò*¨4Ñ0Ô0Ð0ð2ð 	2r6   c                óD   — |j         \  }d|                      |¦  «        z  S )Nz	return %s©r  rç   ©rŸ   r    r  s      r4   Ú_print_ReturnzC89CodePrinter._print_ReturnK  s"   € ØŒy‰ˆØ˜TŸ[š[¨Ñ-Ô-Ñ-Ð-r6   c                óV   ‡ — dd                      ˆ fd„|j        D ¦   «         ¦  «        z  S )Nz(%s)r  c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  rÉ  s     €r4   rø   z6C89CodePrinter._print_CommaOperator.<locals>.<genexpr>P  s/   øè è € Ð"IÐ"I¸ 4§;¢;¨sÑ#3Ô#3Ð"IÐ"IÐ"IÐ"IÐ"IÐ"Ir6   rÒ  rA  s   ` r4   Ú_print_CommaOperatorz#C89CodePrinter._print_CommaOperatorO  s1   ø€ Ø˜Ÿ	š	Ð"IÐ"IÐ"IÐ"I¸t¼yÐ"IÑ"IÔ"IÑJÔJÑJÐJr6   c                óP  — |j         t          k    rdt          |j        ¦  «        z  S t	          |j         j        ¦  «        dk    r1t          |j        ¦  «        ›d|                      |j         ¦  «        ›�S t          |j        ¦  «        ›d|                      |j         ¦  «        ›d�S )Nz%s:r‡   z:
z:
{
z
})ru  r%   r1  rè   rT  r  rÓ  rA  s     r4   Ú_print_LabelzC89CodePrinter._print_LabelR  s�   € ØŒ9�ÒÐØ�3˜tœy™>œ>Ñ)Ð)ÝˆtŒyŒ~ÑÔ !Ò#Ð#Ý # D¤I¡¤  °×0EÒ0EÀdÄiÑ0PÔ0PÐ0PÐQÐQÝ"% d¤i¡.¤. . .°$×2GÒ2GÈÌ	Ñ2RÔ2RÐ2RÐ2RÐSÐSr6   c                ó    — d|j         j        z  S )Nzgoto %s)r6  rè   rA  s     r4   Ú_print_gotozC89CodePrinter._print_gotoY  s   € Ø˜4œ:œ?Ñ*Ð*r6   c                óD   — |j         \  }d|                      |¦  «        z  S )Nz++(%s)rò  ró  s      r4   Ú_print_PreIncrementz"C89CodePrinter._print_PreIncrement\  ó"   € ØŒy‰ˆØ˜$Ÿ+š+ cÑ*Ô*Ñ*Ð*r6   c                óD   — |j         \  }d|                      |¦  «        z  S )Nz(%s)++rò  ró  s      r4   Ú_print_PostIncrementz#C89CodePrinter._print_PostIncrement`  rþ  r6   c                óD   — |j         \  }d|                      |¦  «        z  S )Nz--(%s)rò  ró  s      r4   Ú_print_PreDecrementz"C89CodePrinter._print_PreDecrementd  rþ  r6   c                óD   — |j         \  }d|                      |¦  «        z  S )Nz(%s)--rò  ró  s      r4   Ú_print_PostDecrementz#C89CodePrinter._print_PostDecrementh  rþ  r6   c                ó„   ‡ — d|j         j        |j        d                     ˆ fd„|j        D ¦   «         dgz   ¦  «        dœz  S )Nz!%(keyword)s %(name)s {
%(lines)s}z;
c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rÕ   rK  )rô   rë   rŸ   s     €r4   r  z0C89CodePrinter._print_struct.<locals>.<listcomp>o  s%   ø€ ÐAÐAÐA t�—’˜TÑ"Ô"ÐAÐAÐAr6   rº   )Úkeywordrè   rï   )rÒ   Ú__name__rè   rU  ÚdeclarationsrA  s   ` r4   Ú_print_structzC89CodePrinter._print_structl  s[   ø€ Ø3Ø”~Ô.¸¼	ÈEÏJÊJØAÐAÐAÐA¨tÔ/@ÐAÑAÔAÀRÀDÑHñMJô MJð7
ð 7
ñ 
ð 	
r6   c                ó   — dS )Nra   rÕ   ©rŸ   Ú_s     r4   Ú_print_BreakTokenz C89CodePrinter._print_BreakTokenr  s   € Øˆwr6   c                ó   — dS )Nre   rÕ   r  s     r4   Ú_print_ContinueTokenz#C89CodePrinter._print_ContinueTokenu  rC  r6   r/   )cr  Ú
__module__Ú__qualname__Ú__doc__ÚprintmethodÚlanguager  rÌ   Úreserved_wordsrÆ   r&   r±   Ú__annotations__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�   r  Úknown_functions_C89r¾   rÉ   r×   rÜ   rà   rì   rð   rü   r¤   rþ   r  r"  r&  r<  r>  rB  rE  rY  r_  rd  rf  ro  rx  r{  r†  r‹  rî   r	  r%  rž   r©  Ú_print_Listr¬  r¸  r
  r'   rÃ  rÆ  rÏ  rÓ  r×  rÙ  rã  ræ  rî  rð  rô  r÷  rù  rû  rý  r   r  r  r
  r  r  Ú_print_unionÚ__classcell__)rÒ   s   @r4   r¦   r¦   “   s¹  ø€ € € € € € ØFÐFØ€KØ€HØ€HØ�S˜Ñ(Ô(€Nà(,¨¨[Ô-Jð )ð )ØØØØ�s‘u”uØ"ðOð Oð )ð )Ðð ð ð ñ ð 	ˆgØ�*Ø�ð€Lð 	ˆhØˆeØ�Ø�Ø�ØˆvØˆhØˆyØˆyØˆyØˆxØ�	Ø�	Ø�	ð&€Mð ð ð ñ ð$ 	�ˆ}ØˆzˆlØ�
ˆ|Ø�
ˆ|Ø�
ˆ|Ø�
ˆ|Ø��Ø��Ø��ð
€Lð 02€KÐ1Ð1Ð1Ñ1ð 	�Ø�Ø�ðÐð 	�Ø�Ø�ðÐð 	�ð Ðð €Kà
€Cà-€CÐ-Ð-Ð-Ñ-ðð ð ð ð ð ð2ð ð ðLð Lð Lð'ð 'ð 'ð6ð 6ð 6ð'ð 'ð 'ðBð Bð Bð ð2ð 2ð 2ð 2ñ Ôð2ð ð:ð :ñ Ôð:ð9ð 9ð 9ð8ð 8ð 8ð
4ð 4ð 4ð0 ð1ð 1ð 1ð 1ñ Ôð1ðð ð ðð ð ðQð Qð QðB@ð @ð @ð@ð @ð @ðð ð ð ð ð9ð 9ð 9ð	1ð 	1ð 	1ðOð Oð Oð*ð *ð *ð*ð *ð *ðð ð ð6Lð Lð LðOð Oð Oð>ð >ð >ð
?ð ?ð ?ð €KðFð Fð Fð
ð ð ð6,ð ,ð ,ð €X�{�mÐ$Ñ$Ô$ðð ñ %Ô$ðð €X�{�mÐ$Ñ$Ô$ðð ñ %Ô$ðð
ð 
ð 
ð Sð Sð Sð1ð 1ð 1ð=ð =ð =ð €X�y�kÐ"Ñ"Ô"ð

ð 

ñ #Ô"ð

ðð ð ð
ð 
ð 
ð2ð 2ð 2ð.ð .ð .ðKð Kð KðTð Tð Tð+ð +ð +ð+ð +ð +ð+ð +ð +ð+ð +ð +ð+ð +ð +ð
ð 
ð 
ðð ð ðð ð ð !€L€L€L€L€Lr6   r¦   c            	      óØ  — e Zd ZU dZ eeez   ¦  «        Z e ee	j
                             ¦   «         ededi                     ¦   «         ¦  «        ¦  «        Z
 e ee	j                             ¦   «         edhedhi                     ¦   «         ¦  «        ¦  «        ZeZded<   d                     ¦   «         Zd„ Zd	„ Zd
„ Z edhdh¬¦  «        edd„¦   «         ¦   «         Zd„ Zd„ Zd„ ZdS )ÚC99CodePrinterÚC99zfloat complexzdouble complexz	complex.hr°   r¾   a  fabs fmod remainder remquo fma fmax fmin fdim nan exp exp2 expm1 log log10 log2 log1p pow sqrt cbrt hypot sin cos tan asin acos atan atan2 sinh cosh tanh asinh acosh atanh erf erfc tgamma lgamma ceil floor trunc round nearbyint rint frexp ldexp modf scalbn ilogb logb nextafter copysignc                ó   — dS )NÚINFINITYrÕ   rA  s     r4   rB  zC99CodePrinter._print_Infinity�  rC  r6   c                ó   — dS )Nz	-INFINITYrÕ   rA  s     r4   rE  z&C99CodePrinter._print_NegativeInfinity“  rF  r6   c                ó   — dS )NÚNANrÕ   rA  s     r4   Ú
_print_NaNzC99CodePrinter._print_NaN–  s   € Øˆur6   zmath.hÚm)rÎ   rÏ   FNc           
     óP  ‡ — |€‰ j         |j        j                 }t          |t          ¦  «        s%|D ]\  }} ||j        Ž r|} nŒt          d¦  «        ‚	  |‰ g|j        ¢R Ž S # t          $ r0 ‰ j        |z   ‰ j	        v r‰  
                    t          ¦  «        nd}Y nw xY w|rÁ‰                      |j        d         ¦  «        }t          |j        ¦  «        dk    rˆd}|j        dd…         D ];}	|dz  }|d                     ‰ j        ||‰                      |	¦  «        ¬¦  «        z  }Œ<|d	‰                      |                     |j        d         ¦  «        ¦  «        ›|›�z  }n&d	                     ˆ fd
„|j        D ¦   «         ¦  «        }d                     ‰ j        |||¬¦  «        S )NzNo matching printerrº   r   r‡   r  r  z, {ns}{name}{suffix}({next})Únsrè   r  Únextr  c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r/   rK  rÉ  s     €r4   rø   z2C99CodePrinter._print_math_func.<locals>.<genexpr>½  s/   øè è € ÐDÐD°3˜dŸkšk¨#Ñ.Ô.ÐDÐDÐDÐDÐDÐDr6   z{ns}{name}{suffix}({args}))r'  rè   r  r  )rË   rÒ   r  r0  r1  r  rP  Ú	TypeErrorr  Ú_prec_funcsr	  r   rç   rT  rÞ   rz  rU  )
rŸ   r    Únestr  Úcbrè   r  r  Ú
paren_pileÚcurr_args
   `         r4   r  zC99CodePrinter._print_math_func›  s  ø€ ð ˆ=ØÔ(¨¬Ô)@ÔAˆEÝ˜%¥Ñ%Ô%ð 	8Ø!ð 8ð 8‘��DØ�2�t”y�>ð Ø �EØ�Eðõ !Ð!6Ñ7Ô7Ð7ð	aØ�5˜Ð* ¤	Ð*Ð*Ð*Ð*øÝð 	að 	að 	aØ48´H¸uÑ4DÈÔHXÐ4XÐ4X�T×*Ò*­4Ñ0Ô0Ð0Ð^`ˆFˆFˆFð	aøøøð ð 	FØ—;’;˜tœy¨œ|Ñ,Ô,ˆDÝ�4”9‰~Œ~ Ò!Ð!Ø�
Ø $¤	¨!¨B¨$¤ð ð �HØ #Ñ%�JØÐ9×@Ò@Øœ8Ø"Ø%Ø#Ÿ{š{¨8Ñ4Ô4ð	 Añ ô ñ �D�Dð �Ø—K’K §	¢	¨$¬)°B¬-Ñ 8Ô 8Ñ9Ô9Ð9Ø�Jðñ �øð
 —9’9ÐDÐDÐDÐD¸$¼)ÐDÑDÔDÑEÔEˆDØ+×2Ò2ØŒxØØØð	 3ñ 
ô 
ð 	
s   ÁA$ Á$7BÂBc                ó0   — |                       |d¬¦  «        S ©NT)r,  ©r  rA  s     r4   r†  zC99CodePrinter._print_MaxÅ  ó   € Ø×$Ò$ T°Ð$Ñ5Ô5Ð5r6   c                ó0   — |                       |d¬¦  «        S r1  r2  rA  s     r4   r‹  zC99CodePrinter._print_MinÈ  r3  r6   c           
     ó  — g }g }d}|D ]~}|                      ||                      |j        ¦  «        |                      |j        ¦  «        |                      |j        dz   ¦  «        dœz  ¦  «         |                      d¦  «         Œ||fS )Nz8for (int %(var)s=%(start)s; %(var)s<%(end)s; %(var)s++){r‡   )rê   rr  ÚendrH  )rS  rç   r6  ÚlowerÚupper)rŸ   r/  Ú
open_linesÚclose_linesÚ	loopstartrõ   s         r4   Ú_get_loop_opening_endingz'C99CodePrinter._get_loop_opening_endingË  s¤   € Øˆ
ØˆØNˆ	Øð 	$ð 	$ˆAà×Ò˜iØ—{’{ 1¤7Ñ+Ô+ØŸš Q¤WÑ-Ô-Ø—{’{ 1¤7¨Q¡;Ñ/Ô/ð+1ð +1ñ 1ñ 2ô 2ð 2ð ×Ò˜sÑ#Ô#Ð#Ð#Ø˜;Ð&Ð&r6   )FN)r  r  r  r  rÌ   r  Úreserved_words_c99rÆ   r   r¦   r·   rÇ   r   r   rÁ   Úknown_functions_C99r¾   r  r¼  r+  rB  rE  r$  r'   r¤   r  r†  r‹  r<  rÕ   r6   r4   r  r  z  s’  € € € € € € Ø€HØ�S˜Ð*<Ñ<Ñ=Ô=€NØ�$�u�u˜^Ô9×?Ò?ÑAÔAØ�?ØÐ$ðD÷ ‚e�g„gñô ñ ô €Mð �4˜˜˜nÔ9×?Ò?ÑAÔAØ�K�=Ø�[�MðD÷ ‚e�g„gñô ñ ô €Lð .€CÐ-Ð-Ð-Ñ-ðL÷ NSÊUÉWÌWð	 ðð ð ðð ð ðð ð ð
 €X�x�j¨S¨EÐ2Ñ2Ô2Øð&
ð &
ð &
ñ Ôñ 3Ô2ð&
ðP6ð 6ð 6ð6ð 6ð 6ð'ð 'ð 'ð 'ð 'r6   r  z¬Abs Sqrt exp exp2 expm1 log log10 log2 log1p Cbrt hypot fma loggamma sin cos tan asin acos atan atan2 sinh cosh tanh asinh acosh atanh erf erfc loggamma gamma ceiling floorz	_print_%sc                  ó:   — e Zd Z edh¬¦  «        d„ ¦   «         ZdS )ÚC11CodePrinterz
stdalign.hrÀ  c                óD   — |j         \  }d|                      |¦  «        z  S )Nzalignof(%s)rò  ró  s      r4   Ú_print_alignofzC11CodePrinter._print_alignofá  s"   € àŒy‰ˆØ˜tŸ{š{¨3Ñ/Ô/Ñ/Ð/r6   N)r  r  r  r'   rB  rÕ   r6   r4   r@  r@  ß  s=   € € € € € à€X�|�nÐ%Ñ%Ô%ð0ð 0ñ &Ô%ð0ð 0ð 0r6   r@  )Úc89Úc99Úc11N)Cr  Ú
__future__r   Útypingr   Ú	functoolsr   Ú	itertoolsr   Ú
sympy.corer   Úsympy.core.numbersr	   r
   Úsympy.codegen.astr   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$   r%   Úsympy.printing.codeprinterr&   r'   Úsympy.printing.precedencer(   r)   Úsympy.sets.fancysetsr*   r+   r,   r  rÆ   r>  r  r=  rš   r¤   r¦   r  r¼  ÚkÚsetattrr  r@  Úc_code_printersrÕ   r6   r4   ú<module>rS     sð  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø &Ð &Ð &Ð &Ð &Ð &ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðØ	Ð'Ð'¨Ð0Ð3IÐ3IÈ5Ð2QÐRðà	ˆ5ðð 
ˆ5ðð 
ˆ5ð	ð
 ˆFðð ˆFðð ˆFðð ˆWðð 
ˆ5ðð 
ˆ5ðð ˆWðð ˆFðð ˆFðð ˆFðð ˆWðð  ˆvð!ð" ˆFð#Ð ð( �dÐ.ð ð ð 3Ø
ˆFð3àˆWð3ð ˆFð3ð ˆWð	3ð
 ˆFð3ð ˆWð3ð 
ˆ5ð3ð �ð3ð ˆFð3ð 
ˆ6ð3ð 
ˆ6ð3ð ˆWð3ð ˆWð3ð ˆWð3ð 
ˆ5ð3ð  ˆXð!3ð ð Ð ð,ð ð €ð  
Ð+Ð ð"ð "ð "ðJð ð ð&e!ð e!ð e!ð e!ð e!�[ñ e!ô e!ð e!ðN\'ð \'ð \'ð \'ð \'�^ñ \'ô \'ð \'ð~8ç9>º¹¼ðNð N€Að €GˆN˜K¨!™O¨^Ô-LÑMÔMÐMÐMð0ð 0ð 0ð 0ð 0�^ñ 0ô 0ð 0ð ØØðð €€€r6   