o
    8VakS                  	   @   st  d dl 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 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'm(Z)m*Z+m,Z-m.Z/m0Z1m2Z3m4Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF e
d\	ZGZHZIZJZKZLZMZNZOe
dddZPed	d
dZQeg dZRedZSedePZTedddZUedddZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]d d! Z^d"d# Z_d$d% Z`d&d' Zad(d) Zbd*d+ Zcd,d- Zdd.d/ Zed0d1 Zfd2d3 Zgd4d5 Zhd6d7 Zid8d9 Zjd:d; Zkd<d= Zld>d? Zmd@dA ZndBdC ZodDdE ZpdFdG ZqdHdI ZrdJdK ZsdLdM ZtdNdO ZudS )P    N)FloatIdxIndexedBaseIntegerMatrixMatrixSymbolRangesinsymbolsSymbolTupleLtnanoo)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s:J | j	dksAJ 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      t tt tS N)r   rD   rE   r@    rK   rK   >/usr/lib/python3/dist-packages/sympy/codegen/tests/test_ast.py<lambda>+       z!test_Assignment.<locals>.<lambda>c                   S   rI   rJ   )r   rD   rE   matrK   rK   rK   rL   rM   ,   rN   c                   S   
   t ttS rJ   )r   xrO   rK   rK   rK   rL   rM   -      
 c                   S   rP   rJ   )r   rQ   r@   rK   rK   rK   rL   rM   .   rR   c                   S   s   t td tS )NrH   r   r@   rO   rK   rK   rK   rL   rM   /   rN   c                   S   rP   rJ   )r   r@   rQ   rK   rK   rK   rL   rM   1   rR   c                   S   
   t tdS Nr   )r   r@   rK   rK   rK   rL   rM   2   rR   c                   S   rP   rJ   )r   rO   r@   rK   rK   rK   rL   rM   4   rR   c                   S   s
   t dtS rU   r   rQ   rK   rK   rK   rL   rM   5   rR   c                   S   s   t tt dS NrB   rV   rK   rK   rK   rL   rM   6   rN   c                   S   s   t tt tS rJ   rS   rK   rK   rK   rL   rM   7   rN   c                   S   rT   rU   )r   rD   rK   rK   rK   rL   rM   8   rR   )r   rQ   yr@   rO   rD   rE   funcargsopr   
ValueError	TypeError)arK   rK   rL   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 ]1\} }t t| t}|tt}|j|j |  kra|ksdJ  J |j| kskJ |j| d kstJ qCt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      t tt dtS Nr`   )r   rD   rE   r@   rK   rK   rK   rL   rM   U       z test_AugAssign.<locals>.<lambda>c                   S   rf   rg   )r   rD   rE   rO   rK   rK   rK   rL   rM   V   rh   c                   S      t tdtS rg   )r   rQ   rO   rK   rK   rK   rL   rM   W       c                   S   ri   rg   )r   rQ   r@   rK   rK   rK   rL   rM   X   rj   c                   S   s   t td dtS )NrH   r`   r   r@   rO   rK   rK   rK   rL   rM   Y   rh   c                   S   ri   rg   )r   r@   rQ   rK   rK   rK   rL   rM   [   rj   c                   S      t tddS Nr`   r   )r   r@   rK   rK   rK   rL   rM   \   rj   c                   S   ri   rg   )r   rO   r@   rK   rK   rK   rL   rM   ^   rj   c                   S   s   t ddtS )Nr   r`   r   rQ   rK   rK   rK   rL   rM   _   rj   c                   S   s   t tt ddS )Nr`   rB   rn   rK   rK   rK   rL   rM   `   rh   c                   S   s   t tt dtS rg   rk   rK   rK   rK   rL   rM   a   rh   c                   S   rl   rm   )r   rD   rK   rK   rK   rL   rM   b   rj   )r   rQ   rX   r@   rO   rD   rE   r   r   r   r   r   rY   rZ   binopr[   r   r\   r]   )ro   clsr^   brK   rK   rL   test_AugAssign;   s<   
$rr   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 ]\}}|||}t|d|jt|t|f ks?J q$q d S )NrC   )r   r   z
%s(%s, %s))r   r   r   r   r   r   rQ   rX   rD   rE   rF   rG   r@   repr__name__)Zassignment_classesZpairsrp   ZlhsZrhsr^   rK   rK   rL   test_Assignment_printinge   s$   	


&ru   c                  C   s^   t ttdtttd } | j| j | ksJ | jtttks!J | jtdtd ks-J d S rW   )	r   r   rQ   rX   rY   rZ   Zleft_hand_sidesr   Zright_hand_sidescrK   rK   rL   test_CodeBlock{   s   rx   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s5J 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sJ d S )NrB   rC   c                      
   t  S rJ   )r   topological_sortrK   Zinvalid_assignmentsrK   rL   rM      rR   z1test_CodeBlock_topological_sort.<locals>.<lambda>rA   )r   rQ   rX   ztr   rz   r   r\   r^   rq   )ZassignmentsZordered_assignmentsc1Zfree_assignmentsZfree_assignments_orderedc2rK   r{   rL   test_CodeBlock_topological_sort   s<   	

r   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   rQ   rX   r|   r}   Zfree_symbolssetr^   rq   r~   r   rK   rK   rL   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s:J 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s{J d S )NrB   c                   S   s"   t ttdttdttd S )NrB   rC   )r   r   rQ   rX   cserK   rK   rK   rL   rM      s
    z$test_CodeBlock_cse.<locals>.<lambda>rC   )r   r   rX   rQ   r	   r|   r}   r   x0r   NotImplementedErrorx1x2r   rK   rK   rL   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sRJ d S )NrA      rC      )
r   r   rF   r   rQ   r	   rX   rG   r   r   rv   rK   rK   rL   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s2J t
tdd  d S )Nr   rA   r`   )rB   rC   rA   r      c                   S   s   t tttt fS rJ   )r   r>   rQ   rX   rK   rK   rK   rL   rM          ztest_For.<locals>.<lambda>)r   r>   r   r   r@   rQ   r   rX   rY   rZ   r   r]   )frK   rK   rL   test_For   s   0 r   c                  C   sj   t jsJ t t ksJ G dd dt} |  }|t ksJ t d ks"J t t ks)J t jt j t ks3J d S )Nc                   @      e Zd ZdS )ztest_none.<locals>.FooNrt   
__module____qualname__rK   rK   rK   rL   Foo       r   )r:   is_Atomr<   r;   rY   rZ   )r   foorK   rK   rL   	test_none   s   
r   c                  C   s   t d} | js	J | t dksJ | jdksJ | jdi |  | ks&J G dd dt }|d}|| ks8J |j| jks@J t d}t|dksLJ t|dksTJ d S )Nfoobarc                   @   r   )ztest_String.<locals>.SignifierNr   rK   rK   rK   rL   	Signifier  r   r   r   zString('foo')rK   )r/   r   textrY   kwargsstrrs   )str   sisrK   rK   rL   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   rv   rK   rK   rL   test_Comment  s   r   c                  C   s,   t  } | t  ks
J | j| j | ksJ d S rJ   )r9   rY   rZ   )r>   rK   rK   rL   	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s&J t | | ks.J | j| j | ks8J t d}t d}||ksFJ ||krN||ksPJ t d}||ksZJ ||ks`J d S )NZMyTyperB   zType(String('MyType'))t1t2)r   lenrZ   namer/   r   rs   rY   )r}   r   r   Zt1brK   rK   rL   	test_Type   s   r   c                  C   s   t ttks	J tddd} t | tksJ t ttks!J t dtks*J t dtks3J t dtks<J tt	dd  d S )	NuTr"   rA         @      @      ?c                   S   s
   t tS rJ   )r   	from_exprsumrK   rK   rK   rL   rM   9  rR   z&test_Type__from_expr.<locals>.<lambda>)
r   r   rE   r!   r
   r"   r>   r#   r   r\   )r   rK   rK   rL   test_Type__from_expr1  s   r   c                   C   s   t tdd  tddksJ ttddksJ ttddks&J tddks/J t td	d  td
d
ks?J t tdd  tddksOJ tddksXJ t tdd  t tdd  d S )Nc                   S   
   t dS )N      @)r!   
cast_checkrK   rK   rK   rL   rM   >  rR   z1test_Type__cast_check__integers.<locals>.<lambda>3rA   z3.0000000000000000000z3.0000000000000000001g     _@   c                   S   r   )N   r$   r   rK   rK   rK   rL   rM   E  rR   ic                   S   r   )Nir   rK   rK   rK   rL   rM   G  rR   r   r   c                   S   r   )Ng      p@r%   r   rK   rK   rK   rL   rM   K  rR   c                   S   r   )Nr   rK   rK   rK   rL   rM   L  rR   )r   r\   r!   r   r   r$   r%   rK   rK   rK   rL   test_Type__cast_check__integers<  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s(J d S )NnoexceptZalignas       )r   rY   rZ   )r   Z	alignas16Z	alignas32rK   rK   rL   test_AttributeN  s   r   c                  C   s4  t ttd} | t | ksJ | t dtdksJ | jtksJ | jtks&J t| jvs-J | j| j | ks7J t	| dks?J t t
tthd}|jt
ksNJ |jtksUJ t|jv s\J |j|j |ksfJ t tttd}|jtksvJ |j|j |ksJ t tttd}|jtksJ ||ksJ t t}|jtksJ t tdddjtksJ |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sJ t jtddjtksJ t jtddjtksJ d S )NtyperQ   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>   rK   rK   rK   rL   rM   v  rh   ztest_Variable.<locals>.<lambda>zVariable(n, type=integer)rA   )r   r   r   )r   rQ   r"   symbolr   r   r   rY   rZ   r   rX   f32r>   r   r   r!   rE   r   r   absr   r   r\   r|   r#   )vwZv_nZv_iZa_iZv_n2Zv_n3rK   rK   rL   test_VariableW  sB   

r   c                  C   s   t t} | jtksJ | jtksJ t| jvsJ t| jvs J | j| j	 | ks*J t
ddd}t |t|tthd}|j|u sCJ |jtksJJ t|jv sQJ t|jv sXJ |j|j	 |ksbJ t
ddd}|| }|j|fkstJ d S )Nr   Tr   )r   r   rE   r?   )r   rQ   r   r   r6   r   r   r    rY   rZ   r
   r   r   r"   indices)pr   ZpurE   ZderefrK   rK   rL   test_Pointer  s    r   c                     s  t ddd} t| t| d}t|jjtksJ ttttd}t|jjt	ks,J t| t| dt
hd}t
|jv s?J t|jvsFJ t|}|j|ksQJ t|jjtsZJ |jjdksbJ |j|j |kslJ | |kstJ |jd d dt|ksJ ttt	dd}t|}|j|ksJ |jjtdksJ ttttdd t }|jjt	ksJ |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   rK   virK   rL   rM     rR   z"test_Declaration.<locals>.<lambda>)r
   r   r   r   r   variabler   r"   r>   r!   r   r   r    
isinstancer   r   rY   rZ   Zas_DeclarationrX   r   rE   r   r\   )r   ZvuvnZvucZdeclZvyZdecl2Zdecl3rK   r   rL   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   r^   )r8   r   r/   rZ   r   r7   rK   rK   rK   rL   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sJ tjdks#J t jdks*J tjdks1J tjdks8J tjd	ks?J tjd
ksFJ t jdksMJ tjdksTJ tjdks[J tjdksbJ tjdksiJ t jdkspJ tjdkswJ tjdks~J tjdksJ tjd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 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 sGJ 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 swJ 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 sJ t	tjtd(dd d ddtj   k sJ td)d)ksJ t	td*d* d+k sJ ttdttfsJ tttd,ks J tt td-ks-J ttttd,ks;J ttt td-ksJJ tttsUJ ttks\J ttjtj ksgJ 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   mathZisnanr   rY   rZ   rK   rK   rK   rL   test_FloatType  sZ   .....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 s+J td	td	 d
 dk s:J td} t| t|  d dk sMJ ttddd t tdd  d t t fdd ttt ddt   d k s}J ttdd dk sJ d S )Nc                   S   r   )Ng8-	<^@r   r   rK   rK   rK   rL   rM     rR   z7test_Type__cast_check__floating_point.<locals>.<lambda>c                   S   r   )Ngƽ(@r   rK   rK   rK   rL   rM     rR   c                   S   r   )NgҗC?r   rK   rK   rK   rL   rM     rR   c                   S   r   )Ng&T9ݚ?r   rK   rK   rK   rL   rM     rR   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   rK   rK   rK   rL   rM     r   g@c                      ry   rJ   r   rK   Zv10rK   rL   rM   	  rR   H   gؗҜ<il       rB   )	r   r\   r   r   r   r   r   r   r   )dcm21rK   r   rL   %test_Type__cast_check__floating_point  s   *r   c                     s   d} t tdd  t| t|  d dk sJ tdd }t|t| d d	k s-J td
dtd
   t t fdd d S )Ny"<^@Co7ݚ?c                   S   r   )Ny&T9ݚ?&T9ݚ?)c64r   rK   rK   rK   rL   rM     rR   z?test_Type__cast_check__complex_floating_point.<locals>.<lambda>r   r   r   y        #B;r   r   z0.1234567890123456749y              ?c                      ry   rJ   )c128r   rK   Zv19rK   rL   rM     rR   )r   r\   r   r   r   r   r   )Zval9_11r   rK   r   rL   -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s!J |jttdddks-J |jj| fks6J |j|j |ks@J tt td}ttdk |}||ksTJ |ttdk | gks`J d S )NrB   rC   r   F)ZevaluaterA   )	r   rQ   r-   Z	conditionrZ   r   bodyrY   r   )ZxppZwhl1cblkZwhl2rK   rK   rL   
test_While  s   
r   c                  C   st   t tt} ttd}t| |g}t| |}|j|ksJ |t|ks$J |t|| gks.J |j|j |ks8J d S rW   )	r   rQ   rX   r   r.   r   r   rY   rZ   )ZassignZincrZscpr   rK   rK   rL   
test_Scope*  s   


r   c                  C   s   d} t ttg| }t|j| ksJ |jtttksJ |jtttt| t	fks+J |t ttf| ks6J |t ttg| ksAJ |j
|j |ksKJ t ttg}|t ttgks[J ||ksaJ |jd kshJ d S )Nz%d %.3f)r0   r>   rQ   r   format_stringZ
print_argsr   rZ   r1   r:   rY   )ZfmtZpsZps2rK   rK   rL   
test_Print5  s   r   c               	   C   s  t ttd} t ttd}ttd| |g}|jtksJ |jtdks$J |j	t
| |ks.J |ttd| |gks:J |ttd|| gksFJ |j|j |ksPJ tttt ttg}ttd| |g|}|jtkskJ t|jdkstJ |j	t
| |ks~J |jt| ksJ |ttd| |g|ksJ |ttd| |g|d d d ksJ |j|j |ksJ t|}||ksJ t||}||ksJ d S )Nr   powerr   )r   rQ   r"   r>   r!   r2   Zreturn_typer   r/   Z
parametersr   rY   rZ   r   r4   r3   r   r   r   Zfrom_FunctionDefinitionZfrom_FunctionPrototype)Zvxr   fp1r   Zfd1fp2Zfd2rK   rK   rL   -test_FunctionPrototype_and_FunctionDefinitionE  s,   $
r  c                  C   sP   t t} | jtfksJ | t tksJ | t tksJ | j| j | ks&J d S rJ   )r4   rQ   rZ   rX   rY   )ZrsrK   rK   rL   test_Returnb  s
   r  c                  C   s  t dtdf} | jd tksJ | jd dksJ t| jdks"J t| jd ts,J | t dtdfks7J | t ddtfksBJ | t dtdfksMJ | j| j | ksWJ t dg d}t|jdksgJ |jd dkspJ |jd dksyJ |jd d	ksJ t|d
v sJ d S )Nr  rA   r   rB   rC   ZPowerZfma)rC   rA   r   r   )z*FunctionCall(fma, function_args=(2, 3, 4))z,FunctionCall("fma", function_args=(2, 3, 4)))	r5   rQ   Zfunction_argsr   r   r   rY   rZ   r   )ZfcZfc2rK   rK   rL   test_FunctionCallj  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s9J t	|j
d jdksEJ t|||gD ]
\}}||ksVJ qL||td}	t	|j
d jdkskJ t	|j
d jdkswJ t	|	j
d jdksJ t	|	j
d jdksJ d S )	NrQ   rX   r>   pwerrA   r   rB   r  )r   r"   r!   r3   powr   r   r5   r   r   rZ   zipreplacer/   )
rQ   rX   r>   r  ZpnameZpcallZtree1r^   rq   Ztree2rK   rK   rL   test_ast_replace  s    



r  )vr   Zsympyr   r   r   r   r   r   r   r	   r
   r   r   r   r   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=   rQ   rX   r|   r}   r   r   r   r^   rq   r>   r@   rO   rD   rE   rF   rG   r_   rr   ru   rx   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  rK   rK   rK   rL   <module>   sV    @

*.#	*$: