U
    ZÊ¹jà  ã                   @   sð   d dl mZ d dlmZ d dlZedƒr<d dlm  mZ ndZ	d dl
Z
d dlmZmZm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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S )+é    )Úimport_module)ÚraisesNZllvmliteT)ÚaÚbÚnc                 C   s$   d}d}t | | ƒ||t |ƒ  kS )Ngñhãˆµøä>g:Œ0âŽyE>)Úabs)r   r   ZrtolZatol© r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_llvmjit.pyÚisclose   s    r
   c                  C   sF   t d } t t g| ¡}t|  t di¡ ¡ ƒ}|dƒ}t||ƒsBt‚d S )Ng      ð?ç      @)r   ÚgÚllvm_callableÚfloatÚsubsÚevalfr
   ÚAssertionError©ÚeÚfÚresÚjit_resr   r   r	   Útest_simple_expr   s
    r   c                  C   sV   dt  t d } t t tg| ¡}t|  t dtdi¡ ¡ ƒ}|ddƒ}t||ƒsRt‚d S )Nr   g      @©	r   r   r   r   r   r   r   r
   r   r   r   r   r	   Útest_two_arg   s
    
r   c                  C   sN   dt  t ¡ } t tg| ¡}t|  tdi¡ ¡ ƒ}|dƒ}t||ƒsJt	‚d S )Nr   ç      ø?)
ÚsympyÚexpr   r   r   r   r   r   r
   r   r   r   r   r	   Ú	test_func(   s
    r   c                  C   s`   dt  t ¡ t  t¡ } t ttg| ¡}t|  tdtdi¡ ¡ ƒ}|ddƒ}t	||ƒs\t
‚d S ©Nr   r   ç       @)r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r	   Útest_two_func1   s
    
r    c                  C   s^   dt  t¡ t  t¡ } t ttg| ¡}t|  tdtdi¡ ¡ ƒ}|ddƒ}t	||ƒsZt
‚d S r   )r   Úsqrtr   r   r   r   r   r   r   r
   r   r   r   r   r	   Útest_two_sqrt:   s
    
r"   c                  C   sV   t d td  } t t tg| ¡}t|  t dtdi¡ ¡ ƒ}|ddƒ}t||ƒsRt‚d S )Nr   é   r   r   r   r   r   r	   Útest_two_powC   s
    
r$   c                  C   sp   t d } tjt g| dd�}t d¡}tjd }t di}||t  ƒ}|||ƒ}t|  |¡ ¡ ƒ}t	||ƒslt
‚d S )Nç333333ó?úscipy.integrate.test©Zcallback_typeé   çš™™™™™@)r   r   r   ÚctypesÚc_intÚc_doubler   r   r   r
   r   ©r   r   ÚmÚ
array_typeÚinpÚarrayr   r   r   r   r	   Útest_callbackL   s    


r2   c            	      C   sŽ   t d } tjt g| dd�}t d¡}tjd }t di}||t  ƒ}|dƒ}|||d ||ƒ}|dksft‚t|  |¡ 	¡ ƒ}t
|d |ƒsŠt‚d S )Nr%   Úcubaturer'   r(   r)   g        r   )r   r   r   r*   r+   r,   r   r   r   r   r
   )	r   r   r.   r/   r0   r1   Ú	out_arrayÚjit_retr   r   r   r	   Útest_callback_cubatureZ   s    

r6   c                  C   s€   dt  t } tjt tg| dd�}t d¡}tjd }t dtdi}||t  |t ƒ}|||ƒ}t|  |¡ 	¡ ƒ}t
||ƒs|t‚d S )Né   r&   r'   é   çš™™™™™É?ç333333û?)r   r   r   r   r*   r+   r,   r   r   r   r
   r   r-   r   r   r	   Útest_callback_twok   s    


r;   c            	      C   s¢   t  d¡} d| d  | d  }tjt| g|dd�}t d¡}tjd }| d d| d d	i}||| d  || d  ƒ}|||ƒ}t| 	|¡ 
¡ ƒ}t||ƒsžt‚d S )
NÚdr7   r   r(   r&   r'   r8   r9   r:   )r   ZIndexedBaser   r   r   r*   r+   r,   r   r   r   r
   r   )	r<   r   r   r.   r/   r0   r1   r   r   r   r   r	   Útest_callback_alt_twoy   s    



r=   c            
      C   s¾   t dt fgt d gg} t tg| ¡}| d d d  tdi¡}t| d d  t |i¡ ¡ ƒ}|dƒ}t||ƒstt‚tjtg| dd�}t	 
d¡}t	jd }|dƒ}|||ƒ}	t|	|ƒsºt‚d S )Nr   é   r   r(   r   r&   r'   )r   r   r   r   r   r   r   r
   r   r*   r+   r,   )
r   r   Zb_valr   r   Z
f_callbackr.   r/   r1   Zjit_callback_resr   r   r	   Útest_multiple_statementsˆ   s    


r?   c                  C   sx   t t  tt  t t  t  tt  ¡ } t | ¡}t t tg|¡}t|  t dtdi¡ 	¡ ƒ}|ddƒ}t
||ƒstt‚d S )Ngffffff@çš™™™™™¹?)r   r   r   r   Úcser   r   r   r   r   r
   r   )r   Úe2r   r   r   r   r   r	   Útest_cse™   s    (

rC   c                    sJ   i ‰| d D ]$\}}|  ˆ ¡}|  ˆ¡}|ˆ|< q‡ ‡fdd„| d D ƒS )Nr   c                    s   g | ]}|  ˆ ¡  ˆ¡‘qS r   ©r   )Ú.0r   ©Úsub_dictZtmp_dictr   r	   Ú
<listcomp>©   s     zeval_cse.<locals>.<listcomp>r(   rD   )r   rG   Útmp_nameZtmp_exprrB   Úe3r   rF   r	   Úeval_cse£   s    


rK   c                     s¤   t t  } t t  tt  }t | |g¡‰ tt‡ fdd„ƒ t t tgˆ ¡}|ddƒ}t|ƒdksbt	‚t
ˆ t dtdiƒ}t|d |d ƒsŠt	‚t|d |d ƒs t	‚d S )Nc                      s   t jttgˆ dd�S )Nzscipy.integrater'   )r   r   r   r   r   ©rJ   r   r	   Ú<lambda>²   ó    z#test_cse_multiple.<locals>.<lambda>r@   r   r8   r   r(   )r   r   r   rA   r   ÚNotImplementedErrorr   r   Úlenr   rK   r
   )Úe1rB   r   r   r   r   rL   r	   Útest_cse_multiple¬   s    
ÿ
rR   c                  C   s   t t  } t t  tt  }t | |d| g¡}tjt tg|dd�}d}d}t |¡}t |¡}tj| }tj| }	t dtdi}
||
t  |
t ƒ}|	ƒ }|||d ||ƒ}|dks°t	‚t
||
ƒ}t|d |d ƒsÐt	‚t|d	 |d	 ƒsæt	‚t|d |d ƒsüt	‚d S )
Né   r3   r'   r8   r7   r9   r   r   r(   )r   r   r   rA   r   r   r*   r+   r,   r   rK   r
   )rQ   rB   rJ   r   ÚndimZoutdimr.   Zfdimr/   Zout_array_typer0   r1   r4   r5   r   r   r   r	   Útest_callback_cubature_multiple¼   s&    




rU   c                      s"   t t  t ‰ tt‡ fdd„ƒ d S )Nc                      s   t  tgˆ ¡S )N©r   r   r   r   ©r   r   r	   rM   Û   rN   z'test_symbol_not_found.<locals>.<lambda>)r   r   r   ÚLookupErrorr   r   rW   r	   Útest_symbol_not_foundÙ   s    rY   c                      s   t ‰ tt‡ fdd„ƒ d S )Nc                      s   t jtgˆ dd�S )NZbad_callbackr'   rV   r   rW   r   r	   rM   à   rN   z#test_bad_callback.<locals>.<lambda>)r   r   Ú
ValueErrorr   r   rW   r	   Útest_bad_callbackÞ   s    r[   )!Zsympy.externalr   Zsympy.testing.pytestr   r*   Zsympy.printing.llvmjitcodeZprintingZllvmjitcoder   Údisabledr   Z	sympy.abcr   r   r   r
   r   r   r   r    r"   r$   r2   r6   r;   r=   r?   rC   rK   rR   rU   rY   r[   r   r   r   r	   Ú<module>   s2   						
	