U
    -eT                  	   @   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dddg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. Zid/d0 Zjd1d2 Zkd3d4 Zld5d6 Zmd7d8 Znd9d: Zod;d< Zpd=d> Zqd?d@ ZrdAdB ZsdCdD ZtdEdF ZudGdH ZvdIdJ ZwdKdL ZxdMdN ZydOdP ZzdQdR Z{dSdT Z|dUdV Z}dS )W    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         BiA22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stt	| j
dkst	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   ]/var/www/html/Darija-Ai-Train/env/lib/python3.8/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AssertionError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 t|j| kst|j| d kst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 rc   )r   rD   rE   rN   rJ   rJ   rJ   rK   rL   [   rM   c                   S   s   t tdtS rc   )r   rO   rN   rJ   rJ   rJ   rK   rL   \   rM   c                   S   s   t tdtS rc   )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 rc   )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 rc   )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   rf   rJ   rJ   rJ   rK   rL   e   rM   c                   S   s   t tt dtS rc   rd   rJ   rJ   rJ   rK   rL   f   rM   c                   S   s   t tddS re   )r   rD   rJ   rJ   rJ   rK   rL   g   rM   )r   rO   rT   r@   rN   rD   rE   r   r   r   r   r   rU   rV   rW   binoprX   r   rY   rZ   )rg   clsr[   brJ   rJ   rK   test_AugAssign@   s<    
"rj   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sHt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__rW   )Zassignment_classespairsrh   lhsrhsr[   rJ   rJ   rK   test_Assignment_printingj   s     	


rp   c                  C   s^   t ttdtttd } | j| j | ks.t| jtttksBt| j	tdtd ksZtd S rS   )
r   r   rO   rT   rU   rV   rW   Zleft_hand_sidesr   Zright_hand_sidescrJ   rJ   rK   test_CodeBlock   s    rs   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sjt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 t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   rt   rW   r   rY   r[   ri   )ZassignmentsZordered_assignmentsc1Zfree_assignmentsZfree_assignments_orderedc2rJ   ru   rK   test_CodeBlock_topological_sort   s<    	

rz   c                  C   s   t tttt ttdtttttd} | jt ks:tt tttt ttt	t
 tttttt
d }|jt	t
hks~td S )NrB   rC   rA   )r   r   rO   rT   rv   rw   Zfree_symbolssetrW   r[   ri   rx   ry   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stt	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st	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
   rv   rw   r~   x0rW   r   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st
d S )NrA      rC      )r   r   rF   r   rO   r
   rT   rG   r~   r   rW   rq   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sdt
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   rW   r   rZ   )frJ   rJ   rK   test_For   s    0 r   c                  C   sj   t js
tt t kstG dd dt} |  }|t ks8tt d ksDtt t ksRtt jt j t ksftd S )Nc                   @   s   e Zd ZdS )ztest_none.<locals>.FooNrl   
__module____qualname__rJ   rJ   rJ   rK   Foo   s   r   )r:   is_AtomrW   r<   r;   rU   rV   )r   foorJ   rJ   rK   	test_none   s    
r   c                  C   s   t d} | jst| t dks"t| jdks0t| jf |  | ksHt| j| j | ks\tG dd dt }|d}|| kst|j| jkstt d}t|dkstt|dkst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   rW   textrU   kwargsrV   strrk   )str   sisrJ   rJ   rK   test_String  s    
r   c                  C   s*   t d} | jdkstt| dks&td S )Nr   )r=   r   rW   r   rq   rJ   rJ   rK   test_Comment  s    r   c                  C   s,   t  } | t  kst| j| j | ks(td S rI   )r9   rW   rU   rV   )r>   rJ   rJ   rK   	test_Node   s    r   c                  C   s   t d} t| jdkst| jtdks,tt| dks<tt| dksLtt | | ks\t| j| j | ksptt d}t d}||kst||kr||kstt d}||kst||kstd S )NZMyTyperB   zType(String('MyType'))t1t2)	r   lenrV   rW   namer/   r   rk   rU   )rw   r   r   Zt1brJ   rJ   rK   	test_Type&  s    r   c                  C   s   t ttksttddd} t | tks0tt ttksBtt dtksTtt dtksftt dtksxt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!   rW   r   r"   r>   r#   r   rY   )r   rJ   rJ   rK   test_Type__from_expr7  s    r   c                   C   s   t tdd  tddks tttddks6tttddksLttddks^tt td	d  td
d
ks~tt tdd  tddksttddkst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   rY   r!   r   rW   r   r$   r%   rJ   rJ   rJ   rK   test_Type__cast_check__integersB  s    r   c                  C   sT   t d} | t dkstt ddg}t ddg}||ks<t|j|j |ksPtd S )NnoexceptZalignas       )r   rW   rU   rV   )r   Z	alignas16Z	alignas32rJ   rJ   rK   test_AttributeT  s    r   c                  C   sJ  t ttd} | t | kst| t dtdks0t| jtks>t| jtksLtt| jksZt| j| j	 | ksntt
| dks~tt ttthd}|jtkst|jtkstt|jkst|j|j	 |kstt tttd}|jtkst|j|j	 |kstt tttd}|jtks$t||ks2tt t}|jtksLtt tdddjtksjt|j|j	 |kstt jtddd	}|j|j	 |kstt|jd d
k stttdd  t t}|jtkstt
|dkstt jtddjtkstt jtddjtks,tt jtddjtksFt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"   rW   symbolr   r   r   rU   rV   r   rT   f32r>   r   r   r!   rE   r   r	   absr   r   rY   rv   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t| jtks$tt| jks2tt| jks@t| j	| j
 | ksTttddd}t |t|tthd}|j|kst|jtkstt|jkstt|jkst|j	|j
 |ksttddd}|| }|j|fkstd S )Nr   Tr   )r   r   rE   r?   )r   rO   r   rW   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s2ttt	tt	d}t|jjt
ksXtt| t| dthd}t|jks~tt|jkstt|}|j|kstt|jjtst|jjdkst|j|j |kst| |kst|jd d dt|kstttt
dd}t|}|j|ks*t|jjtdks@tttttdd t }|jjt
ksnt|jjdkst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"   rW   r>   r!   r   r   r    
isinstancer   r   rU   rV   Zas_DeclarationrT   r   rE   r   rY   )r   ZvuvnZvucdeclZvyZdecl2Zdecl3rJ   r   rK   test_Declaration  s0    r   c                   C   s>   t jtdkstt jt jfks$tttdjdks:td S )Nr8   r[   )r8   r   r/   rW   rV   r   r7   rJ   rJ   rJ   rK   test_IntBaseType  s    r   c                   C   s  t jdksttjdksttjdks*ttjdks8ttjdksFtt jdksTttjdksbttjdkspttjd	ks~ttjd
kstt jdksttjdksttjdksttjdksttjdkstt j	dksttj	dksttj	dksttj	dksttj	dkstt
t jtddd d ddt j   k sLtt
tjtddd d ddtj   k s|tt
tjtddd d ddtj   k stt
tjtddd d ddtj   k stt
tjtddd d ddtj   k stt
t jtddd d ddt j   k s<tt
tjtd dd d ddtj   k sltt
tjtd!dd d ddtj   k stt
tjtd"dd d ddtj   k stt
tjtd#dd d ddtj   k stt
t jtd$dd d ddt j   k s,tt
tjtd%dd d ddtj   k s\tt
tjtd&dd d ddtj   k stt
tjtd'dd d ddtj   k stt
tjtd(dd d ddtj   k sttd)td)dkstt
td*d* d+k s"tttdttfs<ttttd,ksTttt td-ksntttttd,kstttt td-ksttttstttkstttjtj kstd S ).NrA            !   r   	         $   r   r   i   i @  iiiiz
0.00097656	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digrW   r   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 sVttd	td	 d
 dk stttd} t| t|  d dk stttddd t tdd  d t t fdd ttt	 ddt   d k stttdd dk st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   rY   r   r   r   rW   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 s0ttdd }t|t| d d	k sZt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   rY   r   r   r   rW   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.t|jjd dksBt|jttdddksZt|jj| fkslt|j|j |kstt	t td}ttdk |}||kst|ttdk | gkstd S )NrB   rC   r   F)evaluaterA   )
r   rO   r-   	conditionrV   rW   r   bodyrU   r   )xppZwhl1cblkZwhl2rJ   rJ   rK   
test_While  s    
r   c                  C   st   t tt} ttd}t| |g}t| |}|j|ks8t|t|ksHt|t|| gks\t|j|j	 |ksptd S rS   )
r   rO   rT   r   r.   r   r   rW   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$t|jtttks8t|jtttt	| t
fksVt|t ttf| kslt|t ttg| kst|j|j |kstt ttg}|t ttgkst||kst|jd kstd S )Nz%d %.3f)r0   r>   rO   r   format_stringrW   Z
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s6t|jt	dksHt|j
t| |ks\t|ttd| |gkstt|ttd|| gkst|j|j |ksttttt ttg}ttd| |g|}|jtkstt|jdkst|j
t| |kst|jt| kst|ttd| |g|ks,t|ttd| |g|d d d ksRt|j|j |kshtt|}||kstt||}||kstd S )Nr   powerr   )r   rO   r"   r>   r!   r2   return_typerW   r   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t| t tks(t| t tks8t| j| j | ksLtd S rI   )r4   rO   rV   rW   rT   rU   )rsrJ   rJ   rK   test_Returne  s
    r  c                  C   s  t dtdf} | jd tks t| jd dks2tt| jdksDtt| jd tsXt| t dtdfksnt| t ddtfkst| t dtdfkst| j| j | kstt ddddg}t|jdkst|jd dkst|jd dkst|jd dkstt	|d	kstd S )
Nr   rA   r   rB   rC   ZPowerfmar   )z*FunctionCall(fma, function_args=(2, 3, 4))z,FunctionCall("fma", function_args=(2, 3, 4)))
r5   rO   Zfunction_argsrW   r   r   r   rU   rV   r   )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srtt	|j
d jdkstt|||gD ]\}}||kstq||td}	t	|j
d jdkstt	|j
d jdkstt	|	j
d jdkstt	|	j
d jdks"td S )	NrO   rT   r>   pwerrA   r   rB   r   )r   r"   r!   r3   powr   r   r5   r   r   rV   rW   zipreplacer/   )
rO   rT   r>   r  ZpnameZpcallZtree1r[   ri   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   rv   rw   r   r   r   r[   ri   r>   r@   rN   rD   rE   rF   rG   r\   rj   rp   rs   rz   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   

*.#	)#: