U
    ZÊ¹j&  ã                
   @   sö  d dl Z d dlZd dl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 d dlmZ e
d	d
d�Ze
ddd�Ze
dddgid�ZdZerâzeedƒddƒ W n eeefk
rÜ   dZY nX dZedƒ\ZZZeddd�\ZZZeded�\Z Z!Z"edeƒZ#edeƒZ$edeƒZ%dd„ Z&d d!„ Z'd"d#„ Z(d$d%„ Z)d&d'„ Z*d(d)„ Z+d*d+„ Z,d,d-„ Z-d.d/„ Z.d0d1„ Z/d2d3„ Z0d4d5„ Z1d6d7„ Z2d8d9„ Z3d:d;„ Z4d<d=„ Z5d>d?„ Z6d@dA„ Z7dBdC„ Z8dDdE„ Z9dFdG„ Z:dHdI„ Z;dJdK„ Z<dLdM„ Z=dS )Né    N)ÚMod)ÚEq)Úsymbols)Úimport_module)ÚIndexedBaseÚIdx)ÚautowrapÚufuncifyÚCodeWrapError)ÚskipÚnumpyz1.6.1)Zmin_module_versionÚCythonz0.15.1z
numpy.f2pyÚfromlistÚf2py)Zimport_kwargsFÚxÚf95Túa b czn m d©ÚintegerzA B C©ÚclsÚiÚjÚkc                 C   s<   t ttdœ}||  r,| dkr(ts(tdƒ dS td|  ƒ dS )z]
    Return True if module exists, otherwise run skip().

    module should be a string.
    )r   r   r   r   zCouldn't run f2py.TzCouldn't import %s.N)r   r   r   Ú	f2pyworksr   )ÚmoduleÚmodnames© r   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/external/tests/test_autowrap.pyÚ
has_module!   s    	r   c                 C   sd   t tt t d  ¡ | |ƒ}t tt t d  ¡ | |ƒ}|dddƒdksLt‚|dddƒdks`t‚d S )Né   é   é   éþÿÿÿg      ð¿g      ð?)r   ÚaÚbÚcÚexpandÚAssertionError)ÚlanguageÚbackendÚfÚgr   r   r   Úruntest_autowrap_twice6   s    r-   c                 C   s6   t dƒ ttttf | |ƒ}|t d¡ƒdks2t‚d S )Nr   éd   )r   r   ÚAr   r   Úeyer(   )r)   r*   Útracer   r   r   Úruntest_autowrap_trace?   s    r2   c                 C   sŽ   t dƒ tdtd�\}}t|t tttf |t  ƒ}t|| |ƒ}tj	 
dd¡}tj	 
d¡}t ||¡}t t ||||ƒ ¡¡dk sŠt‚d S )Nr   zx yr   é
   é   ç‚vIhÂ%<=)r   r   r   r   r   r/   r   r   r   ÚrandomÚrandÚdotÚsumÚabsr(   )r)   r*   r   ÚyÚexprÚmvÚMr   r   r   Úruntest_autowrap_matrix_vectorE   s    r?   c                 C   sˆ   t dƒ ttttf tttf tttf  ƒ}t|| |ƒ}t	j
 dd¡}t	j
 dd¡}t	 ||¡}t	 t	 ||||ƒ ¡¡dk s„t‚d S )Nr   r3   r4   é   r5   )r   r   ÚCr   r   r/   r   ÚBr   r   r6   r7   r8   r9   r:   r(   )r)   r*   r<   ZmatmatZM1ZM2ZM3r   r   r   Úruntest_autowrap_matrix_matrixR   s    &rC   c           	      C   s´   t dƒ tdƒ\}}}t|||g|| | |d�}t|||g|| | |d�}t ddd¡}t ddd¡}t d	d
d¡}|| | }tj ||||ƒ|¡ tj ||||ƒ|¡ d S )Nr   r   )r*   r#   é   é2   éûÿÿÿr!   éÿÿÿÿr"   )r   r   r	   r   ZlinspaceÚtestingÚassert_allclose)	r)   r*   r$   r%   r&   ZfabcZfacbÚgridÚexpectedr   r   r   Úruntest_ufuncify^   s    rL   c                 C   s  t t t d }t ¡ }t|| ||dt t t t ttffd�}|dddƒdksRt‚t |¡D ]¼}| 	d¡r\| 
d¡svq\t|d | ƒ�Œ}| ¡ }|d d	ks t‚d
tj |d ks¶t‚|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gk�st‚W 5 Q R X q\d S )Né   Úhelper)ÚtempdirÚhelpersr"   Zwrapped_code_ú.cú/r   zP/******************************************************************************
zCode generated with SymPy rD   zP *                                                                            *
zP *              See http://www.sympy.org/ for more information.               *
zP *                      This file is part of 'autowrap'                       *
zQ ******************************************************************************/
z
#include "rG   zh"Ú
z#include <math.h>
z.double helper(double a, double b, double c) {
z   double helper_result;
z   helper_result = a - b + c;
z   return helper_result;
z}
z0double autofunc(double a, double b, double c) {
z   double autofunc_result;
z/   autofunc_result = pow(helper(a, b, c), 13);
z   return autofunc_result;
)r$   r%   r&   ÚtempfileÚmkdtempr   r(   ÚosÚlistdirÚ
startswithÚendswithÚopenÚ	readlinesÚsympyÚ__version__)r)   r*   r<   Útmpr+   ÚfileZfilÚlinesr   r   r   Úruntest_issue_10274k   sL    
ÿ
éra   c           
   
   C   sÚ   t dƒ tdƒ\}}}}}|| | | | d }d}t|| ||||||fd|| | |||ffd�}	tj |	ddd	d
dƒ|¡ t|| ||||||fd|| ||ffd|| ||fffd�}	tj |	ddd	d
dƒ|¡ d S )Nr   za, b, c, d, erM   g    ÓS8AÚf1)ÚargsrP   r"   rD   é   r!   r    Úf2)r   r   r   r   rH   rI   )
r)   r*   r$   r%   r&   ÚdÚer<   Úexp_resr+   r   r   r   Úruntest_issue_15337•   s    ÿ"ÿri   c                  C   sÈ   t dƒ tdƒ\} }t| dƒt|dƒ }t|| |gdd�}t| | d|di¡ ¡ ƒ}t|ddƒ| ƒd	k snt‚tdd
d�\} }t| dƒt|dƒ }t|| |gdd�}|ddƒ| | d|di¡ksÄt‚d S )Nr   zx, yg      @g       ÀZF95)rc   r)   g      @gš™™™™™@g›+¡†›„=Tr   rd   r#   rD   )	r   r   r   r   ÚfloatZxreplaceZevalfr:   r(   )r   r;   r<   r+   rh   r   r   r   Útest_issue_15230ª   s    rk   c                   C   s   t dƒ tddƒ d S ©Nr   r   ©r   r-   r   r   r   r   Útest_wrap_twice_f95_f2py¿   s    rn   c                   C   s   t dƒ tddƒ d S rl   ©r   r2   r   r   r   r   Útest_autowrap_trace_f95_f2pyÄ   s    rp   c                   C   s   t dƒ tddƒ d S rl   ©r   r?   r   r   r   r   Ú$test_autowrap_matrix_vector_f95_f2pyÉ   s    rr   c                   C   s   t dƒ tddƒ d S rl   ©r   rC   r   r   r   r   Ú$test_autowrap_matrix_matrix_f95_f2pyÎ   s    rt   c                   C   s   t dƒ tddƒ d S rl   ©r   rL   r   r   r   r   Útest_ufuncify_f95_f2pyÓ   s    rv   c                   C   s   t dƒ tddƒ d S rl   ©r   ri   r   r   r   r   Útest_issue_15337_f95_f2pyØ   s    rx   c                   C   s   t dƒ tddƒ d S )Nr   rA   Úcythonrm   r   r   r   r   Útest_wrap_twice_c_cythonß   s    rz   c                   C   s   t dƒ tddƒ d S ©Nr   ÚC99ry   ro   r   r   r   r   Útest_autowrap_trace_C_Cythonä   s    r}   c                   C   s   t dƒ tddƒ d S r{   rq   r   r   r   r   Ú$test_autowrap_matrix_vector_C_cythoné   s    r~   c                   C   s   t dƒ tddƒ d S r{   rs   r   r   r   r   Ú$test_autowrap_matrix_matrix_C_cythonî   s    r   c                   C   s   t dƒ tddƒ d S r{   ru   r   r   r   r   Útest_ufuncify_C_Cythonó   s    r€   c                   C   s   t dƒ tddƒ d S ©Nr   ZC89ry   )r   ra   r   r   r   r   Útest_issue_10274_C_cythonø   s    r‚   c                   C   s   t dƒ tddƒ d S r�   rw   r   r   r   r   Útest_issue_15337_C_cythoný   s    rƒ   c               
   C   s0  t dƒ ddlm}  ddlm} ddlm} G dd„ d|ƒ}|ƒ }||d�}|j d	¡ | t	 }d
}t
 ¡ }ttj |d¡dƒ�}	|	 d¡ W 5 Q R X t|d||d�}
|
dƒdks¶t‚t |¡D ]j}| d¡rÀ| d¡rÀttj ||¡ƒ�:}	|	 ¡ }|| dd¡ }d |dd … ¡|k�s t‚W 5 Q R X qÀd S )Nr   r   )Úpi)Ú
C99CodeGen)ÚC99CodePrinterc                   @   s   e Zd Zdd„ ZdS )z/test_autowrap_custom_printer.<locals>.PiPrinterc                 S   s   dS )NZS_PIr   )Úselfr<   r   r   r   Ú	_print_Pi
  s    z9test_autowrap_custom_printer.<locals>.PiPrinter._print_PiN)Ú__name__Ú
__module__Ú__qualname__rˆ   r   r   r   r   Ú	PiPrinter	  s   rŒ   )Úprinterz#include "shortpi.h"z©#include "%s"
#include <math.h>
#include "shortpi.h"

double autofunc(double a) {

   double autofunc_result;
   autofunc_result = S_PI*a;
   return autofunc_result;

}
z	shortpi.hÚwz#define S_PI 3.14ry   )r*   rO   Zcode_gengÍÌÌÌÌÌ@gÇK7‰A`*@Zwrapped_coderQ   z.hÚ é   )r   Zsympy.core.numbersr„   Zsympy.utilities.codegenr…   Zsympy.printing.cr†   Zpreprocessor_statementsÚappendr$   rT   rU   rZ   rV   ÚpathÚjoinÚwriter   r(   rW   rX   rY   r[   Úreplace)r„   r…   r†   rŒ   r�   Úgenr<   rK   Ztmpdirr+   ÚfuncÚfilenamer`   r   r   r   Útest_autowrap_custom_printer  s,    
ÿr™   c                   C   s   t dƒ tddƒ d S )Nr   r|   r   ru   r   r   r   r   Útest_ufuncify_numpy5  s    rš   )>r\   rT   rV   Zsympy.core.modr   Zsympy.core.relationalr   Zsympy.core.symbolr   Zsympy.externalr   Zsympy.tensorr   r   Zsympy.utilities.autowrapr   r	   r
   Zsympy.testing.pytestr   r   r   r   r   ÚImportErrorÚOSErrorr$   r%   r&   ÚnÚmrf   r/   rB   rA   r   r   r   r   r-   r2   r?   rC   rL   ra   ri   rk   rn   rp   rr   rt   rv   rx   rz   r}   r~   r   r€   r‚   rƒ   r™   rš   r   r   r   r   Ú<module>   sb   



	*3