a
    khT                  	   @   s  d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZm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 d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z1m2Z3m4Z5m6Z7m8Z9m:Z;m<Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ed\	ZOZPZQZRZSZTZUZVZWedddZXedddZYeg dZZedZ[edeXZ\edddZ]edddZ^dd Z_dd Z`dd Zad d! Zbd"d# Zcd$d% Zdd&d' Zed(d) Zfd*d+ Zgd,d- Zhd.d/ Zid0d1 Zjd2d3 Zkd4d5 Zld6d7 Zmd8d9 Znd:d; Zod<d= Zpd>d? Zqd@dA ZrdBdC ZsdDdE ZtdFdG ZudHdI ZvdJdK ZwdLdM ZxdNdO ZydPdQ ZzdRdS Z{dTdU Z|dVdW Z}dS )X    N)Tuple)nanooFloatInteger)Lt)symbolsSymbol)sin)Matrix)MatrixSymbol)Range)IdxIndexedBase)raises)-
Assignment	Attribute
aug_assign	CodeBlockForTypeVariablePointerDeclarationAddAugmentedAssignmentSubAugmentedAssignmentMulAugmentedAssignmentDivAugmentedAssignmentModAugmentedAssignmentvalue_constpointer_constintegerrealcomplex_int8uint8float16float32float64float80float128	complex64
complex128WhileScopeStringPrintQuotedStringFunctionPrototypeFunctionDefinitionReturnFunctionCalluntypedIntBaseTypeintcNodenone	NoneTokenTokenCommentzx, y, z, t, x0, x1, x2, a, bnTr!   A      )rB      rA   BiA22rC   B22c                  C   s.  t tt t td t tt t td d t td t t tt t t tt d t tt} | j| j | kstJ | j	dksJ t
tdd  t
tdd  t
tdd  t
tdd  t
td	d  t
td
d  t
tdd  t
tdd  t
tdd  t
tdd  t
tdd  t
tdd  d S )Nr   rB   r   z:=c                   S   s   t tt tS N)r   rD   rE   r@    rJ   rJ   J/var/www/auris/lib/python3.9/site-packages/sympy/codegen/tests/test_ast.py<lambda>0       z!test_Assignment.<locals>.<lambda>c                   S   s   t tt tS rI   )r   rD   rE   matrJ   rJ   rJ   rK   rL   1   rM   c                   S   s
   t ttS rI   )r   xrN   rJ   rJ   rJ   rK   rL   2   rM   c                   S   s
   t ttS rI   )r   rO   r@   rJ   rJ   rJ   rK   rL   3   rM   c                   S   s   t td tS )NrH   r   r@   rN   rJ   rJ   rJ   rK   rL   4   rM   c                   S   s
   t ttS rI   )r   r@   rO   rJ   rJ   rJ   rK   rL   6   rM   c                   S   s
   t tdS Nr   )r   r@   rJ   rJ   rJ   rK   rL   7   rM   c                   S   s
   t ttS rI   )r   rN   r@   rJ   rJ   rJ   rK   rL   9   rM   c                   S   s
   t dtS rQ   r   rO   rJ   rJ   rJ   rK   rL   :   rM   c                   S   s   t tt dS NrB   rR   rJ   rJ   rJ   rK   rL   ;   rM   c                   S   s   t tt tS rI   rP   rJ   rJ   rJ   rK   rL   <   rM   c                   S   s
   t tdS rQ   )r   rD   rJ   rJ   rJ   rK   rL   =   rM   )r   rO   yr@   rN   rD   rE   funcargsopr   
ValueError	TypeError)arJ   rJ   rK   test_Assignment"   s,    



r[   c                  C   s  t tdt t tdd t tdt t td dd t td dt t tt dt t tt dd dtfdtfdt	fdt
fdtffD ]`\} }t t| t}|tt}|j|j |  kr|ksn J |j| ksJ |j| d ksJ qttd	d
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  ttdd
  d S )N+r   rH   -*/%=c                   S   s   t tt dtS Nr\   )r   rD   rE   r@   rJ   rJ   rJ   rK   rL   Z   rM   z test_AugAssign.<locals>.<lambda>c                   S   s   t tt dtS rb   )r   rD   rE   rN   rJ   rJ   rJ   rK   rL   [   rM   c                   S   s   t tdtS rb   )r   rO   rN   rJ   rJ   rJ   rK   rL   \   rM   c                   S   s   t tdtS rb   )r   rO   r@   rJ   rJ   rJ   rK   rL   ]   rM   c                   S   s   t td dtS )NrH   r\   r   r@   rN   rJ   rJ   rJ   rK   rL   ^   rM   c                   S   s   t tdtS rb   )r   r@   rO   rJ   rJ   rJ   rK   rL   `   rM   c                   S   s   t tddS Nr\   r   )r   r@   rJ   rJ   rJ   rK   rL   a   rM   c                   S   s   t tdtS rb   )r   rN   r@   rJ   rJ   rJ   rK   rL   c   rM   c                   S   s   t ddtS )Nr   r\   r   rO   rJ   rJ   rJ   rK   rL   d   rM   c                   S   s   t tt ddS )Nr\   rB   re   rJ   rJ   rJ   rK   rL   e   rM   c                   S   s   t tt dtS rb   rc   rJ   rJ   rJ   rK   rL   f   rM   c                   S   s   t tddS rd   )r   rD   rJ   rJ   rJ   rK   rL   g   rM   )r   rO   rT   r@   rN   rD   rE   r   r   r   r   r   rU   rV   binoprW   r   rX   rY   )rf   clsrZ   brJ   rJ   rK   test_AugAssign@   s<    
"ri   c                  C   s   t tttttg} tdt d ftt	 tft
tftd tfg}| D ]@}|D ]6\}}|||}t|d|jt|t|f ksHJ qHq@d S )NrC   )r   r   z
%s(%s, %s))r   r   r   r   r   r   rO   rT   rD   rE   rF   rG   r@   repr__name__)Zassignment_classespairsrg   lhsrhsrZ   rJ   rJ   rK   test_Assignment_printingj   s     	


ro   c                  C   s^   t ttdtttd } | j| j | ks.J | jtttksBJ | jtdtd ksZJ d S rS   )	r   r   rO   rT   rU   rV   Zleft_hand_sidesr   Zright_hand_sidescrJ   rJ   rK   test_CodeBlock   s    rr   c                     s$  t ttt t tdt ttt tdg} t tdt tdt ttt t ttg}t| }|t| ksjJ t ttt t tdt ttt tdg tt fdd t ttt t tt	t
 t ttt tt
d g}t tt	t
 t tt
d t ttt t ttg}t|}|t| ks J d S )NrB   rC   c                      s
   t  S rI   )r   topological_sortrJ   Zinvalid_assignmentsrJ   rK   rL      rM   z1test_CodeBlock_topological_sort.<locals>.<lambda>rA   )r   rO   rT   ztr   rs   r   rX   rZ   rh   )ZassignmentsZordered_assignmentsc1Zfree_assignmentsZfree_assignments_orderedc2rJ   rt   rK   test_CodeBlock_topological_sort   s<    	

ry   c                  C   s   t tttt ttdtttttd} | jt ks:J t tttt tttt	 tttttt	d }|jtt	hks~J d S )NrB   rC   rA   )
r   r   rO   rT   ru   rv   Zfree_symbolssetrZ   rh   rw   rx   rJ   rJ   rK   test_CodeBlock_free_symbols   s    r|   c               
   C   s   t ttdtttttttttttt } |  t ttdtttttttttttttt kstJ t	t
dd  t ttttd ttdtt tttt }| t tttttttd ttdt tttt ksJ d S )NrB   c                   S   s"   t ttdttdttd S )NrB   rC   )r   r   rO   rT   cserJ   rJ   rJ   rK   rL      s   z$test_CodeBlock_cse.<locals>.<lambda>rC   )r   r   rT   rO   r
   ru   rv   r}   x0r   NotImplementedErrorx1x2r{   rJ   rJ   rK   test_CodeBlock_cse   s2    
	r   c               
   C   s   t ttttttgddggtttttdtt gttd dgg} |  t tt	ttttttt	gddggtttt	dt	 gt	d dggksJ d S )NrA      rC      )
r   r   rF   r   rO   r
   rT   rG   r}   r~   rp   rJ   rJ   rK   test_CodeBlock_cse__issue_14118   s    , r   c                  C   sv   t ttddtttdf tt ttdtf} t tdtttdf tt f} | j| j	 | ksdJ t
tdd  d S )Nr   rA   r\   )rB   rC   rA   r      c                   S   s   t tttt fS rI   )r   r>   rO   rT   rJ   rJ   rJ   rK   rL      rM   ztest_For.<locals>.<lambda>)r   r>   r   r   r@   rO   r   rT   rU   rV   r   rY   )frJ   rJ   rK   test_For   s    0 r   c                  C   sj   t js
J t t ksJ G dd dt} |  }|t ks8J t d ksDJ t t ksRJ t jt j t ksfJ d S )Nc                   @   s   e Zd ZdS )ztest_none.<locals>.FooNrk   
__module____qualname__rJ   rJ   rJ   rK   Foo   s   r   )r:   is_Atomr<   r;   rU   rV   )r   foorJ   rJ   rK   	test_none   s    
r   c                  C   s   t d} | jsJ | t dks"J | jdks0J | jf i |  | ksLJ | j| j | ks`J G dd dt }|d}|| ksJ |j| jksJ t d}t|dksJ t|dksJ d S )Nfoobarc                   @   s   e Zd ZdS )ztest_String.<locals>.SignifierNr   rJ   rJ   rJ   rK   	Signifier  s   r   r   zString('foo'))r/   r   textrU   kwargsrV   strrj   )str   sisrJ   rJ   rK   test_String  s    
r   c                  C   s*   t d} | jdksJ t| dks&J d S )Nr   )r=   r   r   rp   rJ   rJ   rK   test_Comment  s    r   c                  C   s,   t  } | t  ksJ | j| j | ks(J d S rI   )r9   rU   rV   )r>   rJ   rJ   rK   	test_Node   s    r   c                  C   s   t d} t| jdksJ | jtdks,J t| dks<J t| dksLJ t | | ks\J | j| j | kspJ t d}t d}||ksJ ||kr||ksJ t d}||ksJ ||ksJ d S )NZMyTyperB   zType(String('MyType'))t1t2)r   lenrV   namer/   r   rj   rU   )rv   r   r   Zt1brJ   rJ   rK   	test_Type&  s    r   c                  C   s   t ttksJ tddd} t | tks0J t ttksBJ t dtksTJ t dtksfJ t dtksxJ tt	dd  d S )	NuTr"   rA         @      @      ?c                   S   s
   t tS rI   )r   	from_exprsumrJ   rJ   rJ   rK   rL   ?  rM   z&test_Type__from_expr.<locals>.<lambda>)
r   r   rE   r!   r   r"   r>   r#   r   rX   )r   rJ   rJ   rK   test_Type__from_expr7  s    r   c                   C   s   t tdd  tddks J ttddks6J ttddksLJ tddks^J t td	d  td
d
ks~J t tdd  tddksJ tddksJ t tdd  t tdd  d S )Nc                   S   s
   t dS )N      @)r!   
cast_checkrJ   rJ   rJ   rK   rL   D  rM   z1test_Type__cast_check__integers.<locals>.<lambda>3rA   z3.0000000000000000000z3.0000000000000000001g     _@   c                   S   s
   t dS )N   r$   r   rJ   rJ   rJ   rK   rL   K  rM   ic                   S   s
   t dS )Nir   rJ   rJ   rJ   rK   rL   M  rM   r   r   c                   S   s
   t dS )Ng      p@r%   r   rJ   rJ   rJ   rK   rL   Q  rM   c                   S   s
   t dS )Nr   rJ   rJ   rJ   rK   rL   R  rM   )r   rX   r!   r   r   r$   r%   rJ   rJ   rJ   rK   test_Type__cast_check__integersB  s    r   c                  C   sT   t d} | t dksJ t ddg}t ddg}||ks<J |j|j |ksPJ d S )NnoexceptZalignas       )r   rU   rV   )r   Z	alignas16Z	alignas32rJ   rJ   rK   test_AttributeT  s    r   c                  C   sJ  t ttd} | t | ksJ | t dtdks0J | jtks>J | jtksLJ t| jvsZJ | j| j | ksnJ t	| dks~J t t
tthd}|jt
ksJ |jtksJ t|jv sJ |j|j |ksJ t tttd}|jtksJ |j|j |ksJ t tttd}|jtks$J ||ks2J t t}|jtksLJ t tdddjtksjJ |j|j |ksJ t jtddd	}|j|j |ksJ t|jd d
k sJ ttdd  t t}|jtksJ t	|dksJ t jtddjtksJ t jtddjtks,J t jtddjtksFJ d S )NtyperO   zVariable(x, type=real))attrsTr   r   Fvaluer   gV瞯<c                   S   s   t jtdddS )Nr   Tr   )r   deducedr>   rJ   rJ   rJ   rK   rL   |  rM   ztest_Variable.<locals>.<lambda>zVariable(n, type=integer)rA   )r   r   r   )r   rO   r"   symbolr   r   r   rU   rV   r   rT   f32r>   r   r   r!   rE   r   r	   absr   r   rX   ru   r#   )vwZv_nZv_iZa_iZv_n2Zv_n3rJ   rJ   rK   test_Variable]  sB    

r   c                  C   s   t t} | jtksJ | jtks$J t| jvs2J t| jvs@J | j| j	 | ksTJ t
ddd}t |t|tthd}|j|u sJ |jtksJ t|jv sJ t|jv sJ |j|j	 |ksJ t
ddd}|| }|j|fksJ d S )Nr   Tr   )r   r   rE   r?   )r   rO   r   r   r6   r   r   r    rU   rV   r   r   r   r"   indices)pr   ZpurE   ZderefrJ   rJ   rK   test_Pointer  s     r   c                     s  t ddd} t| t| d}t|jjtks2J ttttd}t|jjt	ksXJ t| t| dt
hd}t
|jv s~J t|jvsJ t|}|j|ksJ t|jjtsJ |jjdksJ |j|j |ksJ | |ksJ |jd d dt|ksJ ttt	dd}t|}|j|ks*J |jjtdks@J ttttdd t }|jjt	ksnJ |jjdksJ tt fd	d
 d S )Nr   Tr   r   r   )r   r   rA   )r   r   c                      s
   t  dS )N*   )r   rJ   virJ   rK   rL     rM   z"test_Declaration.<locals>.<lambda>)r   r   r   r   r   variabler   r"   r>   r!   r   r   r    
isinstancer   r   rU   rV   Zas_DeclarationrT   r   rE   r   rX   )r   ZvuvnZvucdeclZvyZdecl2Zdecl3rJ   r   rK   test_Declaration  s0    r   c                   C   s>   t jtdksJ t jt jfks$J ttdjdks:J d S )Nr8   rZ   )r8   r   r/   rV   r   r7   rJ   rJ   rJ   rK   test_IntBaseType  s    r   c                   C   s  t jdksJ tjdksJ tjdks*J tjdks8J tjdksFJ t jdksTJ tjdksbJ tjdkspJ tjd	ks~J tjd
ksJ t jdksJ tjdksJ tjdksJ tjdksJ tjdksJ t jdksJ tjdksJ tjdksJ tjdksJ tjdksJ t	t j
tddd d ddt j   k sLJ t	tj
tddd d ddtj   k s|J t	tj
tddd d ddtj   k sJ t	tj
tddd d ddtj   k sJ t	tj
tddd d ddtj   k sJ t	t jtddd d ddt j   k s<J t	tjtd dd d ddtj   k slJ t	tjtd!dd d ddtj   k sJ t	tjtd"dd d ddtj   k sJ t	tjtd#dd d ddtj   k sJ t	t jtd$dd d ddt j   k s,J t	tjtd%dd d ddtj   k s\J t	tjtd&dd d ddtj   k sJ t	tjtd'dd d ddtj   k sJ t	tjtd(dd d ddtj   k sJ td)td)dksJ t	td*d* d+k s"J ttdttfs<J tttd,ksTJ tt td-ksnJ ttttd,ksJ ttt td-ksJ tttsJ ttksJ ttjtj ksJ d S ).NrA            !   r   	         $   r   r   i   i @  iiiiz
0.00097656Z	precisionrB   g?
   z1.1920929e-07r   z2.2204460492503131e-16@   z1.08420217248550443401e-19P   z* 1.92592994438723585305597794258492732e-34Z65504z3.40282347e+38z1.79769313486231571e+308z1.18973149535723176502e+4932z+1.18973149535723176508575932662800702e+4932z
6.1035e-05z1.17549435e-38z2.22507385850720138e-308z3.36210314311209350626e-4932z*3.3621031431120935062626778173217526e-4932g      ?g@gq7K<infz-inf)f16digr   f64f80f128Zdecimal_digZmax_exponentZmin_exponentr   Zepsr   maxZtinyr   r   floatZcast_nocheckr   mathisnanr   rU   rV   rJ   rJ   rJ   rK   test_FloatType  sZ    000000000000000r   c                     s  t tdd  t tdd  t tdd  t tdd  tdtd d dk sVJ td	td	 d
 dk stJ td} t| t|  d dk sJ ttddd t tdd  d t t fdd ttt ddt   d k sJ ttdd dk sJ d S )Nc                   S   s
   t dS )Ng8-	<^@r   r   rJ   rJ   rJ   rK   rL     rM   z7test_Type__cast_check__floating_point.<locals>.<lambda>c                   S   s
   t dS )Ngƽ(@r   rJ   rJ   rJ   rK   rL      rM   c                   S   s
   t dS )NgҗC?r   rJ   rJ   rJ   rK   rL     rM   c                   S   s
   t dS )Ng&T9ݚ?r   rJ   rJ   rJ   rK   rL     rM   g"<^@x{;Nj>:0yE>g_^e7ݚ?gdy=gdy=0.123456789012345670499^<h"<ҶOɃ;z0.12345678901234567890103X   r   c                   S   s   t tdddS )Nz0.12345678901234567890149r   r   )r   r   r   rJ   rJ   rJ   rK   rL   
  rM   g@c                      s
   t  S rI   r   rJ   Zv10rJ   rK   rL     rM   H   gؗҜ<il       rB   )	r   rX   r   r   r   r   r   r   r   )dcm21rJ   r   rK   %test_Type__cast_check__floating_point  s    *r   c                     s   d} t tdd  t| t|  d dk s0J tdd }t|t| d d	k sZJ td
dtd
   t t fdd d S )Ny"<^@Co7ݚ?c                   S   s
   t dS )Ny&T9ݚ?&T9ݚ?)c64r   rJ   rJ   rJ   rK   rL     rM   z?test_Type__cast_check__complex_floating_point.<locals>.<lambda>r   r   r   y        #B;r   r   z0.1234567890123456749y              ?c                      s
   t  S rI   )c128r   rJ   Zv19rJ   rK   rL     rM   )r   rX   r   r   r   r   r   )Zval9_11r   rJ   r   rK   -test_Type__cast_check__complex_floating_point  s    r   c                  C   s   t td} ttdk | g}|jjd tks.J |jjd dksBJ |jttdddksZJ |jj| fkslJ |j|j |ksJ tt td}ttdk |}||ksJ |ttdk | gksJ d S )NrB   rC   r   F)evaluaterA   )	r   rO   r-   	conditionrV   r   bodyrU   r   )ZxppZwhl1cblkZwhl2rJ   rJ   rK   
test_While  s    
r   c                  C   st   t tt} ttd}t| |g}t| |}|j|ks8J |t|ksHJ |t|| gks\J |j|j |kspJ d S rS   )	r   rO   rT   r   r.   r   r   rU   rV   )ZassignincrZscpr   rJ   rJ   rK   
test_Scope-  s    


r   c                  C   s   d} t ttg| }t|j| ks$J |jtttks8J |jtttt| t	fksVJ |t ttf| kslJ |t ttg| ksJ |j
|j |ksJ t ttg}|t ttgksJ ||ksJ |jd ksJ d S )Nz%d %.3f)r0   r>   rO   r   format_stringZ
print_argsr   rV   r1   r:   rU   )fmtZpsZps2rJ   rJ   rK   
test_Print8  s    r   c               	   C   s  t ttd} t ttd}ttd| |g}|jtks6J |jtdksHJ |j	t
| |ks\J |ttd| |gkstJ |ttd|| gksJ |j|j |ksJ tttt ttg}ttd| |g|}|jtksJ t|jdksJ |j	t
| |ksJ |jt| ksJ |ttd| |g|ks,J |ttd| |g|d d d ksRJ |j|j |kshJ t|}||ksJ t||}||ksJ d S )Nr   powerr   )r   rO   r"   r>   r!   r2   return_typer   r/   
parametersr   rU   rV   r   r4   r3   r   r   r   Zfrom_FunctionDefinitionZfrom_FunctionPrototype)Zvxr   fp1r   Zfd1fp2fd2rJ   rJ   rK   -test_FunctionPrototype_and_FunctionDefinitionH  s,    &
r  c                  C   sP   t t} | jtfksJ | t tks(J | t tks8J | j| j | ksLJ d S rI   )r4   rO   rV   rT   rU   )rsrJ   rJ   rK   test_Returne  s
    r  c                  C   s  t dtdf} | jd tks J | jd dks2J t| jdksDJ t| jd tsXJ | t dtdfksnJ | t ddtfksJ | t dtdfksJ | j| j | ksJ t dg d}t|jdksJ |jd dksJ |jd dksJ |jd d	ksJ t|d
v sJ d S )Nr   rA   r   rB   rC   ZPowerfma)rC   rA   r   r   )z*FunctionCall(fma, function_args=(2, 3, 4))z,FunctionCall("fma", function_args=(2, 3, 4)))	r5   rO   Zfunction_argsr   r   r   rU   rV   r   )ZfcZfc2rJ   rJ   rK   test_FunctionCallm  s    r  c            
      C   s&  t dt} t dt}t dt}ttd| |gt| j|jg}|j}td|dg}t||}t	|j
d jdksrJ t	|j
d jdksJ t|||gD ]\}}||ksJ q||td}	t	|j
d jdksJ t	|j
d jdksJ t	|	j
d jdksJ t	|	j
d jdks"J d S )	NrO   rT   r>   pwerrA   r   rB   r   )r   r"   r!   r3   powr   r   r5   r   r   rV   zipreplacer/   )
rO   rT   r>   r  ZpnameZpcallZtree1rZ   rh   Ztree2rJ   rJ   rK   test_ast_replace  s     



r  )~r   Zsympy.core.containersr   Zsympy.core.numbersr   r   r   r   Zsympy.core.relationalr   Zsympy.core.symbolr   r	   Z(sympy.functions.elementary.trigonometricr
   Zsympy.matrices.denser   Z"sympy.matrices.expressions.matexprr   Zsympy.sets.fancysetsr   Zsympy.tensor.indexedr   r   Zsympy.testing.pytestr   Zsympy.codegen.astr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rO   rT   ru   rv   r~   r   r   rZ   rh   r>   r@   rN   rD   rE   rF   rG   r[   ri   ro   rr   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rJ   rJ   rJ   rK   <module>   sd   

*.#	)#: