o
    *Î®cº	  ã                   @   s¤   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZ d dlmZ edƒ\ZZZZdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úsymbols)ÚbetaÚEiÚzetaÚMaxÚMinÚsqrtÚ
riemann_xiÚfrac)ÚCXX98CodePrinterÚCXX11CodePrinterÚCXX17CodePrinterÚcxxcode)Úlog1pzx y u vc                  C   s|   t ƒ  ttdƒ¡dv sJ ‚t ƒ  ttdttƒƒ¡dksJ ‚t ƒ } | jdks'J ‚| jdks.J ‚d| jv s5J ‚d| jvs<J ‚d S )Né   )zstd::max(x, 3)zstd::max(3, x)z&std::min(3, std::min(x, std::sqrt(x)))úC++zC++98ÚtemplateÚalignas)	r   Údoprintr   Úxr   r   ÚlanguageÚstandardÚreserved_words)Úcxx98printer© r   úD/tmp/pip-target-vg8gfxp4/lib/python/sympy/printing/tests/test_cxx.pyÚtest_CXX98CodePrinter
   s    r   c                  C   sh   t ƒ  ttƒ¡dksJ ‚t ƒ } | jdksJ ‚| jdksJ ‚d| jv s$J ‚d| jv s+J ‚d| jvs2J ‚d S )Nústd::log1p(x)r   zC++11ÚoperatorÚnoexceptÚconcept)r   r   r   r   r   r   r   )Úcxx11printerr   r   r   Útest_CXX11CodePrinter   s   r"   c                  C   s,   G dd„ dt ƒ} | ƒ  ttƒ¡dksJ ‚d S )Nc                   @   s   e Zd Zdd„ ZdS )z-test_subclass_print_method.<locals>.MyPrinterc                 S   s   dd  t| j|jƒ¡ S )Nzmy_library::log1p(%s)z, )ÚjoinÚmapÚ_printÚargs)ÚselfÚexprr   r   r   Ú_print_log1p!   s   z:test_subclass_print_method.<locals>.MyPrinter._print_log1pN)Ú__name__Ú
__module__Ú__qualname__r)   r   r   r   r   Ú	MyPrinter    s    r-   úmy_library::log1p(x)©r   r   r   r   )r-   r   r   r   Útest_subclass_print_method   s   r0   c                  C   sL   G dd„ dt ƒ} t ƒ }| ƒ }| ttƒ¡dksJ ‚| ttƒ¡dks$J ‚d S )Nc                   @   s   e Zd ZdZdS )z1test_subclass_print_method__ns.<locals>.MyPrinterzmy_library::N)r*   r+   r,   Ú_nsr   r   r   r   r-   (   s    r-   r   r.   r/   )r-   ÚpÚmypr   r   r   Útest_subclass_print_method__ns'   s
   r4   c                   C   s~   t ƒ  tttƒ¡dksJ ‚t ƒ  ttƒ¡dksJ ‚t ƒ  ttƒ¡dks%J ‚t ƒ  ttƒ¡dks1J ‚t ƒ  ttƒ¡dks=J ‚d S )Nzstd::beta(x, y)zstd::expint(x)zstd::riemann_zeta(x)zx - std::floor(x)z\(1.0/2.0)*std::pow(M_PI, -1.0/2.0*x)*x*(x - 1)*std::tgamma((1.0/2.0)*x)*std::riemann_zeta(x))	r   r   r   r   Úyr   r   r
   r	   r   r   r   r   Útest_CXX17CodePrinter2   s
   r6   c                   C   s.   t tttƒd ƒ d¡ƒt ddgƒksJ ‚d S )Ng      à?Ú*z0.5zstd::sqrt(x))Úsortedr   r   r   Úsplitr   r   r   r   Útest_cxxcode<   s   .r:   c                   C   sH   t ttttƒtttƒƒƒdksJ ‚t ttttƒtttƒƒƒdks"J ‚d S )Nz(std::max(std::min(u, v), std::min(x, y))z(std::min(std::max(u, v), std::max(x, y)))r   r   r   r   r5   ÚuÚvr   r   r   r   Útest_cxxcode_nested_minmax?   s   ÿÿr=   N)Úsympy.core.symbolr   Úsympy.functionsr   r   r   r   r   r   r	   r
   Úsympy.printing.cxxr   r   r   r   Úsympy.codegen.cfunctionsr   r   r5   r;   r<   r   r"   r0   r4   r6   r:   r=   r   r   r   r   Ú<module>   s    (

