Ë
    7^(hƒ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<dAj{                  «       D ]  Z> e?e<dBe>z  e<j€                  «       Œ  G dC„ dDe<«      ZAe;e<eAdEœZByF)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/skyplay_api_hub/venv/lib/python3.12/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                 ó8  — 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š   [   sC  € ÷ 4Ý:Ý=ðÜ	�‰�ðáŒQ�V‰V‹�iðð 	
‰#ˆa‹&‰�)ðñ 	ˆA‹�ð	ñ
 	ˆB‹�ðô 	
�‰ˆfðô 	
�‰ˆQ‰�ðô 	
�‰ˆQ‰�ðð 	
Œ!�$‰$‰�ðð 	
Œ!�$‰$‰�ðð 	
‰$Œq�t‰t‹*‰�lðð 	
‰$Œq�t‰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                   |   ›| 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‰   sE   ø€ à�4×#Ñ#Ñ#Ø!×-Ñ-¨dÒ3°T×5PÑ5PÔQUÔ5VÐWÐWá˜˜dÑ- fÑ-Ð-r6   r   )r¢   r£   s   ` r4   Ú_as_macro_if_definedr¤   €   s#   ø€ ô ˆ4ƒ[ó.ó ð.ð Ðr6   c                  ó  ‡ — 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           	     óÖ  •— |xs i }| j                   €|j                  dt        «       «      | _         t        t	        | j
                  j                  «       |j                  di «      j                  «       «      «      | _        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _	        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _
        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _        t        t	        | j                  j                  «       |j                  di «      j                  «       «      «      | _        t        ‰| �9  |«       t        | j                  fi |j!                  d	i «      ¤Ž| _        t%        |j!                  d
g «      «      | _        t%        «       | _        t%        «       | _        t%        «       | _        y )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__Þ   sF  ø€ Ø’>˜rˆØ×ÑÐ#Ø'Ÿ|™|¨M¼?Ó;LÓMˆDÔÜ ¤ t×'8Ñ'8×'>Ñ'>Ó'@Ø'/§|¡|°NÀBÓ'G×'MÑ'MÓ'Oó"Qó RˆÔä!¤%¨×(:Ñ(:×(@Ñ(@Ó(BØ(0¯©°_ÀbÓ(I×(OÑ(OÓ(Qó#Só TˆÔä ¤ t×'8Ñ'8×'>Ñ'>Ó'@Ø'/§|¡|°NÀBÓ'G×'MÑ'MÓ'Oó"Qó RˆÔä¤ d×&6Ñ&6×&<Ñ&<Ó&>Ø'/§|¡|°MÀ2Ó'F×'LÑ'LÓ'Nó!Pó QˆÔä"&¤u¨T×-DÑ-D×-JÑ-JÓ-LØ(0¯©Ð5IÈ2Ó(N×(TÑ(TÓ(Vó(Xó #YˆÔä%)¬%°×0JÑ0J×0PÑ0PÓ0RØ(0¯©Ð5LÈbÓ(Q×(WÑ(WÓ(Yó+[ó &\ˆÔ"ä(,¬U°4×3PÑ3P×3VÑ3VÓ3XØ(0¯©Ð5OÐQSÓ(T×(ZÑ(ZÓ(\ó.^ó )_ˆÔ%ä‰Ñ˜Ô"Ü# D§H¡HÑS°·±Ð=MÈrÓ0RÑSˆÔÜ §¡¨]¸BÓ ?Ó@ˆÔÜ“uˆŒÜ›ˆŒÜ“eˆ�r6   c                ó   — |dz  S )Né   © )rŸ   Úps     r4   Ú_rate_index_positionz#C89CodePrinter._rate_index_position÷   s   € Ø�‰sˆ
r6   c                ó2   — |j                  d«      r|S |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ˆzÐK¸:ÈÑ;KÐKr6   c                ó$   — dj                  |«      S )Nz/* {} */)Úformat)rŸ   Útexts     r4   Ú_get_commentzC89CodePrinter._get_commentþ   s   € Ø× Ñ  Ó&Ð&r6   c                óØ   — | j                   t           }t        |||j                  |j                  «      t
        h¬«      }t        |«      }| j                  | j                  |«      «      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  sY   € Ø×!Ñ!¤$Ñ'ˆÜ�t %¨u¯{©{¸5×;LÑ;LÓ/MÔVaÐUbÔcˆÜ˜3ÓˆØ×"Ñ" 4§;¡;¨tÓ#4Ó5Ð5r6   c                ó$   — | j                  |«      S r/   )Úindent_code)rŸ   Úliness     r4   Ú_format_codezC89CodePrinter._format_code  s   € Ø×Ñ Ó&Ð&r6   c                óJ   ‡— |j                   \  }Šˆfd„t        |«      D «       S )Nc              3  óF   •K  — | ]  }t        ‰«      D ]  }||f–— Œ
 Œ y ­wr/   )Úrange)Ú.0ÚiÚjÚcolss      €r4   ú	<genexpr>z:C89CodePrinter._traverse_matrix_indices.<locals>.<genexpr>  s%   øè ø€ ÒA˜1´U¸4³[ÒA°��A”ÐA�ÑAùs   ƒ!)Úshaperó   )rŸ   ÚmatÚrowsr÷   s      @r4   Ú_traverse_matrix_indicesz'C89CodePrinter._traverse_matrix_indices
  s   ø€ Ø—Y‘Y‰
ˆˆdÛA¤ d£ÔAÐAr6   c                ó$   •— t        ‰| �  |fi |¤ŽS r/   )rÈ   Ú
_print_Mul)rŸ   r    r¡   rÒ   s      €r4   rþ   zC89CodePrinter._print_Mul  s   ø€ ä‰wÑ! $Ñ1¨&Ñ1Ð1r6   c           	     óô  — d| j                   v r| j                  |«      S t        |«      }| j                  t        «      }t        |j                  d«      r9| j                  t        d«      «      ›d| j                  |j                  |«      ›�S t        |j                  d«      r.| j                  ›d|›d| j                  |j                  «      ›d�S |j                  t        j                  d	z  k(  r=| j                  d
k7  r.| j                  ›d|›d| j                  |j                  «      ›d�S | j                  ›d|›d| j                  |j                  «      ›d| j                  |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  s  € à�D×(Ñ(Ñ(Ø×'Ñ'¨Ó-Ð-Ü˜$ÓˆØ×&Ñ&¤tÓ,ˆÜ˜Ÿ™ "Ô%Ø"×/Ñ/´°c³
Õ;¸T×=NÑ=NÈtÏyÉyÐZ^Ô=_Ð`Ð`Ü˜$Ÿ(™( CÔ(Ø%)§X£Xªv°t·{±{À4Ç9Á9Õ7MÐNÐNØ�X‰XœŸ™˜q™Ò  T§]¡]°eÒ%;Ø%)§X£Xªv°t·{±{À4Ç9Á9Õ7MÐNÐNà(,¯«²&¸$¿+¹+ÀdÇiÁiÕ:PØ#'§;¡;¨t¯x©xÕ#8ð:ð :r6   c                óz  — |j                   \  }}|j                  r‰|j                  r}t        |«      }|j                   D �cg c]  }| j                  ||«      ‘Œ c}\  }}|j                  r|j                  s|j
                  r|j
                  r|› d|› �S d|› d|› d|› d|› �S | j                  |d¬«      S c c}w )Nz % ú((z) + z) % Úfmod)Úknown)Úargsr1   r(   r  Úis_nonnegativeÚis_nonpositiveÚ_print_math_func)rŸ   r    ÚnumÚdenr  ÚargÚsnumÚsdens           r4   Ú
_print_ModzC89CodePrinter._print_Mod"  s»   € Ø—9‘9‰ˆˆSØ�>Š>˜cŸnšnÜ˜dÓ#ˆDØBFÇ)Á)ÖL¸3˜$×+Ñ+¨C°Õ6ÒL‰JˆD�$ð ×"Ò" s×'9Ò'9Ø×"Ò" s×'9Ò'9Ø˜˜s 4 &Ð)Ð)Ø˜�v˜S   d¨4¨&°°T°FÐ;Ð;à×$Ñ$ T°Ð$Ó8Ð8ùò Ms   ÁB8c                ó’   — t        |j                  «      t        |j                  «      }}| 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  s?   € Ü�4—6‘6‹{œC §¡›Kˆ1ˆØ×)Ñ)¬$Ó/ˆØ ! V¨Q°Ð!7Ñ7Ð7r6   c                ób  — 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                  j                  «      ›d| j                  |
«      ›d	�S )
NÚoffsetÚstridesrÕ   r¨   r  r¼   c              3  ó2   K  — | ]  }|d    |d   z  –— Œ y­w)r   r‡   NrÕ   )rô   r3   s     r4   rø   z0C89CodePrinter._print_Indexed.<locals>.<genexpr>J  s   è ø€ ÒB q˜˜1™˜a ™d�ÑBùs   ‚ú[ú])Ú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  s  € ä˜Ÿ™ H¬a¯f©fÓ5ˆÜ˜$Ÿ)™) Y°Ó5ˆØ—,‘,ˆàˆ?œj¨´#Ô6Ø—:‘:ˆDÜ—E‘EˆEØˆDØ˜#Š~  Ü$¤U¨4¯9©9Ó%5Ó6�	Ø!¡$ B $™-‘Ø˜C’Ü! $§)¡)Ó,�	àò !�Ø˜˜Ñ �Ø˜˜a™Ñ ‘ð!ð ˆGÜÑB¬C°¸Ó,AÔBÓBÀVÑKˆ
ØŸ;™; t§y¡y§¡Õ7ØŸ;™; zÕ2ð4ð 	4r6   c                ó"   •— t         ‰| �  |«      S r/   )rÈ   Ú_print_NumberSymbol)rŸ   r    rÒ   s     €r4   r<  z"C89CodePrinter._print_NumberSymbolN  s   ø€ ä‰wÑ*¨4Ó0Ð0r6   c                 ó   — y)NÚHUGE_VALrÕ   ©rŸ   r    s     r4   Ú_print_InfinityzC89CodePrinter._print_InfinityR  ó   € Ør6   c                 ó   — y)Nz	-HUGE_VALrÕ   r?  s     r4   Ú_print_NegativeInfinityz&C89CodePrinter._print_NegativeInfinityU  ó   € Ør6   c           
     ó–  — |j                   d   j                  dk7  rt        d«      ‚g }|j                  t        «      rât        |j                   «      D ]¹  \  }\  }}|dk(  r$|j                  d| j                  |«      z  «       nU|t        |j                   «      dz
  k(  r|dk(  r|j                  d«       n#|j                  d| j                  |«      z  «       | j                  |«      }|j                  |«       |j                  d	«       Œ» d
j                  |«      S |j                   d d D ��cg c],  \  }}d| j                  |«      ›d| j                  |«      ›d�‘Œ. }}}d| j                  |j                   d   j                  «      z  }dj                  |«      |z   dj                  dt        |«      z  g«      z   S c c}}w )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) {ú}ú
r  z) ? (
z
)
z: (
%s
)z: ú r  )r  ÚcondÚ
ValueErrorÚhasr   Ú	enumerateÚappendrç   ÚlenÚjoinr    )	rŸ   r    rï   rõ   ÚeÚcÚcode0ÚecpairsÚ	last_lines	            r4   Ú_print_PiecewisezC89CodePrinter._print_PiecewiseX  s‘  € Ø�9‰9�R‰=×Ñ Ò%ô ð /ó 0ð 0ð
 ˆØ�8‰8”JÔÜ& t§y¡yÓ1ò 	"‘	�‘6�A�qØ˜’6Ø—L‘L ¨t¯{©{¸1«~Ñ!=Õ>Øœ#˜dŸi™i›.¨1Ñ,Ò,°°d²Ø—L‘L Õ*à—L‘LÐ!1°D·K±KÀ³NÑ!BÔCØŸ™ A›�Ø—‘˜UÔ#Ø—‘˜SÕ!ð	"ð —9‘9˜UÓ#Ð#ð !%§	¡	¨#¨2 ÷0á˜™1ð 04¯{©{¸1­~Ø/3¯{©{¸1­~ò?ð 0ˆGñ 0ð % t§{¡{°4·9±9¸R±=×3EÑ3EÓ'FÑFˆIØ—9‘9˜WÓ%¨	Ñ1°C·H±H¸cÄ#ÀgÃ,Ñ>NÐ=OÓ4PÑPÐPùó	0s   Ä31Gc                óR   — ddl m} | j                  |j                  |d¬«      «      S )Nr   )Ú	PiecewiseF)Údeep)Úsympy.functionsrW  rç   Úrewrite)rŸ   r    rW  s      r4   Ú
_print_ITEzC89CodePrinter._print_ITEy  s!   € Ý-Ø�{‰{˜4Ÿ<™<¨	¸˜<Ó>Ó?Ð?r6   c                óÎ   — dj                  | j                  |j                  t        d   d¬«      |j                  |j
                  |j                  j                  d   z  z   «      S )Nz{}[{}]ÚAtomT)Ústrictr‡   )rÞ   r  Úparentr)   rö   rõ   rù   r?  s     r4   Ú_print_MatrixElementz#C89CodePrinter._print_MatrixElement}  s[   € Ø�‰˜t×0Ñ0°·±¼jÈÑ>PØð  1ó  ØŸ&™& 4§6¡6¨$¯+©+×*;Ñ*;¸AÑ*>Ñ#>Ñ>ó@ð 	@r6   c                ój   •— t         ‰| �  |«      }|| j                  d   v rdj                  |«      S |S )Nr®   z(*{}))rÈ   Ú_print_SymbolÚ	_settingsrÞ   )rŸ   r    rè   rÒ   s      €r4   rb  zC89CodePrinter._print_Symbol�  s7   ø€ Ü‰wÑ$ TÓ*ˆØ�4—>‘> -Ñ0Ñ0Ø—>‘> $Ó'Ð'àˆKr6   c                ó¬   — | j                  |j                  «      }| j                  |j                  «      }|j                  }dj	                  |||«      S )Nz{} {} {})rç   ÚlhsÚrhsÚrel_oprÞ   )rŸ   r    Úlhs_codeÚrhs_codeÚops        r4   Ú_print_Relationalz C89CodePrinter._print_Relationalˆ  sD   € Ø—;‘;˜tŸx™xÓ(ˆØ—;‘;˜tŸx™xÓ(ˆØ�[‰[ˆØ× Ñ  ¨2¨xÓ8Ð8r6   c                ó  — | j                  |j                  «      }t        |j                  t        «      r|j                  j
                  \  }}}nt        d«      ‚| j                  |j                  «      }dj                  |||||¬«      S )Nz*Only iterable currently supported is RangezLfor ({target} = {start}; {target} < {stop}; {target} += {step}) {{
{body}
}})ÚtargetÚstartÚstopÚstepÚbody)	rç   rm  r.  Úiterabler*   r  ÚNotImplementedErrorrq  rÞ   )rŸ   r    rm  rn  ro  rp  rq  s          r4   Ú
_print_ForzC89CodePrinter._print_ForŽ  sz   € Ø—‘˜TŸ[™[Ó)ˆÜ�d—m‘m¤UÔ+Ø $§¡× 2Ñ 2ÑˆE�4™ä%Ð&RÓSÐSØ�{‰{˜4Ÿ9™9Ó%ˆð)ß*0©&¸ÀeØ ¨4ð +1ó +1ð	1r6   c                ó\   — dj                  | j                  |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ÓNÐNr6   c                ót   ‡ ‡— d‰ j                   v r‰ j                  |«      S ˆˆ fd„Š ‰|j                  «      S )NrV   c                ó˜   •— t        | «      dk(  r‰j                  | 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©rN  rç   )r  ÚhalfÚinner_print_maxrŸ   s     €€r4   r  z2C89CodePrinter._print_Max.<locals>.inner_print_maxŸ  ó\   ø€ Ü�4‹y˜AŠ~Ø—{‘{ 4¨¡7Ó+Ð+Ü�t“9 ‘>ˆDØ6Ù$ T¨%¨4 [Ó1Ù$ T¨$¨% [Ó1ñ:ñ ð r6   ©rË   r  r  )rŸ   r    r  s   ` @r4   Ú
_print_MaxzC89CodePrinter._print_Maxœ  ó8   ù€ Ø�D×(Ñ(Ñ(Ø×'Ñ'¨Ó-Ð-õ	ñ ˜tŸy™yÓ)Ð)r6   c                ót   ‡ ‡— d‰ j                   v r‰ j                  |«      S ˆˆ fd„Š ‰|j                  «      S )NrX   c                ó˜   •— t        | «      dk(  r‰j                  | d   «      S t        | «      dz  }d ‰| d | «       ‰| |d  «      dœz  S )Nr‡   r   rˆ   z!((%(a)s < %(b)s) ? %(a)s : %(b)s)rz  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                ól  — t        |t        «      r1| j                  |j                  d«      «      }dj	                  |«      S d}d}d}|D �cg c]  }|j                  d«      ‘Œ }}|D �cg c]*  }t        t        t        |j                  |«      «      «      ‘Œ, }}|D �cg c]*  }t        t        t        |j                  |«      «      «      ‘Œ, }}g }	d}
t        |«      D ]C  \  }}|dv r|	j                  |«       Œ|
||   z  }
|	j                  ||
z  ›|›�«       |
||   z  }
ŒE |	S c c}w c c}w c c}w )	z0Accepts a string of code or a list of code linesTrº   z   )ú{r  z{
z(
)rF  r  z 	r   )rº   rG  )r.  r/  rî   Ú
splitlinesrO  Úlstriprp   ÚanyÚmaprÚ   Ú
startswithrL  rM  )rŸ   ÚcodeÚ
code_linesÚtabÚ	inc_tokenÚ	dec_tokenÚlineÚincreaseÚdecreaseÚprettyÚlevelÚns               r4   rî   zC89CodePrinter.indent_code¶  s,  € ô �dœCÔ Ø×)Ñ)¨$¯/©/¸$Ó*?Ó@ˆJØ—7‘7˜:Ó&Ð&àˆØ,ˆ	Øˆ	à/3Ö4 t�—‘˜EÕ"Ð4ˆÐ4àHLÖMÀ”CœœC §¡¨yÓ9Ó:Õ;ÐMˆÐMØJNÖOÀ$”CœœC §¡°Ó;Ó<Õ=ÐOˆÐOàˆØˆÜ  “ò 	!‰GˆAˆtØ�zÑ!Ø—‘˜dÔ#ØØ�X˜a‘[Ñ ˆEØ�M‰M C¨¢I©tÐ4Ô5Ø�X˜a‘[Ñ ‰Eð	!ð ˆùò 5ùâMùÚOs   ÁD'Á*/D,Â/D1c                óT   — | j                   | j                  j                  ||«         S r/   )rÂ   rÀ   rÊ   ©rŸ   ré   s     r4   r	  zC89CodePrinter._get_func_suffixÑ  s&   € Ø×&Ñ& t×'8Ñ'8×'<Ñ'<¸UÀEÓ'JÑKÐKr6   c                óT   — | j                   | j                  j                  ||«         S r/   )rÃ   rÀ   rÊ   r›  s     r4   r#  z"C89CodePrinter._get_literal_suffixÔ  s&   € Ø×)Ñ)¨$×*;Ñ*;×*?Ñ*?ÀÀuÓ*MÑNÐNr6   c                óª   — | j                   j                  ||«      }| j                  j                  |d«      }| j                  j                  ||«      S )Nrº   )rÀ   rÊ   rÄ   )rŸ   ré   ÚaliasÚdflts       r4   rž   z%C89CodePrinter._get_math_macro_suffix×  sK   € Ø×!Ñ!×%Ñ% e¨UÓ3ˆØ×,Ñ,×0Ñ0°¸Ó;ˆØ×,Ñ,×0Ñ0°¸Ó=Ð=r6   c                óD   ‡ — ddj                  ˆ fd„|D «       «      z   dz   S )Nr‰  r  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   ©rç   )rô   rP  rŸ   s     €r4   rø   z.C89CodePrinter._print_Tuple.<locals>.<genexpr>Ý  s   øè ø€ Ò:°˜TŸ[™[¨Ÿ^Ñ:ùó   ƒrF  )rO  r?  s   ` r4   Ú_print_TuplezC89CodePrinter._print_TupleÜ  s"   ø€ Ø�4—9‘9Ó:°TÔ:Ó:Ñ:¸3Ñ>Ð>r6   c                ó`  — | j                   j                  | j                  j                  |t	        «       «      «       | j
                  j                  | j                  j                  |t	        «       «      «       | j                  | j                  j                  ||j                  «      «      S r/   )
rÎ   ÚupdaterÁ   rÊ   rÌ   rÐ   r¸   rç   r·   rè   r›  s     r4   Ú_print_TypezC89CodePrinter._print_Typeá  sv   € Ø�‰×Ñ˜D×-Ñ-×1Ñ1°%¼»Ó?Ô@Ø�‰×Ñ˜4×+Ñ+×/Ñ/°´s³uÓ=Ô>Ø�{‰{˜4×-Ñ-×1Ñ1°%¸¿¹ÓDÓEÐEr6   c           	     óÜ  — ddl m} |j                  }|j                  }|j                  t
        k(  rt        d«      ‚t        |t        «      r�dj                  t        |j                  v rdnd| j                  |j                  «      t        |j                  v rdnd||j                  v rdnd| j                  |j                  «      ¬	«      }n‚t        |t        «      r[d
j                  t        |j                  v rdnd| j                  |j                  «      | j                  |j                  «      ¬«      }nt!        dt	        |«      z  «      ‚|d k7  r|d| j                  |«      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$   rJ  r.  r   rÞ   r   rä   rç   r   Úsymbolr   rs  )rŸ   rë   r‚   rê   ÚvalÚresults         r4   Ú_print_Declarationz!C89CodePrinter._print_Declarationæ  s*  € Ý1Ø�m‰mˆØ�i‰iˆØ�8‰8”wÒÜÐCÓDÐDä�cœ7Ô#Ø+×2Ñ2Ü*¨c¯i©iÑ7‘8¸RØ—+‘+˜cŸh™hÓ'Ü,°·	±	Ñ9‘8¸rØ!)¨S¯Y©YÑ!6‘+¸BØ—+‘+˜cŸj™jÓ)ð 3ó ‰Fô ˜œXÔ&Ø"×)Ñ)Ü*¨c¯i©iÑ7‘8¸RØ—+‘+˜cŸh™hÓ'Ø—+‘+˜cŸj™jÓ)ð *ó ‰Fô &Ð&?Ä$ÀsÃ)Ñ&KÓLÐLØ�$Š;Ø�g §¡¨CÓ 0Ñ0Ñ0ˆFØˆr6   c                ó  — | j                   j                  t        t        «      }| j                  j	                  | j
                  j                  |t        «       «      «       | j                  |«      }t        |j                  |j                  «      «      }d|vr	d|vr|dz  }|j                  d«      }|d   j                  d«      |d<   |d   j                  d«      r|dxx   dz  cc<   dj                  |«      |z   S )NrP  ú.z.0r   Ú0)rÀ   rÊ   r   rÐ   r¦  r¸   rÌ   r#  r/  rå   ræ   ÚsplitÚrstriprÚ   rO  )rŸ   Úfltré   r  r  Ú	num_partss         r4   r
  zC89CodePrinter._print_Float  sÙ   € Ø×!Ñ!×%Ñ%¤d¬DÓ1ˆØ�‰×Ñ˜4×+Ñ+×/Ñ/°´s³uÓ=Ô>Ø×)Ñ)¨%Ó0ˆÜ�#—)‘)˜E×-Ñ-Ó.Ó/ˆØ�c‰>˜c¨™nØ�4‰KˆCØ—I‘I˜c“Nˆ	Ø  ‘|×*Ñ*¨3Ó/ˆ	�!‰Ø�Q‰<× Ñ  Ô%Ø�a‹L˜CÑ‹LØ�x‰x˜	Ó" VÑ+Ð+r6   ©rÎ   c                 ó   — y)NÚtruerÕ   r?  s     r4   Ú_print_BooleanTruez!C89CodePrinter._print_BooleanTrue  s   € àr6   c                 ó   — y)NÚfalserÕ   r?  s     r4   Ú_print_BooleanFalsez"C89CodePrinter._print_BooleanFalse  s   € àr6   c                ó¶  ‡ — |j                   d k(  r?|j                  d k7  rt        d«      ‚dj                  ˆ fd„|j                  D «       «      }n_t        d„ t        |j                  |j                   «      D «       «      }|j                  d k7  r||j                  z  }‰ j                  |«      }dj                  ‰ j                  |j                  «      |¬«      S )Nz%Expected strides when offset is givenz][c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   r¢  ©rô   r  rŸ   s     €r4   rø   z0C89CodePrinter._print_Element.<locals>.<genexpr>  s   øè ø€ ÒG°3˜dŸk™k¨#×.ÑGùr£  c              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wr/   rÕ   )rô   rõ   r­  s      r4   rø   z0C89CodePrinter._print_Element.<locals>.<genexpr>  s   è ø€ ÒM¡T Q¨˜Q˜q�SÑMùs   ‚z{symb}[{idxs}])ÚsymbÚidxs)
r'  r&  rJ  rO  r-  r2  r3  rç   rÞ   r°  )rŸ   ÚelemrÇ  Ú
global_idxs   `   r4   Ú_print_ElementzC89CodePrinter._print_Element  s±   ø€ Ø�<‰<˜4ÒØ�{‰{˜dÒ"Ü Ð!HÓIÐIØ—9‘9ÓG¸$¿,¹,ÔGÓH‰DäÑM¬S°·±¸t¿|¹|Ó-LÔMÓMˆJØ�{‰{˜dÒ"Ø˜dŸk™kÑ)�
Ø—;‘;˜zÓ*ˆDà×&Ñ&Ø—‘˜TŸ[™[Ó)Øð 'ó 
ð 	
r6   c           
     óš   — dj                  |j                  D �cg c]"  }| j                  | j                  |«      «      ‘Œ$ c}«      S c c}w )z0 Elements of code blocks printed as statements. rG  )rO  r  rÜ   rç   )rŸ   r    rõ   s      r4   Ú_print_CodeBlockzC89CodePrinter._print_CodeBlock&  s6   € à�y‰yÀtÇyÁyÖQÀ!˜$×-Ñ-¨d¯k©k¸!«nÕ=ÒQÓRÐRùÒQs   š'Ac                óN   ‡ —  dj                   di |j                  ˆ fd„¬«      ¤ŽS )Nz while ({condition}) {{
{body}
}}c                ó&   •— ‰j                  | «      S r/   r¢  )r  rŸ   s    €r4   r5   z-C89CodePrinter._print_While.<locals>.<lambda>,  s   ø€ ˜dŸk™k¨#Ó.€ r6   )ÚapplyrÕ   )rÞ   r¡   r?  s   ` r4   Ú_print_WhilezC89CodePrinter._print_While*  s2   ø€ Ø:Ð3×:Ñ:ñ 1¸T¿[¹[Û.ð >Ió >0ñ 1ð 	1r6   c                ó>   — d| j                  |j                  «      z  S )Nz{
%s
})rÌ  rq  r?  s     r4   Ú_print_ScopezC89CodePrinter._print_Scope.  s   € Ø˜D×1Ñ1°$·)±)Ó<Ñ<Ð<r6   zstdio.hc                ó6  ‡ — |j                   t        k(  rd}n dd‰ j                  |j                   «      iz  }|j                  |j                  t        k(  rdn‰ j                  |j                  «      dj                  ˆ fd„|j                  D «       «      ¬«      S )Nzprintf({fmt}, {pargs})z fprintf(%(out)s, {fmt}, {pargs})Úoutz%s
r  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   r¢  rÄ  s     €r4   rø   z.C89CodePrinter._print_Print.<locals>.<genexpr>;  s   øè ø€ ÒI°#˜TŸ[™[¨×-ÑIùr£  )ÚfmtÚpargs)Úfiler%   rç   rÞ   Úformat_stringrO  Ú
print_args)rŸ   r    Útemplates   `  r4   Ú_print_PrintzC89CodePrinter._print_Print1  s„   ø€ à�9‰9œÒØ/‰Hà9Ø�t—{‘{ 4§9¡9Ó-ð=ñ ˆHð �‰Ø×,Ñ,´Ò4‘¸$¿+¹+Àd×FXÑFXÓ:YØ—)‘)ÓI¸¿¹ÔIÓJð ó 
ð 	
r6   c                ó   — |j                   S r/   )rè   )rŸ   Ústrms     r4   Ú_print_StreamzC89CodePrinter._print_Stream>  s   € Ø�y‰yÐr6   c                ó®   ‡ — dj                  ˆ fd„|j                  D «       «      }dt        ˆ fd„|j                  |j                  fD «       «      |fz   z  S )Nr  c              3  óR   •K  — | ]  }‰j                  t        |«      «      –— Œ  y ­wr/   )rç   r   rÄ  s     €r4   rø   z:C89CodePrinter._print_FunctionPrototype.<locals>.<genexpr>B  s   øè ø€ ÒS¸C˜$Ÿ+™+¤k°#Ó&6×7ÑSùs   ƒ$'z	%s %s(%s)c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   r¢  rÄ  s     €r4   rø   z:C89CodePrinter._print_FunctionPrototype.<locals>.<genexpr>D  s   øè ø€ ÒM¨�4—;‘;˜s×#ÑMùr£  )rO  Ú
parametersÚtupleÚreturn_typerè   )rŸ   r    Úparss   `  r4   Ú_print_FunctionPrototypez'C89CodePrinter._print_FunctionPrototypeA  sN   ø€ Ø�y‰yÓSÀ4Ç?Á?ÔSÓTˆØÜÓM°×0@Ñ0@À$Ç)Á)Ð/LÔMÓNÐRVÐQXÑXñ
ð 	
r6   c                óJ   — | j                  |«      ›| j                  |«      ›�S r/   )rç  rÒ  r?  s     r4   Ú_print_FunctionDefinitionz(C89CodePrinter._print_FunctionDefinitionG  s(   € Ø×6Ñ6°tÔ<Ø×*Ñ*¨4Ô0ð2ð 	2r6   c                óF   — |j                   \  }d| j                  |«      z  S )Nz	return %s©r  rç   ©rŸ   r    r  s      r4   Ú_print_ReturnzC89CodePrinter._print_ReturnK  s!   € Ø�y‰y‰ˆØ˜TŸ[™[¨Ó-Ñ-Ð-r6   c                óR   ‡ — ddj                  ˆ fd„|j                  D «       «      z  S )Nz(%s)r  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   r¢  rÄ  s     €r4   rø   z6C89CodePrinter._print_CommaOperator.<locals>.<genexpr>P  s   øè ø€ Ò"I¸ 4§;¡;¨s×#3Ñ"Iùr£  )rO  r  r?  s   ` r4   Ú_print_CommaOperatorz#C89CodePrinter._print_CommaOperatorO  s!   ø€ Ø˜Ÿ	™	Ó"I¸t¿y¹yÔ"IÓJÑJÐJr6   c                ój  — |j                   t        k(  rdt        |j                  «      z  S t	        |j                   j
                  «      dk(  r3t        |j                  «      ›d| j                  |j                   «      ›�S t        |j                  «      ›d| j                  |j                   «      ›d�S )Nz%s:r‡   z:
z:
{
z
})rq  r%   r/  rè   rN  r  rÌ  r?  s     r4   Ú_print_LabelzC89CodePrinter._print_LabelR  sz   € Ø�9‰9œÒØœ3˜tŸy™y›>Ñ)Ð)Üˆt�y‰y�~‰~Ó !Ò#Ü # D§I¡I¥°×0EÑ0EÀdÇiÁiÔ0PÐQÐQÜ"% d§i¡i¥.°$×2GÑ2GÈÏ	É	Õ2RÐSÐSr6   c                ó4   — d|j                   j                  z  S )Nzgoto %s)r4  rè   r?  s     r4   Ú_print_gotozC89CodePrinter._print_gotoY  s   € Ø˜4Ÿ:™:Ÿ?™?Ñ*Ð*r6   c                óF   — |j                   \  }d| j                  |«      z  S )Nz++(%s)rë  rì  s      r4   Ú_print_PreIncrementz"C89CodePrinter._print_PreIncrement\  ó!   € Ø�y‰y‰ˆØ˜$Ÿ+™+ cÓ*Ñ*Ð*r6   c                óF   — |j                   \  }d| j                  |«      z  S )Nz(%s)++rë  rì  s      r4   Ú_print_PostIncrementz#C89CodePrinter._print_PostIncrement`  r÷  r6   c                óF   — |j                   \  }d| j                  |«      z  S )Nz--(%s)rë  rì  s      r4   Ú_print_PreDecrementz"C89CodePrinter._print_PreDecrementd  r÷  r6   c                óF   — |j                   \  }d| j                  |«      z  S )Nz(%s)--rë  rì  s      r4   Ú_print_PostDecrementz#C89CodePrinter._print_PostDecrementh  r÷  r6   c                óÎ   — d|j                   j                  |j                  dj                  |j                  D �cg c]  }| j                  |«      ‘Œ c}dgz   «      dœz  S c c}w )Nz!%(keyword)s %(name)s {
%(lines)s}z;
rº   )Úkeywordrè   rï   )rÒ   Ú__name__rè   rO  Údeclarationsrç   )rŸ   r    rë   s      r4   Ú_print_structzC89CodePrinter._print_structl  s[   € Ø3Ø—~‘~×.Ñ.¸¿	¹	ÈEÏJÉJØ/3×/@Ñ/@ÖA t�—‘˜TÕ"ÒAÀRÀDÑHóMJñ7
ñ 
ð 	
ùâAs   »A"c                 ó   — y)Nra   rÕ   ©rŸ   Ú_s     r4   Ú_print_BreakTokenz C89CodePrinter._print_BreakTokenr  s   € Ør6   c                 ó   — y)Nre   rÕ   r  s     r4   Ú_print_ContinueTokenz#C89CodePrinter._print_ContinueTokenu  rA  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<  r@  rC  rU  r[  r`  rb  rk  rt  rw  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Ø€KØ€HØ€HÙ˜Ó(€Ná(,¨[×-JÑ-Jñ )ØØØÙ“uØ"ñOñ )Ð�~ó ð 	ˆgØ�*Ø�ð€Lð 	ˆhØˆeØ�Ø�Ø�ØˆvØˆhØˆyØˆyØˆyØˆxØ�	Ø�	Ø�	ð&€M�?ó ð$ 	�ˆ}ØˆzˆlØ�
ˆ|Ø�
ˆ|Ø�
ˆ|Ø�
ˆ|Ø��Ø��Ø��ð
€Lð 02€KÐ,Ó1ð 	�Ø�Ø�ðÐð 	�Ø�Ø�ðÐð 	�ð Ðð €Kà
€Cà-€CˆÓ-õò2òLò'ò6ò'òBð ó2ó ð2ð ñ:ó ð:ò9ò8ò
4ð0 ó1ó ð1òòòQòB@ò@ôò9ò	1òOò*ò*òò6LòOò>ò
?ð €KòFò
ò6,ñ �{�mÔ$ñó %ðñ �{�mÔ$ñó %ðò
ò Sò1ò=ñ �y�kÔ"ñ

ó #ð

òò
ò2ò.òKòTò+ò+ò+ò+ò+ò
òòð !„Lr6   r¦   c            	      ó’  — e Zd ZU dZ eeez   «      Z e ee	j                  j                  «       ededij                  «       «      «      Z
 e ee	j                  j                  «       edhedhij                  «       «      «      ZeZded<   dj%                  «       Zd„ Zd	„ Zd
„ Z edhdh¬«      edd„«       «       Zd„ Zd„ Zd„ Zy)Ú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                 ó   — y)NÚINFINITYrÕ   r?  s     r4   r@  zC99CodePrinter._print_Infinity�  rA  r6   c                 ó   — y)Nz	-INFINITYrÕ   r?  s     r4   rC  z&C99CodePrinter._print_NegativeInfinity“  rD  r6   c                 ó   — y)NÚNANrÕ   r?  s     r4   Ú
_print_NaNzC99CodePrinter._print_NaN–  s   € Ør6   zmath.hÚm)rÎ   rÏ   Nc           
     ób  ‡ — |€#‰ j                   |j                  j                     }t        |t        «      s(|D ]  \  }} ||j
                  Ž sŒ|} n t        d«      ‚	  |‰ g|j
                  ¢­Ž S # t        $ r5 ‰ j                  |z   ‰ j                  v r‰ j                  t        «      nd}Y nw xY w|r¸‰ j                  |j
                  d   «      }t        |j
                  «      dkD  r¦d}|j
                  dd D ]8  }	|dz  }|dj                  ‰ j                  ||‰ j                  |	«      ¬«      z  }Œ: |d	‰ j                  |j                  |j
                  d   «      «      ›|›�z  }n$d	j!                  ˆ fd
„|j
                  D «       «      }dj                  ‰ j                  |||¬«      S )NzNo matching printerrº   r   r‡   r  r  z, {ns}{name}{suffix}({next})Únsrè   r  Únextr  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr/   r¢  rÄ  s     €r4   rø   z2C99CodePrinter._print_math_func.<locals>.<genexpr>½  s   øè ø€ ÒD°3˜dŸk™k¨#×.ÑDùr£  z{ns}{name}{suffix}({args}))r  rè   r  r  )rË   rÒ   r   r.  r/  r  rJ  Ú	TypeErrorr  Ú_prec_funcsr	  r   rç   rN  rÞ   rv  rO  )
rŸ   r    Únestr  Úcbrè   r  r  Ú
paren_pileÚcurr_args
   `         r4   r  zC99CodePrinter._print_math_func›  s³  ø€ ð ˆ=Ø×(Ñ(¨¯©×)@Ñ)@ÑAˆEÜ˜%¤Ô%Ø!ò 8‘��DÙ�t—y‘y’>Ø �EÙð8ô
 !Ð!6Ó7Ð7ð	aÙ˜Ð* §	¡	Ò*Ð*øÜò 	aØ48·H±H¸uÑ4DÈ×HXÑHXÑ4X�T×*Ñ*¬4Ô0Ð^`ŠFð	aúñ Ø—;‘;˜tŸy™y¨™|Ó,ˆDÜ�4—9‘9‹~ Ò!Ø�
Ø $§	¡	¨!¨B ò �HØ #Ñ%�JØÐ9×@Ñ@ØŸ8™8Ø"Ø%Ø#Ÿ{™{¨8Ó4ð	 Aó ñ ‘Dðñ Ø—K‘K §	¡	¨$¯)©)°B©-Ó 8Ô9Ùðñ ‘ð
 —9‘9ÓD¸$¿)¹)ÔDÓEˆDØ+×2Ñ2Ø�x‰xØØØð	 3ó 
ð 	
s   Á A3 Á3;B1Â0B1c                ó(   — | j                  |d¬«      S ©NT)r$  ©r  r?  s     r4   r‚  zC99CodePrinter._print_MaxÅ  ó   € Ø×$Ñ$ T°Ð$Ó5Ð5r6   c                ó(   — | j                  |d¬«      S r)  r*  r?  s     r4   r‡  zC99CodePrinter._print_MinÈ  r+  r6   c           
     ó  — g }g }d}|D ]y  }|j                  || j                  |j                  «      | j                  |j                  «      | j                  |j                  dz   «      dœz  «       |j                  d«       Œ{ ||fS )Nz8for (int %(var)s=%(start)s; %(var)s<%(end)s; %(var)s++){r‡   )rê   rn  ÚendrF  )rM  rç   r4  Ú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¡7Ó+ØŸ™ Q§W¡WÓ-Ø—{‘{ 1§7¡7¨Q¡;Ó/ñ+1ñ 1ô 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#  r@  rC  r  r'   r¤   r  r‚  r‡  r4  rÕ   r6   r4   r  r  z  sü   … Ø€HÙ˜Ð*<Ñ<Ó=€NÙ‘u˜^×9Ñ9×?Ñ?ÓAØ�?ØÐ$ðD÷ �eƒgóó €Mñ ™˜n×9Ñ9×?Ñ?ÓAØ�K�=Ø�[�MðD÷ �eƒgóó €Lð .€CˆÓ-ðL÷ NSÉUËWð	 òòòñ
 �x�j¨S¨EÔ2Øò&
ó ó 3ð&
òP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y)ÚC11CodePrinterz
stdalign.hr»  c                óF   — |j                   \  }d| j                  |«      z  S )Nzalignof(%s)rë  rì  s      r4   Ú_print_alignofzC11CodePrinter._print_alignofá  s!   € à�y‰y‰ˆØ˜tŸ{™{¨3Ó/Ñ/Ð/r6   N)r   r	  r
  r'   r:  rÕ   r6   r4   r8  r8  ß  s   „ á�|�nÔ%ñ0ó &ñ0r6   r8  )Ú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Æ   r6  r  r5  rš   r¤   r¦   r  r·  ÚkÚsetattrr  r8  Úc_code_printersrÕ   r6   r4   ú<module>rK     sš  ðñõ #Ý å Ý å ß 2÷÷ ÷ ÷ ÷ ÷ ÷ ñ ÷ =ß <Ý &÷ :ðØ	Ñ'¨Ð0Ñ3IÈ5Ð2QÐRðà	ˆ5ðð 
ˆ5ðð 
ˆ5ð	ð
 ˆFðð ˆFðð ˆFðð ˆWðð 
ˆ5ðð 
ˆ5ðð ˆWðð ˆFðð ˆFðð ˆFðð ˆWðð  ˆvð!ð" ˆFð#Ð ñ( Ð.ñ ð 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!ôN\'�^ô \'ð~8ç9>¹»òN€Añ ˆN˜K¨!™O¨^×-LÑ-LÕMðNô0�^ô 0ð ØØñ�r6   