
    Gj<q                         d dl 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dS )    N)
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 dS )!ExprPrinter_torch_sympystrexprreturnc                 T    |                      |j        dt          |                    S )N*	stringifyargsr   selfr   s     ^/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/torch/utils/_sympy/printers.py
_print_MulzExprPrinter._print_Mul   s"    ~~dij.>.>???    c                 J    d|                      |j        d                    dS )Nznot (r   )_printr   r   s     r   
_print_NotzExprPrinter._print_Not   s%    3t{{49Q<003333r   Norderc                 T    |                      |j        dt          |                    S )Nz + r   )r   r   r   s      r   
_print_AddzExprPrinter._print_Add   s"    ~~di
40@0@AAAr   c                 f    |                      |j        d|j         dt          |                    S )N )r   r   rel_opr   r   s     r   _print_RelationalzExprPrinter._print_Relational   s0    ~~di);T[);););Z=M=MNNNr   c                 P    |                      |j        dt          d                   S )Nz & 
BitwiseAndr   r   r   r   s     r   _print_BitwiseFn_bitwise_andz(ExprPrinter._print_BitwiseFn_bitwise_and        ~~di
<0HIIIr   c                 P    |                      |j        dt          d                   S )Nz | 	BitwiseOrr%   r   s     r   _print_BitwiseFn_bitwise_orz'ExprPrinter._print_BitwiseFn_bitwise_or#   s    ~~di
;0GHHHr   c                 P    |                      |j        dt          d                   S )Nz ^ 
BitwiseXorr%   r   s     r   _print_BitwiseFn_bitwise_xorz(ExprPrinter._print_BitwiseFn_bitwise_xor&   r'   r   c                 V    |                      |j        dt          d         dz
            S N % Atom      ?r%   r   s     r   
_print_ModzExprPrinter._print_Mod+   $    ~~di
60BS0HIIIr   c                 b    |                      |j        dt          d         dz
            }d| dS )N / r1   r2   (r   r%   )r   r   ss      r   _print_FloatTrueDivzExprPrinter._print_FloatTrueDiv.   s0    NN49eZ-?#-EFF1xxxr   c                 ,    |                      |          S N)_print_FloorDivr   s     r   _print_CleanDivzExprPrinter._print_CleanDiv2   s    ##D)))r   c                 B    |                      |j        d                   S Nr   r   r   s     r   _print_IdentityzExprPrinter._print_Identity5   s    {{49Q<(((r   c                 |    |j         dk    r#t          t          j        |d                    S t          |          S )N5      )dps)_precstrsympyFloatr   s     r   _print_FloatzExprPrinter._print_Float9   s<    : u{4R000111 t99r   c                    |j         \  }}|t          |          k    rt          |          t          |          }|dk     rt          d|           |dk    r&|                     |g|z  dt          d                   S dS )Nr   z#exponent must be non-negative, got r   Mul1)r   intAssertionErrorr   r   r   r   baseexps       r   
_print_PowzExprPrinter._print_PowI   s    I	c#c((?? %%%#hh77 !Ls!L!LMMM77>>4&3,Z5FGGGsr   c                 @    t          dt          |                      )Nz#_print_ToFloat not implemented for NotImplementedErrortyper   s     r   _print_ToFloatzExprPrinter._print_ToFloatY   s    !"TT

"T"TUUUr   c                 @    t          dt          |                      )Nz$_print_Infinity not implemented for rT   r   s     r   _print_InfinityzExprPrinter._print_Infinity\       !"Ud"U"UVVVr   c                 @    t          dt          |                      )Nz,_print_NegativeInfinity not implemented for rT   r   s     r   _print_NegativeInfinityz#ExprPrinter._print_NegativeInfinity_   s%    !G4::GG
 
 	
r   c                 @    t          dt          |                      )Nz_print_NaN not implemented for rT   r   s     r   
_print_NaNzExprPrinter._print_NaNd   s    !"PDJJ"P"PQQQr   c                 @    t          dt          |                      )Nz$_print_FloorDiv not implemented for rT   r   s     r   r<   zExprPrinter._print_FloorDivg   rZ   r   c                 @    t          dt          |                      )Nz%_print_PythonMod not implemented for rT   r   s     r   _print_PythonModzExprPrinter._print_PythonModj   s    !"V$t**"V"VWWWr   c                 @    t          dt          |                      )Nz&_print_IntTrueDiv not implemented for rT   r   s     r   _print_IntTrueDivzExprPrinter._print_IntTrueDivm        !"W4PT::"W"WXXXr   c                 @    t          dt          |                      )N(_print_PowByNatural not implemented for rT   r   s     r   _print_PowByNaturalzExprPrinter._print_PowByNaturalp   %    !CtDzzCC
 
 	
r   c                 @    t          dt          |                      )Nz$_print_FloatPow not implemented for rT   r   s     r   _print_FloatPowzExprPrinter._print_FloatPowu   rZ   r   c                 @    t          dt          |                      )Nz&_print_TruncToInt not implemented for rT   r   s     r   _print_TruncToIntzExprPrinter._print_TruncToIntx   rd   r   c                 @    t          dt          |                      )Nz&_print_RoundToInt not implemented for rT   r   s     r   _print_RoundToIntzExprPrinter._print_RoundToInt{   rd   r   c                 @    t          dt          |                      )Nz(_print_RoundDecimal not implemented for rT   r   s     r   _print_RoundDecimalzExprPrinter._print_RoundDecimal~   rh   r   c                 @    t          dt          |                      )Nz(_print_TruncToFloat not implemented for rT   r   s     r   _print_TruncToFloatzExprPrinter._print_TruncToFloat   rh   r   r;   )!__name__
__module____qualname__printmethodrG   ExprrF   r   r   r   r"   r&   r*   r-   r3   r9   r=   r@   rI   rR   rW   rY   r\   r^   r<   ra   rc   rg   rj   rl   rn   rp   rr    r   r   r	   r	      s3       #K@uz @c @ @ @ @4uz 4c 4 4 4 4B Buz B#* B B B B BOej OS O O O OJ J J J J JI
 Is I I I IJ J J J J J
Juz Jc J J J J
 s    *EJ *3 * * * *)EJ )3 ) ) ) )      	uz 	c 	 	 	 	 V5: V# V V V VWEJ W3 W W W W
EJ 
3 
 
 
 

Ruz Rc R R R RWEJ W3 W W W WXUZ XC X X X XYej YS Y Y Y Y

 
s 
 
 
 

WEJ W3 W W W WYej YS Y Y Y YYej YS Y Y Y 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(d&S )'PythonPrinterr   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )N   $ToFloat expects exactly one argumentztorch.sym_float(r   r   lenr   rN   r   r   s     r   rW   zPythonPrinter._print_ToFloat   sI    ty>>Q !GHHH ?$++dil";";>>>>r   c                 T    |                      |j        dt          |                    S )Nz and r   r   s     r   
_print_AndzPythonPrinter._print_And   s"    ~~di*T2B2BCCCr   c                 T    |                      |j        dt          |                    S )Nz or r   r   s     r   	_print_OrzPythonPrinter._print_Or   "    ~~diD1A1ABBBr   c                 b      fd|j         D             \  }}}|dk    r	d| d| d}d| d| dS )Nc              3   `   K   | ](}                     |t          d          dz
            V  )dS r1   r2   Nparenthesizer   .0argr   s     r   	<genexpr>z7PythonPrinter._print_ModularIndexing.<locals>.<genexpr>   sN       
 
ADDc:f#5#;<<
 
 
 
 
 
r   rL   r7    // r   r0   r   r   r   xdivmods   `    r   _print_ModularIndexingz$PythonPrinter._print_ModularIndexing   so    
 
 
 
HL	
 
 
3 #::!A!!3!!!A1r   c                     dS )Nzmath.infrx   r   s     r   rY   zPythonPrinter._print_Infinity       zr   c                     dS )Nz	-math.infrx   r   s     r   r\   z%PythonPrinter._print_NegativeInfinity   s    {r   c                     dS )Nzmath.nanrx   r   s     r   r^   zPythonPrinter._print_NaN   r   r   c                 V    |                      |j        dt          d         dz
            S r/   r%   r   s     r   ra   zPythonPrinter._print_PythonMod   r4   r   c                 >      fd|j         D             \  }}| d| S )Nc              3   `   K   | ](}                     |t          d          dz
            V  )dS r   r   r   s     r   r   z0PythonPrinter._print_FloorDiv.<locals>.<genexpr>   s=      XXs$##CF);c)ABBXXXXXXr   r   r   r   r   r   r   s   `   r   r<   zPythonPrinter._print_FloorDiv   s2    XXXXdiXXX3r   c                 V    |                      |j        dt          d         dz
            S )Nr6   r1   r2   r%   r   s     r   rc   zPythonPrinter._print_IntTrueDiv   r4   r   c                 4    d|                      |           dS )Nztorch._sym_sqrt(r   r   r   s     r   _helper_sqrtzPythonPrinter._helper_sqrt   s!     7$++d"3"36666r   c                 B    |                      |j        d                   S r?   )r   r   r   s     r   _print_OpaqueUnaryFn_sqrtz'PythonPrinter._print_OpaqueUnaryFn_sqrt   s      1...r   c                 P    |                      |j        dt          d                   S Nz ** Powr%   r   s     r   rj   zPythonPrinter._print_FloatPow       ~~diE1BCCCr   c                 P    |                      |j        dt          d                   S r   r%   r   s     r   rg   z!PythonPrinter._print_PowByNatural   r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   "floor expects exactly one argumentmath.floor(r   r   r~   r   s     r   _print_floorzPythonPrinter._print_floor   sG    ty>>Q !EFFF9T[[1669999r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   'FloorToInt expects exactly one argumentr   r   r   r~   r   s     r   _print_FloorToIntzPythonPrinter._print_FloorToInt   sG    ty>>Q !JKKK9T[[1669999r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   'TruncToInt expects exactly one argumentzmath.trunc(r   r   r~   r   s     r   rl   zPythonPrinter._print_TruncToInt   I    ty>>Q !JKKK :T[[1669999r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   $ceiling expects exactly one argument
math.ceil(r   r   r~   r   s     r   _print_ceilingzPythonPrinter._print_ceiling   sG    ty>>Q !GHHH8DKK	!558888r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   &CeilToInt expects exactly one argumentr   r   r   r~   r   s     r   _print_CeilToIntzPythonPrinter._print_CeilToInt   sG    ty>>Q !IJJJ8DKK	!558888r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|    Abs expects exactly one argumentzabs(r   r   r~   r   s     r   
_print_AbszPythonPrinter._print_Abs   sG    ty>>Q !CDDD2dkk$)A,//2222r   c                     t          |j                  dk     rt          d          dd                    t	          | j        |j                             dS )N   z"Max expects at least two argumentszmax(, r   r   r   rN   joinmapr   r   s     r   
_print_MaxzPythonPrinter._print_Max  O    ty>>A !EFFF?diiDK ; ;<<????r   c                     t          |j                  dk     rt          d          dd                    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k    rt          d          d|                     |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  G    ty>>Q !CDDD74;;ty|447777r   c                     t          |j                  dk    rt          d          d|                     |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  G    ty>>Q !DEEE8DKK	!558888r   c                     t          |j                  dk    rt          d          d|                     |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k    rt          d          d|                     |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k    rt          d          d|                     |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k    rt          d          d|                     |j        d                    dS )Nr|   !asin expects exactly one argumentz
math.asin(r   r   r~   r   s     r   _print_OpaqueUnaryFn_asinz'PythonPrinter._print_OpaqueUnaryFn_asin0  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|    tan expects exactly one argumentz	math.tan(r   r   r~   r   s     r   _print_OpaqueUnaryFn_tanz&PythonPrinter._print_OpaqueUnaryFn_tan6  r   r   c                     t          |j                  dk    rt          d          d|                     |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k    rt          d          d|                     |j        d                    dS )Nr|   !atan expects exactly one argumentz
math.atan(r   r   r~   r   s     r   _print_OpaqueUnaryFn_atanz'PythonPrinter._print_OpaqueUnaryFn_atanB  r   r   c                     t          |j                  dk    rt          d          d|                     |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_log2H  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   'RoundToInt expects exactly one argumentround(r   r   r~   r   s     r   rn   zPythonPrinter._print_RoundToIntN  sG    ty>>Q !JKKK4DIaL114444r   c                     t          |j                  dk    rt          d          |j        \  }}t          |t          j                  st          d          d|                     |           d| dS )Nr   *RoundDecimal expects exactly two argumentsz,ndigits must be an instance of sympy.Integerr   r   r   )r   r   rN   
isinstancerG   Integer	TypeErrorr   )r   r   numberndigitss       r   rp   z!PythonPrinter._print_RoundDecimalT  sx    ty>>Q !MNNN)'5=11 	LJKKK9F++99w9999r   c                     d }t          |j                  D ]I\  }}|                     |          }|dk    r|}#|                     |          }||}=d| d| d| d}J|r|ndS )NTr7   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     "&ty11 	I 	INFF{{6**H~~!  ;;v..>%FFHHHxHHvHHHFF(vvS(r   N))rs   rt   ru   rG   rw   rF   rW   r   r   r   rY   r\   r^   ra   r<   rc   r   r   rj   rg   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   rp   r   rx   r   r   rz   rz      s0       ?5: ?# ? ? ? ?&Duz Dc D D D DCej CS C C C C 5:  #        EJ 3    EJ 3    uz c    JUZ JC J J J JEJ 3    Jej JS J J J J7 7 7 7 7 7/ej /S / / / /DEJ D3 D D D DD
 Ds D D D D: : : : : ::ej :S : : : ::ej :S : : : :95: 9# 9 9 9 99UZ 9C 9 9 9 93uz 3c 3 3 3 3@uz @c @ @ @ @@uz @c @ @ @ @8UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 98UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 98UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 99ej 9S 9 9 9 95ej 5S 5 5 5 5:
 :s : : : :)UZ )C ) ) ) ) ) )r   rz   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(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+S ),
CppPrinterr   r   c                     t           j        dv rdnd}t          |          }|t          k    s|t          k     rt          | dt                     |t          k    r|dk    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platformrM   INDEX_TYPE_MAXINDEX_TYPE_MINOverflowError
INDEX_TYPErN   )r   r   suffixis       r   _print_IntegerzCppPrinter._print_Integers  s    )<<<#II~^!3!31 I IZ I IJJJ.  J$%JKKK )((((~V~~r   c                 F      fd|j         D             \  }}}| d| d| S )Nc              3   `   K   | ](}                     |t          d          dz
            V  )dS r   r   r   s     r   r   z*CppPrinter._print_Where.<locals>.<genexpr>  sN       
 
ADDc:f#5#;<<
 
 
 
 
 
r    ?  : r   )r   r   cpqs   `    r   _print_WherezCppPrinter._print_Where  sQ    
 
 
 
HL	
 
 
1a !!!!a!!!r   c                 T    |                      |j        dt          |                    S )Nz || r   r   s     r   r   zCppPrinter._print_Or  r   r   c                    d }t          |j                  D ]e\  }}|                     |t          d         dz
            }|dk    r|}2|                     |t          d         dz
            }||}[| d| d| }f|rd| dndS )	Nr1   r2   Tr  r  r7   r   r   )r   r   r   r   r   s          r   r   zCppPrinter._print_Piecewise  s     "&ty11 
	C 
	CNFF((F1Cc1IJJH~~!,,VZ5G#5MNN>%FF (BBXBB&BBFF &/}6}}}}C/r   c           	         |j         \  }}}|                     |          }|dk    r/|                     |          }|j        r
d| d| d}n	d| d| d}|                     |          }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>(z(static_cast<>(z) % static_cast<)r   doprint
is_integerr  r   s        r   r   z!CppPrinter._print_ModularIndexing  s    i3LLOO!88,,s##C ee1ee^aeeed1dd]`dddll3UzUUQUU
UUcUUUUr   c                     |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  sl    3LLOOll3? 	ed!dd]`dddd_a__X[____r   c                     t          |j                  dk    rt          d          d|                     |j        d                    d}|j        rdt
           d| dn|S )Nr|   r   std::floor(r   r   static_cast<r  r   r   rN   r   r  r  r   r   rs      r   r   zCppPrinter._print_floor  sl    ty>>Q !EFFF6$++dil3366648OJ0j00A0000Jr   c                     t          |j                  dk    rt          d          d|                     |j        d                    d}|j        rdt
           d| dn|S )Nr|   r   r  r   r   r  r  r   r!  s      r   r   zCppPrinter._print_FloorToInt  sl    ty>>Q !JKKK6$++dil3366648OJ0j00A0000Jr   c                     t          |j                  dk    rt          d          d|                     |j        d                    d}dt           d| dS )Nr|   r   std::trunc(r   r   r  r  )r   r   rN   r   r  r!  s      r   rl   zCppPrinter._print_TruncToInt  s_    ty>>Q !JKKK6$++dil336660j00A0000r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   z)TruncToFloat expects exactly one argumentr%  r   r   r~   r   s     r   rr   zCppPrinter._print_TruncToFloat  sG    ty>>Q !LMMM9T[[1669999r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r}   static_cast<double>(r   r   r~   r   s     r   rW   zCppPrinter._print_ToFloat  sG    ty>>Q !GHHHBdkk$)A,&?&?BBBBr   c                 |    |j         \  }}|                     |          }|                     |          }d| d| dS )Nzc10::div_mod(r   r   )r   r  r   s       r   ra   zCppPrinter._print_PythonMod  sF    3LLOOll3*q**C****r   c                 t    |j         \  }}d|                     |           d|                     |           dS )Nr(  z) / static_cast<double>(r   r   r   )r   r   lhsrhss       r   rc   zCppPrinter._print_IntTrueDiv  sE    9S ddkk#&6&6ccPTP[P[\_P`P`ccccr   c                     |j         \  }}|dk    rd|                     |           dS t          dt          |                      )Nr   z(1 << (r  rf   )r   r   rU   rV   rO   s       r   rg   zCppPrinter._print_PowByNatural  sV    I	c1991T[[--1111!CtDzzCC
 
 	
r   c                 t    |j         \  }}d|                     |           d|                     |           dS )N	std::pow(r   r   r+  rO   s       r   rj   zCppPrinter._print_FloatPow  s>    I	cC4;;t,,CCC0@0@CCCCr   c                    |j         \  }}|dk    s|dk    r'|                     |          }|dk    rd| dnd| dS |j        rt          |          }|dk    r'|                     |g|z  dt
          d                   }na|d	k     r:d
|                     |gt          |          z  dt
          d                   z   dz   }n!|d	k    rd|                     |          z   }nd}|j        rdt           d| dn|S d| dt          |           dS )Nr2   g      
std::sqrt(r   z1.0/std::sqrt(r   r   rK   z1.0/(z1.0/z1.0r  r  r0  r   )	r   r   r  rM   r   r   absr  float)r   r   rP   rQ   r"  s        r   rR   zCppPrinter._print_Pow  sO   I	c#::;;t$$D+.#::''''';SD;S;S;SS> 	5c((CQwwNND6C<j6GHHrnndVc#hh%6Z=NOOP 
 T[[...8<N4*444444QN 5t44uSzz4444r   c                 |    |j         dk    r	|j         }n|j         d|j          d}|j        rdt           d| dn|S )Nr|   z.0/z.0r  r  r   )r  r  r  r  r!  s      r   _print_RationalzCppPrinter._print_Rational
  sX    6Q;;6AA6((df(((A48OJ0j00A0000Jr   c                     t          |j                  dk    rt          d          d|                     |j        d                    d}|j        rdt
           d| dn|S )Nr|   r   
std::ceil(r   r   r  r  r   r!  s      r   r   zCppPrinter._print_ceiling  sl    ty>>Q !GHHH5TYq\2255548OJ0j00A0000Jr   c                     t          |j                  dk    rt          d          d|                     |j        d                    d}|j        rdt
           d| dn|S )Nr|   r   r9  r   r   r  r  r   r!  s      r   r   zCppPrinter._print_CeilToInt  sl    ty>>Q !IJJJ5TYq\2255548OJ0j00A0000Jr   c           	            fd|j         D             }t          |          dk    r%dt           d|d          dt           d|d          d	S d	d
                    |          z   dz   }dt           d| dS )Nc                 :    g | ]}                     |          S rx   r   r   ar   s     r   
<listcomp>z)CppPrinter._print_Min.<locals>.<listcomp>"  #    2221A222r   r   zstd::min(static_cast<r  r   ), static_cast<r|   r  {r   }z	std::min<r   r   r   r  r   r   r   r   ils   `   r   r   zCppPrinter._print_Min       2222	222t99>>j:jjajjQ[jj_cde_fjjjj tyy&,B2z22R2222r   c           	            fd|j         D             }t          |          dk    r%dt           d|d          dt           d|d          d	S d	d
                    |          z   dz   }dt           d| dS )Nc                 :    g | ]}                     |          S rx   r   r=  s     r   r?  z)CppPrinter._print_Max.<locals>.<listcomp>,  r@  r   r   zstd::max(static_cast<r  r   rA  r|   r  rB  r   rC  z	std::max<r   rD  rE  s   `   r   r   zCppPrinter._print_Max*  rG  r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z	std::abs(r   r   r~   r   s     r   r   zCppPrinter._print_Abs4  r   r   c                     t          |j                  dk    rt          d          d|                     |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k    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::cosh(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_cosh@  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::acos(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_acosF  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS r   r~   r   s     r   r   z#CppPrinter._print_OpaqueUnaryFn_sinL  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::sinh(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_sinhR  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::asin(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_asinX  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z	std::tan(r   r   r~   r   s     r   r   z#CppPrinter._print_OpaqueUnaryFn_tan^  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::tanh(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_tanhd  r   r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   z
std::atan(r   r   r~   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_atanj  r   r   c                 J    d|                      |j        d                    dS )Nr2  r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_sqrtp  %    8DKK	!558888r   c                 J    d|                      |j        d                    dS )Nz
std::log2(r   r   r   r   s     r   r   z$CppPrinter._print_OpaqueUnaryFn_log2t  rU  r   c                     t          |j                  dk    rt          d          d|                     |j        d                    dS )Nr|   r   zstd::lrint(r   r   r~   r   s     r   rn   zCppPrinter._print_RoundToIntx  r   r   c                    t          |j                  dk    rt          d          |j        \  }}|j        r(|dk    rt          d          t	          d| d          |                     |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 .rK   z%static_cast<double>(std::nearbyint(1ez * z) * 1er   )r   r   rN   r  
ValueErrorr   r   )r   r   r   r   
number_strs        r   rp   zCppPrinter._print_RoundDecimal  s    ty>>Q !MNNN) 	!||$%RSSSlbilll   &&vz%/@AA
`w``:``V]U]````r   c                     dS )Ntruerx   r   s     r   _print_BooleanTruezCppPrinter._print_BooleanTrue  s    vr   c                     dS )Nfalserx   r   s     r   _print_BooleanFalsezCppPrinter._print_BooleanFalse  s    wr   c                     dS )Nz'std::numeric_limits<double>::infinity()rx   r   s     r   rY   zCppPrinter._print_Infinity  s    88r   c                 2    d|                      |           S )N-)rY   r   s     r   r\   z"CppPrinter._print_NegativeInfinity  s    /4''--///r   c                     dS )Nz(std::numeric_limits<double>::quiet_NaN()rx   r   s     r   r^   zCppPrinter._print_NaN  s    99r   N).rs   rt   ru   rG   rw   rF   r  r  r   r   r   r<   r   r   rl   rr   rW   ra   rc   rg   rj   rR   r7  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   rp   r^  ra  rY   r\   r^   rx   r   r   r   r   r  s       5: #    " " " " " "Cej CS C C C C0UZ 0C 0 0 0 0$
V5: 
V# 
V 
V 
V 
V`EJ `3 ` ` ` `K K K K K KKej KS K K K K1ej 1S 1 1 1 1:
 :s : : : :C5: C# C C C C+UZ +C + + + +dej dS d d d d

 
s 
 
 
 
DEJ D3 D D D D
5uz 5c 5 5 5 5:KEJ K3 K K K KK5: K# K K K KKUZ KC K K K K3uz 3c 3 3 3 33uz 3c 3 3 3 38uz 8c 8 8 8 88UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 98UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 98UZ 8C 8 8 8 89ej 9S 9 9 9 99ej 9S 9 9 9 99ej 9S 9 9 9 99ej 9S 9 9 9 9:ej :S : : : :a
 as a a a auz c    
 s    9EJ 93 9 9 9 90EJ 03 0 0 0 0:uz :c : : : : : :r   r   )r   rG   sympy.printing.precedencer   r   sympy.printing.strr   r  r  r  r	   rz   r   rx   r   r   <module>rh     s    



  < < < < < < < < ) ) ) ) ) ) 

|
 |
 |
 |
 |
* |
 |
 |
~a) a) a) a) a)K a) a) a)Hh: h: h: h: h: h: h: h: h: h:r   