o
    8Va%                  
   @   s  d dl Z d dlZd dlZd dl mZmZ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rhz
eeddd W n eeefye   dZY nw 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+d.d/ Z,d0d1 Z-d2d3 Z.d4d5 Z/d6d7 Z0d8d9 Z1d:d; Z2d<d= Z3d>d? Z4d@dA Z5dBdC Z6dDdE Z7dFdG Z8dHdI Z9dJdK Z:dS )L    N)symbolsEqMod)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Z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   D/usr/lib/python3/dist-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s&J |ddddks0J d S )N         g      g      ?)r   abcexpand)languagebackendfgr   r   r   runtest_autowrap_twice4   s   r+   c                 C   s6   t d ttttf | |}|tddksJ d S )Nr   d   )r   r   Ar   r   Zeye)r'   r(   Ztracer   r   r   runtest_autowrap_trace=   s   r.   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 sEJ d S )Nr   zx yr   
      vIh%<=)r   r   r   r   r   r-   r   r   r   randomranddotsumabs)r'   r(   r   yexprmvMr   r   r   runtest_autowrap_matrix_vectorC   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 sBJ d S )Nr   r/   r0      r1   )r   r   Cr   r   r-   r   Br   r   r2   r3   r4   r5   r6   )r'   r(   r8   ZmatmatZM1ZM2ZM3r   r   r   runtest_autowrap_matrix_matrixP   s   &&r?   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facbZgridexpectedr   r   r   runtest_ufuncify\   s   rG   c                 C   s  t t t d }t }t|| ||dt t t t ttffd}|ddddks)J t|D ]V}|dr|	drt
|d | }| }|d d	ksNJ d
tj |d v sYJ |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sJ q.d S )N   helper)tempdirhelpersr!   Zwrapped_code_.c/r   zP/******************************************************************************
zCode generated with sympy r@   zP *                                                                            *
zP *              See http://www.sympy.org/ for more information.               *
zP *                      This file is part of 'autowrap'                       *
zQ ******************************************************************************/
z
#include "rC   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   oslistdir
startswithendswithopen	readlinessympy__version__)r'   r(   r8   tmpr)   fileZfillinesr   r   r   runtest_issue_10274i   sN   


r\   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, erH   g    S8Af1)argsrK   r!   r@      r    r   f2)r   r   r   r   rD   rE   )
r'   r(   r#   r$   r%   der8   exp_resr)   r   r   r   runtest_issue_15337   s   "rd   c                  C   s   t d td\} }t| dt|d }t|| |gdd}t|| d|di }t|dd| d	k s7J tdd
d\} }t| dt|d }t|| |gdd}|dd|| d|diksbJ d S )Nr   zx, yg      @g       ZF95)r^   r'   g      @g@g+=Tr   r_   r"   r@   )r   r   r   r   floatZxreplaceZevalfr6   )r   r7   r8   r)   rc   r   r   r   test_issue_15230   s   $rf   c                   C      t d tdd d S Nr   r   r   r+   r   r   r   r   test_wrap_twice_f95_f2py      rj   c                   C   rg   rh   r   r.   r   r   r   r   test_autowrap_trace_f95_f2py   rk   rm   c                   C   rg   rh   r   r;   r   r   r   r   $test_autowrap_matrix_vector_f95_f2py   rk   ro   c                   C   rg   rh   r   r?   r   r   r   r   $test_autowrap_matrix_matrix_f95_f2py   rk   rq   c                   C   rg   rh   r   rG   r   r   r   r   test_ufuncify_f95_f2py   rk   rs   c                   C   rg   rh   r   rd   r   r   r   r   test_issue_15337_f95_f2py   rk   ru   c                   C      t d tdd d S )Nr   r=   cythonri   r   r   r   r   test_wrap_twice_c_cython   rk   rx   c                   C   rv   Nr   C99rw   rl   r   r   r   r   test_autowrap_trace_C_Cython   rk   r{   c                   C   rv   ry   rn   r   r   r   r   $test_autowrap_matrix_vector_C_cython   rk   r|   c                   C   rv   ry   rp   r   r   r   r   $test_autowrap_matrix_matrix_C_cython   rk   r}   c                   C   rv   ry   rr   r   r   r   r   test_ufuncify_C_Cython   rk   r~   c                   C   rv   Nr   ZC89rw   )r   r\   r   r   r   r   test_issue_10274_C_cython   rk   r   c                   C   rv   r   rt   r   r   r   r   test_issue_15337_C_cython   rk   r   c               	   C   s2  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 t|d||d}	|	ddksSJ t|D ]>}
|
dr|
drttj||
!}| }||
dd }d|dd  |ksJ W d    n1 sw   Y  qXd 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   )selfr8   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.14rw   )r(   rJ   Zcode_geng@gK7A`*@Zwrapped_coderL   z.h    )r   rW   r   Zsympy.utilities.codegenr   Zsympy.printing.cr   Zpreprocessor_statementsappendr#   rO   rP   rU   rQ   pathjoinwriter   rR   rS   rT   rV   replace)r   r   r   r   r   genr8   rF   Ztmpdirfuncfilenamer)   r[   r   r   r   test_autowrap_custom_printer   s0   
r   c                   C   rv   )Nr   rz   r   rr   r   r   r   r   test_ufuncify_numpy0  s   r   );rW   rO   rQ   r   r   r   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mra   r-   r>   r=   r   r   r   r   r+   r.   r;   r?   rG   r\   rd   rf   rj   rm   ro   rq   rs   ru   rx   r{   r|   r}   r~   r   r   r   r   r   r   r   r   <module>   sb    


	(2