a
    <b%                  
   @   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rzeeddd W n eeefy   dZY n0 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   r/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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sLJ |ddddks`J d S )N         g      g      ?)r   abcexpand)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s2J d S )Nr   d   )r   r   Ar   r   Zeye)r(   r)   tracer   r   r   runtest_autowrap_trace?   s    r0   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 sJ 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_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 sJ d S )Nr   r1   r2      r3   )r   r   Cr   r   r.   r   Br   r   r4   r5   r6   r7   r8   )r(   r)   r:   ZmatmatZM1ZM2ZM3r   r   r   runtest_autowrap_matrix_matrixR   s    &rA   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    rI   c                 C   s  t t t d }t }t|| ||dt t t t ttffd}|ddddksRJ t|D ]}|dr\|	dr\t
|d | }| }|d d	ksJ d
tj |d v sJ |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\J q\d S )N   helper)tempdirhelpersr"   Zwrapped_code_.c/r   zP/******************************************************************************
zCode generated with SymPy rB   zP *                                                                            *
zP *              See http://www.sympy.org/ for more information.               *
zP *                      This file is part of 'autowrap'                       *
zQ ******************************************************************************/
z
#include "rE   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)   r:   tmpr*   fileZfillinesr   r   r   runtest_issue_10274k   sJ    

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, erJ   g    S8Af1)argsrM   r"   rB      r!   r    f2)r   r   r   r   rF   rG   )
r(   r)   r$   r%   r&   der:   exp_resr*   r   r   r   runtest_issue_15337   s    "rf   c                  C   s   t d td\} }t| dt|d }t|| |gdd}t|| d|di }t|dd| d	k snJ tdd
d\} }t| dt|d }t|| |gdd}|dd|| d|diksJ d S )Nr   zx, yg      @g       ZF95)r`   r(   g      @g@g+=Tr   ra   r#   rB   )r   r   r   r   floatZxreplaceZevalfr8   )r   r9   r:   r*   re   r   r   r   test_issue_15230   s    rh   c                   C   s   t d tdd d S Nr   r   r   r,   r   r   r   r   test_wrap_twice_f95_f2py   s    rk   c                   C   s   t d tdd d S ri   r   r0   r   r   r   r   test_autowrap_trace_f95_f2py   s    rm   c                   C   s   t d tdd d S ri   r   r=   r   r   r   r   $test_autowrap_matrix_vector_f95_f2py   s    ro   c                   C   s   t d tdd d S ri   r   rA   r   r   r   r   $test_autowrap_matrix_matrix_f95_f2py   s    rq   c                   C   s   t d tdd d S ri   r   rI   r   r   r   r   test_ufuncify_f95_f2py   s    rs   c                   C   s   t d tdd d S ri   r   rf   r   r   r   r   test_issue_15337_f95_f2py   s    ru   c                   C   s   t d tdd d S )Nr   r?   cythonrj   r   r   r   r   test_wrap_twice_c_cython   s    rw   c                   C   s   t d tdd d S Nr   C99rv   rl   r   r   r   r   test_autowrap_trace_C_Cython   s    rz   c                   C   s   t d tdd d S rx   rn   r   r   r   r   $test_autowrap_matrix_vector_C_cython   s    r{   c                   C   s   t d tdd d S rx   rp   r   r   r   r   $test_autowrap_matrix_matrix_C_cython   s    r|   c                   C   s   t d tdd d S rx   rr   r   r   r   r   test_ufuncify_C_Cython   s    r}   c                   C   s   t d tdd d S Nr   ZC89rv   )r   r^   r   r   r   r   test_issue_10274_C_cython   s    r   c                   C   s   t d tdd d S r~   rt   r   r   r   r   test_issue_15337_C_cython   s    r   c               	   C   s6  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sJ t|D ]}
|
dr|
drttj||
D}| }||
dd }d|dd  |ksJ W d    q1 s&0    Y  qd 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.14rv   )r)   rL   Zcode_geng@gK7A`*@Zwrapped_coderN   z.h    )r   Zsympy.core.numbersr   Zsympy.utilities.codegenr   Zsympy.printing.cr   Zpreprocessor_statementsappendr$   rQ   rR   rW   rS   pathjoinwriter   rT   rU   rV   rX   replace)r   r   r   r   r   genr:   rH   Ztmpdirfuncfilenamer*   r]   r   r   r   test_autowrap_custom_printer   s*    
r   c                   C   s   t d tdd d S )Nr   ry   r   rr   r   r   r   r   test_ufuncify_numpy2  s    r   )>rY   rQ   rS   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mrc   r.   r@   r?   r   r   r   r   r,   r0   r=   rA   rI   r^   rf   rh   rk   rm   ro   rq   rs   ru   rw   rz   r{   r|   r}   r   r   r   r   r   r   r   r   <module>   sb   



	(2