o
    jgT                  	   @   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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   T/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/codegen/tests/test_ast.py<lambda>0       z!test_Assignment.<locals>.<lambda>c                   S   rI   rJ   )r   rD   rE   matrK   rK   rK   rL   rM   1   rN   c                   S   
   t ttS rJ   )r   xrO   rK   rK   rK   rL   rM   2      
 c                   S   rP   rJ   )r   rQ   r@   rK   rK   rK   rL   rM   3   rR   c                   S   s   t td tS )NrH   r   r@   rO   rK   rK   rK   rL   rM   4   rN   c                   S   rP   rJ   )r   r@   rQ   rK   rK   rK   rL   rM   6   rR   c                   S   
   t tdS Nr   )r   r@   rK   rK   rK   rL   rM   7   rR   c                   S   rP   rJ   )r   rO   r@   rK   rK   rK   rL   rM   9   rR   c                   S   s
   t dtS rU   r   rQ   rK   rK   rK   rL   rM   :   rR   c                   S   s   t tt dS NrB   rV   rK   rK   rK   rL   rM   ;   rN   c                   S   s   t tt tS rJ   rS   rK   rK   rK   rL   rM   <   rN   c                   S   rT   rU   )r   rD   rK   rK   rK   rL   rM   =   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   Z       z test_AugAssign.<locals>.<lambda>c                   S   rf   rg   )r   rD   rE   rO   rK   rK   rK   rL   rM   [   rh   c                   S      t tdtS rg   )r   rQ   rO   rK   rK   rK   rL   rM   \       c                   S   ri   rg   )r   rQ   r@   rK   rK   rK   rL   rM   ]   rj   c                   S   s   t td dtS )NrH   r`   r   r@   rO   rK   rK   rK   rL   rM   ^   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   a   rj   c                   S   ri   rg   )r   rO   r@   rK   rK   rK   rL   rM   c   rj   c                   S   s   t ddtS )Nr   r`   r   rQ   rK   rK   rK   rL   rM   d   rj   c                   S   s   t tt ddS )Nr`   rB   rn   rK   rK   rK   rL   rM   e   rh   c                   S   s   t tt dtS rg   rk   rK   rK   rK   rL   rM   f   rh   c                   S   rl   rm   )r   rD   rK   rK   rK   rL   rM   g   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__)assignment_classespairsrp   lhsrhsr^   rK   rK   rL   test_Assignment_printingj   s$   	


&ry   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   left_hand_sidesr   right_hand_sidescrK   rK   rL   test_CodeBlock   s   r~   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   invalid_assignmentsrK   rL   rM      rR   z1test_CodeBlock_topological_sort.<locals>.<lambda>rA   )r   rQ   rX   ztr   r   r   r\   r^   rq   )assignmentsordered_assignmentsc1free_assignments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   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   r|   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 | j| j | ks0J G dd dt }|d}|| ksBJ |j| jksJJ t d}t|dksVJ t|dks^J 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   kwargsrZ   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   r|   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 )NMyTyperB   zType(String('MyType'))t1t2)r   lenrZ   namer/   r   rs   rY   )r   r   r   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   ?  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_expr7  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   D  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   K  rR   ic                   S   r   )Nir   rK   rK   rK   rL   rM   M  rR   r   r   c                   S   r   )Ng      p@r%   r   rK   rK   rK   rL   rM   Q  rR   c                   S   r   )Nr   rK   rK   rK   rL   rM   R  rR   )r   r\   r!   r   r   r$   r%   rK   rK   rK   rL   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s(J d S )Nnoexceptalignas       )r   rY   rZ   )r   	alignas16	alignas32rK   rK   rL   test_AttributeT  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   |  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wv_nv_ia_iv_n2v_n3rK   rK   rL   test_Variable]  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   purE   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   as_DeclarationrX   r   rE   r   r\   )r   vuvnvucdeclvydecl2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)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s0J ttttd,ks>J ttt td-ksMJ tttsXJ ttks_J ttjtj ksjJ 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-34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f128decimal_digmax_exponentmin_exponentr   epsr   maxtinyr   r   floatcast_nocheckr   math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                      r   rJ   r  rK   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                      r   rJ   )c128r   rK   v19rK   rL   rM     rR   )r   r\   r   r   r   r   r!  )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)evaluaterA   )	r   rQ   r-   	conditionrZ   r   bodyrY   r   )xppwhl1cblk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   )assignincrscpr+  rK   rK   rL   
test_Scope-  s   


r1  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_string
print_argsr   rZ   r1   r:   rY   )fmtpsps2rK   rK   rL   
test_Print8  s   r7  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   return_typer   r/   
parametersr   rY   rZ   r   r4   r3   r   r(  r   from_FunctionDefinitionfrom_FunctionPrototype)vxr   fp1r(  fd1fp2fd2rK   rK   rL   -test_FunctionPrototype_and_FunctionDefinitionH  s,   $
rB  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   )rsrK   rK   rL   test_Returne  s
   rD  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 )Nr8  rA   r   rB   rC   Powerfma)rC   rA   r   r   )z*FunctionCall(fma, function_args=(2, 3, 4))z,FunctionCall("fma", function_args=(2, 3, 4)))	r5   rQ   function_argsr   r   r   rY   rZ   r   )fcfc2rK   rK   rL   test_FunctionCallm  s   rJ  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   r8  )r   r"   r!   r3   powr   r   r5   r   r   rZ   zipreplacer/   )
rQ   rX   r>   rK  pnamepcalltree1r^   rq   tree2rK   rK   rL   test_ast_replace  s    



rS  )~r  sympy.core.containersr   sympy.core.numbersr   r   r   r   sympy.core.relationalr   sympy.core.symbolr   r	   (sympy.functions.elementary.trigonometricr
   sympy.matrices.denser   "sympy.matrices.expressions.matexprr   sympy.sets.fancysetsr   sympy.tensor.indexedr   r   sympy.testing.pytestr   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   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r-  r1  r7  rB  rD  rJ  rS  rK   rK   rK   rL   <module>   sf    

*.#	)#: