o
    ei                     @   s<  d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
 dg diZed d	d	 g d
 ed< ed d	d	 ed< ed d dddddidddddZdD ]
Ze ed e< qTdD ]
Ze ed e< qadd Zdd ZG dd dZG d d! d!eeZG d"d# d#eeZG d$d% d%eeZeeed&Zd	S )'z
C++ code printer
    )chain)Typenone   )C89CodePrinterC99CodePrinter)cxxcodeC++98)JandZand_eqasmautoZbitandZbitorboolbreakcasezcatch,charclassZcomplconstZ
const_castcontinuedefaultdeletedodoubleZdynamic_castelseenumZexplicitZexportZexternfalsefloatforZfriendZgotoifinlineintlongZmutable	namespacenewnotZnot_eqoperatororZor_eqprivateZ	protectedpublicregisterZreinterpret_castreturnZshortsignedsizeofZstaticZstatic_caststructswitchtemplatethisthrowtruetryZtypedefZtypeidtypenameunionZunsignedusingZvirtualZvoidZvolatileZwchar_twhilexorZxor_eqN)
ZalignasZalignofZchar16_tZchar32_tZ	constexprdecltypeZnoexceptZnullptrZstatic_assertZthread_localC++11C++17r(   fmodceil)ModZceilinggammaZtgammabetaZexpintZriemann_zeta)r?   ZEizeta)r	   r9   r:   )ZAbsexploglog10sqrtsincostanasinacosatanatan2sinhcoshtanhfloor)asinhacoshatanherferfcc                    s@   d| }t | |rtd fdd}dt |_t| || d S )Nz	_print_%sz1Edit method (or subclass) instead of overwriting.c              	      s    d | j dt| j|jS )Nz{}{}({})z, )format_nsjoinmap_printargsselfexpr	func_name BD:\Projects\ConvertPro\env\Lib\site-packages\sympy/printing/cxx.py_print_methodF   s    z+_attach_print_method.<locals>._print_methodzPrints code for %s)hasattr
ValueErrork__doc__setattr)cls
sympy_namer_   	meth_namerb   r`   r^   ra   _attach_print_methodB   s   

rk   c                 C   s(   || j   D ]
\}}t| || qd S N)standarditemsrk   )rh   contri   Zcxx_namer`   r`   ra   _attach_print_methodsL   s   rp   c                       sB   e Zd ZdZdZdZd fdd	Zdd Zd	d
 Zdd Z	  Z
S )_CXXCodePrinterBaseZ_cxxcodezC++zstd::Nc                    s   t  |pi  d S rl   )super__init__)r\   settings	__class__r`   ra   rs   V   s   z_CXXCodePrinterBase.__init__c              	   C   Z   ddl m} t|jdkr| |jd S d| j| |jd | ||jdd   f S )Nr   )Maxr   z%smax(%s, %s))(sympy.functions.elementary.miscellaneousrx   lenrZ   rY   rV   )r\   r]   rx   r`   r`   ra   
_print_MaxY      z_CXXCodePrinterBase._print_Maxc              	   C   rw   )Nr   )Minr   z%smin(%s, %s))ry   r}   rz   rZ   rY   rV   )r\   r]   r}   r`   r`   ra   
_print_Min`   r|   z_CXXCodePrinterBase._print_Minc                 C   s   |j tkr
d|j S td)Nzusing %sz#C++98 does not support type aliases)aliasr   typerd   r[   r`   r`   ra   _print_usingg   s   

z _CXXCodePrinterBase._print_usingrl   )__name__
__module____qualname__ZprintmethodlanguagerV   rs   r{   r~   r   __classcell__r`   r`   ru   ra   rq   Q   s    rq   c                   @   s   e Zd ZdZeed ZdS )CXX98CodePrinterr	   N)r   r   r   rm   setreservedreserved_wordsr`   r`   r`   ra   r   n   s    r   c                       s   e Zd ZdZeed Zeee	j
 edddhfedddhfedddhfed	d
dhfedddhfedddhfedddhfedddhfedddhfedddhfeddi Z
 fddZ  ZS )CXX11CodePrinterr9   Zint8Zint8_tZcstdintZint16Zint16_tZint32Zint32_tZint64Zint64_tZuint8Zuint8_tZuint16Zuint16_tZuint32Zuint32_tZuint64Zuint64_tZ	complex64zstd::complex<float>complexZ
complex128zstd::complex<double>r   )r   Nc                    s(   |j tkrt |S d|j| jd S )Nzusing %(alias)s = %(type)s)apply)r   r   rr   r   kwargsrY   r[   ru   r`   ra   r      s   
zCXX11CodePrinter._print_using)r   r   r   rm   r   r   r   dictr   r   Ztype_mappingsrn   r   r   r   r`   r`   ru   ra   r   v   s(    r   c                   @   sJ   e Zd ZdZeed Zeej	fi e
d Z	dd Zdd Zdd ZdS )	CXX17CodePrinterr:   c                 C   
   |  |S rl   Z_print_math_funcr[   r`   r`   ra   _print_beta      
zCXX17CodePrinter._print_betac                 C   r   rl   r   r[   r`   r`   ra   	_print_Ei   r   zCXX17CodePrinter._print_Eic                 C   r   rl   r   r[   r`   r`   ra   _print_zeta   r   zCXX17CodePrinter._print_zetaN)r   r   r   rm   r   r   r   r   r   Z_kf_math_functionsr   r   r   r`   r`   r`   ra   r      s    r   )zc++98zc++11zc++17)rf   	itertoolsr   Zsympy.codegen.astr   r   cr   r   Zsympy.printing.codeprinterr   r   remover   re   lowerrk   rp   rq   r   r   r   Zcxx_code_printersr`   r`   r`   ra   <module>   sD    

