o
    8Va,                     @   s  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mZmZmZ d dl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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d d	l0m1Z1 d d
l2m3Z3 ed\Z4Z5de"iZ6e7de6 dmddZ8dd Z9dd Z:d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* ZEd+d, ZFd-d. ZGd/d0 ZHd1d2 ZId3d4 ZJd5d6 ZKd7d8 ZLd9d: ZMd;d< ZNd=d> ZOd?d@ ZPdAdB ZQdCdD ZRdEdF ZSdGdH ZTdIdJ ZUdKdL ZVdMdN ZWdOdP ZXdQdR ZYdSdT ZZdUdV Z[dWdX Z\dYdZ Z]d[d\ Z^d]d^ Z_d_d` Z`dadb Zadcdd Zbdedf Zcdgdh Zddidj Zedkdl ZfdS )n    )AnyDict)raises)symbolssympifyFunctionIntegerMatrixAbs	HeavisideRationalFloatSWildFunctionImmutableDenseMatrixsintruefalseonessqrtrootAlgebraicNumberSymbolDummyWildMatrixSymbolQ)CyclePermutation)Str)PointEllipsesrepr)ringfieldZZQQlexgrlexPoly)DMP)FiniteExtensionx,yr   zfrom sympy import *Nc                 C   sF   |du rt }n	t  }t|| t| |ksJ t||| ks!J dS )z
    sT := sreprTest

    Tests that srepr delivers the expected string and that
    the condition eval(srepr(expr))==expr holds.
    N)ENVcopyexecr#   eval)exprstringimport_stmtZENV2 r5   @/usr/lib/python3/dist-packages/sympy/printing/tests/test_repr.pysT   s   
r7   c                  C   s(   G dd dt } t| tdksJ d S )Nc                   @   s   e Zd Zdd ZdS )ztest_printmethod.<locals>.Rc                 S   s   d| | jd  S )Nzfoo(%s)r   )Z_printargs)selfZprinterr5   r5   r6   
_sympyrepr*   s   z&test_printmethod.<locals>.R._sympyreprN)__name__
__module____qualname__r:   r5   r5   r5   r6   R)   s    r>   zfoo(Symbol('x')))r
   r#   x)r>   r5   r5   r6   test_printmethod(   s   r@   c                   C   sf   t tt d ttd d dddksJ ttd d dddks#J ttd	d
ddddks1J d S )NzAdd(Symbol('x'), Symbol('y'))      r(   Zorderz-Add(Pow(Symbol('x'), Integer(2)), Integer(1))oldz-Add(Integer(1), Pow(Symbol('x'), Integer(2)))z	x + 3 - 2FZevaluatenonez:Add(Symbol('x'), Integer(3), Mul(Integer(-1), Integer(2)))r7   r?   yr#   r   r5   r5   r5   r6   test_Add/   s    rI   c                  C   sB   ddl m} m} | |fD ]}|td }tt||ksJ qd S )Nr   )AddMulzx:256)sympyrJ   rK   r   r1   r#   )rJ   rK   opr2   r5   r5   r6   #test_more_than_255_args_issue_102596   s
   rN   c                   C   s<   t tdtd t tdd t ttd t td d S )NfzFunction('f')(Symbol('x'))zFunction('f')zsin(Symbol('x'))r   )r7   r   r?   r   r5   r5   r5   r6   test_Function=   s   rP   c                   C   s"   t ttd t ttdd d S )NzHeaviside(Symbol('x'))rB   z"Heaviside(Symbol('x'), Integer(1)))r7   r   r?   r5   r5   r5   r6   test_HeavisideF   s   rQ   c                   C   s,   t tddd t ttddddd d S )Nr   zPoint2D(Integer(0), Integer(0))   rB   z@Ellipse(Point2D(Integer(0), Integer(0)), Integer(5), Integer(1)))r7   r    r!   r5   r5   r5   r6   test_GeometryK   s   rS   c                   C   s   t tjd t tjd t tjd t tjd t tjd t tjd t tjd t tj	d t tj
d	 t tjd
 t tjd t tjd t tjd t tjd t tjd d S )NCatalanZzoo
EulerGammaEGoldenRatioTribonacciConstantzRational(1, 2)IZoonanz-oozInteger(-1)z
Integer(1)Zpiz
Integer(0))r7   r   rT   ZComplexInfinityrU   ZExp1rW   rX   ZHalfZImaginaryUnitZInfinityZNaNZNegativeInfinityZNegativeOneZOneZPiZZeror5   r5   r5   r6   test_SingletonsR   s   r[   c                   C      t tdd d S )N   z
Integer(4))r7   r   r5   r5   r5   r6   test_Integerd      r^   c                   C   s   t ttdgd d S )Nr]   z[Symbol('x'), Integer(4)])r7   r?   r   r5   r5   r5   r6   	test_listh      r`   c                  C   sz   t dftdffD ]2\} }t| td dgttt ggd|  t|  d|  t| td dgttt ggd|  qd S )NZMutableDenseMatrixr   rB   zM%s([[Symbol('x'), Integer(1)], [Symbol('y'), Add(Symbol('x'), Symbol('y'))]])z%s([]))r	   r   r7   r?   rH   )clsnamer5   r5   r6   test_Matrixl   s   (rd   c                   C   s4   t tddd t tddd t tddd d S )Nr      zMutableDenseMatrix(0, 3, [])r]   zMutableDenseMatrix(4, 0, [])zMutableDenseMatrix([]))r7   r   r5   r5   r5   r6   test_empty_Matrixv   s   rf   c                   C   s$   t tddd t tddd d S )NrB   re   zRational(1, 3)zRational(-1, 3))r7   r   r5   r5   r5   r6   test_Rational|      rh   c                   C   s   t tdddd t tdddd t tdd	dd
 t tdddd t tdddd t tdddd t tdddd
 t tdddd t tddd d S )Nz1.23re   )ZdpszFloat('1.22998', precision=13)z
1.23456789	   z$Float('1.23456788994', precision=33)z1.234567890123456789   z.Float('1.234567890123456789013', precision=66)z0.60038617995049726   z*Float('0.60038617995049726', precision=53)   )Z	precision!   B   5   )r7   r   r5   r5   r5   r6   
test_Float   s*   
rq   c                   C   s*   t td t td t tdddd d S )NSymbol('x')zSymbol('y')r?   T)negativezSymbol('x', negative=True))r7   r?   rH   r   r5   r5   r5   r6   test_Symbol   s   

rt   c                  C   sD   t dddd} d}d}t| ||fv sJ tt| t| ks J d S )Nr?   r   rB   )rs   integerz)Symbol('x', integer=True, negative=False)z)Symbol('x', negative=False, integer=True))r   r#   r1   r.   )r?   s1s2r5   r5   r6   test_Symbol_two_assumptions   s
   rx   c                   C   sZ   t tdd t tdddd t tdddd t tdddd t tdd	dd d S )
Nr?   rr   F)ZcommutativezSymbol('x', commutative=False)r   TzSymbol('x', commutative=True)rB   )r7   r   r5   r5   r5   r6   ,test_Symbol_no_special_commutative_treatment   s
   ry   c                   C   s   t tdddd d S )Nr?   T)evenzWild('x', even=True))r7   r   r5   r5   r5   r6   	test_Wild   ra   r{   c                  C   s    t d} t| dt| j  d S )NdzDummy('d', dummy_index=%s))r   r7   strdummy_index)r|   r5   r5   r6   
test_Dummy   s   r   c                  C   sT   t ddd} | tt| ksJ dt| j }dt| j }t| ||fv s(J d S )Nr|   T)Znonzeroz(Dummy('d', dummy_index=%s, nonzero=True)z(Dummy('d', nonzero=True, dummy_index=%s))r   r1   r#   r}   r~   )r|   rv   rw   r5   r5   r6   test_Dummy_assumption   s
   r   c                  C   s2   t ddd} |  }t|dt|j ksJ d S )NnTru   zDummy('n', dummy_index=%s))r   Zas_dummyr#   r}   r~   )r   r|   r5   r5   r6   test_Dummy_from_Symbol   s
   r   c                   C   s   t tfd t ttfd d S )Nz(Symbol('x'),)z(Symbol('x'), Symbol('y')))r7   r?   rH   r5   r5   r5   r6   
test_tuple   s   r   c                   C   r\   )NwzWildFunction('w'))r7   r   r5   r5   r5   r6   test_WildFunction   r_   r   c                   C   s   t tdd  d S )Nc                   S   s   t tddS )NZgarbage)method)r#   r?   r5   r5   r5   r6   <lambda>   s    ztest_settins.<locals>.<lambda>)r   	TypeErrorr5   r5   r5   r6   test_settins   r_   r   c                   C   sV   t dtd  t d tdtd  t dddksJ ttdddd	dd
ks)J d S )Nre   z:Mul(Integer(3), Pow(Symbol('x'), Integer(3)), Symbol('y'))rD   rC   z:Mul(Integer(3), Symbol('y'), Pow(Symbol('x'), Integer(3)))z(x+4)*2*x*7FrE   rF   zFMul(Add(Symbol('x'), Integer(4)), Integer(2), Symbol('x'), Integer(7))rG   r5   r5   r5   r6   test_Mul   s     r   c                  C   s2   t td} t| d t tdd} t| d d S )NrA   zJAlgebraicNumber(Pow(Integer(2), Rational(1, 2)), [Integer(1), Integer(0)])re   zKAlgebraicNumber(Pow(Integer(-2), Rational(1, 3)), [Integer(1), Integer(0)]))r   r   r7   r   )ar5   r5   r6   test_AlgebraicNumber   s   
r   c                   C   \   t tdttd dksJ t tdttd dksJ t tdtd td dks,J d S )	Nr?   r   z!PolyRing((Symbol('x'),), ZZ, lex)r-   z/PolyRing((Symbol('x'), Symbol('y')), QQ, grlex)x,y,ztz=PolyRing((Symbol('x'), Symbol('y'), Symbol('z')), ZZ[t], lex))r#   r$   r&   r(   r'   r)   r5   r5   r5   r6   test_PolyRing      $r   c                   C   r   )	Nr?   r   z"FracField((Symbol('x'),), ZZ, lex)r-   z0FracField((Symbol('x'), Symbol('y')), QQ, grlex)r   r   z>FracField((Symbol('x'), Symbol('y'), Symbol('z')), ZZ[t], lex))r#   r%   r&   r(   r'   r)   r5   r5   r5   r6   test_FracField   r   r   c                  C   s4   t dt\} }}td|d  | d dksJ d S )Nr-   re   rA   rB   zVPolyElement(PolyRing((Symbol('x'), Symbol('y')), ZZ, lex), [((2, 1), 3), ((0, 0), 1)]))r$   r&   r#   )r>   r?   rH   r5   r5   r6   test_PolyElement   s   $r   c                  C   s@   t dt\} }}td|d  | d ||d   dksJ d S )Nr-   re   rA   rB   ztFracElement(FracField((Symbol('x'), Symbol('y')), ZZ, lex), [((2, 1), 3), ((0, 0), 1)], [((1, 0), 1), ((0, 2), -1)]))r%   r&   r#   )Fr?   rH   r5   r5   r6   test_FracElement   s   0r   c                   C   s6   t ttdksJ t tjtttddksJ d S )Nz1FractionField(FracField((Symbol('x'),), QQ, lex))rC   z?FractionField(FracField((Symbol('x'), Symbol('y')), QQ, grlex)))r#   r'   
frac_fieldr?   rH   r)   r5   r5   r5   r6   test_FractionField   s   r   c                   C   sP   t ttdksJ t tt tdksJ t tttdks&J d S )Nz%GlobalPolynomialRing(ZZ, Symbol('x'))z(GlobalPolynomialRing(ZZ[x], Symbol('y'))zTGlobalPolynomialRing(FractionField(FracField((Symbol('x'),), QQ, lex)), Symbol('y')))r#   r&   old_poly_ringr?   rH   r'   r   r5   r5   r5   r6   test_PolynomialRingBase   s   r   c                   C   s<   t tddgtdksJ t ttddgdksJ d S )NrB   rA   zDMP([1, 2], ZZ)z;DMP([1, 2], ZZ, ring=GlobalPolynomialRing(ZZ, Symbol('x'))))r#   r+   r&   r   r?   r5   r5   r5   r6   test_DMP  s   r   c                   C   s&   t tttd d tdksJ d S )NrA   rB   z/FiniteExtension(Poly(x**2 + 1, x, domain='ZZ')))r#   r,   r*   r?   r5   r5   r5   r6   test_FiniteExtension  s   r   c                  C   s,   t ttd d t} t| jdksJ d S )NrA   rB   zuExtElem(DMP([1, 0], ZZ, ring=GlobalPolynomialRing(ZZ, Symbol('x'))), FiniteExtension(Poly(x**2 + 1, x, domain='ZZ'))))r,   r*   r?   r#   	generator)Ar5   r5   r6   test_ExtensionElement  s   r   c                   C   s$   t tdksJ t tdksJ d S )Nr   r   )r#   r   r   r5   r5   r5   r6   test_BooleanAtom  ri   r   c                   C      t tjd d S )NIntegers)r7   r   r   r5   r5   r5   r6   test_Integers     r   c                   C   r   )NNaturals)r7   r   r   r5   r5   r5   r6   test_Naturals  r   r   c                   C   r   )N	Naturals0)r7   r   r   r5   r5   r5   r6   test_Naturals0#  r   r   c                   C   r   )NReals)r7   r   r   r5   r5   r5   r6   
test_Reals'  r   r   c                  C   sN   t ddd} td| | }td| | }t|d t|| d t|| d d S )	Nr   Tr   r   BzLMatrixSymbol(Str('A'), Symbol('n', integer=True), Symbol('n', integer=True))zMatMul(MatrixSymbol(Str('A'), Symbol('n', integer=True), Symbol('n', integer=True)), MatrixSymbol(Str('B'), Symbol('n', integer=True), Symbol('n', integer=True)))zMatAdd(MatrixSymbol(Str('A'), Symbol('n', integer=True), Symbol('n', integer=True)), MatrixSymbol(Str('B'), Symbol('n', integer=True), Symbol('n', integer=True))))r   r   r7   )r   r   r   r5   r5   r6   test_matrix_expressions+  s   
r   c                   C   s   t tdddksJ d S )NrB   rA   zCycle(1, 2))r#   r   r5   r5   r5   r6   
test_Cycle4  s   r   c                  C   s   d} t tddd|  d S )Nz+from sympy.combinatorics import PermutationrB   rA   zPermutation(1, 2))r7   r   )r4   r5   r5   r6   test_Permutation<  s   r   c                  C   s   ddl m}  ddlm}m}m} i }| |dksJ ||i}| |dks&J ||||i}| |dv s4J |||ii}| |dksBJ d S )Nr   r"   )r?   rH   zz{}z{Symbol('x'): Symbol('y')})z4{Symbol('x'): Symbol('y'), Symbol('y'): Symbol('z')}z4{Symbol('y'): Symbol('z'), Symbol('x'): Symbol('y')}z){Symbol('x'): {Symbol('y'): Symbol('z')}})rL   r#   	sympy.abcr?   rH   r   )r#   r?   rH   r   r|   r5   r5   r6   	test_dict@  s   r   c                  C   sN   ddl m}  ddlm}m} t }| |dksJ ||h}| |dv s%J d S )Nr   r"   )r?   rH   zset())z{Symbol('x'), Symbol('y')}z{Symbol('y'), Symbol('x')})rL   r#   r   r?   rH   set)r#   r?   rH   sr5   r5   r6   test_setO  s   r   c                   C   r   )NzQ.even)r7   r   rz   r5   r5   r5   r6   test_PredicateW  r   r   c                   C   s   t ttdd d S )Nr   z%AppliedPredicate(Q.even, Symbol('z')))r7   r   rz   r   r5   r5   r5   r6   test_AppliedPredicateZ  s   r   )N)gtypingr   r   Zsympy.testing.pytestr   rL   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.combinatoricsr   r   Zsympy.core.symbolr   Zsympy.geometryr    r!   Zsympy.printingr#   Zsympy.polysr$   r%   r&   r'   r(   r)   r*   Zsympy.polys.polyclassesr+   Zsympy.polys.agca.extensionsr,   r?   rH   r.   r0   r7   r@   rI   rN   rP   rQ   rS   r[   r^   r`   rd   rf   rh   rq   rt   rx   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   r   r   r   r   r5   r5   r5   r6   <module>   sx    h$

	
			