
    ^jq                         d dl Z d dlmZ d dlZd dlmZmZ d dlmZ dZ	dZ
dZ G d d	e      Z G d
 de      Z G d de      Zy)    N)Literal)
PRECEDENCE
precedence)
StrPrinterint64_tl             c                      e Zd ZdZdej
                  defdZdej
                  defdZd dej
                  dedz  defdZ	dej
                  defd	Z
dej
                  defd
Zdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZdej
                  defdZ y)!ExprPrinter_torch_sympystrexprreturnc                 N    | j                  |j                  dt        |            S )N*	stringifyargsr   selfr   s     f/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/utils/_sympy/printers.py
_print_MulzExprPrinter._print_Mul   s    ~~diij.>??    c                 F    d| j                  |j                  d          dS )Nznot (r   )_printr   r   s     r   
_print_NotzExprPrinter._print_Not   s#    t{{499Q<0133r   Norderc                 N    | j                  |j                  dt        |            S )Nz + r   )r   r   r   s      r   
_print_AddzExprPrinter._print_Add   s    ~~dii
40@AAr   c                 j    | j                  |j                  d|j                   dt        |            S )N )r   r   rel_opr   r   s     r   _print_RelationalzExprPrinter._print_Relational   s+    ~~dii1T[[M);Z=MNNr   c                 J    | j                  |j                  dt        d         S )Nz & 
BitwiseAndr   r   r   r   s     r   _print_BitwiseFn_bitwise_andz(ExprPrinter._print_BitwiseFn_bitwise_and!       ~~dii
<0HIIr   c                 J    | j                  |j                  dt        d         S )Nz | 	BitwiseOrr&   r   s     r   _print_BitwiseFn_bitwise_orz'ExprPrinter._print_BitwiseFn_bitwise_or$   s    ~~dii
;0GHHr   c                 J    | j                  |j                  dt        d         S )Nz ^ 
BitwiseXorr&   r   s     r   _print_BitwiseFn_bitwise_xorz(ExprPrinter._print_BitwiseFn_bitwise_xor'   r(   r   c                 P    | j                  |j                  dt        d   dz
        S N % Atom      ?r&   r   s     r   
_print_ModzExprPrinter._print_Mod,   #    ~~dii
60BS0HIIr   c                 \    | j                  |j                  dt        d   dz
        }d| dS )N / r2   r3   (r   r&   )r   r   ss      r   _print_FloatTrueDivzExprPrinter._print_FloatTrueDiv/   s/    NN499eZ-?#-EF1#Qxr   c                 $    | j                  |      S N)_print_FloorDivr   s     r   _print_CleanDivzExprPrinter._print_CleanDiv3   s    ##D))r   c                 >    | j                  |j                  d         S Nr   r   r   s     r   _print_IdentityzExprPrinter._print_Identity6   s    {{499Q<((r   c                 v    |j                   dk(  r t        t        j                  |d            S t        |      S )N5      )dps)_precstrsympyFloatr   s     r   _print_FloatzExprPrinter._print_Float:   s2    :: u{{4R011 t9r   c                     |j                   \  }}|t        |      k7  rt        |      t        |      }|dk  rt        d|       |dkD  r| j                  |g|z  dt        d         S y)Nr   z#exponent must be non-negative, got r   Mul1)r   intAssertionErrorr   r   r   r   baseexps       r   
_print_PowzExprPrinter._print_PowJ   sp    II	c#c(? %%#h7 #Fse!LMM7>>4&3,Z5FGGr   c                 0    t        dt        |              )Nz#_print_ToFloat not implemented for NotImplementedErrortyper   s     r   _print_ToFloatzExprPrinter._print_ToFloatZ   s    !$GT
|"TUUr   c                 0    t        dt        |              )Nz$_print_Infinity not implemented for rU   r   s     r   _print_InfinityzExprPrinter._print_Infinity]       !$Hd"UVVr   c                 0    t        dt        |              )Nz,_print_NegativeInfinity not implemented for rU   r   s     r   _print_NegativeInfinityz#ExprPrinter._print_NegativeInfinity`   s    !:4:,G
 	
r   c                 0    t        dt        |              )Nz_print_NaN not implemented for rU   r   s     r   
_print_NaNzExprPrinter._print_NaNe   s    !$CDJ<"PQQr   c                 0    t        dt        |              )Nz$_print_FloorDiv not implemented for rU   r   s     r   r=   zExprPrinter._print_FloorDivh   r[   r   c                 0    t        dt        |              )Nz%_print_PythonMod not implemented for rU   r   s     r   _print_PythonModzExprPrinter._print_PythonModk   s    !$I$t*"VWWr   c                 0    t        dt        |              )Nz&_print_IntTrueDiv not implemented for rU   r   s     r   _print_IntTrueDivzExprPrinter._print_IntTrueDivn       !$J4PT:,"WXXr   c                 0    t        dt        |              )N(_print_PowByNatural not implemented for rU   r   s     r   _print_PowByNaturalzExprPrinter._print_PowByNaturalq       !6tDzlC
 	
r   c                 0    t        dt        |              )Nz$_print_FloatPow not implemented for rU   r   s     r   _print_FloatPowzExprPrinter._print_FloatPowv   r[   r   c                 0    t        dt        |              )Nz&_print_TruncToInt not implemented for rU   r   s     r   _print_TruncToIntzExprPrinter._print_TruncToInty   re   r   c                 0    t        dt        |              )Nz&_print_RoundToInt not implemented for rU   r   s     r   _print_RoundToIntzExprPrinter._print_RoundToInt|   re   r   c                 0    t        dt        |              )Nz(_print_RoundDecimal not implemented for rU   r   s     r   _print_RoundDecimalzExprPrinter._print_RoundDecimal   ri   r   c                 0    t        dt        |              )Nz(_print_TruncToFloat not implemented for rU   r   s     r   _print_TruncToFloatzExprPrinter._print_TruncToFloat   ri   r   r<   )!__name__
__module____qualname__printmethodrH   ExprrG   r   r   r   r#   r'   r+   r.   r4   r:   r>   rA   rJ   rS   rX   rZ   r]   r_   r=   rb   rd   rh   rk   rm   ro   rq   rs    r   r   r
   r
      s   #K@uzz @c @4uzz 4c 4Buzz B#* B BOejj OS OJ J JI

 Is IJ J J
Juzz Jc J

 s *EJJ *3 *)EJJ )3 )   	uzz 	c 	 V5:: V# VWEJJ W3 W
EJJ 
3 

Ruzz Rc RWEJJ W3 WXUZZ XC XYejj YS Y


 
s 

WEJJ W3 WYejj YS YYejj YS Y


 
s 



 
s 
r   r
   c                      e Zd Zdej                  defdZdej                  defdZdej                  defdZdej                  defdZ	dej                  defdZ
dej                  defdZdej                  defd	Zdej                  defd
Zdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZ dej                  defdZ!dej                  defdZ"dej                  defd Z#dej                  defd!Z$dej                  defd"Z%dej                  defd#Z&dej                  defd$Z'dej                  defd%Z(y&)'PythonPrinterr   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )N   $ToFloat expects exactly one argumentztorch.sym_float(r   r   lenr   rO   r   r   s     r   rX   zPythonPrinter._print_ToFloat   sA    tyy>Q !GHH "$++diil";!<A>>r   c                 N    | j                  |j                  dt        |            S )Nz and r   r   s     r   
_print_AndzPythonPrinter._print_And   s    ~~dii*T2BCCr   c                 N    | j                  |j                  dt        |            S )Nz or r   r   s     r   	_print_OrzPythonPrinter._print_Or       ~~diiD1ABBr   c                 d      fd|j                   D        \  }}}|dk7  r	d| d| d}d| d| dS )Nc              3   V   K   | ]   }j                  |t        d    dz
         " ywr2   r3   Nparenthesizer   .0argr   s     r   	<genexpr>z7PythonPrinter._print_ModularIndexing.<locals>.<genexpr>   s-      
ADDc:f#5#;<
   &)rM   r8    // r   r1   r   r   r   xdivmods   `    r   _print_ModularIndexingz$PythonPrinter._print_ModularIndexing   sN    
HL		
3 #:A3d3%q!A1#SQr   c                      y)Nzmath.infry   r   s     r   rZ   zPythonPrinter._print_Infinity       r   c                      y)Nz	-math.infry   r   s     r   r]   z%PythonPrinter._print_NegativeInfinity   s    r   c                      y)Nzmath.nanry   r   s     r   r_   zPythonPrinter._print_NaN   r   r   c                 P    | j                  |j                  dt        d   dz
        S r0   r&   r   s     r   rb   zPythonPrinter._print_PythonMod   r5   r   c                 B      fd|j                   D        \  }}| d| S )Nc              3   V   K   | ]   }j                  |t        d    dz
         " ywr   r   r   s     r   r   z0PythonPrinter._print_FloorDiv.<locals>.<genexpr>   s(     Xs$##CF);c)ABXr   r   r   r   r   r   r   s   `   r   r=   zPythonPrinter._print_FloorDiv   s%    XdiiX3Dr   c                 P    | j                  |j                  dt        d   dz
        S )Nr7   r2   r3   r&   r   s     r   rd   zPythonPrinter._print_IntTrueDiv   r5   r   c                 ,    d| j                  |       dS )Nztorch._sym_sqrt(r   )r   r   s     r   _helper_sqrtzPythonPrinter._helper_sqrt   s     "$++d"3!4A66r   c                 >    | j                  |j                  d         S r@   )r   r   r   s     r   _print_OpaqueUnaryFn_sqrtz'PythonPrinter._print_OpaqueUnaryFn_sqrt   s      1..r   c                 J    | j                  |j                  dt        d         S Nz ** Powr&   r   s     r   rk   zPythonPrinter._print_FloatPow       ~~diiE1BCCr   c                 J    | j                  |j                  dt        d         S r   r&   r   s     r   rh   z!PythonPrinter._print_PowByNatural   r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   "floor expects exactly one argumentmath.floor(r   r   r   r   s     r   _print_floorzPythonPrinter._print_floor   s?    tyy>Q !EFFT[[167q99r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   'FloorToInt expects exactly one argumentr   r   r   r   r   s     r   _print_FloorToIntzPythonPrinter._print_FloorToInt   s?    tyy>Q !JKKT[[167q99r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   'TruncToInt expects exactly one argumentzmath.trunc(r   r   r   r   s     r   rm   zPythonPrinter._print_TruncToInt   A    tyy>Q !JKK T[[167q99r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   $ceiling expects exactly one argument
math.ceil(r   r   r   r   s     r   _print_ceilingzPythonPrinter._print_ceiling   s?    tyy>Q !GHHDKK		!56a88r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   &CeilToInt expects exactly one argumentr   r   r   r   r   s     r   _print_CeilToIntzPythonPrinter._print_CeilToInt   s?    tyy>Q !IJJDKK		!56a88r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}    Abs expects exactly one argumentzabs(r   r   r   r   s     r   
_print_AbszPythonPrinter._print_Abs   s?    tyy>Q !CDDdkk$))A,/022r   c                     t        |j                        dk  rt        d      ddj                  t	        | j
                  |j                               dS )N   z"Max expects at least two argumentszmax(, r   r   r   rO   joinmapr   r   s     r   
_print_MaxzPythonPrinter._print_Max  F    tyy>A !EFFdiiDKK ;<=Q??r   c                     t        |j                        dk  rt        d      ddj                  t	        | j
                  |j                               dS )Nr   z"Min expects at least two argumentszmin(r   r   r   r   s     r   
_print_MinzPythonPrinter._print_Min  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}    cos expects exactly one argumentz	math.cos(r   r   r   r   s     r   _print_OpaqueUnaryFn_cosz&PythonPrinter._print_OpaqueUnaryFn_cos  ?    tyy>Q !CDD4;;tyy|45Q77r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !cosh expects exactly one argumentz
math.cosh(r   r   r   r   s     r   _print_OpaqueUnaryFn_coshz'PythonPrinter._print_OpaqueUnaryFn_cosh  ?    tyy>Q !DEEDKK		!56a88r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !acos expects exactly one argumentz
math.acos(r   r   r   r   s     r   _print_OpaqueUnaryFn_acosz'PythonPrinter._print_OpaqueUnaryFn_acos  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS Nr}   z sin expects exactly one argumentz	math.sin(r   r   r   r   s     r   _print_OpaqueUnaryFn_sinz&PythonPrinter._print_OpaqueUnaryFn_sin%  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !sinh expects exactly one argumentz
math.sinh(r   r   r   r   s     r   _print_OpaqueUnaryFn_sinhz'PythonPrinter._print_OpaqueUnaryFn_sinh+  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !asin expects exactly one argumentz
math.asin(r   r   r   r   s     r   _print_OpaqueUnaryFn_asinz'PythonPrinter._print_OpaqueUnaryFn_asin1  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}    tan expects exactly one argumentz	math.tan(r   r   r   r   s     r   _print_OpaqueUnaryFn_tanz&PythonPrinter._print_OpaqueUnaryFn_tan7  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !tanh expects exactly one argumentz
math.tanh(r   r   r   r   s     r   _print_OpaqueUnaryFn_tanhz'PythonPrinter._print_OpaqueUnaryFn_tanh=  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   !atan expects exactly one argumentz
math.atan(r   r   r   r   s     r   _print_OpaqueUnaryFn_atanz'PythonPrinter._print_OpaqueUnaryFn_atanC  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   z!log2 expects exactly one argumentz
math.log2(r   r   r   r   s     r   _print_OpaqueUnaryFn_log2z'PythonPrinter._print_OpaqueUnaryFn_log2I  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   'RoundToInt expects exactly one argumentround(r   r   r   r   s     r   ro   zPythonPrinter._print_RoundToIntO  s?    tyy>Q !JKKDIIaL12!44r   c                     t        |j                        dk7  rt        d      |j                  \  }}t        |t        j
                        st        d      d| j                  |       d| dS )Nr   *RoundDecimal expects exactly two argumentsz,ndigits must be an instance of sympy.Integerr   r   r   )r   r   rO   
isinstancerH   Integer	TypeErrorr   )r   r   numberndigitss       r   rq   z!PythonPrinter._print_RoundDecimalU  sd    tyy>Q !MNN))'5==1JKKF+,Bwiq99r   c                     d }t        |j                        D ]@  \  }}| j                  |      }|dk(  r|}| j                  |      }||}5d| d| d| d}B |r|S dS )NTr8   z if z else r   0)reversedr   r   r   r   resultexpr_icond_iexpr_strcond_strs          r   _print_PiecewisezPythonPrinter._print_Piecewise^  s     "&tyy1 	INFF{{6*H~!  ;;v.>%F 
$xjvhaHF	I  v(S(r   N))rt   ru   rv   rH   rx   rG   rX   r   r   r   rZ   r]   r_   rb   r=   rd   r   r   rk   rh   r   r   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rq   r   ry   r   r   r{   r{      s?   ?5:: ?# ?&Duzz Dc DCejj CS C 5::  #  EJJ 3 EJJ 3 uzz c JUZZ JC JEJJ 3 Jejj JS J7 7 7/ejj /S /DEJJ D3 DD

 Ds D: : ::ejj :S ::ejj :S :95:: 9# 99UZZ 9C 93uzz 3c 3@uzz @c @@uzz @c @8UZZ 8C 89ejj 9S 99ejj 9S 98UZZ 8C 89ejj 9S 99ejj 9S 98UZZ 8C 89ejj 9S 99ejj 9S 99ejj 9S 95ejj 5S 5:

 :s :)UZZ )C )r   r{   c                      e Zd Zdej                  defdZdej                  defdZdej                  defdZdej                  defdZ	dej                  defdZ
dej                  defdZdej                  defd	Zdej                  defd
Zdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  ded   defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZdej                  defdZ dej                  defdZ!dej                  defd Z"dej                  defd!Z#dej                  defd"Z$dej                  defd#Z%dej                  defd$Z&dej                  defd%Z'dej                  defd&Z(dej                  defd'Z)dej                  defd(Z*dej                  defd)Z+dej                  defd*Z,dej                  defd+Z-dej                  defd,Z.dej                  defd-Z/y.)/
CppPrinterr   r   c                     t         j                  dv rdnd}t        |      }|t        kD  s	|t        k  rt        | dt               |t        k(  r|dk7  rt        d      d| dS | | S )	N)darwinwin32LLLz too big to convert to r   z#unexpected minimum index type valuez(-1z << 63))sysplatformrN   INDEX_TYPE_MAXINDEX_TYPE_MINOverflowError
INDEX_TYPErO   )r   r   suffixis       r   _print_IntegerzCppPrinter._print_Integert  s~    )<<#I~^!31#%<ZL IJJ. J$%JKK ((VH~r   c                 J      fd|j                   D        \  }}}| d| d| S )Nc              3   V   K   | ]   }j                  |t        d    dz
         " ywr   r   r   s     r   r   z*CppPrinter._print_Where.<locals>.<genexpr>  s-      
ADDc:f#5#;<
r    ?  : r   )r   r   cpqs   `    r   _print_WherezCppPrinter._print_Where  s5    
HL		
1a Cs#aS!!r   c                 N    | j                  |j                  dt        |            S )Nz || r   r   s     r   r   zCppPrinter._print_Or  r   r   c                     d }t        |j                        D ]T  \  }}| j                  |t        d   dz
        }|dk(  r|}*| j                  |t        d   dz
        }||}K| d| d| }V |rd| dS dS )	Nr2   r3   Tr  r  r8   r   r   )r   r   r   r   r   s          r   r   zCppPrinter._print_Piecewise  s     "&tyy1 
	CNFF((F1Cc1IJH~!,,VZ5G#5MN>%F (zXJc&BF
	C !'6(!}/C/r   c           	          |j                   \  }}}| j                  |      }|dk7  r0| j                  |      }|j                  r
d| d| d}n	d| d| d}| j                  |      }dt         d| d	t         d| d	S )
Nr}   ,c10::div_floor_integer(static_cast<int64_t>(), static_cast<int64_t>()),c10::div_floor_floating(static_cast<double>(), static_cast<double>((static_cast<>(z) % static_cast<)r   doprint
is_integerr  r   s        r   r   z!CppPrinter._print_ModularIndexing  s    ii3LLO!8,,s#CB1#E]^a]bbdeB1#E\]`\aacdll3zl"QC/?
|2cURTUUr   c                     |j                   \  }}| j                  |      }| j                  |      }|j                  r	d| d| dS d| d| dS )Nr  r  r  r  r  )r   r  r  r   s       r   r=   zCppPrinter._print_FloorDiv  sc    3LLOll3??A!D\]`\aacdd=aS@WX[W\\^__r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          d}|j                  rdt
         d| dS |S )Nr}   r   std::floor(r   r   static_cast<r  r   r   rO   r   r  r  r   r   rs      r   r   zCppPrinter._print_floor  s^    tyy>Q !EFF$++diil34A648OOj\A3a0JJr   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          d}|j                  rdt
         d| dS |S )Nr}   r   r   r   r   r!  r  r"  r#  s      r   r   zCppPrinter._print_FloorToInt  s^    tyy>Q !JKK$++diil34A648OOj\A3a0JJr   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          d}dt         d| dS )Nr}   r   std::trunc(r   r   r!  r  )r   r   rO   r   r  r#  s      r   rm   zCppPrinter._print_TruncToInt  sS    tyy>Q !JKK$++diil34A6j\A3a00r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   z)TruncToFloat expects exactly one argumentr'  r   r   r   r   s     r   rs   zCppPrinter._print_TruncToFloat  s?    tyy>Q !LMMT[[167q99r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r~   static_cast<double>(r   r   r   r   s     r   rX   zCppPrinter._print_ToFloat  s?    tyy>Q !GHH%dkk$))A,&?%@BBr   c                 v    |j                   \  }}| j                  |      }| j                  |      }d| d| dS )Nzc10::div_mod(r   r   )r   r  r   s       r   rb   zCppPrinter._print_PythonMod  s?    3LLOll3qcC5**r   c                 n    |j                   \  }}d| j                  |       d| j                  |       dS )Nr*  z) / static_cast<double>(r   r   r   )r   r   lhsrhss       r   rd   zCppPrinter._print_IntTrueDiv  s@    99S &dkk#&6%77OPTP[P[\_P`Oaabccr   c                     |j                   \  }}|dk(  rd| j                  |       dS t        dt        |              )Nr   z(1 << (r  rg   )r   r   rV   rW   rP   s       r   rh   zCppPrinter._print_PowByNatural  sJ    II	c19T[[-.b11!6tDzlC
 	
r   c                 n    |j                   \  }}d| j                  |       d| j                  |       dS )N	std::pow(r   r   r-  rP   s       r   rk   zCppPrinter._print_FloatPow  s8    II	c4;;t,-RC0@/ACCr   c                    |j                   \  }}|dk(  s|dk(  r"| j                  |      }|dk(  rd| dS d| dS |j                  rt        |      }|dkD  r| j	                  |g|z  dt
        d         }nO|d	k  r.d
| j	                  |gt        |      z  dt
        d         z   dz   }n|d	k(  rd| j                  |      z   }nd}|j                  rdt         d| dS |S d| dt        |       dS )Nr3   g      
std::sqrt(r   z1.0/std::sqrt(r   r   rL   z1.0/(z1.0/z1.0r!  r  r2  r   )	r   r   r  rN   r   r   absr  float)r   r   rQ   rR   r$  s        r   rS   zCppPrinter._print_Pow  s   II	c#:;;t$D+.#:ZvQ'S^D6QR;SS>>c(CQwNND6C<j6GHrnndVc#h%6Z=NOP 
 T[[..8<\*Rs!4NQN tfBuSzl!44r   c                     |j                   dk(  r|j                   }n|j                   d|j                    d}|j                  rdt         d| dS |S )Nr}   z.0/z.0r!  r  r   )r  r  r  r  r#  s      r   _print_RationalzCppPrinter._print_Rational  sR    66Q;66(A66(#dffXR(A48OOj\A3a0JJr   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          d}|j                  rdt
         d| dS |S )Nr}   r   
std::ceil(r   r   r!  r  r"  r#  s      r   r   zCppPrinter._print_ceiling  s^    tyy>Q !GHHTYYq\231548OOj\A3a0JJr   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          d}|j                  rdt
         d| dS |S )Nr}   r   r;  r   r   r!  r  r"  r#  s      r   r   zCppPrinter._print_CeilToInt  s^    tyy>Q !IJJTYYq\231548OOj\A3a0JJr   name)minmaxc                    |j                   D cg c]  }| j                  |       }}|j                  sS|D cg c]  }d| d
 }}t        |      dk(  rd| d|d    d|d    dS d	dj	                  |      z   d
z   }d| d| dS t        |      dk(  r d| dt
         d|d    dt
         d|d    dS d	dj	                  |      z   d
z   }d| dt
         d| dS c c}w c c}w )Nr*  r   r   zstd::r8   r   r   r}   {}z	<double>(r  r  z), static_cast<r  <)r   r   r  r   r   r  )r   r   r=  ar   r   ils          r   _print_min_maxzCppPrinter._print_min_max!  s   (,		21A22=ABc*3%q1BDB4yA~tfAd1gYba	;;tyy&,B4&	"Q//t9>4&j\DG9OT^S__abfghbiajjlmm tyy&,B4&*Rt155 3Bs
   CC"c                 &    | j                  |d      S )Nr>  rF  r   s     r   r   zCppPrinter._print_Min3      ""4//r   c                 &    | j                  |d      S )Nr?  rH  r   s     r   r   zCppPrinter._print_Max6  rI  r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z	std::abs(r   r   r   r   s     r   r   zCppPrinter._print_Abs9  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z	std::cos(r   r   r   r   s     r   r   z#CppPrinter._print_OpaqueUnaryFn_cos?  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::cosh(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_coshE  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::acos(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_acosK  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS r   r   r   s     r   r   z#CppPrinter._print_OpaqueUnaryFn_sinQ  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::sinh(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_sinhW  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::asin(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_asin]  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z	std::tan(r   r   r   r   s     r   r   z#CppPrinter._print_OpaqueUnaryFn_tanc  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::tanh(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_tanhi  r   r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   z
std::atan(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_atano  r   r   c                 F    d| j                  |j                  d          dS )Nr4  r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_sqrtu  #    DKK		!56a88r   c                 F    d| j                  |j                  d          dS )Nz
std::log2(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_log2y  rV  r   c                     t        |j                        dk7  rt        d      d| j                  |j                  d          dS )Nr}   r   zstd::lrint(r   r   r   r   s     r   ro   zCppPrinter._print_RoundToInt}  r   r   c                    t        |j                        dk7  rt        d      |j                  \  }}|j                  r|dk\  rt        d      t	        d| d      | j                  |t        d         }d| d	| d
|  dS )Nr   r   r   z+ndigits must be negative for integer inputszOFor integer inputs, only non-negative ndigits are currently supported, but got .rL   z%static_cast<double>(std::nearbyint(1ez * z) * 1er   )r   r   rO   r  
ValueErrorr   r   )r   r   r   r   
number_strs        r   rq   zCppPrinter._print_RoundDecimal  s    tyy>Q !MNN))!|$%RSSabiajjkl  &&vz%/@A
6wis:,fV]U]T^^_``r   c                      y)Ntruery   r   s     r   _print_BooleanTruezCppPrinter._print_BooleanTrue  s    r   c                      y)Nfalsery   r   s     r   _print_BooleanFalsezCppPrinter._print_BooleanFalse  s    r   c                      y)Nz'std::numeric_limits<double>::infinity()ry   r   s     r   rZ   zCppPrinter._print_Infinity  s    8r   c                 *    d| j                  |       S )N-)rZ   r   s     r   r]   z"CppPrinter._print_NegativeInfinity  s    4''-.//r   c                      y)Nz(std::numeric_limits<double>::quiet_NaN()ry   r   s     r   r_   zCppPrinter._print_NaN  s    9r   N)0rt   ru   rv   rH   rx   rG   r	  r  r   r   r   r=   r   r   rm   rs   rX   rb   rd   rh   rk   rS   r9  r   r   r   rF  r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rq   r_  rb  rZ   r]   r_   ry   r   r   r   r   s  s   5:: # " " "Cejj CS C0UZZ 0C 0$
V5:: 
V# 
V`EJJ `3 `K K KKejj KS K1ejj 1S 1:

 :s :C5:: C# C+UZZ +C +dejj dS d


 
s 
DEJJ D3 D
5uzz 5c 5:KEJJ K3 KK5:: K# KKUZZ KC K65:: 6W\5J 6s 6$0uzz 0c 00uzz 0c 08uzz 8c 88UZZ 8C 89ejj 9S 99ejj 9S 98UZZ 8C 89ejj 9S 99ejj 9S 98UZZ 8C 89ejj 9S 99ejj 9S 99ejj 9S 99ejj 9S 9:ejj :S :a

 as auzz c 

 s 9EJJ 93 90EJJ 03 0:uzz :c :r   r   )r  typingr   rH   sympy.printing.precedencer   r   sympy.printing.strr   r  r  r  r
   r{   r   ry   r   r   <module>rj     sQ    
   < ) 

|
* |
~a)K a)Hl: l:r   