U
    ZÊ¹jy¨  ã                   @   sü  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	 d dl
mZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
l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! d dl"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/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZPmQZQmRZR d dlSmTZT d dlUmVZV d dlWmXZX d dlYmZZZ d d l[m\Z\ d d!l]m^Z^ d d"l_m`Z` d d#lambZb d d$lcmdZdmeZemfZfmgZg d d%lhmiZimjZjmkZkmlZl d d&lmmnZn d d'lompZp d d(lqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZy d d)lzm{Z{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‰ d d+lŠm‹Z‹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–m—Z— d d/l˜m™Z™mšZšm›Z› d d0lœm�Z� e:d1ƒ\ZžZŸZ Z¡Z¢e7d2ƒZ£d3d4„ Z¤d5d6„ Z¥d7d8„ Z¦d9d:„ Z§d;d<„ Z¨d=d>„ Z©d?d@„ ZªdAdB„ Z«dCdD„ Z¬dEdF„ Z­dGdH„ Z®dIdJ„ Z¯dKdL„ Z°dMdN„ Z±dOdP„ Z²dQdR„ Z³dSdT„ Z´dUdV„ ZµdWdX„ Z¶dYdZ„ Z·d[d\„ Z¸d]d^„ Z¹d_d`„ Zºdadb„ Z»dcdd„ Z¼dedf„ Z½dgdh„ Z¾didj„ Z¿dkdl„ ZÀdmdn„ ZÁdodp„ ZÂdqdr„ ZÃdsdt„ ZÄdudv„ ZÅdwdx„ ZÆdydz„ ZÇd{d|„ ZÈd}d~„ ZÉdd€„ ZÊd�d‚„ ZËdƒd„„ ZÌd…d†„ ZÍd‡dˆ„ ZÎd‰dŠ„ ZÏd‹dŒ„ ZÐd�dŽ„ ZÑd�d�„ ZÒd‘d’„ ZÓd“d”„ ZÔd•d–„ ZÕd—d˜„ ZÖd™dš„ Z×d›dœ„ ZØd�dž„ ZÙdŸd „ ZÚd¡d¢„ ZÛd£d¤„ ZÜd¥d¦„ ZÝd§d¨„ ZÞd©dª„ Zßd«d¬„ Zàd­d®„ Zád¯d°„ Zâd±d²„ Zãd³d´„ Zädµd¶„ Zåd·d¸„ Zæd¹dº„ Zçd»d¼„ Zèd½d¾„ Zéd¿dÀ„ ZêdÁdÂ„ ZëdÃdÄ„ ZìdÅdÆ„ ZídÇdÈ„ ZîdÉdÊ„ ZïdËdÌ„ ZðdÍdÎ„ ZñdÏdÐ„ ZòdÑdÒ„ ZódÓdÔ„ ZôdÕdÖ„ Zõd×dØ„ ZödÙdÚ„ Z÷dÛdÜ„ ZødÝdÞ„ Zùdßdà„ Zúdádâ„ Zûdãdä„ Züdådæ„ Zýdçdè„ Zþdédê„ Zÿdëdì„ �Z dídî„ �Zdïdð„ �Zdñdò„ �Zdódô„ �Zdõdö„ �Zd÷dø„ �Zdùdú„ �Zdûdü„ �Zdýdþ„ �Z	dÿ�d „ �Z
�d�d„ �Z�d�d„ �Z�d�d„ �Z�d�d„ �Z�d	�d
„ �Z�d�d„ �Z�dS (  é    )ÚMatAdd)Ú
Quaternion)ÚQ)ÚAccumBounds)Ú	Partition)ÚSumÚ	summation)ÚAdd)ÚDictÚTuple)ÚUnevaluatedExprÚExpr)Ú
DerivativeÚFunctionÚLambdaÚSubsÚWildFunction)ÚMul)ÚCatalanÚ
EulerGammaÚGoldenRatioÚTribonacciConstant)	ÚEÚFloatÚIÚIntegerÚRationalÚnanÚooÚpiÚzoo)Ú_exp_is_pow)ÚPow)ÚEqÚRelÚNe)ÚS)ÚDummyÚSymbolÚWildÚsymbols)Ú	factorialÚ
factorial2Úsubfactorial)ÚAbs)Úexp)Úsqrt)ÚcosÚsin)Ú	Heaviside)Úzeta)ÚIntegral)Ú
EquivalentÚfalseÚtrueÚXor)ÚMatrix)ÚMatrixSymbol)ÚIdentity)ÚMatrixSlice)ÚSparseMatrix)Úfactor)ÚLimit)ÚO)Ú
ComplementÚ	FiniteSetÚIntervalÚSymmetricDifference)Ú
CovarianceÚExpectationÚProbabilityÚVariance)ÚRandomSymbol)Úimport_module)ÚTransferFunctionÚSeriesÚParallelÚFeedbackÚTransferFunctionMatrixÚ
MIMOSeriesÚMIMOParallelÚMIMOFeedback)ÚsecondÚjoule)ÚPolyÚrootofÚRootSumÚgroebnerÚringÚfieldÚZZÚQQÚZZ_IÚQQ_IÚlexÚgrlex)ÚPointÚCircleÚPolygonÚEllipseÚTriangle)Ú	NDimArray)ÚArraySymbolÚArrayElement)ÚraisesÚwarns_deprecated_sympy)ÚsstrÚsstrreprÚ
StrPrinter)ÚTrz	x,y,z,w,tÚdc                  C   sL   G dd„ dt ƒ} t| tƒƒdks$t‚G dd„ dt ƒ} t| tƒƒdksHt‚d S )Nc                   @   s   e Zd Zdd„ ZdS )útest_printmethod.<locals>.Rc                 S   s   d|  | jd ¡ S )Nzfoo(%s)r   )Z_printÚargs©ÚselfÚprinter© rv   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_str.pyÚ	_sympystr<   s    ú%test_printmethod.<locals>.R._sympystrN©Ú__name__Ú
__module__Ú__qualname__rx   rv   rv   rv   rw   ÚR;   s   r~   zfoo(x)c                   @   s   e Zd Zdd„ ZdS )rq   c                 S   s   dS )NÚfoorv   rs   rv   rv   rw   rx   A   s    ry   Nrz   rv   rv   rv   rw   r~   @   s   r   )r.   rl   ÚxÚAssertionError)r~   rv   rv   rw   Útest_printmethod:   s    r‚   c                   C   sL   t ttƒƒdkst‚t ttddƒƒƒdks.t‚t ttddƒƒƒdksHt‚d S )NzAbs(x)é   é   ú1/6éÿÿÿÿ)Ústrr.   r€   r�   r   rv   rv   rv   rw   Útest_AbsF   s    rˆ   c                   C   sx  t tt ƒdkst‚t td ƒdks(t‚t ttd  ƒdks@t‚t tdddd�ƒd	ksZt‚t tddddd�ƒd
ksvt‚t dt ƒdksŠt‚t dt t tt  td  td  ƒdksºt‚t dt td d  td d  ƒdksæt‚t dt dtd   d dt  ƒdk�st‚t tt ƒdk�s*t‚t dt ƒdk�s@t‚t td ƒdk�sVt‚t tt t t ƒdk�stt‚t tttd  t t  ƒdk�sšt‚t tdt t t  ƒdk�s¼t‚t ttƒ tdd¡ƒdk�sÜt‚t ttt tdd�tt tdd�dd�ƒdk�st‚t ttt t dd�t dd�ƒdk�s<t‚t tttt t dd�t dd�t	 dd�ƒdk�stt‚d S )Nzx + yrƒ   úx + 1é   zx**2 + xr   F©Úevaluatez0 + 1z	0 + 0 + 1ç      ð?ú1.0*xé   zx**2 + x*y + x + y**2 + y + 5é   zx**3/3 + x**2/2 + x + 1é   z-7*x**2 + 2*x + 3*y + 2zx - yz2 - xzx - 2z-w + x - y - zz-w*y**2*z**2 + xz-x*y**2 + xé   z^x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 - x**11/39916800 + x**13/6227020800 + O(x**15)z(-w + x) + (-y + z)z-z + (-x - y)z-t + (-z + (-x - y)))
r‡   r€   Úyr�   r	   ÚzÚwr2   ZseriesÚtrv   rv   rv   rw   Útest_AddL   s&    0,.&" 4,r—   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_Catalanb   s    r˜   c                   C   s   t tƒdkst‚d S )Nr    )r‡   r    r�   rv   rv   rv   rw   Útest_ComplexInfinityf   s    r™   c                   C   s\   t tttƒƒdkst‚t ttd tdd�ƒdks4t‚t ttd t ttdd�ƒdksXt‚d S )NzDerivative(x, y)rŠ   Fr‹   zDerivative(x**2, x)zDerivative(x**2/y, x, y))r‡   r   r€   r“   r�   rv   rv   rv   rw   Útest_Derivativej   s    
   ÿÿrš   c                   C   sr   t ddt iƒtddt iƒ  kr,dks2n t‚t td tt dœƒdksPt‚ttd tt dœƒdksnt‚d S ©Nrƒ   z
{1: x + 1}rŠ   ©rƒ   rŠ   )ú{1: x**2, 2: x*y}z{2: x*y, 1: x**2}r�   ©r‡   r€   rl   r�   r“   rv   rv   rv   rw   Ú	test_dictq   s    2rŸ   c                   C   s~   t tddt iƒƒtddt iƒ  kr0dks6n t‚t ttd tt dœƒƒdksXt‚tttd tt dœƒƒdkszt‚d S r›   )r‡   r
   r€   rl   r�   r“   rv   rv   rv   rw   Ú	test_Dictw   s    6"r    c                   C   s(   t tƒdkst‚t tt ƒdks$t‚d S )NZ_dz_d + x)r‡   rp   r�   r€   rv   rv   rv   rw   Ú
test_Dummy~   s    r¡   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_EulerGammaƒ   s    r¢   c                	   C   s<   t tƒdkst‚tdƒ� t ttƒƒdks.t‚W 5 Q R X d S )Nr   TzE**x)r‡   r   r�   r!   r/   r€   rv   rv   rv   rw   Útest_Exp‡   s    
r£   c                  C   s  t ddd�} ttdƒƒdks t‚ttdƒƒdks4t‚ttdƒƒd	ksHt‚tt| ƒƒd
ks\t‚ttd|  ƒƒdkstt‚ttt| ƒƒƒdksŒt‚ttt| ƒƒƒdks¤t‚ttt| ƒƒƒdks¼t‚ttt| ƒƒƒdksÔt‚ttdƒƒdksèt‚tt| ƒƒdksüt‚ttd|  ƒƒdk�st‚d S )NÚnT©Úintegeréþÿÿÿr    r   Ú1r‘   Z5040zfactorial(n)rŠ   zfactorial(2*n)zfactorial(factorial(n))zfactorial(factorial2(n))zfactorial2(factorial(n))zfactorial2(factorial2(n))r�   Ú2zsubfactorial(n)zsubfactorial(2*n))r(   r‡   r+   r�   r,   r-   )r¤   rv   rv   rw   Útest_factorial�   s    rª   c                  C   sL   t dƒ} | tƒ}tdƒ}t| ƒdks(t‚t|ƒdks8t‚t|ƒdksHt‚d S )NÚfr•   zf(x)Úw_)r   r€   r   r‡   r�   )r«   Zfxr•   rv   rv   rw   Útest_Function�   s    r­   c                   C   s   t tddƒƒdkst‚t ttddƒdƒƒdks2t‚t ttddƒddƒƒdksPt‚t ttddƒtd	d
ƒtddƒƒƒdkszt‚t ttddƒtddƒtddƒtdd	ƒƒƒdks¬t‚t ttddƒtddƒtddƒƒdd�dksÚt‚t ttddƒddƒdd�dksüt‚d S )Nr   zPoint2D(0, 0)r�   zCircle(Point2D(0, 0), 3)rƒ   rŠ   é   zEllipse(Point2D(1, 2), 3, 4)r‘   é   r†   z6Triangle(Point2D(1, 1), Point2D(7, 8), Point2D(0, -1))r�   r„   r§   éýÿÿÿzEPolygon(Point2D(5, 6), Point2D(-2, -3), Point2D(0, 0), Point2D(4, 7))T©Zsympy_integerszGTriangle(Point2D(S(0), S(0)), Point2D(S(1), S(0)), Point2D(S(0), S(1)))z(Ellipse(Point2D(S(1), S(2)), S(3), S(4)))rl   rb   r�   rc   re   rf   rd   rv   rv   rv   rw   Útest_Geometry¦   s     ÿ(ÿ$ÿÿr²   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_GoldenRatio´   s    r³   c                   C   sH   t ttƒƒt tttjƒƒ  kr(dks.n t‚t ttdƒƒdksDt‚d S )NzHeaviside(x)rƒ   zHeaviside(x, 1))r‡   r3   r€   r&   ÚHalfr�   rv   rv   rv   rw   Útest_Heaviside¸   s    .rµ   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_TribonacciConstant½   s    r¶   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_ImaginaryUnitÁ   s    r·   c                   C   s(   t tƒdkst‚t tt ƒdks$t‚d S )Nr   úoo*I)r‡   r   r�   r   rv   rv   rv   rw   Útest_InfinityÅ   s    r¹   c                   C   sh   t tdƒƒdkst‚t tdƒƒdks(t‚t tdƒƒdks<t‚t tdƒƒdksPt‚t td	ƒƒd
ksdt‚d S )Nr†   ú-1rƒ   r¨   r°   z-3r   Ú0é   Z25)r‡   r   r�   rv   rv   rv   rw   Útest_IntegerÊ   s
    r½   c                   C   s>   t tttƒtƒƒdkst‚t tttƒtddfƒƒdks:t‚d S )NzIntegral(sin(x), y)r   rƒ   zIntegral(sin(x), (y, 0, 1)))r‡   r5   r2   r€   r“   r�   rv   rv   rv   rw   Útest_IntegralÒ   s    r¾   c               	   C   s|   t jddt jf} tt| ƒƒD ]Z}t|d t| ƒƒD ]B}dD ]8}dD ].}t| | | | ||ƒ}t t|ƒƒ|ksBt‚qBq:q2qd S )Nrƒ   rŠ   )TF)r&   ÚNegativeInfinityÚInfinityÚrangeÚlenrD   r‡   r�   )r¤   ÚiÚjÚlÚrZivalrv   rv   rw   Útest_Interval×   s    rÇ   c                  C   s<   t ddd�} ttd| ƒƒdks"t‚ttddƒƒdks8t‚d S )NÚaT©Úrealr   zAccumBounds(0, a)rƒ   zAccumBounds(0, 1))r(   r‡   r   r�   )rÈ   rv   rv   rw   Útest_AccumBoundsá   s    rË   c                   C   sˆ   t tttd ƒƒdkst‚t tddƒƒdks0t‚t tdtƒƒdksFt‚t tttftt ƒƒdksdt‚t tttfftt ƒƒdks„t‚d S )	NrŠ   zLambda(_d, _d**2)rv   rƒ   zLambda((), 1)zLambda((), x)zLambda((x, y), x + y)zLambda(((x, y),), x + y))r‡   r   rp   r�   r€   r“   rv   rv   rv   rw   Útest_Lambdaç   s
    rÌ   c                   C   sd   t tttƒt ttƒƒdks t‚t tdt tdƒƒdks<t‚t tttƒt ttdd�ƒdks`t‚d S )NzLimit(sin(x)/x, x, y, dir='+')rƒ   r   zLimit(1/x, x, 0, dir='+')ú-)ÚdirzLimit(sin(x)/x, x, y, dir='-'))r‡   r@   r2   r€   r“   r�   rv   rv   rv   rw   Ú
test_Limitð   s     ÿÿrÏ   c                   C   sª   t tgƒttgƒ  kr dks&n t‚t td tt d gƒttd tt d gƒ  krbdkshn t‚t td tt ggƒttd tt ggƒ  kr dks¦n t‚d S )Nz[x]rŠ   rƒ   z[x**2, x*y + 1]z[x**2, [x + y]]rž   rv   rv   rv   rw   Ú	test_list÷   s    &BrÐ   c                  C   sø   t td dgttt ggƒ} t| ƒdks,t‚t| ƒdks<t‚t dggƒ} t| ƒt| ƒ  krddksjn t‚t ddggƒ} t| ƒt| ƒ  kr”dksšn t‚t ƒ } t| ƒt| ƒ  kr¼dksÂn t‚t ddd	d
„ ƒ} t| ƒt| ƒ  krîdksôn t‚d S )Nrƒ   úMatrix([[x, 1], [y, x + y]])ú!Matrix([
[x,     1],
[y, x + y]])zMatrix([[1]])rŠ   zMatrix([[1, 2]])zMatrix(0, 0, [])r   c                 S   s   dS )Nr   rv   )rÃ   rÄ   rv   rv   rw   Ú<lambda>  ó    z!test_Matrix_str.<locals>.<lambda>zMatrix(0, 1, []))r:   r€   r“   r‡   r�   rl   ©ÚMrv   rv   rw   Útest_Matrix_strý   s    """r×   c                  C   sÜ  t tt ƒdkst‚t tt ƒdks(t‚t tt t ƒdks@t‚t td td  ƒdks\t‚t dt d ƒdkstt‚t d	t d ƒd
ksŒt‚t dt ƒdks t‚t dt ƒdks´t‚t tdddd�ƒdksÎt‚t tdddd�ƒdksèt‚t tdddd�ƒdk�st‚t tddddd�ƒdk�s"t‚t tdddd�ƒdk�s>t‚t tdtjdd�ƒdk�s\t‚t tddtjdd�ƒdk�s|t‚t tddddtdd�ƒdk�sžt‚t tdddd�ƒdk�sºt‚t tdddd�ƒdk�sÖt‚t tdddddttdd�ƒdk�süt‚t tddddt dttdd�ƒdk�s&t‚t ttddƒtd d!ƒdd�ƒd"k�sNt‚t td	tt	tttdd�ddd�dd�ƒd#k�s€t‚t ttt	dt ddd�dd�ƒd$k�sªt‚ddl
m}  | dƒ�D t tt	tdƒtdƒƒttdƒttdƒtdƒƒƒƒƒd%k�sþt‚W 5 Q R X G d&d'„ d'tƒ}G d(d)„ d)tƒ}|ƒ }|ƒ }t tdƒ| ƒd*k�sNt‚t |tdƒ ƒd*k�sht‚t |td+ƒ ƒd,k�s‚t‚t |tdƒ ƒd-k�sœt‚t |tdƒ | ƒd.k�sºt‚t |tdƒ | ƒd.k�sØt‚d S )/Nzx/yzy/xzx/(y*z)rƒ   rŠ   z(x + 1)/(y + 2)r�   z2*x/3r§   z-2*x/3ç      ð¿z-1.0*xr�   rŽ   r   Fr‹   z0*1z1*0z1*1z1*1*1z1*2z1*(1/2)z	1*1*(1/2)z	1*1*2*3*xr†   z1*(-1)z-1*1r®   z4*3*2*1*0*y*xz4*3*2*(z + 1)*0*y*xr�   r‘   z(2/3)*(5/7)z
-2*x/(y*y)zx/(1/y)z(-1 - 1*1)/2c                   @   s   e Zd ZdZdS )ztest_Mul.<locals>.CustomClass1TN©r{   r|   r}   Úis_commutativerv   rv   rv   rw   ÚCustomClass1,  s   rÛ   c                   @   s   e Zd ZdZdS )ztest_Mul.<locals>.CustomClass2TNrÙ   rv   rv   rv   rw   ÚCustomClass2/  s   rÜ   z2*CustomClass1()z1.5z1.5*CustomClass1()z2*CustomClass2()z2*CustomClass1()*CustomClass2())r‡   r€   r“   r�   r”   r   r&   r´   r   r"   Úsympy.core.parametersrŒ   r   r	   r   r   )rŒ   rÛ   rÜ   Zcc1Zcc2rv   rv   rw   Útest_Mul  sP     "&*(ÿÿ
*
HrÞ   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_NaN;  s    rß   c                   C   s   t t ƒdkst‚d S )Nz-oo)r‡   r   r�   rv   rv   rv   rw   Útest_NegativeInfinity?  s    rà   c                   C   sâ   t ttƒƒdkst‚t ttd ƒƒdks,t‚t ttt ƒƒdksDt‚t tttƒƒdksZt‚t tttdfƒƒdkstt‚t ttttfƒƒdksŽt‚t ttttƒƒdks¦t‚t ttttƒƒdks¾t‚t ttttfttfƒƒdksÞt‚d S )	NzO(x)rŠ   zO(x**2)zO(x*y, x, y)r   zO(x, (x, oo))z
O(x, x, y)zO(x, (x, oo), (y, oo)))r‡   rA   r€   r�   r“   r   rv   rv   rv   rw   Ú
test_OrderB  s    rá   c                  C   s  ddl m} m} |ƒ df|dƒdf|ddƒdf|ddƒdƒd	d
ƒdƒdf|ddƒddƒddƒdffD ]\}}t|ƒ|ksdt‚qd| g ƒdf| g dd�df| g dd�df| g dd�df| dddgƒdf| ddddddgƒdf| ddddddgdd�dffD ]\}}t|dd�|ksöt‚qö| g ƒdf| g dd�df| g dd�df| g dd�df| dddgƒdf| ddddddgƒdf| ddddddgdd�df| ddddddgdd�d ffD ]\}}t|ƒ|k�s¦t‚�q¦tƒ �4 | j}d| _t| dddgƒƒdk�sôt‚|| _W 5 Q R X d S )!Nr   )ÚPermutationÚCyclez()rŠ   z(2)rƒ   z(1 2)r�   r„   r‘   é
   z(1 2)(6 7)(10)r�   r®   z(1 2)(4)zPermutation([]))ÚsizezPermutation([0])zPermutation([0, 1])zPermutation([], size=10)zPermutation([1, 0, 2])zPermutation([1, 0], size=6)zPermutation([1, 0], size=10)F)Zperm_cyclicz(0)z(1)z(9)z(2)(0 1)z(5)(0 1)z(9)(0 1)z(9)(2 3))Zsympy.combinatoricsrâ   rã   rl   r�   rk   Zprint_cyclic)râ   rã   ÚpÚsZold_print_cyclicrv   rv   rw   Útest_Permutation_CycleN  s�    ÿÿÿÿÿ÷ÿ
ÿ
ÿ
ÿÿÿÿóÿ
ÿ
ÿ
ÿÿÿÿÿñrè   c                   C   s   t tƒdkst‚d S )Nr   )r‡   r   r�   rv   rv   rv   rw   Útest_Pi�  s    ré   c                   C   s&  t tdtƒƒdkst‚t tdtƒƒdks,t‚t tttƒƒdksBt‚t tdt d tƒƒdks`t‚t tdt d tƒƒdks~t‚t td	tƒƒd
ks”t‚t tt tƒƒdks¬t‚t tdt d tƒƒdksÊt‚t tdt d tƒƒdksèt‚t ttd tƒƒdk�st‚t tdt td  tƒƒdk�s(t‚t tddt  dt ƒƒdk�sLt‚t ttd t ƒƒdk�sjt‚t ttt d tt dd�ƒdk�s’t‚t ttd d td dd�ƒdk�sºt‚t ttd d t tƒƒdk�sÞt‚t ttd d t tƒƒdk�st‚t ttd tt  tƒƒdk�s&t‚t ttd tt  tƒƒdk�sJt‚t tt t t tt  d tttƒƒdk�s|t‚t tt td  td  t dt td   dt t  d tttƒƒd k�sÎt‚t ttd d tdd!�ƒd"k�sòt‚t tdtd  dt  d# td$d!�ƒd%k�s"t‚d S )&Nr   zPoly(0, x, domain='ZZ')rƒ   zPoly(1, x, domain='ZZ')zPoly(x, x, domain='ZZ')rŠ   zPoly(2*x + 1, x, domain='ZZ')zPoly(2*x - 1, x, domain='ZZ')r†   zPoly(-1, x, domain='ZZ')zPoly(-x, x, domain='ZZ')r§   zPoly(-2*x + 1, x, domain='ZZ')zPoly(-2*x - 1, x, domain='ZZ')zPoly(x - 1, x, domain='ZZ')r�   z Poly(x**5 + 2*x, x, domain='ZZ')r�   z"Poly((3**x)**2, 3**x, domain='ZZ')z)Poly(((x**2)**x), (x**2)**x, domain='ZZ')F)Úexpandz$Poly((x + y)**3, x + y, domain='ZZ')z$Poly((x - 1)**2, x - 1, domain='ZZ')z%Poly(x**2 + y + 1, x, domain='ZZ[y]')z%Poly(x**2 + y - 1, x, domain='ZZ[y]')z"Poly(x**2 + I*x, x, domain='ZZ_I')z"Poly(x**2 - I*x, x, domain='ZZ_I')z,Poly(-x*y*z + x*y - 1, x, y, z, domain='ZZ')é   r‘   zIPoly(-w*x**21*y**7*z - 2*x*z + (w + 1)*z**3 + 1, x, y, z, domain='ZZ[w]'))ÚmoduluszPoly(x**2 + 1, x, modulus=2)r®   é   z%Poly(2*x**2 + 3*x + 4, x, modulus=17))r‡   rV   r€   r�   r“   r   r”   r•   rv   rv   rv   rw   Ú	test_Poly“  sN    $$ÿ
ÿ
ÿÿ
ÿÿ
$$&ÿ
Fÿ
$rî   c                   C   s\   t tdttƒd ƒdkst‚t tdttƒd ƒdks8t‚t tdtd tƒd ƒdksXt‚d S )	Nr€   r   z+Polynomial ring in x over ZZ with lex orderúx,yz0Polynomial ring in x, y over QQ with grlex orderúx,y,zr–   z4Polynomial ring in x, y, z over ZZ[t] with lex order)r‡   rZ   r\   r`   r�   r]   ra   rv   rv   rv   rw   Útest_PolyRing½  s    rñ   c                   C   s\   t tdttƒd ƒdkst‚t tdttƒd ƒdks8t‚t tdtd tƒd ƒdksXt‚d S )	Nr€   r   z3Rational function field in x over ZZ with lex orderrï   z8Rational function field in x, y over QQ with grlex orderrð   r–   z<Rational function field in x, y, z over ZZ[t] with lex order)r‡   r[   r\   r`   r�   r]   ra   rv   rv   rv   rw   Útest_FracFieldÃ  s    rò   c            	      C   s4  t dtƒ\} }}t d| ƒ\}}}}t dtƒ\}}t|| ƒdksDt‚t|d ƒdksXt‚t|d ƒdkslt‚t|d ƒd	ks€t‚t|d
 ƒdks”t‚t|tddƒ ƒdks®t‚t|d d| |  d |d  | | d ƒdksæt‚t|d d| |  d |d  | |d |  ƒdk�s$t‚t|d d| |  d |d  | |d |  d ƒdk�sft‚t|d  d| |  d |d  | |d |  d ƒdk�sªt‚t|d | d  | d| |  d ƒdk�sÞt‚t|d | d  | d| |  d ƒdk�st‚tdt | d ƒdk�s0t‚d S )Núu,vrð   r€   r»   rƒ   úx - 1r‰   rŠ   úx**2r§   úx**(-2)zx**(1/2)r�   z!(u**2 + 3*u*v + 1)*x**2*y + u + 1z%(u**2 + 3*u*v + 1)*x**2*y + (u + 1)*xz)(u**2 + 3*u*v + 1)*x**2*y + (u + 1)*x + 1z*-(u**2 - 3*u*v + 1)*x**2*y - (u + 1)*x - 1z-(v**2 + v + 1)*x + 3*u*v + 1z-(v**2 + v + 1)*x - 3*u*v + 1z(1 + 1*I)*x + (2 + 0*I))rZ   r\   r^   r‡   r�   r]   r   )	ZRuvÚuÚvZRxyzr€   r“   r”   ÚRx_zziÚxzrv   rv   rw   Útest_PolyElementÉ  s     8>BD44rû   c                  C   sD  t dtƒ\} }}t d| ƒ\}}}}}t dtƒ\}}	tddƒ}
t|| ƒdksPt‚t|d ƒdksdt‚t|d ƒdksxt‚t|d	 ƒd
ksŒt‚t|| ƒdks t‚t|| | ƒdks¸t‚t|||  ƒdksÐt‚t|| ||  ƒdksìt‚t|d | ƒdk�st‚t|d | ƒdk�s t‚t| d | ƒdk�s<t‚t|d ||  ƒdk�sZt‚t| |d  ƒdk�svt‚t|| |d  ƒdk�s”t‚t|d | | d |d | d  ƒdk�sÆt‚t|d | | d |d | || |  d  ƒdk�st‚td|
 |	 ƒdk�st‚td|
 |	 |
 |	 ƒdk�s@t‚d S )Nró   zx,y,z,tr€   r   rƒ   r»   rô   r‰   r�   zx/3zx/zzx*y/zzx/(z*t)z	x*y/(z*t)z	(x - 1)/yz	(x + 1)/yz
(-x - 1)/yz(x + 1)/(y*z)z
-y/(x + 1)zy*z/(x + 1)z!((u + 1)*x*y + 1)/((v - 1)*z - 1)z)((u + 1)*x*y + 1)/((v - 1)*z - u*v*t - 1)z(1 + 1*I)/xz((1 + 1*I)*x + (0 + -1*I))/x)r[   r\   r_   r‡   r�   )ZFuvr÷   rø   ZFxyztr€   r“   r”   r–   rù   rú   rÃ   rv   rv   rw   Útest_FracElementà  s,    
2>rü   c                   C   sÊ   t tddƒƒdkst‚t tddƒƒdks,t‚t tddƒƒdksBt‚t tddƒƒdksXt‚t tddƒƒd	ksnt‚t tdd
ƒƒdks„t‚t tddƒƒdksšt‚t tddƒƒdks°t‚t tdd
ƒƒdksÆt‚d S )Nrƒ   r   r¨   r†   rº   r   z-IrŠ   z2*Ir§   z-2*Iz1 + Iz-1 - Iz-1 - 2*I)r‡   r^   r�   rv   rv   rv   rw   Útest_GaussianIntegerþ  s    rý   c                   C   st   t tddƒƒdkst‚t ttddƒdƒƒdks2t‚t tdtddƒƒƒdksNt‚t ttddƒtddƒƒƒd	kspt‚d S )
Nrƒ   r   r¨   rŠ   r�   z2/3z2*I/3r§   z1/2 - 2*I/3)r‡   r_   r�   r]   rv   rv   rv   rw   Útest_GaussianRational
  s    rþ   c                   C   s*  t td ƒdkst‚t td ƒdks(t‚t td ƒdks<t‚t tt d ƒdksTt‚t tt d ƒdkslt‚t tt d ƒd	ks„t‚t tt d
t  ƒdks t‚t ttd
dƒ ƒdksºt‚t d
ttd
dƒ  ƒdksØt‚t tttƒƒƒdksðt‚t td ƒdk�st‚t ttdƒddd�ƒdk�s&t‚d S )Nr†   z1/xr§   rö   rŠ   rõ   z	1/(x + y)z(x + y)**(-2)z
(x + y)**2rƒ   z(x + y)**(x + 1)r�   zx**(1/3)z	x**(-1/3)zx**(1/4)rØ   z	x**(-1.0)Fr‹   z	2**(-1.0))r‡   r€   r�   r“   r   r0   r"   r&   rv   rv   rv   rw   Útest_Pow  s    rÿ   c                   C   s¨   t ttƒƒdkst‚t ttd ƒƒdks,t‚t dttƒ ƒdksDt‚t dttd ƒ ƒdks`t‚t tttƒ ƒdksxt‚t td ƒd	ksŒt‚t dtd  ƒd
ks¤t‚d S )Nzsqrt(x)rŠ   z
sqrt(x**2)rƒ   z	1/sqrt(x)z1/sqrt(x**2)z	y/sqrt(x)g      à?zx**0.5z	x**(-0.5))r‡   r0   r€   r�   r“   rv   rv   rv   rw   Ú	test_sqrt"  s    r   c                  C   sJ  t ddƒ} t ddƒ}t ddƒ}t ddƒ}t dƒ}t dƒ}t dƒ}t| | ƒdksTt‚t| | ƒdksht‚t|ƒd	ksxt‚t| | ƒd
ksŒt‚t| | ƒdks t‚t| | ƒdks´t‚t| | ƒdksÈt‚t|| ƒdksÜt‚t|| ƒdksðt‚t|| ƒdk�st‚t|| ƒdk�st‚t|| ƒdk�s2t‚t| | ƒdk�sHt‚t|| ƒdk�s^t‚t|| ƒdk�stt‚t|| ƒdk�sŠt‚tt dƒƒdk�s t‚tt dƒƒdk�s¶t‚tt dƒƒdk�sÌt‚ttdƒƒdk�sât‚ttdƒƒdk�søt‚ttddd�ƒdk�st‚ttddd�ƒd k�s,t‚ttd!dd�ƒd"k�sFt‚ttd#dd�ƒd$k�s`t‚ttd%dd�ƒd&k�szt‚ttt ddƒƒƒd	k�s–t‚ttt dd'ƒƒƒd(k�s²t‚td)d* t dd*ƒ ƒd+k�sÒt‚td)d* d t dd*ƒ ƒd+k�söt‚td)d* d t dd*ƒ ƒd+k�st‚td)d* d t dd*ƒ ƒd,k�s>t‚ttt d-d'ƒƒd ƒd.k�s^t‚tdtt d-d'ƒƒd  ƒd/k�s‚t‚ttdƒƒtdt ƒk�s t‚tdt dd0ƒ ƒd1k�s¼t‚tt ddƒd2d3�d4k�sØt‚td5ƒ}t|t ddƒ d2d3�d6k�s t‚tt|t ddƒƒd2d3�d7k�s"t‚tt	||t d8dƒƒd2d3�d9k�sFt‚d S ):Nrƒ   r®   r�   rŠ   éüÿÿÿr   r°   z1/12z1/2z1/8z3/4z7/12z-1/4z1/4z-1/6z-1/2r»   z1/64z1/27Ú27z-25z1.25z5/4z-2.6e-2z-13/500z25/7z-123/569z0.1[23])Zrationalz61/495z5.1[666]z31/6z	-5.1[666]z-31/6z0.[9]r¨   z-0.[9]rº   é$   r…   é{   r¼   Z123Z122éQ   z27/8z8/27l    d(	 z2**(1/10000000000)Tr±   zS(2)/3r€   zx**(S(2)/3)zEq(x, S(2)/3)r‘   zLimit(x, x, S(7)/2, dir='+'))
r   r‡   r�   r&   r0   r   rl   r(   r#   r@   )Zn1Zn2Zn3Zn4Zn5Zn7Zn8r€   rv   rv   rw   Útest_Rational,  sd    



 $$$ $ "ÿr  c                   C   s@  t tddd�ƒdkst‚t tddd�ƒdks0t‚t tddd�ƒdksHt‚t t d¡ƒdks^t‚t t d	¡ƒd
kstt‚t t d¡ƒdksŠt‚t t d¡ƒdks t‚t td td  d¡  d¡ƒdksÈt‚ttdƒdddd�dksät‚ttdƒdddd�dk�st‚ttdƒdddd�dk�s t‚ttdƒddd�dk�s<t‚d S )Nz1.23r�   )Zdpsz
1.23456789é	   z1.234567890123456789é   z3.14r’   z3.14159265358979éA   zB3.1415926535897932384626433832795028841971693993751058209749445923r†   z0.0i�  rƒ   rŠ   z-0.e+88Ú100Fr§   )Ú	full_precÚminÚmaxz1.0e+2z100.0z0.1z0.099)r  r  z9.90000000000000e-2)r‡   r   r�   r   ZevalfÚroundr¤   rl   rv   rv   rv   rw   Ú
test_Floate  s     
ÿÿ(r  c                   C   s�   t tttdƒƒdkst‚t ttt tdƒƒdks4t‚t tttdƒƒdksLt‚t ttdƒttdƒB ƒd	kslt‚t ttdƒttdƒ@ ƒd
ksŒt‚d S )Nú<zx < yz==zEq(x + y, y)z!=zNe(x, y)rƒ   rŠ   zEq(x, 1) | Eq(x, 2)zNe(x, 1) & Ne(x, 2))r‡   r$   r€   r“   r�   r#   r%   rv   rv   rv   rw   Útest_Relationalw  s
     r  c                   C   s4   t t tt¡ƒdkst‚t t tt¡ƒdks0t‚d S )Nz
Q.eq(x, y)z
Q.ne(x, y))r‡   r   Úeqr€   r“   r�   Únerv   rv   rv   rw   Útest_AppliedBinaryRelation  s    r  c                   C   s*   t ttd dt  d dƒƒdks&t‚d S )Nr�   rŠ   rƒ   r   zCRootOf(x**5 + 2*x - 1, 0))r‡   rW   r€   r�   rv   rv   rv   rw   Útest_CRootOf„  s    r  c                  C   s\   t d dt   d } tt| tttƒdd�ƒdks4t‚tt| tttd ƒdd�ƒdksXt‚d S )Nr�   rŠ   rƒ   F)ÚautozRootSum(x**5 + 2*x - 1)z(RootSum(x**5 + 2*x - 1, Lambda(z, z**2)))r€   r‡   rX   r   r”   r�   )r«   rv   rv   rw   Útest_RootSumˆ  s    ÿÿ ÿÿÿr  c                  C   s|   t tg ttƒƒdkst‚td dt  t d td dt  t d g} t t| dd�ƒdks`t‚t t| dd�ƒd	ksxt‚d S )
Nz1GroebnerBasis([], x, y, domain='ZZ', order='lex')rŠ   r�   rƒ   ra   )ÚorderzYGroebnerBasis([x**2 - x - 3*y + 1, y**2 - 2*x + y - 1], x, y, domain='ZZ', order='grlex')r`   zfGroebnerBasis([2*x - y**2 - y + 1, y**4 + 2*y**3 - 3*y**2 - 16*y + 7], x, y, domain='ZZ', order='lex'))r‡   rY   r€   r“   r�   )ÚFrv   rv   rw   Útest_GroebnerBasis‘  s      ÿÿ0ÿÿr  c                   C   sÐ   t tƒ ƒdkst‚t tƒ ƒdks$t‚t dhƒdks6t‚t tdgƒƒdksLt‚t dddhƒdksbt‚t tdddgƒƒd	ks|t‚t dttd td td
 hƒdks¢t‚t tdttd td td
 gƒƒdksÌt‚d S )Nzset()zfrozenset()rƒ   z{1}zfrozenset({1})rŠ   r�   z	{1, 2, 3}zfrozenset({1, 2, 3})r®   z{1, x, x**2, x**3, x**4}z#frozenset({1, x, x**2, x**3, x**4}))rl   Úsetr�   Ú	frozensetr€   rv   rv   rv   rw   Útest_setœ  s     ÿÿÿÿr  c                  C   s@   t td dgttt ggƒ} t| ƒdks,t‚t| ƒdks<t‚d S )Nrƒ   rÑ   rÒ   )r>   r€   r“   r‡   r�   rl   rÕ   rv   rv   rw   Útest_SparseMatrix«  s    r  c                   C   sT   t ttdt ƒtttfƒƒdks$t‚t tttd  tddftddfƒƒdksPt‚d S )Nr�   zSum(cos(3*z), (z, x, y))rŠ   r§   éûÿÿÿr�   z#Sum(x*y**2, (x, -2, 2), (y, -5, 5)))r‡   r   r1   r”   r€   r“   r�   r   rv   rv   rv   rw   Útest_Sum±  s    $"ÿr   c                  C   s8   t tƒdkst‚t tƒdks t‚t} t | ƒdks4t‚d S )Nr“   r€   )r‡   r“   r�   r€   ©Úerv   rv   rw   Útest_Symbol·  s    r#  c                   C   s®   t tfƒttfƒ  kr dks&n t‚t tt dt fƒttt dt fƒ  krZdks`n t‚t tt dt td ffƒttt dt td ffƒ  kr¤dksªn t‚d S )Nz(x,)rƒ   z(x + y, x + 1)rŠ   z(x + y, (x + 1, x**2))rž   rv   rv   rv   rw   Ú
test_tuple¾  s    &: ÿÿÿr$  c                  C   sª   t ttd  t td td  tƒ} t tt tt tƒ}t ttd  tt t  t tt tƒ}tt| |ƒƒdksvt‚tt| ||ƒƒdksŽt‚tt| | ƒƒdks¦t‚d S )NrŠ   r�   zXSeries(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y))z‰Series(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y), TransferFunction(t*x**2 - t**w*x + w, t - y, y))zYSeries(TransferFunction(-x + y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)))	rL   r€   r“   r”   r–   r•   r‡   rM   r�   ©Útf1Útf2Ztf3rv   rv   rw   Útest_Series_strÅ  s    $(ÿÿÿr(  c                  C   sz   t ttd  t td td  tƒ} t tt tt tƒ}t| |g|| ggƒ}t|| g| |ggƒ}tt||ƒƒdksvt‚d S )NrŠ   r�   aŽ  MIMOSeries(TransferFunctionMatrix(((TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y)), (TransferFunction(x - y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)))), TransferFunctionMatrix(((TransferFunction(x - y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)), (TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y))))))	rL   r€   r“   r”   r–   rP   r‡   rQ   r�   ©r&  r'  Ztfm_1Ztfm_2rv   rv   rw   Útest_MIMOSeries_strÑ  s    $ÿr*  c                  C   sx   t td td tƒ} t| ƒdks$t‚t td dt tƒ}t|ƒdksHt‚t ttd dt  d tƒ}t|ƒdkstt‚d S )Nrƒ   z!TransferFunction(x - 1, x + 1, x)rŠ   z!TransferFunction(x + 1, 2 - y, x)r�   z&TransferFunction(y, y**2 + 2*y + 3, y))rL   r€   r‡   r�   r“   r%  rv   rv   rw   Útest_TransferFunction_strÝ  s    r+  c                  C   sª   t ttd  t td td  tƒ} t tt tt tƒ}t ttd  tt t  t tt tƒ}tt| |ƒƒdksvt‚tt| ||ƒƒdksŽt‚tt| | ƒƒdks¦t‚d S )NrŠ   r�   zZParallel(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y))z‹Parallel(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y), TransferFunction(t*x**2 - t**w*x + w, t - y, y))z[Parallel(TransferFunction(-x + y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)))	rL   r€   r“   r”   r–   r•   r‡   rN   r�   r%  rv   rv   rw   Útest_Parallel_stræ  s    $(ÿÿÿr,  c                  C   sz   t ttd  t td td  tƒ} t tt tt tƒ}t| |g|| ggƒ}t|| g| |ggƒ}tt||ƒƒdksvt‚d S )NrŠ   r�   a�  MIMOParallel(TransferFunctionMatrix(((TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y)), (TransferFunction(x - y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)))), TransferFunctionMatrix(((TransferFunction(x - y, x + y, y), TransferFunction(x*y**2 - z, -t**3 + y**3, y)), (TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y))))))	rL   r€   r“   r”   r–   rP   r‡   rR   r�   r)  rv   rv   rw   Útest_MIMOParallel_strò  s    $ÿr-  c                  C   sž   t ttd  t td td  tƒ} t tt tt tƒ}t ttd  tt t  t tt tƒ}tt| | |ƒƒdkszt‚tt| t ddtƒdƒƒdksšt‚d S )NrŠ   r�   z—Feedback(Series(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y)), TransferFunction(t*x**2 - t**w*x + w, t - y, y), -1)rƒ   zUFeedback(TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(1, 1, y), 1))	rL   r€   r“   r”   r–   r•   r‡   rO   r�   r%  rv   rv   rw   Útest_Feedback_strþ  s    $(ÿÿr.  c                  C   sŠ   t td td  tt tƒ} t tt tt tƒ}t|| g| |ggƒ}t| |g|| ggƒ}tt||ƒƒdksnt‚tt||dƒƒdks†t‚d S )NrŠ   r�   a€  MIMOFeedback(TransferFunctionMatrix(((TransferFunction(-x + y, y + z, x), TransferFunction(x**2 - y**3, y - z, x)), (TransferFunction(x**2 - y**3, y - z, x), TransferFunction(-x + y, y + z, x)))), TransferFunctionMatrix(((TransferFunction(x**2 - y**3, y - z, x), TransferFunction(-x + y, y + z, x)), (TransferFunction(-x + y, y + z, x), TransferFunction(x**2 - y**3, y - z, x)))), -1)rƒ   a  MIMOFeedback(TransferFunctionMatrix(((TransferFunction(-x + y, y + z, x), TransferFunction(x**2 - y**3, y - z, x)), (TransferFunction(x**2 - y**3, y - z, x), TransferFunction(-x + y, y + z, x)))), TransferFunctionMatrix(((TransferFunction(x**2 - y**3, y - z, x), TransferFunction(-x + y, y + z, x)), (TransferFunction(-x + y, y + z, x), TransferFunction(x**2 - y**3, y - z, x)))), 1))rL   r€   r“   r”   rP   r‡   rS   r�   r)  rv   rv   rw   Útest_MIMOFeedback_str	  s    ÿÿr/  c                  C   s    t ttd  t td td  tƒ} t tt tt tƒ}t ttd  tt t  t tt tƒ}tt| g|ggƒƒdks|t‚tt| |g||ggƒƒdksœt‚d S )NrŠ   r�   zpTransferFunctionMatrix(((TransferFunction(x*y**2 - z, -t**3 + y**3, y),), (TransferFunction(x - y, x + y, y),)))zÂTransferFunctionMatrix(((TransferFunction(x*y**2 - z, -t**3 + y**3, y), TransferFunction(x - y, x + y, y)), (TransferFunction(t*x**2 - t**w*x + w, t - y, y), TransferFunction(x - y, x + y, y)))))	rL   r€   r“   r”   r–   r•   r‡   rP   r�   r%  rv   rv   rw   Útest_TransferFunctionMatrix_str  s    $(ÿÿr0  c                  C   sf   t ttttƒ} t| ƒdkst‚t ttttt ƒ} t| ƒdks@t‚t ttttt ƒ} t| ƒdksbt‚d S )Nzx + y*i + z*j + t*kzx + y*i + z*j + t*x*kzx + y*i + z*j + (t + x)*k)r   r€   r“   r”   r–   r‡   r�   )Úqrv   rv   rw   Útest_Quaternion_str_printer$  s    r2  c                   C   sL   t tdd�dkst‚t tdd�dks(t‚ttƒdks8t‚ttƒdksHt‚d S )NT)Zabbrevrç   ÚJrT   rU   )rl   rT   r�   rU   r‡   rv   rv   rv   rw   Útest_Quantity_str-  s    r4  c                  C   sœ   t dƒ} t| d ƒdkst‚ttd|  ƒd ƒdks8t‚td|  d ƒdksPt‚td|  d ƒd	ksht‚t| d d ƒd
ks€t‚tdd|   ƒdks˜t‚d S )Nr€   rƒ   zx_ + 1rŠ   r�   zexp(2**x_) + 5r�   z3*x_ + 1z1 + 1/x_z	x_**2 + 1z
1/(1 - x_))r)   r‡   r�   r/   )r•   rv   rv   rw   Útest_wild_str4  s    r5  c                  C   s´   ddl m} m}m} tdƒ}|d kr(d S | dƒ}|dƒ}|dƒ}t|ƒdksPt‚t|ƒdks`t‚t|ƒdkspt‚t|| d|  ƒdksŒt‚tt|ƒt|ƒ t	|ƒ ƒd	ks°t‚d S )
Nr   )ÚWildDotÚWildPlusÚWildStarÚmatchpyr¬   Zw__Zw___rŠ   z2**w_ + w__/w___zsqrt(w___)*sin(w_)*cos(w__))
Z!sympy.utilities.matchpy_connectorr6  r7  r8  rK   r‡   r�   r2   r1   r0   )r6  r7  r8  r9  ÚwdZwpÚwsrv   rv   rw   Útest_wild_matchpy?  s    r<  c                   C   s   t tdƒƒdkst‚d S )Nr�   zzeta(3))r‡   r4   r�   rv   rv   rv   rw   Ú	test_zetaS  s    r=  c                  C   s(   t t } t| ƒ}t| ƒ}||ks$t‚d S ©N)r€   r“   r‡   r�   )r"  rÈ   Úbrv   rv   rw   Útest_issue_3101W  s    r@  c                  C   s@   dt tƒ tt tƒ d  } t| ƒdks,t‚t| ƒdks<t‚d S )Nr§   rŠ   )z(-2)*x**1/2(-1/2)*x**(-1/2)*yz-2*x**1/2(-1/2)*x**(-1/2)*yz-2*x**1/2-1/2*x**-1/2*wz-2*sqrt(x) - y/(2*sqrt(x)))r0   r€   r“   r‡   r�   r!  rv   rv   rw   Útest_issue_3103^  s    rA  c                  C   s"   t ttƒd } t| ƒdkst‚d S )Nrƒ   zIntegral(x, x) + 1)r5   r€   r‡   r�   r!  rv   rv   rw   Útest_issue_4021e  s    rB  c                  C   sP   t dƒdkst‚tdƒdks t‚dddtg} t | ƒdks<t‚t| ƒdksLt‚d S )NÚabcz'abc'rÈ   r?  Úcz[a, b, c, x]z['a', 'b', 'c', x])rl   r�   rm   r€   r!  rv   rv   rw   Útest_sstrreprj  s
    rE  c                   C   s   t tt ƒdkst‚d S )Nr¸   )rl   r   r   r�   rv   rv   rv   rw   Útest_infinitys  s    rF  c                   C   s    t tdƒdd�dkst‚t tdƒdd�dks0t‚t tdƒdd�dksHt‚t tdƒt dd�dksdt‚t tdƒt dd�dks€t‚t tdƒt dd�dksœt‚d S )	Nz0.3T©r  z0.300000000000000r  F)z0.300000000000000*xzx*0.300000000000000)z0.3*xzx*0.3)rl   r&   r�   r€   rv   rv   rv   rw   Útest_full_precw  s    rH  c                  C   s–   t ddd�\} }}t| | |d  ƒdks.t‚t|d |  | ƒdksJt‚t| |d  | ƒdksft‚tt| ƒƒdkszt‚td	t| ƒ ƒd
ks’t‚d S )NzA,B,CF©Zcommutativer†   zA*B*C**(-1)zC**(-1)*A*BzA*C**(-1)*Bzsqrt(A)rƒ   z	A**(-1/2))r*   rl   r�   r0   )ÚAÚBÚCrv   rv   rw   Útest_noncommutative‰  s    rM  c                  C   sD   t ƒ } |  d¡dkst‚|  tt ¡dks.t‚|  d¡dks@t‚d S )Nr   zx*yé    Z32)rn   ZemptyPrinterr�   r€   r“   )Zstr_printerrv   rv   rw   Útest_empty_printer“  s    rO  c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t tdƒdd�S )Nr®   Úgarbage)Úmethod)rl   r&   rv   rv   rv   rw   rÓ   ›  rÔ   ztest_settings.<locals>.<lambda>)rj   Ú	TypeErrorrv   rv   rv   rw   Útest_settingsš  s    rS  c            	      C   s–   ddl m} m}m}m}m} | dddƒ}t||dkƒƒdks@t‚|ddƒ}t||dkƒƒd	ksbt‚|d
dƒ}|ddƒ}t|t||ƒƒj	ƒdks’t‚d S )Nr   )ÚNormalÚDieÚExponentialÚpspaceÚwhereÚx1rƒ   zDomain: (0 < x1) & (x1 < oo)Zd1r„   r®   zDomain: Eq(d1, 5) | Eq(d1, 6)rÈ   r?  z1Domain: (0 <= a) & (0 <= b) & (a < oo) & (b < oo))
Úsympy.statsrT  rU  rV  rW  rX  r‡   r�   r   Údomain)	rT  rU  rV  rW  rX  ÚXÚDrJ  rK  rv   rv   rw   Útest_RandomDomainž  s    


r^  c                   C   s‚   t ttddƒŽ ƒdkst‚t ttddƒŽ ƒdks4t‚t ttt td gŽ ƒdksTt‚t tttttƒdƒtttƒdƒƒd	ks~t‚d S )
Nrƒ   é3   z¿{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}r„   z{1, 2, 3, 4, 5}rŠ   z{x**2, x*y}r�   z*FiniteSet(5, FiniteSet(5, {x, y}), {x, y}))r‡   rC   rÁ   r�   r€   r“   rv   rv   rv   rw   Útest_FiniteSet«  s    ÿ  ÿr`  c                   C   s"   t ttttƒthƒƒdkst‚d S )NzPartition({z}, {x, y}))r‡   r   rC   r€   r“   r”   r�   rv   rv   rv   rw   Útest_Partition·  s    ra  c                   C   s   t tjƒdkst‚d S )NÚUniversalSet)r‡   r&   rb  r�   rv   rv   rv   rw   Útest_UniversalSetº  s    rc  c                  C   sh   t  tt¡} t ttf }t|  ttt  ¡ƒtttt  ƒksBt‚t| tt ¡ƒttt ƒksdt‚d S r>  )r]   Z
frac_fieldr€   r“   rl   Úconvertr�   )r  r~   rv   rv   rw   Útest_PrettyPoly¾  s    *re  c            	      C   sˆ   ddl m} m}m}m} | dƒ}| dƒ}|||dƒ}||ƒ}|dƒ}t|ƒdksTt‚t|ƒdksdt‚t|ƒd	kstt‚t|ƒd
ks„t‚d S )Nr   )ÚObjectÚNamedMorphismÚIdentityMorphismÚCategoryrJ  rK  r«   ÚKzObject("A")z,NamedMorphism(Object("A"), Object("B"), "f")zIdentityMorphism(Object("A"))zCategory("K"))Zsympy.categoriesrf  rg  rh  ri  r‡   r�   )	rf  rg  rh  ri  rJ  rK  r«   Zid_Arj  rv   rv   rw   Útest_categoriesÅ  s    rk  c                  C   s0   t ddd�\} }t| | ƒ}t|ƒdks,t‚d S )NzA BFrI  zTr(A*B))r*   ro   r‡   r�   )rJ  rK  r–   rv   rv   rw   Útest_TrØ  s    rl  c                   C   s    t tdt d ƒƒdkst‚d S )Ng      Àr�   z-3.0*(1.0*z - 1.0))r‡   r?   r”   r�   rv   rv   rv   rw   Útest_issue_6387Þ  s    rm  c                  C   s´   t dddƒt dddƒ } }td| |  ƒdks2t‚tt|  ƒdksFt‚tt |  ƒdks\t‚tdt |  ƒdkstt‚tdt  |  ƒd	ksŽt‚ttt| |ƒt| |ƒƒƒd
ks°t‚d S )Nr\  rŠ   ÚYz	2*X + 2*YzI*Xz-I*Xrƒ   z	(1 + I)*Xz
(-1 - I)*Xz(X + Y) + (X + Y))r;   r‡   r�   r   r   )r\  rn  rv   rv   rw   Útest_MatMul_MatAddâ  s    ro  c                  C   s„  t ddd�} td| | ƒ}tdddƒ}tdddƒ}tt|ddƒƒd	ksHt‚t|ttd
 …ttd
 …f ƒdkspt‚t|ttd
 d…ttd
 d…f ƒdksœt‚t|d t…td …f ƒdks¼t‚t|d t…td …f ƒdksÜt‚t|td …d t…f ƒdksüt‚t|tt…tt…f ƒdk�st‚t|ttt	…tt	t…f ƒdk�sDt‚t|td t…t	d t…f ƒdk�sjt‚t|d tt…d t	t…f ƒdk�s�t‚t|d d t…d d t…f ƒdk�s¶t‚tt|ddƒƒd	k�sÐt‚tt|d | d fd | d fƒƒd	k�söt‚tt|d| d fd| d fƒƒd	k�st‚tt|d| dfd| dfƒƒdk�sBt‚t|d
dd…ddd…f ƒdk�sht‚t|d
dd…ddd…f ƒdk�sŽt‚t|d
dd… ƒdk�sªt‚t|d d…d
d d…f ƒd!k�sÎt‚t|d d…d
dd…f ƒd"k�sòt‚t|dd dd…f ƒd#k�st‚t|dd
…dd
…f ƒd$k�s4t‚t|dd
d…dd
d…f ƒd%k�sZt‚t|| dd …dd …f ƒd&k�s€t‚d S )'Nr¤   Tr¥   r\  rn  rä   ÚZ)NNNzX[:, :]rƒ   zX[x:x + 1, y:y + 1]rŠ   zX[x:x + 1:2, y:y + 1:2]z	X[:x, y:]z	X[x:, :y]zX[x:y, z:w]zX[x:y:t, w:t:x]zX[x::y, t::w]zX[:x:y, :t:w]zX[::x, ::y])r   NNr   zX[::2, ::2]r�   r®   r�   r„   zX[1:2:3, 4:5:6]r¯   zX[1:3:5, 4:6:8]zX[1:10:2, :]r  zY[:5, 1:9:2]zY[:5, 1::2]zY[5:6, :5:2]z	X[:1, :1]zX[:1:2, :1:2]z(Y + Z)[2:, 2:])
r(   r;   r‡   r=   r�   r€   r“   r”   r•   r–   )r¤   r\  rn  rp  rv   rv   rw   Útest_MatrixSliceí  s8    (,   "&&&&&&&&&$$ "&rq  c                   C   sd   t tƒttƒ  kr*ttƒ  kr*dks0n t‚t tƒttƒ  krZttƒ  krZdks`n t‚d S )NÚTrueÚFalse)r‡   r8   Úreprrl   r�   r7   rv   rv   rv   rw   Útest_true_false  s    0ru  c                   C   s   t tttƒƒdkst‚d S )NzEquivalent(x, y))r‡   r6   r“   r€   r�   rv   rv   rv   rw   Útest_Equivalent  s    rv  c                   C   s   t tttdd�ƒdkst‚d S )NFr‹   zx ^ y)r‡   r9   r“   r€   r�   rv   rv   rv   rw   Útest_Xor  s    rw  c                   C   s   t ttjtjƒƒdkst‚d S )NzComplement(Reals, Naturals))r‡   rB   r&   ZRealsZNaturalsr�   rv   rv   rv   rw   Útest_Complement  s    rx  c                   C   s*   t ttddƒtddƒdd�ƒdks&t‚d S )NrŠ   r�   r®   Fr‹   z3SymmetricDifference(Interval(2, 3), Interval(3, 4)))r‡   rE   rD   r�   rv   rv   rv   rw   Útest_SymmetricDifference  s    ÿry  c                  C   s0   t dƒ\} }dt| | ƒ }t|ƒdks,t‚d S )Nza brŠ   z	2*(a + b))r*   r   r‡   r�   )rÈ   r?  Zexpr1rv   rv   rw   Útest_UnevaluatedExpr  s    rz  c                  C   sx   t dddƒ} t dddƒ}t dddƒ}t| d ƒdks8t‚td| d  ƒdksPt‚|d  || | ¡}t|ƒd	kstt‚d S )
NrJ  rƒ   r�   rK  rL  )r   r   zA[0, 0]z	3*A[0, 0]z(A - B)[0, 0])r;   r‡   r�   Úsubs)rJ  rK  rL  r  rv   rv   rw   Útest_MatrixElement_printing$  s    r|  c                  C   s|   t dddƒ} t dddƒ}t| | |  | ƒdks4t‚t| | | |  ƒdksPt‚t| d ƒdksdt‚t| d ƒdksxt‚d S )	NrJ  r�   rK  zA - A*B - Bz-A + A*B - Br†   zA**(-1)zA**3)r;   r‡   r�   )rJ  rK  rv   rv   rw   Útest_MatrixSymbol_printing1  s    r}  c                  C   sx   t ddd�} td| | ƒ}t|ƒdks(t‚|j|  t¡}t|ƒdksHt‚ttdt ƒ}| |  |¡}t|ƒdkstt‚d S )Nr¤   Tr¥   r\  zLambda(_d, sin(_d)).(X.T*X)rƒ   zLambda(x, 1/x).(n*X))	r(   r;   r‡   r�   ÚTZ	applyfuncr2   r   r€   )r¤   r\  ÚexprZlamdarv   rv   rw   Útest_MatrixExpressions;  s    r€  c                   C   s>   t tttfdƒƒdkst‚t ttt ttfdƒƒdks:t‚d S )N©rƒ   zSubs(x, x, 1)rœ   zSubs(x + y, (x, y), (1, 2)))r‡   r   r€   r�   r“   rv   rv   rv   rw   Útest_Subs_printingK  s    r‚  c                  C   s6   t ttƒtt tfƒ} |  ¡ | dfg| gfks2t‚d S )N))r�   g        r�  rv   )r5   r+   r€   r   Zas_termsr�   r!  rv   rv   rw   Útest_issue_15716P  s    rƒ  c                  C   sX   ddl m} m}m} t| dƒƒdks(t‚t|ddƒƒdks>t‚t|ddƒƒdksTt‚d S )Nr   ©r<   Ú
ZeroMatrixÚ	OneMatrixr®   r   rŠ   r»   r¨   )Úsympy.matricesr<   r…  r†  r‡   r�   r„  rv   rv   rw   Útest_str_special_matricesU  s    rˆ  c                   C   s    t tdtddfƒƒt st‚d S )Nr†   r   )r+   r   r€   r“   r�   rv   rv   rv   rw   Útest_issue_14567\  s    r‰  c                   C   s4   t tddgƒƒdkst‚t tddhƒƒdks0t‚d S )Nrƒ   rŠ   zPartition({1, 2}))r‡   r   r�   rv   rv   rv   rw   Útest_issue_21823`  s    rŠ  c                   C   s2   t tttddd�tdddd�dd�ƒdks.t‚d S )Nr§   Fr‹   r�   r†   z
1/(x**2*3))r‡   r   r"   r€   r�   rv   rv   rv   rw   Útest_issue_22689e  s    r‹  c                  C   s¬   dd„ } | dƒdkst ‚| dƒdks(t ‚| dƒdks8t ‚| dƒdksHt ‚| d	ƒd
ksXt ‚| dƒdksht ‚| dƒdksxt ‚| dƒdksˆt ‚| dƒdks˜t ‚| dƒdks¨t ‚d S )Nc                 S   s   t t| dd�ƒS )NFr‹   )r‡   r&   )r€   rv   rv   rw   rÓ   j  rÔ   z(test_issue_21119_21460.<locals>.<lambda>z4/2z4/-2z4/(-2)z-4/2z-4/-2z-4/(-2)z-2*3/-1z	-2*3/(-1)z	-2*3/-1/2z-2*3/(-1*2)z4/2/1z4/(2*1)z-2/-1/2z	-2/(-1*2)z2*3*4**(-2*3)z2*3/4**(2*3)z2*3*1*4**(-2*3)z2*3*1/4**(2*3))r�   )Ússrv   rv   rw   Útest_issue_21119_21460i  s    r�  c                  C   s8   ddl m}  t| dƒƒdks t‚t| dƒƒdks4t‚d S )Nr   ©ÚStrr€   zStr('x'))Úsympy.core.symbolr�  r‡   r�   rm   rŽ  rv   rv   rw   Útest_Strw  s    r‘  c            
      C   sš   ddl m} m}m}m} tddd�\}}| ddƒ}t|ƒdksBt‚|d|ƒ}t|ƒdks\t‚|d	|||gƒ}t|ƒd	ks|t‚||dƒ}	t|	ƒd
ks–t‚d S )Nr   )ÚManifoldÚPatchÚCoordSystemÚBaseScalarFieldzx yTrÉ   rÖ   rŠ   ÚPÚrectr€   )Zsympy.diffgeomr’  r“  r”  r•  r*   r‡   r�   )
r’  r“  r”  r•  r€   r“   Úmræ   r—  r?  rv   rv   rw   Útest_diffgeom}  s    


r™  c                   C   sl   t tdƒdd�dkst‚t tdƒdd�dks0t‚t tddgƒdd�dksLt‚t tddgƒdd�d	ksht‚d S )
Nr�   TrG  z1.00000000000000Fz1.0g       @z$[1.00000000000000, 2.00000000000000]z
[1.0, 2.0])rl   rg   r�   rv   rv   rv   rw   Útest_NDimArray‰  s    rš  c                   C   s   t tjƒdkst‚d S )NzQ.even)rl   r   Úevenr�   rv   rv   rv   rw   Útest_Predicate�  s    rœ  c                   C   s   t t t¡ƒdkst‚d S )Nz	Q.even(x))rl   r   r›  r€   r�   rv   rv   rv   rw   Útest_AppliedPredicate’  s    r�  c                  C   st   t tddƒƒdkst‚t tddddt  dfƒƒdks:t‚tdddƒ} td	ddƒ}t t| | tdgƒƒd
kspt‚d S )NrJ  )rŠ   r�   r®   rŠ   rƒ   r   zA[2, 1/(1 - x), 0]rÖ   r�   ÚNz(M*N)[x, 0])rl   rh   r�   ri   r€   r;   )rÖ   rž  rv   rv   rw   Ú#test_printing_str_array_expressions•  s
    $rŸ  c                  C   s  t dƒ} t dƒ}t| dkƒtdƒ }t| ƒtdƒ }t| ƒtdƒ }t| |ƒtdƒ }t|ƒdksft‚t|ƒdksvt‚t|ƒdks†t‚t|ƒdks–t‚|jd	ks¤t‚|jd	ks²t‚|jd	ksÀt‚|jd	ksÎt‚| 	¡ d	ksÞt‚| 	¡ d	ksît‚| 	¡ d	ksþt‚d S )
Nr€   r“   r   rŠ   zProbability(x > 0)*IzExpectation(x)*IzVariance(x)*IzCovariance(x, y)*IF)
rJ   rH   r<   rG   rI   rF   r‡   r�   rÚ   Z_eval_is_commutative)r€   r“   Zz1Zz2Zz3Zz4rv   rv   rw   Útest_printing_statsœ  s"    r   N(  Zsympyr   Zsympy.algebras.quaternionr   Zsympy.assumptions.askr   Z!sympy.calculus.accumulationboundsr   Zsympy.combinatorics.partitionsr   Zsympy.concrete.summationsr   r   Zsympy.core.addr	   Zsympy.core.containersr
   r   Zsympy.core.exprr   r   Zsympy.core.functionr   r   r   r   r   Zsympy.core.mulr   Z
sympy.corer   r   r   r   Zsympy.core.numbersr   r   r   r   r   r   r   r   r    rÝ   r!   Zsympy.core.powerr"   Zsympy.core.relationalr#   r$   r%   Zsympy.core.singletonr&   r�  r'   r(   r)   r*   Z(sympy.functions.combinatorial.factorialsr+   r,   r-   Z$sympy.functions.elementary.complexesr.   Z&sympy.functions.elementary.exponentialr/   Z(sympy.functions.elementary.miscellaneousr0   Z(sympy.functions.elementary.trigonometricr1   r2   Z'sympy.functions.special.delta_functionsr3   Z&sympy.functions.special.zeta_functionsr4   Zsympy.integrals.integralsr5   Zsympy.logic.boolalgr6   r7   r8   r9   Zsympy.matrices.denser:   Z"sympy.matrices.expressions.matexprr;   Zsympy.matrices.expressionsr<   Z sympy.matrices.expressions.slicer=   r‡  r>   Zsympy.polys.polytoolsr?   Zsympy.series.limitsr@   Zsympy.series.orderrA   Zsympy.sets.setsrB   rC   rD   rE   rZ  rF   rG   rH   rI   Zsympy.stats.rvrJ   Zsympy.externalrK   Zsympy.physics.control.ltirL   rM   rN   rO   rP   rQ   rR   rS   Zsympy.physics.unitsrT   rU   Zsympy.polysrV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   Zsympy.geometryrb   rc   rd   re   rf   Zsympy.tensorrg   Z0sympy.tensor.array.expressions.array_expressionsrh   ri   Zsympy.testing.pytestrj   rk   Zsympy.printingrl   rm   rn   Zsympy.physics.quantum.tracero   r€   r“   r”   r•   r–   rp   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û   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  r2  r4  r5  r<  r=  r@  rA  rB  rE  rF  rH  rM  rO  rS  r^  r`  ra  rc  re  rk  rl  rm  ro  rq  ru  rv  rw  rx  ry  rz  r|  r}  r€  r‚  rƒ  rˆ  r‰  rŠ  r‹  r�  r‘  r™  rš  rœ  r�  rŸ  r   rv   rv   rv   rw   Ú<module>   s<  ,(8	
	0A*
9		
		











