U
    ZÊ¹jDÝ ã                   @   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	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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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.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZT d dlUmVZV d dlWmXZX d dlYmZZZm[Z[ d d l\m]Z] d d!l^m_Z_m`Z` d d"lambZb d d#lcmdZd d d$lemfZf d d%lgmhZh d d&limjZjmkZkmlZlmmZm d d'lnmoZo d d(lpmqZq d d)lrmsZsmtZtmuZumvZvmwZw d d*lxmyZymzZzm{Z{m|Z|m}Z}m~Z~ d d+lm€Z€ d d,l�m‚Z‚ d d-lƒm„Z„m…Z…m†Z†m‡Z‡mˆZˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z�mŽZŽm�Z�m�Z�m‘Z‘m’Z’m“Z“m”Z”m•Z•m–Z–m—Z—m˜Z˜m™Z™mšZšm›Z›mœZœ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´mµZµm¶Z¶m·Z·m¸Z¸m¹Z¹mºZº d d/l»m¼Z¼ d d0l½m¾Z¾ d d1l¿mÀZÀmÁZÁmÂZÂmÃZÃmÄZÄmÅZÅmÆZÆmÇZÇmÈZÈ d d2lÉmÊZÊmËZË d d3lÌmÍZÍmÎZÏ d d4lÐmÑZÑmÒZÒmÓZÓ d d5lÔmÕZÕ d d6lÖm×Z×mØZØ d d7lÙmÚZÚ d d8lÛmÜZÜ d d9lÝ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ìmíZímîZîmïZï d d=lðmñZñmòZòmóZó d d>lômõZõmöZöm÷Z÷møZømùZùmúZúmûZû d d?lüZýG d@dA„ dAeýjþƒZþe(dBƒ\Zÿ�Z �Z�Z�Z�Z�Z�Z�Z�Z�Z	edCƒ�Z
e'dDƒ�Ze'dEƒ�Z�d‚dFdG„ZÎ�dƒdHdI„�ZdJdK„ �ZdLdM„ �ZdNdO„ �ZdPdQ„ �ZdRdS„ �ZdTdU„ �ZdVdW„ �ZdXdY„ �ZdZd[„ �Zd\d]„ �Zd^d_„ �Zd`da„ �Zdbdc„ �Zddde„ �Zdfdg„ �Zdhdi„ �Zdjdk„ �Zdldm„ �Zdndo„ �Z dpdq„ �Z!drds„ �Z"dtdu„ �Z#eòdvdw„ ƒ�Z$dxdy„ �Z%dzd{„ �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�„ �Z0d�d‘„ �Z1d’d“„ �Z2d”d•„ �Z3d–d—„ �Z4d˜d™„ �Z5dšd›„ �Z6dœd�„ �Z7dž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¾d¿„ �ZHdÀdÁ„ �ZIdÂdÃ„ �ZJdÄdÅ„ �ZKdÆdÇ„ �ZLdÈdÉ„ �ZMdÊdË„ �ZNdÌdÍ„ �ZOdÎdÏ„ �ZPdÐdÑ„ �ZQdÒdÓ„ �ZRdÔdÕ„ �ZSdÖd×„ �ZTdØdÙ„ �ZUdÚdÛ„ �ZVdÜdÝ„ �ZWdÞdß„ �ZXdàdá„ �ZYdâdã„ �ZZdädå„ �Z[dædç„ �Z\dèdé„ �Z]dêdë„ �Z^dìdí„ �Z_dîdï„ �Z`dðdñ„ �Zadòdó„ �Zbdôdõ„ �Zcdöd÷„ �Zddødù„ �Zedúdû„ �Zfdüdý„ �Zgdþdÿ„ �Zh�d �d„ �Zi�d�d„ �Zj�d�d„ �Zk�d�d„ �Zl�d�d	„ �Zm�d
�d„ �Zn�d�d„ �Zo�d�d„ �Zp�d�d„ �Zq�d�d„ �Zr�d�d„ �Zs�d�d„ �Zt�d�d„ �Zu�d�d„ �Zv�d�d„ �Zw�d�d„ �Zx�d �d!„ �Zy�d"�d#„ �Zz�d$�d%„ �Z{�d&�d'„ �Z|�d(�d)„ �Z}�d*�d+„ �Z~�d,�d-„ �Z�d.�d/„ �Z€�d0�d1„ �Z��d2�d3„ �Z‚�d4�d5„ �Zƒ�d6�d7„ �Z„�d8�d9„ �Z…�d:�d;„ �Z†�d<�d=„ �Z‡�d>�d?„ �Zˆ�d@�dA„ �Z‰�dB�dC„ �ZŠ�dD�dE„ �Z‹�dF�dG„ �ZŒ�dH�dI„ �Z��dJ�dK„ �ZŽ�dL�dM„ �Z��dN�dO„ �Z��dP�dQ„ �Z‘�dR�dS„ �Z’�dT�dU„ �Z“�dV�dW„ �Z”�dX�dY„ �Z•�dZ�d[„ �Z–�d\�d]„ �Z—�d^�d_„ �Z˜�d`�da„ �Z™�db�dc„ �Zš�dd�de„ �Z›�df�dg„ �Zœ�dh�di„ �Z��dj�dk„ �Zž�dl�dm„ �ZŸ�dn�do„ �Z �dp�dq„ �Z¡�dr�ds„ �Z¢�dt�du„ �Z£�dv�dw„ �Z¤�dx�dy„ �Z¥�dz�d{„ �Z¦�d|�d}„ �Z§�d~�d„ �Z¨�d€�d�„ �Z©d?S („  é    )ÚProduct)ÚSum)ÚAdd)ÚBasic)ÚDictÚTuple)Ú
DerivativeÚFunctionÚLambdaÚSubs)ÚMul)Ú
EulerGammaÚGoldenRatioÚCatalan)ÚIÚRationalÚooÚpi)ÚPow)ÚEqÚGeÚGtÚLeÚLtÚNe)ÚS)ÚSymbolÚsymbols)Ú	conjugate)ÚLambertW)ÚairyaiÚairyaiprimeÚairybiÚairybiprime)Ú	Heaviside)ÚfresnelcÚfresnels)ÚSingularityFunction)Údirichlet_eta)ÚRayÚSegment)ÚIntegral)	ÚAndÚ
EquivalentÚITEÚImpliesÚNandÚNorÚNotÚOrÚXor)ÚMatrixÚdiag)ÚMatrixSlice)ÚTrace)ÚFF)ÚZZ)ÚQQ)ÚRR)ÚgrlexÚilex)Úgroebner)ÚRootSumÚrootof)Úfps)Úfourier_series)ÚLimit)ÚO)ÚSeqAddÚ
SeqFormulaÚSeqMulÚSeqPer)ÚContains)ÚRange)Ú
ComplementÚ	FiniteSetÚIntersectionÚIntervalÚUnion)Ú
AssignmentÚAddAugmentedAssignmentÚSubAugmentedAssignmentÚMulAugmentedAssignmentÚDivAugmentedAssignmentÚModAugmentedAssignment)ÚUnevaluatedExpr)ÚTr).ÚAbsÚChiÚCiÚEiÚKroneckerDeltaÚ	PiecewiseÚShiÚSiÚatan2ÚbetaÚbinomialÚcatalanÚceilingÚcosÚeulerÚexpÚexpintÚ	factorialÚ
factorial2ÚfloorÚgammaÚhyperÚlogÚmeijergÚsinÚsqrtÚsubfactorialÚtanÚ
uppergammaÚlerchphiÚpolylogÚ
elliptic_kÚ
elliptic_fÚ
elliptic_eÚelliptic_piÚ
DiracDeltaÚbellÚ	bernoulliÚ	fibonacciÚ
tribonacciÚlucasÚ	stieltjesÚmathieucÚmathieusÚmathieusprimeÚmathieucprime)ÚAdjointÚInverseÚMatrixSymbolÚ	TransposeÚKroneckerProductÚBlockMatrixÚ	OneMatrixÚ
ZeroMatrix)Úhadamard_power)Ú	mechanics)	ÚTransferFunctionÚFeedbackÚTransferFunctionMatrixÚSeriesÚParallelÚ
MIMOSeriesÚMIMOParallelÚMIMOFeedbackÚ
StateSpace)ÚjouleÚdegree)ÚpprintÚpretty)Úcenter_accentÚis_combiningÚcenter)ÚConditionSet)ÚImageSetÚ
ProductSet)ÚSetExpr)ÚNormal)Ú
CovarianceÚExpectationÚProbabilityÚVariance)ÚImmutableDenseNDimArrayÚImmutableSparseNDimArrayÚMutableDenseNDimArrayÚMutableSparseNDimArrayÚtensorproduct)ÚTensorProduct)ÚTensorIndexTypeÚtensor_indicesÚ
TensorHeadÚTensorElementÚtensor_heads)ÚraisesÚ_both_exp_powÚwarns_deprecated_sympy)Ú
CoordSys3DÚGradientÚCurlÚ
DivergenceÚDotÚCrossÚ	LaplacianNc                   @   s   e Zd ZdS )Ú
lowergammaN©Ú__name__Ú
__module__Ú__qualname__© rÄ   rÄ   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/pretty/tests/test_pretty.pyr¿   V   s   r¿   za,b,c,d,x,y,z,k,n,s,pÚfÚthetaÚphic                 C   s   t | |ddd�S )zASCII pretty-printingF©ÚorderÚuse_unicodeÚ	wrap_line©Úxpretty©ÚexprrÊ   rÄ   rÄ   rÅ   r�   
  s    r�   c                 C   s   t | |ddd�S )zUnicode pretty-printingTFrÉ   rÍ   rÏ   rÄ   rÄ   rÅ   Úupretty  s    rÑ   c                   C   s¤   t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚t dƒdks`t‚t dƒdkspt‚t dƒdks€t‚t dƒdks�t‚t dƒdks t‚d S ©NZxxxzxxx'xxxzxxx"xxxzxxx"xxx'xxxzxxx
xxx©r�   ÚAssertionErrorrÄ   rÄ   rÄ   rÅ   Útest_pretty_ascii_str  s    rÕ   c                   C   s¤   t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚t dƒdks`t‚t dƒdkspt‚t dƒdks€t‚t dƒdks�t‚t dƒdks t‚d S rÒ   rÓ   rÄ   rÄ   rÄ   rÅ   Útest_pretty_unicode_str!  s    rÖ   c                   C   sP   t tƒdkst‚t tdƒƒdks$t‚t tdƒƒdks8t‚t tdƒƒdksLt‚d S )Nõ   âˆžz	alpha^+_1u   Î±â�ºâ‚�rb   õ   Î²Úlambdau   Î»)rÑ   r   rÔ   r   rÄ   rÄ   rÄ   rÅ   Útest_upretty_greek.  s    rÚ   c                   C   sT   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‚d S )NZbeta12u   Î²â‚�â‚‚ZY00u   Yâ‚€â‚€ZY_00zF^+-u   Fâ�ºâ�»©rÑ   r   rÔ   rÄ   rÄ   rÄ   rÅ   Útest_upretty_multiindex5  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dƒƒdksPt‚t td	ƒƒd
ksdt‚t tdƒƒdksxt‚t tdƒƒdksŒt‚t tdƒƒdks t‚t tdƒƒdks´t‚d S )NZbeta_1_2u	   Î²â‚� â‚‚zbeta^1^2u   Î²Â¹ Â²zbeta_1^2u   Î²Â²â‚�Z
beta_10_20u   Î²â‚�â‚€ â‚‚â‚€zbeta_ax_gamma^iu   Î²â�±â‚�â‚“ áµ§z	F^1^2_3_4u   FÂ¹ Â²â‚ƒ â‚„z	F_1_2^3^4u   FÂ³ â�´â‚� â‚‚Z	F_1_2_3_4u   Fâ‚� â‚‚ â‚ƒ â‚„z	F^1^2^3^4u   FÂ¹ Â² Â³ â�´rÛ   rÄ   rÄ   rÄ   rÅ   Útest_upretty_sub_super<  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dƒƒdksPt‚t td	ƒƒd
ksdt‚t tdƒƒdksxt‚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ksðt‚t tdƒƒdk�st‚d S )NZF_betau   Fáµ¦ZF_gammau   Fáµ§ZF_rhou   Fáµ¨ZF_phiu   Fáµ©ZF_chiu   FáµªZF_au   Fâ‚�ZF_eu   Fâ‚‘ZF_iu   Fáµ¢ZF_ou   Fâ‚’ZF_uu   Fáµ¤ZF_ru   Fáµ£ZF_vu   Fáµ¥ZF_xu   Fâ‚“rÛ   rÄ   rÄ   rÄ   rÅ   Útest_upretty_subs_missing_in_24H  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dƒƒdksPt‚t td	ƒƒd
ksdt‚t tdƒƒdksxt‚t tdƒƒdksŒt‚t tdƒƒdks t‚d S )NZF_hu   Fâ‚•ZF_ku   Fâ‚–ZF_lu   Fâ‚—ZF_mu   Fâ‚˜ZF_nu   Fâ‚™ZF_pu   Fâ‚šZF_su   Fâ‚›ZF_tu   Fâ‚œrÛ   rÄ   rÄ   rÄ   rÅ   Útest_missing_in_2X_issue_9047Y  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dƒƒdksPt‚t td	ƒƒd
ksdt‚t tdƒƒdksxt‚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ksðt‚t tdƒƒdk�st‚t tdƒƒdk�st‚t tdƒƒdk�s2t‚t t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#ƒƒ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/k�s:t‚t td0ƒƒd1k�sPt‚t td2ƒƒd3k�sft‚t td4ƒƒd4k�s|t‚t td5ƒƒd5k�s’t‚d S )6NZ	Fmathringu   FÌŠZFddddotu   FâƒœZFdddotu   Fâƒ›ZFddotu   FÌˆZFdotu   FÌ‡ZFchecku   FÌŒZFbreveu   FÌ†ZFacuteu   FÌ�ZFgraveu   FÌ€ZFtildeu   FÌƒZFhatu   FÌ‚ZFbaru   FÌ…ZFvecu   Fâƒ—ZFprimeu   Fâ€²ZFprmZFboldZFbmZFcalZFscrZFfrakZFnormu   â€–Fâ€–ZFavgu   âŸ¨FâŸ©ZFabsz|F|ZFmagZxvecdotu   xâƒ—Ì‡ZxDotVecu   xÌ‡âƒ—ZxHATNormu	   â€–xÌ‚â€–ZxMathring_yCheckPRM__zbreveAbsu   xÌŠ_yÌŒâ€²__|zÌ†|Z alphadothat_nVECDOT__tTildePrimeu   Î±Ì‡Ì‚_nâƒ—Ì‡__tÌƒâ€²Zx_dotZx__dotrÛ   rÄ   rÄ   rÄ   rÅ   Útest_upretty_modifiersd  s>    rà   c                  C   sh   ddl m}  t| ddƒƒdks"t‚t| dƒƒdks6t‚t| ddƒdd	ƒƒd
ksRt‚t| ƒ ƒdksdt‚d S )Nr   ©ÚCycleé   é   z(1 2)z(2)é   é   é   z
(1 3)(4 5)ú())Ú sympy.combinatorics.permutationsrâ   r�   rÔ   rá   rÄ   rÄ   rÅ   Útest_pretty_CycleŠ  s
    rê   c               	   C   sÄ   ddl m}  | ddƒddƒ}t|ddd�d	ks2t‚t|dd
d�d	ksHt‚t|d
dd�dks^t‚t|d
d
d�dkstt‚tƒ �@ | j}d
| _t|dd�dksœt‚t|d
d�dks°t‚|| _W 5 Q R X d S )Nr   )ÚPermutationrã   rä   rå   ræ   T)Zperm_cyclicrË   z
(1 2)(3 4)Fu   âŽ›0 1 2 3 4âŽž
âŽ�0 2 1 4 3âŽ z/0 1 2 3 4\
\0 2 1 4 3/©rË   )ré   rë   rÎ   rÔ   r·   Zprint_cyclic)rë   Úp1Zold_print_cyclicrÄ   rÄ   rÅ   Útest_pretty_Permutation’  s(    ÿÿ
ÿ
ÿrî   c            	      C   s†  t tdƒ d ƒdkst‚t tdƒ d ƒdks4t‚t} d}d}t | ƒ|ksPt‚t| ƒ|ks`t‚td } d	}d	}t | ƒ|ks€t‚t| ƒ|ks�t‚dt } d
}d}t | ƒ|ks°t‚t| ƒ|ksÀt‚td } d}d}t | ƒ|ksàt‚t| ƒ|ksðt‚ttdƒddd�} d}d}t | ƒ|k�st‚t| ƒ|k�s.t‚ttd  } d}d}t | ƒ|k�sTt‚t| ƒ|k�sft‚ttddƒ } d}d}t	| dddd�|k�s–t‚t	| dddd�|k�s°t‚ttddƒ } d}d}t | ƒ|k�sØt‚t| ƒ|k�sêt‚dt } d}d}t | ƒ|k�st‚t| ƒ|k�st‚tdddd�} d}d}t | ƒ|k�sFt‚t| ƒ|k�sXt‚td t d } d}d}d}d}d}d}t | ƒ|||fk�s˜t‚t| ƒ|||fk�s°t‚dt } d }d!}d }d!}t | ƒ||fk�sÞt‚t| ƒ||fk�sôt‚ddt  } d"}d#}d$}d%}t | ƒ||fk�s&t‚t| ƒ||fk�s<t‚tt } d&}d'}t | ƒ|k�s^t‚t| ƒ|k�spt‚t t } d(}d)}t | ƒ|k�s”t‚t| ƒ|k�s¦t‚td t } d*}d+}d,}d-}t | ƒ||fk�sØt‚t| ƒ||fk�sît‚dt t } d.}d/}d0}d1}d2}d3}t | ƒ|||fk�s*t‚t| ƒ|||fk�sBt‚dt td4  } d5}d6}d7}d8}t | ƒ||fk�sxt‚t| ƒ||fk�sŽt‚tj
 dt  } d9}d:}t | ƒ|k�s¸t‚t| ƒ|k�sÊt‚tj
dt  } d;}d<}t | ƒ|k�sòt‚t| ƒ|k�st‚tj
 dt d  } d=}d>}t | ƒ|k�s2t‚t| ƒ|k�sDt‚tj
dt d  } d?}d@}t | ƒ|k�spt‚t| ƒ|k�s‚t‚d S )ANrã   rä   z-1/2é   é   z-13 
----
 22 r   r×   z 2
x z1
-
xõ   1
â”€
xg      ð¿z -1.0
x    F©Úevaluatez -1.0
2    éþÿÿÿúy 
--
 2
x õ   y 
â”€â”€
 2
x rå   z	 1/3
x   )rË   rÌ   Zroot_notationTéûÿÿÿz 1  
----
 5/2
x   u    1  
â”€â”€â”€â”€
 5/2
x   z    x
(-2) z 1
3 ú         2
1 + x + x ú 2        
x  + x + 1z 2        
x  + 1 + xú1 - xú-x + 1ú1 - 2*xú-2*x + 1u	   1 - 2â‹…xu
   -2â‹…x + 1zx
-
yu   x
â”€
yú-x 
---
 y õ   -x 
â”€â”€â”€
 y z2 + x
-----
  y  zx + 2
-----
  y  u   2 + x
â”€â”€â”€â”€â”€
  y  u   x + 2
â”€â”€â”€â”€â”€
  y  z	y*(1 + x)z	(1 + x)*yz	y*(x + 1)u   yâ‹…(1 + x)u   (1 + x)â‹…yu   yâ‹…(x + 1)é
   z-5*x  
------
10 + xz-5*x  
------
x + 10u"   -5â‹…x  
â”€â”€â”€â”€â”€â”€
10 + xu"   -5â‹…x  
â”€â”€â”€â”€â”€â”€
x + 10z
-3*x - 1/2u   -3â‹…x - 1/2z	1/2 - 3*xu   1/2 - 3â‹…xz  3*x   1
- --- - -
   2    2u'     3â‹…x   1
- â”€â”€â”€ - â”€
   2    2z1   3*x
- - ---
2    2 u!   1   3â‹…x
â”€ - â”€â”€â”€
2    2 )r�   r   rÔ   r   rÑ   Úxr   r   ÚyrÎ   ZHalf)	rÐ   Ú	ascii_strÚ	ucode_strÚascii_str_1Úascii_str_2Úascii_str_3Úucode_str_1Úucode_str_2Úucode_str_3rÄ   rÄ   rÅ   Útest_pretty_basicª  sŒ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr  c                  C   s(  t  t } d}d}t| ƒ|ks"t‚t| ƒ|ks2t‚t  t t } d}d}t| ƒ|ksXt‚t| ƒ|ksht‚t d t } d}d}t| ƒ|ksŒt‚t| ƒ|ksœt‚t d  t } d}d	}t| ƒ|ksÂt‚t| ƒ|ksÒt‚t  tt  } d
}d}t| ƒ|ksøt‚t| ƒ|k�s
t‚t td  } d}d}t| ƒ|k�s2t‚t| ƒ|k�sDt‚tt t  } d}d}t| ƒ|k�slt‚t| ƒ|k�s~t‚dtd  } d}d}t| ƒ|k�s¤t‚t| ƒ|k�s¶t‚dtd  } d}d}t| ƒ|k�sÜt‚t| ƒ|k�sît‚tddƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s$t‚d S )Nrþ   rÿ   z-x*z 
-----
  y  u   -xâ‹…z 
â”€â”€â”€â”€â”€
  y  rä   z 2
x 
--
y u    2
x 
â”€â”€
y z  2 
-x  
----
 y  u     2 
-x  
â”€â”€â”€â”€
 y  z-x 
---
y*zu   -x 
â”€â”€â”€
yâ‹…zz-a 
---
 2 
y  u   -a 
â”€â”€â”€
 2 
y  z -a 
 ---
  b 
y   u    -a 
 â”€â”€â”€
  b 
y   éÿÿÿÿz-1 
---
 2 
y  u   -1 
â”€â”€â”€
 2 
y  iöÿÿÿz-10 
----
  2 
 b  u   -10 
â”€â”€â”€â”€
  2 
 b  i8ÿÿÿé%   z-200 
-----
 37  u   -200 
â”€â”€â”€â”€â”€
 37  )	r  r  r�   rÔ   rÑ   ÚzÚaÚbr   ©rÐ   r  r  rÄ   rÄ   rÅ   Útest_negative_fractionsD  sŒ    
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿr  c               
   C   s  t dddd�} t| ƒdkst‚t| ƒdks.t‚t dddd�} t| ƒdksLt‚t| ƒdks\t‚t dddd�} t| ƒd	kszt‚t| ƒd
ksŠt‚t ddddd�} t| ƒdksªt‚t| ƒdksºt‚t dddd�} t| ƒdksØt‚t| ƒdksèt‚tdddd�} t| ƒdk�st‚t| ƒdk�st‚t ddddd�} t| ƒdk�s<t‚t| ƒdk�sNt‚tddddd�} t| ƒdk�spt‚t| ƒdk�s‚t‚t dddd�} t| ƒdk�s¢t‚t| ƒdk�s´t‚t dtdd�} t| ƒdk�sÔt‚t| ƒdk�sæt‚t ddddtdd�} t| ƒdk�st‚t| ƒdk�st‚t dddd�} t| ƒdk�s>t‚t| ƒdk�sPt‚t dddddttdd�} t| ƒd k�szt‚t| ƒd!k�sŒt‚t ddddt dttdd�} t| ƒd"k�sºt‚t| ƒd#k�sÌt‚t tddƒtd$d%ƒdd�} t| ƒd&k�søt‚t| ƒd'k�s
t‚t tt tddƒdd�} t| ƒd(k�s4t‚t| ƒd)k�sFt‚t tddƒtt dd�} t| ƒd*k�spt‚t| ƒd+k�s‚t‚t t	j
tt dd�} t| ƒd,k�s¨t‚t| ƒd-k�sºt‚t tt t	j
dd�} t| ƒd.k�sàt‚t| ƒd/k�sòt‚t tddƒtt t	j
tt dd�} t| ƒd0k�s&t‚t| ƒd1k�s8t‚t tt tddƒt	j
tt dd�} t| ƒd2k�slt‚t| ƒd3k�s~t‚t tt tddƒtddƒtd$d4ƒdd�} t| ƒd5k�s¸t‚t| ƒd6k�sÊt‚t tddƒtt t	j
tt dd�} t| ƒd7k�sþt‚t| ƒd8k�st‚d S )9Nr   rã   Frò   z0*1u   0â‹…1z1*0u   1â‹…0z1*1u   1â‹…1z1*1*1u	   1â‹…1â‹…1rä   z1*2u   1â‹…2z0 + 1z1*1*2u	   1â‹…1â‹…2z	0 + 0 + 1r  z1*-1u   1â‹…-1g      ð?z1.0*xu   1.0â‹…xrå   z	1*1*2*3*xu   1â‹…1â‹…2â‹…3â‹…xz-1*1u   -1â‹…1ræ   z4*3*2*1*0*y*xu   4â‹…3â‹…2â‹…1â‹…0â‹…yâ‹…xz4*3*2*(z + 1)*0*y*xu   4â‹…3â‹…2â‹…(z + 1)â‹…0â‹…yâ‹…xrç   é   z2/3*5/7u	   2/3â‹…5/7z(x + y)*1/2u   (x + y)â‹…1/2zx + y
-----
  2  u   x + y
â”€â”€â”€â”€â”€
  2  z	1*(x + y)u   1â‹…(x + y)z	(x - y)*1u   (x - y)â‹…1z1/2*(x - y)*1*(x + y)u   1/2â‹…(x - y)â‹…1â‹…(x + y)z(x + y)*3/4*1*(y - z)u   (x + y)â‹…3/4â‹…1â‹…(y - z)é   z(x + y)*1*3/4*5/6u   (x + y)â‹…1â‹…3/4â‹…5/6z3/4*(x + y)*1*(y - z)u   3/4â‹…(x + y)â‹…1â‹…(y - z))r   r�   rÔ   rÑ   r   r  r  r  r   r   ZOne©rÐ   rÄ   rÄ   rÅ   Útest_Mulé  sŠ    ""("r  c                   C   sˆ   t t d  t dtdƒ  d  t d t d   ƒdksBt‚tt d  t dtdƒ  d  t d t d   ƒdks„t‚d S )Nrç   rä   zO         2           /         ___    \
- (5 - y)  + (x - 5)*\-x - 2*\/ 2  + 5/uO            2                          
- (5 - y)  + (x - 5)â‹…(-x - 2â‹…âˆš2 + 5))r�   r  rr   r  rÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_issue_55241  s    8ÿ8ÿr  c                  C   sÂ  t td t d dd�dks t‚t td t d dd�dks@t‚t dt dd�dksXt‚t dt dd�d	kspt‚t ddt  dd�d
ksŒt‚t ddt  dd�dks¨t‚dtd  td  td  td  } t | d d�dksàt‚t | dd�dksôt‚t | dd�dk�s
t‚ttd d  td d  ttd ƒ }d}d}t |d d�|k�sPt‚t|d d�|k�sft‚t |dd�|k�s|t‚t|dd�|k�s’t‚t |dd�|k�s¨t‚t|dd�|k�s¾t‚d S )Nrä   rã   Úlex©rÊ   rù   zrev-lexrø   rû   rú   rý   rü   ræ   rå   z'   4    2    3    2
2*x  - x  + y  + y z' 2    3    2      4
y  + y  - x  + 2*x r  rç   éx   zS     3    5         
    x    x      / 6\
x - -- + --- + O\x /
    6    120        ue        3    5         
    x    x      âŽ› 6âŽž
x - â”€â”€ + â”€â”€â”€ + OâŽ�x âŽ 
    6    120        )r�   r  rÔ   r  rE   rÑ   )rÆ   rÐ   r  r  rÄ   rÄ   rÅ   Útest_pretty_ordering?  s>    ÿÿ$
ÿ
ÿ
ÿ
(ÿÿr  c                   C   s6   t tƒttƒ  krdks"n t‚ttƒdks2t‚d S )Nr   õ   Î³)r�   r   ÚstrrÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_EulerGammaz  s    "r  c                   C   s6   t tƒttƒ  krdks"n t‚ttƒdks2t‚d S )Nr   u   Ï†)r�   r   r  rÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_GoldenRatio  s    "r  c                   C   s&   t tƒttƒ  krdks"n t‚d S )NÚG)r�   r   rÑ   rÔ   rÄ   rÄ   rÄ   rÅ   Útest_Catalan„  s    r!  c                  C   sP  t ttƒ} d}d}t| ƒ|ks"t‚t| ƒ|ks2t‚tttƒ} d}d}t| ƒ|ksTt‚t| ƒ|ksdt‚tttƒ} d}d}t| ƒ|ks†t‚t| ƒ|ks–t‚tttƒ} d}d}t| ƒ|ks¸t‚t| ƒ|ksÈt‚t	ttƒ} d}d}t| ƒ|ksêt‚t| ƒ|ksút‚t
ttd  td	 ƒ} d
}d}d}d}t| ƒ||fk�s6t‚t| ƒ||fk�sLt‚d S )Nzx = yzx < yzx > yzx <= yu   x â‰¤ yzx >= yu   x â‰¥ yrã   rä   z#  x       2
----- != y 
1 + y      z#  x       2
----- != y 
y + 1      u,     x      2
â”€â”€â”€â”€â”€ â‰  y 
1 + y     u,     x      2
â”€â”€â”€â”€â”€ â‰  y 
y + 1     )r   r  r  r�   rÔ   rÑ   r   r   r   r   r   )rÐ   r  r  r  r  r  r	  rÄ   rÄ   rÅ   Útest_pretty_relationalˆ  s\    
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿÿÿÿÿr"  c                  C   s6   t ttƒ} d}d}t| ƒ|ks"t‚t| ƒ|ks2t‚d S )Nzx := y)rQ   r  r  r�   rÔ   rÑ   r  rÄ   rÄ   rÅ   Útest_Assignmentâ  s    
ÿÿr#  c                  C   sþ   t ttƒ} d}d}t| ƒ|ks"t‚t| ƒ|ks2t‚tttƒ} d}d}t| ƒ|ksTt‚t| ƒ|ksdt‚tttƒ} d}d}t| ƒ|ks†t‚t| ƒ|ks–t‚tttƒ} d}d}t| ƒ|ks¸t‚t| ƒ|ksÈt‚t	ttƒ} d}d}t| ƒ|ksêt‚t| ƒ|ksút‚d S )Nzx += yzx -= yzx *= yzx /= yzx %= y)
rR   r  r  r�   rÔ   rÑ   rS   rT   rU   rV   r  rÄ   rÄ   rÅ   Útest_AugmentedAssignmentð  sF    
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿr$  c                  C   s¼   t td  } d}d}t| ƒ|ks$t‚t| ƒ|ks4t‚t tddƒ ttddƒ  } d}d}t| ƒ|ksht‚t| ƒ|ksxt‚ttƒd ttƒd  } d	}d
}t| ƒ|ks¨t‚t| ƒ|ks¸t‚d S )Nrô   rõ   rö   rå   rä   r÷   z 3/2
y   
----
 5/2
x   u     3/2
y   
â”€â”€â”€â”€
 5/2
x   z'   3   
sin (x)
-------
   2   
tan (x)u5      3   
sin (x)
â”€â”€â”€â”€â”€â”€â”€
   2   
tan (x))r  r  r�   rÔ   rÑ   r   rq   rt   r  rÄ   rÄ   rÅ   Útest_pretty_rational.  s*    ÿÿÿ	ÿÿ	ÿr%  c            
      C   s\  dt  tt ƒ } d}d}d}d}d}t| ƒ||fks8t‚t| ƒ|||fksNt‚tt ƒ} d}d}t| ƒ|ksnt‚t| ƒ|ks~t‚tt t d d	  ƒ} d
}d}d}d}t| ƒ||fks¶t‚t| ƒ||fksÊt‚td	ttt ƒ  ƒ} d}d}t| ƒ|ksöt‚t| ƒ|k�st‚tddd�}t|ƒ} d}d}t| ƒ|k�s6t‚t| ƒ|k�sHt‚td| ƒ} d}d}t| ƒ|k�snt‚t| ƒ|k�s€t‚ttt|ƒƒƒ} d}d}t| ƒ|k�sªt‚t| ƒ|k�s¼t‚t|d	 ƒ} d}d}d}d}t| ƒ||fk�sît‚t| ƒ||fk�st‚t	|ƒ} d}d}t| ƒ|k�s&t‚t| ƒ|k�s8t‚t	d| ƒ} d}d}t| ƒ|k�s^t‚t| ƒ|k�spt‚tddd�}t
|ƒ} d}d}t| ƒ|k�sžt‚t| ƒ|k�s°t‚t
d| ƒ} d}d}t| ƒ|k�sÖt‚t| ƒ|k�sèt‚t
t
t
|ƒƒƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s$t‚t
|d	 ƒ} d }d!}d }d!}t| ƒ||fk�sVt‚t| ƒ||fk�slt‚dt|tƒ } d"}d#}t| ƒ|k�s”t‚t| ƒ|k�s¦t‚dtd| tƒ } d$}d%}t| ƒ|k�sÒt‚t| ƒ|k�sät‚dt|d tƒ } d&}d'}t| ƒ|k�st‚t| ƒ|k�s"t‚t|ƒ} d(}d(}t| ƒ|k�sDt‚t| ƒ|k�sVt‚t|ƒ} d(}d(}t| ƒ|k�sxt‚t| ƒ|k�sŠt‚t|ƒ} d)}d)}t| ƒ|k�s¬t‚t| ƒ|k�s¾t‚t|ƒ} d)}d)}t| ƒ|k�sàt‚t| ƒ|k�sòt‚t|t ƒ} d*}d*}t| ƒ|k�st‚t| ƒ|k�s(t‚t|ƒ} d+}d+}t| ƒ|k�sJt‚t| ƒ|k�s\t‚t|ƒ} d,}d,}t| ƒ|k�s~t‚t| ƒ|k�s�t‚t|ƒ} d-}d-}t| ƒ|k�s²t‚t| ƒ|k�sÄt‚t|ƒ} d.}d/}t| ƒ|k�sæt‚t| ƒ|k�søt‚t|t ƒ} d0}d1}t| ƒ|k�st‚t| ƒ|k�s.t‚tt ttƒ} d2}d2}t| ƒ|k�sTt‚t| ƒ|k�sft‚tt ttƒ} d3}d3}t| ƒ|k�sŒt‚t| ƒ|k�sžt‚tt ttƒ} d4}d4}t| ƒ|k�sÄt‚t| ƒ|k�sÖt‚tt ttƒ} d5}d5}t| ƒ|k�süt‚t| ƒ|k�st‚tt ƒ} d6}d6}t| ƒ|k�s0t‚t| ƒ|k�sBt‚td7ƒ}	t|	t d	 ƒƒ} d8}d9}d8}d9}t| ƒ||fk�s€t‚t| ƒ||fk�s–t‚|	t ƒ} d:}d:}t| ƒ|k�s¸t‚t| ƒ|k�sÊt‚|	t tƒ} d;}d;}t| ƒ|k�sît‚t| ƒ|k�s t‚|	t td	  tƒ} d<}d=}d>}d?}t| ƒ||fk�s8t‚t| ƒ||fk�sNt‚|	t t t t t t      ƒ} d@}dA}t| ƒ|k�s„t‚t| ƒ|k�s–t‚tt ƒd } dB}dB}t| ƒ|k�s¼t‚t| ƒ|k�sÎt‚tttt  ƒ} dC}dD}t| ƒ|k�søt‚t| ƒ|k�	s
t‚ttttt  ƒƒ} dE}dF}t| ƒ|k�	s8t‚t| ƒ|k�	sJt‚t|	d	t|	t ƒƒ ƒƒ} dG}dH}dI}dJ}t| ƒ||fk�	sˆt‚t| ƒ||fk�	sžt‚|	t td	  tƒ} d<}d=}d>}d?}t| ƒ||fk�	sÖt‚t| ƒ||fk�	sìt‚td	ttt ƒ  ƒ} dK}dL}t| ƒ|k�
st‚t| ƒ|k�
s,t‚t d	tt t ƒ  ƒ} dM}dN}t| ƒ|k�
sZt‚t| ƒ|k�
slt‚t!|ƒ} dO}dO}t| ƒ|k�
sŽt‚t| ƒ|k�
s t‚t!d	d	d	d	d	|     ƒ} dP}dQ}t| ƒ|k�
sÖt‚t| ƒ|k�
sèt‚t!|t ƒ} dR}dR}t| ƒ|k�st‚t| ƒ|k�st‚t!|t d ƒ} dS}dT}t| ƒ|k�sFt‚t| ƒ|k�sXt‚dUS )Vz>Tests for Abs, conjugate, exp, function braces, and factorial.rä   z       x
2*x + e z x      
e  + 2*xu          x
2â‹…x + â„¯ u    x     
â„¯ + 2â‹…xu    x      
â„¯  + 2â‹…xz|x|u   â”‚xâ”‚rã   z#|  x   |
|------|
|     2|
|1 + x |z#|  x   |
|------|
| 2    |
|x  + 1|u?   â”‚  x   â”‚
â”‚â”€â”€â”€â”€â”€â”€â”‚
â”‚     2â”‚
â”‚1 + x â”‚u?   â”‚  x   â”‚
â”‚â”€â”€â”€â”€â”€â”€â”‚
â”‚ 2    â”‚
â”‚x  + 1â”‚z    1    
---------
|y - |x||u7       1    
â”€â”€â”€â”€â”€â”€â”€â”€â”€
â”‚y - â”‚xâ”‚â”‚ÚnT©Úintegerzn!z(2*n)!u   (2â‹…n)!z((n!)!)!z(1 + n)!z(n + 1)!z!nz!(2*n)u   !(2â‹…n)zn!!z(2*n)!!u	   (2â‹…n)!!z((n!!)!!)!!z	(1 + n)!!z	(n + 1)!!z  /n\
2*| |
  \k/u     âŽ›nâŽž
2â‹…âŽœ âŽŸ
  âŽ�kâŽ z  /2*n\
2*|   |
  \ k /u'     âŽ›2â‹…nâŽž
2â‹…âŽœ   âŽŸ
  âŽ� k âŽ z  / 2\
  |n |
2*|  |
  \k /u-     âŽ› 2âŽž
  âŽœn âŽŸ
2â‹…âŽœ  âŽŸ
  âŽ�k âŽ zC 
 nzB 
 nzB (x)
 n   zF 
 nzL 
 nzT 
 nzstieltjes 
         nu   Î³ 
 nzstieltjes (x)
         n   u   Î³ (x)
 n   z
C(x, y, z)z
S(x, y, z)zC'(x, y, z)zS'(x, y, z)z_
xrÆ   z________
f(1 + x)z________
f(x + 1)zf(x)zf(x, y)z# /  x     \
f|-----, y|
 \1 + y   /z# /  x     \
f|-----, y|
 \y + 1   /u9    âŽ›  x     âŽž
fâŽœâ”€â”€â”€â”€â”€, yâŽŸ
 âŽ�1 + y   âŽ u9    âŽ›  x     âŽž
fâŽœâ”€â”€â”€â”€â”€, yâŽŸ
 âŽ�y + 1   âŽ zk / / / / / x\\\\\
 | | | | \x /||||
 | | | \x    /|||
 | | \x       /||
 | \x          /|
f\x             /u»    âŽ› âŽ› âŽ› âŽ› âŽ› xâŽžâŽžâŽžâŽžâŽž
 âŽœ âŽœ âŽœ âŽœ âŽ�x âŽ âŽŸâŽŸâŽŸâŽŸ
 âŽœ âŽœ âŽœ âŽ�x    âŽ âŽŸâŽŸâŽŸ
 âŽœ âŽœ âŽ�x       âŽ âŽŸâŽŸ
 âŽœ âŽ�x          âŽ âŽŸ
fâŽ�x             âŽ z   2   
sin (x)z_     _
a - I*bu   _     _
a - â…ˆâ‹…bz _     _
 a - I*b
e       u     _     _
 a - â…ˆâ‹…b
â„¯       z#___________
 /    ____\
f\1 + f(x)/z#___________
 /____    \
f\f(x) + 1/u+   ___________
 âŽ›    ____âŽž
fâŽ�1 + f(x)âŽ u+   ___________
 âŽ›____    âŽž
fâŽ�f(x) + 1âŽ z;     /     1      \
floor|------------|
     \y - floor(x)/u;   âŽ¢   1   âŽ¥
âŽ¢â”€â”€â”€â”€â”€â”€â”€âŽ¥
âŽ£y - âŒŠxâŒ‹âŽ¦zG       /      1       \
ceiling|--------------|
       \y - ceiling(x)/u;   âŽ¡   1   âŽ¤
âŽ¢â”€â”€â”€â”€â”€â”€â”€âŽ¥
âŽ¢y - âŒˆxâŒ‰âŽ¥zE 
 nzWE         
     1    
 ---------
       1  
 1 + -----
         1
     1 + -
         nuu   E         
     1    
 â”€â”€â”€â”€â”€â”€â”€â”€â”€
       1  
 1 + â”€â”€â”€â”€â”€
         1
     1 + â”€
         nzE (x)
 n   z  /x\
E |-|
 n\2/u     âŽ›xâŽž
E âŽœâ”€âŽŸ
 nâŽ�2âŽ N)"r  rh   r�   rÔ   rÑ   rY   r  r   rj   rs   rk   rc   Úkrd   r}   r~   r   r�   r€   r‚   rƒ   r  r„   r†   r…   r   r	   rq   r  r  r   rl   re   rg   )
rÐ   r  r  r  r	  r
  r  r  r&  rÆ   rÄ   rÄ   rÅ   Útest_pretty_functionsj  sÚ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿ
ÿ	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿr*  c                  C   sú  t dƒ} d}d}t| ƒ|ks t‚t| ƒ|ks0t‚dtddƒ } d}d}t| ƒ|ksVt‚t| ƒ|ksft‚dtddƒ } d	}d
}t| ƒ|ksŒt‚t| ƒ|ksœt‚t td d ƒ} d}d}t| ƒ|ksÄt‚t| ƒ|ksÔt‚dt dƒ tddƒ } d}d}t| ƒ|k�st‚t| ƒ|k�st‚ddt  } d}d}t| ƒ|k�s<t‚t| ƒ|k�sNt‚t dt ƒ} d}d}t| ƒ|k�stt‚t| ƒ|k�s†t‚ddtd  dt   tddƒ dttddƒ  t dtd  ƒ  } d}d}t| ƒ|k�sät‚t| ƒ|k�söt‚d S )Nrä   z  ___
\/ 2 õ   âˆš2rã   rå   z3 ___
\/ 2 u   3 ___
â•²â•± 2 iè  z1000___
  \/ 2 u   1000___
  â•²â•± 2 z#   ________
  /  2     
\/  x  + 1 u)      ________
  â•±  2     
â•²â•±  x  + 1 rç   z,   ___________
3 /       ___ 
\/  1 + \/ 5  u   3 ________
â•²â•± 1 + âˆš5 zx ___
\/ 2 u   x ___
â•²â•± 2 z  ________
\/ 2 + pi u     _______
â•²â•± 2 + Ï€ ræ   zß     ____________              
    /      2        1000___    
   /      x  + 1      \/ x  + 1
4 /   2 + ------  + -----------
\/        x + 2        ________
                      /  2     
                    \/  x  + 3 u       ____________              
    â•±      2        1000___    
   â•±      x  + 1      â•²â•± x  + 1
4 â•±   2 + â”€â”€â”€â”€â”€â”€  + â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
â•²â•±        x + 2        ________
                      â•±  2     
                    â•²â•±  x  + 3 )rr   r�   rÔ   rÑ   r   r  r   r  rÄ   rÄ   rÅ   Útest_pretty_sqrth  s~    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
 ÿÿ ÿÿÿ
r,  c                  C   s@   t dƒ} d}d}t| ddd�|ks&t‚t| ddd�|ks<t‚d S )Nrä   u     ___
â•²â•± 2 r+  TF)rË   Zuse_unicode_sqrt_char)rr   rÎ   rÔ   )rÐ   Ú
ucode_str1Ú
ucode_str2rÄ   rÄ   rÅ   Útest_pretty_sqrt_char_knobå  s    ÿÿÿÿÿÿr/  c                  C   s$   t tdƒƒ} d}t| ƒ|ks t‚d S )NZC1u     ____
â•²â•± Câ‚� )rr   r   rÑ   rÔ   )rÐ   r  rÄ   rÄ   rÅ   Ú(test_pretty_sqrt_longsymbol_no_sqrt_charõ  s    ÿr0  c                  C   sB   t dƒ\} }t| |ƒ}d}d}t|ƒ|ks.t‚t|ƒ|ks>t‚d S )Nzx, yz	d   
 x,yu
   Î´   
 x,y)r   r]   r�   rÔ   rÑ   ©r  r  rÐ   r  r  rÄ   rÄ   rÅ   Útest_pretty_KroneckerDelta 	  s    
ÿÿr2  c                  C   s˜   t dƒ\} }}}t dtd�}t|| d d ƒ| |d |fƒ}d}d}t|| d d ƒ| |d |f|d|fƒ}d	}d
}t|ƒ|ks„t‚t|ƒ|ks”t‚d S )Nzn m k lrÆ   ©Úclsrå   rä   uÔ       l           
â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€      
 â”‚      â”‚   âŽ› 2âŽž
 â”‚      â”‚   âŽœn âŽŸ
 â”‚      â”‚  fâŽœâ”€â”€âŽŸ
 â”‚      â”‚   âŽ�9 âŽ 
 â”‚      â”‚       
       2        
  n = k         z˜    l           
__________      
 |      |   / 2\
 |      |   |n |
 |      |  f|--|
 |      |   \9 /
 |      |       
       2        
  n = k         rã   u_      m          l           
â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€ â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€      
 â”‚      â”‚   â”‚      â”‚   âŽ› 2âŽž
 â”‚      â”‚   â”‚      â”‚   âŽœn âŽŸ
 â”‚      â”‚   â”‚      â”‚  fâŽœâ”€â”€âŽŸ
 â”‚      â”‚   â”‚      â”‚   âŽ�9 âŽ 
 â”‚      â”‚   â”‚      â”‚       
  l = 1           2        
             n = k         zû    m          l           
__________ __________      
 |      |   |      |   / 2\
 |      |   |      |   |n |
 |      |   |      |  f|--|
 |      |   |      |   \9 /
 |      |   |      |       
  l = 1           2        
             n = k         )r   r	   r   r�   rÔ   rÑ   )r&  Úmr)  ÚlrÆ   rÐ   Úunicode_strr  rÄ   rÄ   rÅ   Útest_pretty_product	  s     ÿÿ(ÿÿr8  c                  C   s€  t ttƒ} t| ƒdkst‚t| ƒdks*t‚t ttd ƒ} t| ƒdksHt‚t| ƒdksXt‚t ttd ƒ} d}d}t| ƒ|ks~t‚t| ƒ|ksŽt‚t ttd ƒd } d	}d
}t| ƒ|ks¸t‚t| ƒ|ksÈt‚t ttftƒ} d}d}t| ƒ|ksît‚t| ƒ|ksþt‚t ttftd ƒ} d}d}t| ƒ|k�s*t‚t| ƒ|k�s<t‚t ttfftd ƒ} d}d}t| ƒ|k�sjt‚t| ƒ|k�s|t‚d S )Nzx -> xu   x â†¦ xrã   z
x -> x + 1u   x â†¦ x + 1rä   z      2
x -> x u        2
x â†¦ x z          2
/      2\ 
\x -> x / u'           2
âŽ›     2âŽž 
âŽ�x â†¦ x âŽ  z(x, y) -> xu   (x, y) â†¦ xz           2
(x, y) -> x u             2
(x, y) â†¦ x z              2
((x, y),) -> x u                2
((x, y),) â†¦ x )r
   r  r�   rÔ   rÑ   r  r  rÄ   rÄ   rÅ   Útest_pretty_LambdaJ	  sN    
ÿÿÿÿÿÿÿÿr9  c                  C   sp   t td td tƒ} t| ƒdks$t‚t dt d dt tƒ}t|ƒdksLt‚t ttd tƒ}t|ƒdkslt‚d S )Nrã   u   s - 1
â”€â”€â”€â”€â”€
s + 1rä   rå   u'   2â‹…s + 1
â”€â”€â”€â”€â”€â”€â”€
 3 - p u     p  
â”€â”€â”€â”€â”€
p + 1)r‘   ÚsrÑ   rÔ   Úp)Útf1Útf2Útf3rÄ   rÄ   rÅ   Útest_pretty_TransferFunction•	  s    r?  c                  C   s¤  t tt tdt  tƒ} t tt tt tƒ}t td t tt tƒ}t ddtƒ}t| |g||ggƒ}t|g| ggƒ}t| | | g|| |ggƒ}t| |g|| g| |  ggƒ}t| |  g|| g| |ggƒ}d}	d}
d}d}d}d}tt| |ƒƒ|	k�st‚tt| |  ƒƒ|
k�s t‚tt|| t|  |ƒƒƒ|k�sBt‚ttt| |ƒt||ƒƒƒ|k�sft‚tt||ƒƒ|k�s~t‚ttt	|| ƒ||ƒƒ|k�s t‚d S )	Nrä   rå   u…             âŽ› 2    âŽž
âŽ› x + y âŽž âŽœx  + yâŽŸ
âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€âŽŸ
âŽ�x - 2â‹…yâŽ  âŽ�-x + yâŽ un   âŽ›-x + yâŽž âŽ›-x - y âŽž
âŽœâ”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸ
âŽ�x + y âŽ  âŽ�x - 2â‹…yâŽ uõ   âŽ› 2    âŽž                            
âŽœx  + yâŽŸ âŽ› x + y âŽž âŽ›-x - y    x - yâŽž
âŽœâ”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€âŽŸ
âŽ�-x + yâŽ  âŽ�x - 2â‹…yâŽ  âŽ�x - 2â‹…y   x + yâŽ uÙ                     âŽ›         2    âŽž
âŽ› x + y    x - yâŽž âŽœx - y   x  + yâŽŸ
âŽœâ”€â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€â”€âŽŸ
âŽ�x - 2â‹…y   x + yâŽ  âŽ�x + y   -x + yâŽ u]  âŽ¡ x + y   x - yâŽ¤  âŽ¡ 2    âŽ¤ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€âŽ¥  âŽ¢x  + yâŽ¥ 
âŽ¢x - 2â‹…y  x + yâŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢              âŽ¥  âŽ¢-x + yâŽ¥ 
âŽ¢ 2            âŽ¥ â‹…âŽ¢      âŽ¥ 
âŽ¢x  + y     2  âŽ¥  âŽ¢ -2   âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€     â”€  âŽ¥  âŽ¢ â”€â”€â”€  âŽ¥ 
âŽ£-x + y     3  âŽ¦Ï„ âŽ£  3   âŽ¦Ï„u                                                 âŽ›âŽ¡ x + y    x - y âŽ¤    âŽ¡ x - y    x + y âŽ¤ âŽž
                                               âŽœâŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥    âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥ âŽŸ
âŽ¡ x + y   x - yâŽ¤  âŽ¡                    2    âŽ¤  âŽœâŽ¢x - 2â‹…y   x + y âŽ¥    âŽ¢ x + y   x - 2â‹…yâŽ¥ âŽŸ
âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€âŽ¥  âŽ¢ x + y   -x + y  - x  - yâŽ¥  âŽœâŽ¢                âŽ¥    âŽ¢                âŽ¥ âŽŸ
âŽ¢x - 2â‹…y  x + yâŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥  âŽœâŽ¢ 2              âŽ¥    âŽ¢          2     âŽ¥ âŽŸ
âŽ¢              âŽ¥  âŽ¢x - 2â‹…y  x + y    -x + y âŽ¥  âŽœâŽ¢x  + y     -2   âŽ¥    âŽ¢  -2     x  + y âŽ¥ âŽŸ
âŽ¢ 2            âŽ¥ â‹…âŽ¢                         âŽ¥ â‹…âŽœâŽ¢â”€â”€â”€â”€â”€â”€     â”€â”€â”€  âŽ¥  + âŽ¢  â”€â”€â”€    â”€â”€â”€â”€â”€â”€ âŽ¥ âŽŸ
âŽ¢x  + y     2  âŽ¥  âŽ¢ 2                       âŽ¥  âŽœâŽ¢-x + y      3   âŽ¥    âŽ¢   3     -x + y âŽ¥ âŽŸ
âŽ¢â”€â”€â”€â”€â”€â”€     â”€  âŽ¥  âŽ¢x  + y    -2      x - y  âŽ¥  âŽœâŽ¢                âŽ¥    âŽ¢                âŽ¥ âŽŸ
âŽ£-x + y     3  âŽ¦Ï„ âŽ¢â”€â”€â”€â”€â”€â”€    â”€â”€â”€     â”€â”€â”€â”€â”€  âŽ¥  âŽœâŽ¢-x + y   -x - y âŽ¥    âŽ¢-x - y   -x + y âŽ¥ âŽŸ
                  âŽ£-x + y     3      x + y  âŽ¦Ï„ âŽœâŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥    âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€ âŽ¥ âŽŸ
                                               âŽ�âŽ£x + y    x - 2â‹…yâŽ¦Ï„   âŽ£x - 2â‹…y  x + y  âŽ¦Ï„âŽ )
r‘   r  r  r“   rÑ   r”   rÔ   r•   r–   r—   )r<  r=  r>  Útf4Útfm1Útfm2Útfm3Útfm4Ztfm5Ú	expected1Ú	expected2Ú	expected3Ú	expected4Ú	expected5Ú	expected6rÄ   rÄ   rÅ   Útest_pretty_Seriesž	  s6      ÿÿÿÿÿÿ"$rK  c                  C   s®  t tt tdt  tƒ} t tt tt tƒ}t td t tt tƒ}t td t td t tƒ}t| |g|| g| |  ggƒ}t| |  g|| g| |ggƒ}t|  |g| |g|| ggƒ}t|  | g| | ggƒ}d}d}	d}
d}d}d}tt| |ƒƒ|k�s
t‚tt| |  ƒƒ|	k�s&t‚tt|| t|  |ƒƒƒ|
k�sHt‚ttt| |ƒt||ƒƒƒ|k�slt‚tt| | |ƒƒ|k�sŠt‚ttt	|| ƒ|ƒƒ|k�sªt‚d S )	Nrä   rå   uI    x + y    x - y
â”€â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€
x - 2â‹…y   x + yuN   -x + y   -x - y 
â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€â”€â”€
x + y    x - 2â‹…yuã    2                                  
x  + y    x + y    âŽ›-x - y âŽž âŽ›x - yâŽž
â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€â”€â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ
-x + y   x - 2â‹…y   âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ uû                               âŽ› 2    âŽž
âŽ› x + y âŽž âŽ›x - yâŽž   âŽ›x - yâŽž âŽœx  + yâŽŸ
âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ + âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€âŽŸ
âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ    âŽ�x + yâŽ  âŽ�-x + yâŽ uÊ  âŽ¡ x + y   -x + y âŽ¤    âŽ¡ x - y    x + y âŽ¤    âŽ¡ x + y    x - y âŽ¤ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€ âŽ¥    âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥    âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥ 
âŽ¢x - 2â‹…y  x + y  âŽ¥    âŽ¢ x + y   x - 2â‹…yâŽ¥    âŽ¢x - 2â‹…y   x + y âŽ¥ 
âŽ¢                âŽ¥    âŽ¢                âŽ¥    âŽ¢                âŽ¥ 
âŽ¢ 2            2 âŽ¥    âŽ¢     2    2     âŽ¥    âŽ¢ 2            2 âŽ¥ 
âŽ¢x  + y   x - y  âŽ¥    âŽ¢x - y    x  + y âŽ¥    âŽ¢x  + y   x - y  âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€ âŽ¥  + âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€ âŽ¥  + âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€ âŽ¥ 
âŽ¢-x + y    3     âŽ¥    âŽ¢ 3       -x + y âŽ¥    âŽ¢-x + y    3     âŽ¥ 
âŽ¢         x  + x âŽ¥    âŽ¢x  + x          âŽ¥    âŽ¢         x  + x âŽ¥ 
âŽ¢                âŽ¥    âŽ¢                âŽ¥    âŽ¢                âŽ¥ 
âŽ¢-x + y   -x - y âŽ¥    âŽ¢-x - y   -x + y âŽ¥    âŽ¢-x + y   -x - y âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥    âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€ âŽ¥    âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ£x + y    x - 2â‹…yâŽ¦Ï„   âŽ£x - 2â‹…y  x + y  âŽ¦Ï„   âŽ£x + y    x - 2â‹…yâŽ¦Ï„u�  âŽ¡ x - y    x + y âŽ¤                        âŽ¡-x + y   -x - y  âŽ¤ 
âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥                        âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€ âŽ¥ 
âŽ¢ x + y   x - 2â‹…yâŽ¥  âŽ¡-x - y    -x + yâŽ¤    âŽ¢x + y    x - 2â‹…y âŽ¥ 
âŽ¢                âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€âŽ¥    âŽ¢                 âŽ¥ 
âŽ¢     2    2     âŽ¥  âŽ¢x - 2â‹…y   x + y âŽ¥    âŽ¢      2     2    âŽ¥ 
âŽ¢x - y    x  + y âŽ¥  âŽ¢                âŽ¥    âŽ¢-x + y   - x  - yâŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€ âŽ¥ â‹…âŽ¢   2           2âŽ¥  + âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢ 3       -x + y âŽ¥  âŽ¢- x  - y  x - y âŽ¥    âŽ¢ 3        -x + y âŽ¥ 
âŽ¢x  + x          âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€âŽ¥    âŽ¢x  + x           âŽ¥ 
âŽ¢                âŽ¥  âŽ¢ -x + y    3    âŽ¥    âŽ¢                 âŽ¥ 
âŽ¢-x - y   -x + y âŽ¥  âŽ£          x  + xâŽ¦Ï„   âŽ¢ x + y    x - y  âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€ âŽ¥                        âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€  âŽ¥ 
âŽ£x - 2â‹…y  x + y  âŽ¦Ï„                       âŽ£x - 2â‹…y   x + y  âŽ¦Ï„)
r‘   r  r  r“   rÑ   r•   rÔ   r”   r—   r–   )r<  r=  r>  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rÄ   rÄ   rÅ   Útest_pretty_Parallelè	  s4      ÿÿÿ	ÿÿÿ"$rL  c                  C   sÔ  t ddtƒ} t tt tdt  tƒ}t tt tt tƒ}t td dt  d td tƒ}t tdtd   tt tƒ}t dt tt tƒ}t ddtƒ}d}d}d}	d}
d	}d
}d}d}d}d}tt| |ƒƒ|ksÒt‚tt| || | ƒƒ|ksðt‚tt||| | ƒƒ|	k�st‚tt|| | ƒƒ|
k�s,t‚tt|| |ƒƒ|k�sHt‚tt|| || ƒƒ|k�sht‚tt||ƒƒ|k�s€t‚tt|| ƒƒ|k�s˜t‚tt|| |dƒƒ|k�s¶t‚tt|| dƒƒ|k�sÐt‚d S )Nrã   rä   rç   rå   u§        âŽ›1âŽž     
     âŽœâ”€âŽŸ     
     âŽ�1âŽ      
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ› x + y âŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - 2â‹…yâŽ uß                  âŽ›1âŽž                 
                âŽœâ”€âŽŸ                 
                âŽ�1âŽ                  
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
                      âŽ› 2          âŽž
1   âŽ›x - yâŽž âŽ› x + y âŽž âŽœy  - 2â‹…y + 1âŽŸ
â”€ + âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ
1   âŽ�x + yâŽ  âŽ�x - 2â‹…yâŽ  âŽ�   y + 5    âŽ uU                   âŽ› x + y âŽž                  
                 âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸ                  
                 âŽ�x - 2â‹…yâŽ                   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
                      âŽ› 2          âŽž        
1   âŽ› x + y âŽž âŽ›x - yâŽž âŽœy  - 2â‹…y + 1âŽŸ âŽ›1 - xâŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ  âŽ�   y + 5    âŽ  âŽ�x - yâŽ u-    âŽ› x + y âŽž âŽ›x - yâŽž  
  âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ  
  âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ› x + y âŽž âŽ›x - yâŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ u�        âŽ› x + y âŽž âŽ›x - yâŽž      
      âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ      
      âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ       
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ› x + y âŽž âŽ›x - yâŽž âŽ›1 - xâŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ  âŽ�x - yâŽ u¨             âŽ› 2          âŽž                   
           âŽœy  - 2â‹…y + 1âŽŸ âŽ›1 - xâŽž           
           âŽœâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ           
           âŽ�   y + 5    âŽ  âŽ�x - yâŽ            
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
    âŽ› 2          âŽž                          
1   âŽœy  - 2â‹…y + 1âŽŸ âŽ›1 - xâŽž âŽ›x - yâŽž âŽ› x + y âŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸ
1   âŽ�   y + 5    âŽ  âŽ�x - yâŽ  âŽ�x + yâŽ  âŽ�x - 2â‹…yâŽ u$      âŽ›       3âŽž    
    âŽœx - 2â‹…y âŽŸ    
    âŽœâ”€â”€â”€â”€â”€â”€â”€â”€âŽŸ    
    âŽ� x + y  âŽ     
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
    âŽ›       3âŽž    
1   âŽœx - 2â‹…y âŽŸ âŽ›2âŽž
â”€ + âŽœâ”€â”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€âŽŸ
1   âŽ� x + y  âŽ  âŽ�2âŽ u—     âŽ›1 - xâŽž  
  âŽœâ”€â”€â”€â”€â”€âŽŸ  
  âŽ�x - yâŽ   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ›1 - xâŽž
â”€ + âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - yâŽ u�        âŽ› x + y âŽž âŽ›x - yâŽž      
      âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ      
      âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ       
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ› x + y âŽž âŽ›x - yâŽž âŽ›1 - xâŽž
â”€ - âŽœâ”€â”€â”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸâ‹…âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - 2â‹…yâŽ  âŽ�x + yâŽ  âŽ�x - yâŽ u—     âŽ›1 - xâŽž  
  âŽœâ”€â”€â”€â”€â”€âŽŸ  
  âŽ�x - yâŽ   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
1   âŽ›1 - xâŽž
â”€ - âŽœâ”€â”€â”€â”€â”€âŽŸ
1   âŽ�x - yâŽ )r‘   r  r  rÑ   r’   rÔ   )Útfr<  r=  r>  r@  Útf5Útf6rE  rF  rG  rH  rI  rJ  Z	expected7Z	expected8Z	expected9Z
expected10rÄ   rÄ   rÅ   Útest_pretty_Feedback6
  sJ     ÿÿÿÿÿÿÿÿÿÿ
  rP  c                  C   s¦   t tt tdt  tƒ} t tt tt tƒ}t| |g|| ggƒ}t|| g| |ggƒ}t| | g||ggƒ}d}d}tt||dƒƒ|ksˆt‚tt|| |ƒƒ|ks¢t‚d S )Nrä   uü  âŽ›    âŽ¡ x + y    x - y âŽ¤  âŽ¡ x - y    x + y âŽ¤ âŽž-1   âŽ¡ x + y    x - y âŽ¤ 
âŽœ    âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥  âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥ âŽŸ     âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥ 
âŽœ    âŽ¢x - 2â‹…y   x + y âŽ¥  âŽ¢ x + y   x - 2â‹…yâŽ¥ âŽŸ     âŽ¢x - 2â‹…y   x + y âŽ¥ 
âŽœI - âŽ¢                âŽ¥ â‹…âŽ¢                âŽ¥ âŽŸ   â‹… âŽ¢                âŽ¥ 
âŽœ    âŽ¢ x - y    x + y âŽ¥  âŽ¢ x + y    x - y âŽ¥ âŽŸ     âŽ¢ x - y    x + y âŽ¥ 
âŽœ    âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥ âŽŸ     âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ�    âŽ£ x + y   x - 2â‹…yâŽ¦Ï„ âŽ£x - 2â‹…y   x + y âŽ¦Ï„âŽ      âŽ£ x + y   x - 2â‹…yâŽ¦Ï„uº  âŽ›    âŽ¡ x + y    x - y âŽ¤  âŽ¡ x - y    x + y âŽ¤  âŽ¡ x + y    x + y âŽ¤ âŽž-1   âŽ¡ x + y    x - y âŽ¤  âŽ¡ x - y    x + y âŽ¤ 
âŽœ    âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥  âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€âŽ¥ âŽŸ     âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥  âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽœ    âŽ¢x - 2â‹…y   x + y âŽ¥  âŽ¢ x + y   x - 2â‹…yâŽ¥  âŽ¢x - 2â‹…y  x - 2â‹…yâŽ¥ âŽŸ     âŽ¢x - 2â‹…y   x + y âŽ¥  âŽ¢ x + y   x - 2â‹…yâŽ¥ 
âŽœI + âŽ¢                âŽ¥ â‹…âŽ¢                âŽ¥ â‹…âŽ¢                âŽ¥ âŽŸ   â‹… âŽ¢                âŽ¥ â‹…âŽ¢                âŽ¥ 
âŽœ    âŽ¢ x - y    x + y âŽ¥  âŽ¢ x + y    x - y âŽ¥  âŽ¢ x - y    x - y âŽ¥ âŽŸ     âŽ¢ x - y    x + y âŽ¥  âŽ¢ x + y    x - y âŽ¥ 
âŽœ    âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥  âŽ¢ â”€â”€â”€â”€â”€    â”€â”€â”€â”€â”€ âŽ¥ âŽŸ     âŽ¢ â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€â”€â”€âŽ¥  âŽ¢â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€ âŽ¥ 
âŽ�    âŽ£ x + y   x - 2â‹…yâŽ¦Ï„ âŽ£x - 2â‹…y   x + y âŽ¦Ï„ âŽ£ x + y    x + y âŽ¦Ï„âŽ      âŽ£ x + y   x - 2â‹…yâŽ¦Ï„ âŽ£x - 2â‹…y   x + y âŽ¦Ï„rã   )r‘   r  r  r“   rÑ   r˜   rÔ   )r<  r=  Ztfm_1Ztfm_2Ztfm_3rE  rF  rÄ   rÄ   rÅ   Útest_pretty_MIMOFeedbackµ
  s    ÿÿÿÿrQ  c                  C   s`  t tt tdt  tƒ} t tt tt tƒ}t td dt  d td tƒ}t ttd t d tƒ}t dt tt tƒ}t ddtƒ}d}d}d}d}	d}
tt| g|ggƒƒ|ks´t‚tt| g|g| ggƒƒ|ksÖt‚tt| |g||g||ggƒƒ|ksüt‚tt|| |g| | | ggƒƒ|	k�s(t‚ttt|| ƒ| |gt||ƒ| | ggƒƒ|
k�s\t‚d S )	Nrä   rã   rç   uƒ   âŽ¡ x + y âŽ¤ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢x - 2â‹…yâŽ¥ 
âŽ¢       âŽ¥ 
âŽ¢ x - y âŽ¥ 
âŽ¢ â”€â”€â”€â”€â”€ âŽ¥ 
âŽ£ x + y âŽ¦Ï„u@  âŽ¡    x + y     âŽ¤ 
âŽ¢   â”€â”€â”€â”€â”€â”€â”€    âŽ¥ 
âŽ¢   x - 2â‹…y    âŽ¥ 
âŽ¢              âŽ¥ 
âŽ¢    x - y     âŽ¥ 
âŽ¢    â”€â”€â”€â”€â”€     âŽ¥ 
âŽ¢    x + y     âŽ¥ 
âŽ¢              âŽ¥ 
âŽ¢   2          âŽ¥ 
âŽ¢- y  + 2â‹…y - 1âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ£    y + 5     âŽ¦Ï„uô  âŽ¡   x + y        x - y   âŽ¤ 
âŽ¢  â”€â”€â”€â”€â”€â”€â”€       â”€â”€â”€â”€â”€   âŽ¥ 
âŽ¢  x - 2â‹…y       x + y   âŽ¥ 
âŽ¢                        âŽ¥ 
âŽ¢ 2                      âŽ¥ 
âŽ¢y  - 2â‹…y + 1      y     âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢   y + 5       2        âŽ¥ 
âŽ¢              x  + x + 1âŽ¥ 
âŽ¢                        âŽ¥ 
âŽ¢   1 - x          2     âŽ¥ 
âŽ¢   â”€â”€â”€â”€â”€          â”€     âŽ¥ 
âŽ£   x - y          2     âŽ¦Ï„uß  âŽ¡    x - y        x + y       y     âŽ¤ 
âŽ¢    â”€â”€â”€â”€â”€       â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢    x + y       x - 2â‹…y   2        âŽ¥ 
âŽ¢                         x  + x + 1âŽ¥ 
âŽ¢                                   âŽ¥ 
âŽ¢   2                               âŽ¥ 
âŽ¢- y  + 2â‹…y - 1   x - 1      -2     âŽ¥ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€   â”€â”€â”€â”€â”€      â”€â”€â”€    âŽ¥ 
âŽ£    y + 5        x - y       2     âŽ¦Ï„u²  âŽ¡ x + y  x - y   x + y       y     âŽ¤ 
âŽ¢â”€â”€â”€â”€â”€â”€â”€â‹…â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€  â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽ¥ 
âŽ¢x - 2â‹…y x + y  x - 2â‹…y   2        âŽ¥ 
âŽ¢                        x  + x + 1âŽ¥ 
âŽ¢                                  âŽ¥ 
âŽ¢  1 - x   2     x + y      -2     âŽ¥ 
âŽ¢  â”€â”€â”€â”€â”€ + â”€    â”€â”€â”€â”€â”€â”€â”€     â”€â”€â”€    âŽ¥ 
âŽ£  x - y   2    x - 2â‹…y      2     âŽ¦Ï„)r‘   r  r  rÑ   r“   rÔ   r”   r•   )r<  r=  r>  r@  rN  rO  rE  rF  rG  rH  rI  rÄ   rÄ   rÅ   Ú"test_pretty_TransferFunctionMatrix×
  s.     ÿÿÿÿÿ"&,(ÿrR  c            
      C   sú   t ttgƒttgƒttgƒttgƒƒ} tddgddggƒ}tddgƒ}tddggƒ}tdgƒ}t ||||ƒ}t tddgddggƒtddgddggƒtddgddggƒtddgddggƒƒ}d}d}d	}	t| ƒ|ksÖt‚t|ƒ|ksæt‚t|ƒ|	ksöt‚d S )
Nr   rã   g      ø¿rô   ç      à?rä   u,   âŽ¡[a]  [b]âŽ¤
âŽ¢        âŽ¥
âŽ£[c]  [d]âŽ¦uq   âŽ¡âŽ¡0  1âŽ¤  âŽ¡1âŽ¤âŽ¤
âŽ¢âŽ¢    âŽ¥  âŽ¢ âŽ¥âŽ¥
âŽ¢âŽ£1  0âŽ¦  âŽ£0âŽ¦âŽ¥
âŽ¢           âŽ¥
âŽ£[0  1]  [0]âŽ¦uì   âŽ¡âŽ¡-1.5  -2âŽ¤  âŽ¡0.5  0âŽ¤âŽ¤
âŽ¢âŽ¢        âŽ¥  âŽ¢      âŽ¥âŽ¥
âŽ¢âŽ£ 1    0 âŽ¦  âŽ£ 0   1âŽ¦âŽ¥
âŽ¢                    âŽ¥
âŽ¢  âŽ¡0  1âŽ¤     âŽ¡2  2âŽ¤ âŽ¥
âŽ¢  âŽ¢    âŽ¥     âŽ¢    âŽ¥ âŽ¥
âŽ£  âŽ£0  2âŽ¦     âŽ£1  1âŽ¦ âŽ¦)r™   r5   r  r  ÚcÚdrÑ   rÔ   )
Zss1ÚAÚBÚCÚDZss2Zss3rE  rF  rG  rÄ   rÄ   rÅ   Útest_pretty_StateSpace'  s(    &
ýÿÿ	ÿrZ  c                  C   sd  t dƒ} d}d}t| ƒ|ks t‚t| ƒ|ks0t‚t dt ƒ} d}d}t| ƒ|ksTt‚t| ƒ|ksdt‚t td td  ƒ} d}d}t| ƒ|ks�t‚t| ƒ|ks t‚t dttfƒ} d}d	}t| ƒ|ksÆt‚t| ƒ|ksÖt‚t dt ttfƒ} d
}d}t| ƒ|k�st‚t| ƒ|k�st‚t td td  ttfttfƒ} d}d}t| ƒ|k�sNt‚t| ƒ|k�s`t‚d S )Nrã   zO(1)z /1\
O|-|
 \x/u    âŽ›1âŽž
OâŽœâ”€âŽŸ
 âŽ�xâŽ rä   z9 / 2    2                  \
O\x  + y ; (x, y) -> (0, 0)/uA    âŽ› 2    2                 âŽž
OâŽ�x  + y ; (x, y) â†’ (0, 0)âŽ zO(1; x -> oo)u   O(1; x â†’ âˆž)z) /1         \
O|-; x -> oo|
 \x         /u5    âŽ›1       âŽž
OâŽœâ”€; x â†’ âˆžâŽŸ
 âŽ�x       âŽ z= / 2    2                    \
O\x  + y ; (x, y) -> (oo, oo)/uE    âŽ› 2    2                 âŽž
OâŽ�x  + y ; (x, y) â†’ (âˆž, âˆž)âŽ )rE   r�   rÔ   rÑ   r  r  r   r  rÄ   rÄ   rÅ   Útest_pretty_orderP  sT    ÿÿÿÿÿÿÿÿÿÿ ÿÿr[  c                  C   sð  t ttƒtdd�} d}d}t| ƒ|ks*t‚t| ƒ|ks:t‚t ttƒtdd�t } d}d}d}d}t| ƒ||fkstt‚t| ƒ||fksˆt‚t ttt ƒt tƒ} d	}d
}d}d}t| ƒ||fksÂt‚t| ƒ||fksÞtt| ƒƒ‚t ttƒtd  ttƒ} d}d}d}d}d}d}t| ƒ|||fk�s&t‚t| ƒ|||fk�s>t‚t dt t ttƒtd  } d}d}d}d}d}d}t| ƒ|||fk�sŠt‚t| ƒ|||fk�s¢t‚t dt t ttƒ} d}d}t| ƒ|k�sÐt‚t| ƒ|k�sât‚t dt t tdƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s"t‚t dt t tttƒ} d}d }t| ƒ|k�sRt‚t| ƒ|k�sdt‚td!ƒ}	td"ƒ}
|
|	ƒ 	|	¡} d#}d$}t| ƒ|k�sœt‚t| ƒ|k�s®t‚t t
tƒttfƒ} d%}d&}t| ƒ|k�sÚt‚t| ƒ|k�sìt‚d S )'NFrò   z d         
--(log(x))
dx        u$   d         
â”€â”€(log(x))
dx        z,    d         
x + --(log(x))
    dx        z,d             
--(log(x)) + x
dx            u0       d         
x + â”€â”€(log(x))
    dx        u0   d             
â”€â”€(log(x)) + x
dx            z8d                 
--(log(x + y) + x)
dx                z8d                 
--(x + log(x + y))
dx                u@   âˆ‚                 
â”€â”€(log(x + y) + x)
âˆ‚x                u@   âˆ‚                 
â”€â”€(x + log(x + y))
âˆ‚x                rä   zK   2              
  d  /          2\
-----\log(x) + x /
dy dx             zK   2              
  d  / 2         \
-----\x  + log(x)/
dy dx             zK  2               
 d   / 2         \
-----\x  + log(x)/
dy dx             u]      2              
  d  âŽ›          2âŽž
â”€â”€â”€â”€â”€âŽ�log(x) + x âŽ 
dy dx             u]      2              
  d  âŽ› 2         âŽž
â”€â”€â”€â”€â”€âŽ�x  + log(x)âŽ 
dy dx             u]     2               
 d   âŽ› 2         âŽž
â”€â”€â”€â”€â”€âŽ�x  + log(x)âŽ 
dy dx             zG   2             
  d             2
-----(2*x*y) + x 
dx dy            zG        2        
 2     d         
x  + -----(2*x*y)
     dx dy       zG       2         
 2    d          
x  + -----(2*x*y)
     dx dy       u[      2             
  âˆ‚             2
â”€â”€â”€â”€â”€(2â‹…xâ‹…y) + x 
âˆ‚x âˆ‚y            u[           2        
 2     âˆ‚         
x  + â”€â”€â”€â”€â”€(2â‹…xâ‹…y)
     âˆ‚x âˆ‚y       u[          2         
 2    âˆ‚          
x  + â”€â”€â”€â”€â”€(2â‹…xâ‹…y)
     âˆ‚x âˆ‚y       z6 2        
d         
---(2*x*y)
  2       
dx        uD    2        
âˆ‚         
â”€â”€â”€(2â‹…xâ‹…y)
  2       
âˆ‚x        é   z; 17        
d          
----(2*x*y)
  17       
dx         uK    17        
âˆ‚          
â”€â”€â”€â”€(2â‹…xâ‹…y)
  17       
âˆ‚x         zE   3         
  d          
------(2*x*y)
     2       
dy dx        u[      3         
  âˆ‚          
â”€â”€â”€â”€â”€â”€(2â‹…xâ‹…y)
     2       
âˆ‚y âˆ‚x        Úalpharb   z;  d                
------(beta(alpha))
dalpha             u!   d       
â”€â”€(Î²(Î±))
dÎ±      z1 n       
d        
---(f(x))
  n      
dx       u7    n       
d        
â”€â”€â”€(f(x))
  n      
dx       )r   ro   r  r�   rÔ   rÑ   r  r   r	   ÚdiffrÆ   r&  )rÐ   r  r  r  r  r  r	  r  r
  r]  rb   rÄ   rÄ   rÅ   Útest_pretty_derivatives¦  sÀ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ	ÿÿ	ÿÿ	ÿÿÿÿ	ÿr_  c                  C   s  t ttƒtƒ} d}d}t| ƒ|ks&t‚t| ƒ|ks6t‚t td tƒ} d}d}t| ƒ|ks\t‚t| ƒ|kslt‚t ttƒd ttƒd  ƒ} d}d}t| ƒ|ks t‚t| ƒ|ks°t‚t tdt  tƒ} d}d	}t| ƒ|ksÚt‚t| ƒ|ksêt‚t td td
dfƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s*t‚t td ttd
dƒdfƒ} d}d}t| ƒ|k�s^t‚t| ƒ|k�spt‚t td t	d  tt	ƒ} d}d}t| ƒ|k�s¢t‚t| ƒ|k�s´t‚t tt
ƒttƒ t
dtftddt fƒ} d}d}t| ƒ|k�söt‚t| ƒ|k�st‚d S )Nz@  /         
 |          
 | log(x) dx
 |          
/           u)   âŒ           
âŽ® log(x) dx
âŒ¡          rä   z5  /     
 |      
 |  2   
 | x  dx
 |      
/       u'   âŒ       
âŽ®  2   
âŽ® x  dx
âŒ¡      z}  /          
 |           
 |    2      
 | sin (x)   
 | ------- dx
 |    2      
 | tan (x)   
 |           
/            uv   âŒ            
âŽ®    2      
âŽ® sin (x)   
âŽ® â”€â”€â”€â”€â”€â”€â”€ dx
âŽ®    2      
âŽ® tan (x)   
âŒ¡           zS  /        
 |         
 |  / x\   
 |  \2 /   
 | x     dx
 |         
/          uH   âŒ          
âŽ®  âŽ› xâŽž   
âŽ®  âŽ�2 âŽ    
âŽ® x     dx
âŒ¡         rã   zO  2      
  /      
 |       
 |   2   
 |  x  dx
 |       
/        
1        u7   2      
âŒ       
âŽ®  2   
âŽ® x  dx
âŒ¡      
1      r   zO 10      
  /      
 |       
 |   2   
 |  x  dx
 |       
/        
1/2      uC   10       
âŒ         
âŽ®    2   
âŽ®   x  dx
âŒ¡        
1/2      zk  /  /           
 |  |            
 |  |  2  2      
 |  | x *y  dx dy
 |  |            
/  /             uQ   âŒ  âŒ             
âŽ® âŽ®  2  2      
âŽ® âŽ® x â‹…y  dx dy
âŒ¡ âŒ¡            r   aC   2*pi pi                           
   /   /                           
  |   |                            
  |   |  sin(theta)                
  |   |  ---------- d(theta) d(phi)
  |   |   cos(phi)                 
  |   |                            
 /   /                             
0    0                             u¬   2â‹…Ï€ Ï€             
 âŒ   âŒ              
 âŽ®  âŽ® sin(Î¸)      
 âŽ®  âŽ® â”€â”€â”€â”€â”€â”€ dÎ¸ dÏ†
 âŽ®  âŽ® cos(Ï†)      
 âŒ¡  âŒ¡             
 0  0             )r+   ro   r  r�   rÔ   rÑ   rq   rt   r   r  Úthrf   Úphr   r  rÄ   rÄ   rÅ   Útest_pretty_integrals³  sp    ÿ	ÿÿ
ÿÿÿ
ÿÿÿÿ	ÿÿ	ÿ
ÿ(ÿÿ
rb  c                  C   st  t ƒ } d}d}t| ƒ|kst‚t| ƒ|ks.t‚t dddd„ ƒ} d}d}t| ƒ|ksVt‚t| ƒ|ksft‚t dddd„ ƒ} d}d}t| ƒ|ksŽt‚t| ƒ|ksžt‚t td d dgttt ggƒ} d}d	}d
}d}t| ƒ||fksât‚t| ƒ||fksöt‚t tt ttgdttt	 t
 ƒdggƒ} d}d}t| ƒ|k�s8t‚t| ƒ|k�sJt‚d}ttdddƒŽ } t| ƒ|k�spt‚d S )Nú[]rä   r   c                 S   s   dS ©Nr   rÄ   ©ÚiÚjrÄ   rÄ   rÅ   Ú<lambda>p  ó    z$test_pretty_matrix.<locals>.<lambda>c                 S   s   dS rd  rÄ   re  rÄ   rÄ   rÅ   rh  u  ri  rã   z?[     2       ]
[1 + x     1  ]
[             ]
[  y     x + y]z?[ 2           ]
[x  + 1    1  ]
[             ]
[  y     x + y]uO   âŽ¡     2       âŽ¤
âŽ¢1 + x     1  âŽ¥
âŽ¢             âŽ¥
âŽ£  y     x + yâŽ¦uO   âŽ¡ 2           âŽ¤
âŽ¢x  + 1    1  âŽ¥
âŽ¢             âŽ¥
âŽ£  y     x + yâŽ¦z}[x                 ]
[-     y      theta]
[y                 ]
[                  ]
[    I*k*phi       ]
[0  e           1  ]u}   âŽ¡x           âŽ¤
âŽ¢â”€    y     Î¸âŽ¥
âŽ¢y           âŽ¥
âŽ¢            âŽ¥
âŽ¢    â…ˆâ‹…kâ‹…Ï†   âŽ¥
âŽ£0  â„¯       1âŽ¦u´   âŽ¡vÌ‡_msc_00     0         0    âŽ¤
âŽ¢                            âŽ¥
âŽ¢   0      vÌ‡_msc_01     0    âŽ¥
âŽ¢                            âŽ¥
âŽ£   0         0      vÌ‡_msc_02âŽ¦Zvdot_mscrå   )r5   r�   rÔ   rÑ   r  r  r`  rh   r   r)  ra  r6   r‰   )rÐ   r  r7  r  r  r  r	  r  rÄ   rÄ   rÅ   Útest_pretty_matrixi  sJ     ÿÿÿÿ(ÿ
ÿ	ÿ	rj  c                  C   sð  t dƒ\} }}}ttttfD �]Ì}|| ƒ}t|ƒdks:t‚t|ƒdksJt‚|d|  |g||ggƒ}|d|  ||gƒ}t||ƒ}t||ƒ}d}	d}
t|ƒ|	ks t‚t|ƒ|
ks°t‚d}	d}
t|ƒ|	ksÈt‚t|ƒ|
ksØt‚d}	d	}
t|ƒ|	ksðt‚t|ƒ|
k�st‚d
}	d}
t|ƒ|	k�st‚t|ƒ|
k�s.t‚|| |d| ggƒ}|| g|gd| ggƒ}|| 	¡ gƒ}d}	d}
t|ƒ|	k�s‚t‚t|ƒ|
k�s”t‚d}	d}
t|ƒ|	k�s®t‚t|ƒ|
k�sÀt‚d}	d}
t|ƒ|	k�sÚt‚t|ƒ|
kst‚qd S )Nzx y z wr  rã   z"[1   ]
[-  y]
[x   ]
[    ]
[z  w]u8   âŽ¡1   âŽ¤
âŽ¢â”€  yâŽ¥
âŽ¢x   âŽ¥
âŽ¢    âŽ¥
âŽ£z  wâŽ¦z[1      ]
[-  y  z]
[x      ]u+   âŽ¡1      âŽ¤
âŽ¢â”€  y  zâŽ¥
âŽ£x      âŽ¦a  [[1   y]                       ]
[[--  -]              [z      ]]
[[ 2  x]  [ y    2 ]  [-   y*z]]
[[x    ]  [ -   y  ]  [x      ]]
[[     ]  [ x      ]  [       ]]
[[z   w]  [        ]  [ 2     ]]
[[-   -]  [y*z  w*y]  [z   w*z]]
[[x   x]                       ]u‰  âŽ¡âŽ¡1   yâŽ¤                       âŽ¤
âŽ¢âŽ¢â”€â”€  â”€âŽ¥              âŽ¡z      âŽ¤âŽ¥
âŽ¢âŽ¢ 2  xâŽ¥  âŽ¡ y    2 âŽ¤  âŽ¢â”€   yâ‹…zâŽ¥âŽ¥
âŽ¢âŽ¢x    âŽ¥  âŽ¢ â”€   y  âŽ¥  âŽ¢x      âŽ¥âŽ¥
âŽ¢âŽ¢     âŽ¥  âŽ¢ x      âŽ¥  âŽ¢       âŽ¥âŽ¥
âŽ¢âŽ¢z   wâŽ¥  âŽ¢        âŽ¥  âŽ¢ 2     âŽ¥âŽ¥
âŽ¢âŽ¢â”€   â”€âŽ¥  âŽ£yâ‹…z  wâ‹…yâŽ¦  âŽ£z   wâ‹…zâŽ¦âŽ¥
âŽ£âŽ£x   xâŽ¦                       âŽ¦ag  [ [1   y]             ]
[ [--  -]             ]
[ [ 2  x]   [ y    2 ]]
[ [x    ]   [ -   y  ]]
[ [     ]   [ x      ]]
[ [z   w]   [        ]]
[ [-   -]   [y*z  w*y]]
[ [x   x]             ]
[                     ]
[[z      ]  [ w      ]]
[[-   y*z]  [ -   w*y]]
[[x      ]  [ x      ]]
[[       ]  [        ]]
[[ 2     ]  [      2 ]]
[[z   w*z]  [w*z  w  ]]u#  âŽ¡ âŽ¡1   yâŽ¤             âŽ¤
âŽ¢ âŽ¢â”€â”€  â”€âŽ¥             âŽ¥
âŽ¢ âŽ¢ 2  xâŽ¥   âŽ¡ y    2 âŽ¤âŽ¥
âŽ¢ âŽ¢x    âŽ¥   âŽ¢ â”€   y  âŽ¥âŽ¥
âŽ¢ âŽ¢     âŽ¥   âŽ¢ x      âŽ¥âŽ¥
âŽ¢ âŽ¢z   wâŽ¥   âŽ¢        âŽ¥âŽ¥
âŽ¢ âŽ¢â”€   â”€âŽ¥   âŽ£yâ‹…z  wâ‹…yâŽ¦âŽ¥
âŽ¢ âŽ£x   xâŽ¦             âŽ¥
âŽ¢                     âŽ¥
âŽ¢âŽ¡z      âŽ¤  âŽ¡ w      âŽ¤âŽ¥
âŽ¢âŽ¢â”€   yâ‹…zâŽ¥  âŽ¢ â”€   wâ‹…yâŽ¥âŽ¥
âŽ¢âŽ¢x      âŽ¥  âŽ¢ x      âŽ¥âŽ¥
âŽ¢âŽ¢       âŽ¥  âŽ¢        âŽ¥âŽ¥
âŽ¢âŽ¢ 2     âŽ¥  âŽ¢      2 âŽ¥âŽ¥
âŽ£âŽ£z   wâ‹…zâŽ¦  âŽ£wâ‹…z  w  âŽ¦âŽ¦z#[[      1]]
[[x  y  -]]
[[      z]]u=   âŽ¡âŽ¡      1âŽ¤âŽ¤
âŽ¢âŽ¢x  y  â”€âŽ¥âŽ¥
âŽ£âŽ£      zâŽ¦âŽ¦z[x]
[ ]
[y]
[ ]
[1]
[-]
[z]u9   âŽ¡xâŽ¤
âŽ¢ âŽ¥
âŽ¢yâŽ¥
âŽ¢ âŽ¥
âŽ¢1âŽ¥
âŽ¢â”€âŽ¥
âŽ£zâŽ¦z)[[x]]
[[ ]]
[[y]]
[[ ]]
[[1]]
[[-]]
[[z]]uc   âŽ¡âŽ¡xâŽ¤âŽ¤
âŽ¢âŽ¢ âŽ¥âŽ¥
âŽ¢âŽ¢yâŽ¥âŽ¥
âŽ¢âŽ¢ âŽ¥âŽ¥
âŽ¢âŽ¢1âŽ¥âŽ¥
âŽ¢âŽ¢â”€âŽ¥âŽ¥
âŽ£âŽ£zâŽ¦âŽ¦)
r   rª   r«   r¬   r­   r�   rÔ   rÑ   r®   Útolist)r  r  r  ÚwÚ	ArrayTypeÚMZM1ZM2ZM3r  r  ZMrowZMcolumnZMcol2rÄ   rÄ   rÅ   Útest_pretty_ndim_arrays½  sl    

ÿ	ÿÿÿÿÿÿÿÿÿÿÿ
ÿÿ
ro  c                  C   sJ   t dddƒ} t dddƒ}tt| |ƒƒdks.t‚tt| || ƒƒdksFt‚d S )NrV  rå   rW  u   AâŠ—Bu	   AâŠ—BâŠ—A)r‰   rÑ   r¯   rÔ   )rV  rW  rÄ   rÄ   rÅ   Útest_tensor_TensorProductq  s    rp  c                  C   sJ   ddl m}  ddlm} || j| jƒ}t|ƒdks6t‚t|ƒdksFt‚d S )Nr   )ÚR2)ÚWedgeProductu   â…† xâˆ§â…† yzd x/\d y)	Zsympy.diffgeom.rnrq  Úsympy.diffgeomrr  ZdxZdyrÑ   rÔ   r�   )rq  rr  ZwprÄ   rÄ   rÅ   Ú test_diffgeom_print_WedgeProductx  s
    rt  c                  C   s¸  t dddƒ} t dddƒ}tt| ƒƒdks,t‚tt| | ƒƒdksDt‚tt| ƒt|ƒ ƒdks`t‚tt| | ƒƒdksxt‚tt|ƒt| ƒ ƒdks”t‚tt| d ƒƒd	ks¬t‚tt| ƒd ƒ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t| ƒƒƒdk�s(t‚tt| ƒƒdk�s>t‚tt| | ƒƒdk�sXt‚tt| ƒt|ƒ ƒdk�svt‚tt| | ƒƒdk�s�t‚tt|ƒt| ƒ ƒdk�s®t‚tt| d ƒƒdk�sÈt‚tt| ƒd ƒdk�sât‚ttt| ƒƒƒdk�süt‚ttt| ƒƒƒdk�st‚ttt| ƒƒƒdk�s0t‚ttt| ƒƒƒdk�sJt‚tdƒ}tt|ƒƒdk�sht‚tt||  ƒƒdk�s‚t‚tttt	ddƒ| f|t
ddƒffƒƒƒdk�s´t‚d S )NÚXrä   ÚYz +
X z       +
(X + Y) z +    +
X  + Y z     +
(X*Y) z +  +
Y *X z    +
/ 2\ 
\X / z    2
/ +\ 
\X / z     +
/ -1\ 
\X  / z    -1
/ +\  
\X /  z    +
/ T\ 
\X / z    T
/ +\ 
\X / u    â€ 
X u          â€ 
(X + Y) u    â€     â€ 
X  + Y u        â€ 
(Xâ‹…Y) u    â€   â€ 
Y â‹…X u       â€ 
âŽ› 2âŽž 
âŽ�X âŽ  u       2
âŽ› â€ âŽž 
âŽ�X âŽ  u        â€ 
âŽ› -1âŽž 
âŽ�X  âŽ  u       -1
âŽ› â€ âŽž  
âŽ�X âŽ   u       â€ 
âŽ› TâŽž 
âŽ�X âŽ  u       T
âŽ› â€ âŽž 
âŽ�X âŽ  ©©rã   rä   )rå   ræ   u-         â€ 
âŽ¡1  2âŽ¤ 
âŽ¢    âŽ¥ 
âŽ£3  4âŽ¦ uQ               â€ 
âŽ›âŽ¡1  2âŽ¤    âŽž 
âŽœâŽ¢    âŽ¥ + XâŽŸ 
âŽ�âŽ£3  4âŽ¦    âŽ  uu              â€ 
âŽ¡  ð�Ÿ™     XâŽ¤ 
âŽ¢         âŽ¥ 
âŽ¢âŽ¡1  2âŽ¤   âŽ¥ 
âŽ¢âŽ¢    âŽ¥  ð�Ÿ˜âŽ¥ 
âŽ£âŽ£3  4âŽ¦   âŽ¦ )r‰   r�   r‡   rÔ   rˆ   rŠ   rÑ   r5   rŒ   r�   rŽ   ©ru  rv  r5  rÄ   rÄ   rÅ   Útest_Adjoint€  s`    ÿ
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿ
ÿþrz  c                  C   sP  t dddƒ} t dddƒ}tt| ƒƒdks,t‚tt| | ƒƒdksDt‚tt| ƒt|ƒ ƒdks`t‚tt| | ƒƒdksxt‚tt|ƒt| ƒ ƒdks”t‚tt| d ƒƒd	ks¬t‚tt| ƒd ƒd
ksÄt‚ttt| ƒƒƒdksÜt‚ttt| ƒƒƒdksôt‚tt| ƒƒdk�s
t‚tt| | ƒƒdk�s$t‚tt| ƒt|ƒ ƒdk�sBt‚tt| | ƒƒdk�s\t‚tt|ƒt| ƒ ƒdk�szt‚tt| d ƒƒdk�s”t‚tt| ƒd ƒdk�s®t‚ttt| ƒƒƒdk�sÈt‚ttt| ƒƒƒdk�sât‚tdƒ}tt|ƒƒdk�s t‚tt||  ƒƒdk�st‚ttttddƒ| f|t	ddƒffƒƒƒdk�sLt‚d S )Nru  rä   rv  z T
X z       T
(X + Y) z T    T
X  + Y z     T
(X*Y) z T  T
Y *X z    T
/ 2\ 
\X / z    2
/ T\ 
\X / z     T
/ -1\ 
\X  / z    -1
/ T\  
\X /  u        T
(Xâ‹…Y) u    T  T
Y â‹…X u       T
âŽ› 2âŽž 
âŽ�X âŽ  u       2
âŽ› TâŽž 
âŽ�X âŽ  u        T
âŽ› -1âŽž 
âŽ�X  âŽ  u       -1
âŽ› TâŽž  
âŽ�X âŽ   rw  u+         T
âŽ¡1  2âŽ¤ 
âŽ¢    âŽ¥ 
âŽ£3  4âŽ¦ uO               T
âŽ›âŽ¡1  2âŽ¤    âŽž 
âŽœâŽ¢    âŽ¥ + XâŽŸ 
âŽ�âŽ£3  4âŽ¦    âŽ  us              T
âŽ¡  ð�Ÿ™     XâŽ¤ 
âŽ¢         âŽ¥ 
âŽ¢âŽ¡1  2âŽ¤   âŽ¥ 
âŽ¢âŽ¢    âŽ¥  ð�Ÿ˜âŽ¥ 
âŽ£âŽ£3  4âŽ¦   âŽ¦ )
r‰   r�   rŠ   rÔ   rˆ   rÑ   r5   rŒ   r�   rŽ   ry  rÄ   rÄ   rÅ   Útest_Transpose´  sP    ÿ
ÿ
ÿ
ÿ

ÿ
ÿ
ÿþr{  c                  C   sœ   t ddgddggƒ} t ddgddggƒ}d}d}d	}d
}tt| ƒƒ|ksLt‚tt| ƒƒ|ks`t‚tt| ƒt|ƒ ƒ|ks|t‚tt| ƒt|ƒ ƒ|ks˜t‚d S )Nrã   rä   rå   ræ   r  é   z   /[1  2]\
tr|[    ]|
  \[3  4]/u8     âŽ›âŽ¡1  2âŽ¤âŽž
trâŽœâŽ¢    âŽ¥âŽŸ
  âŽ�âŽ£3  4âŽ¦âŽ zG  /[1  2]\     /[2  4]\
tr|[    ]| + tr|[    ]|
  \[3  4]/     \[6  8]/uw     âŽ›âŽ¡1  2âŽ¤âŽž     âŽ›âŽ¡2  4âŽ¤âŽž
trâŽœâŽ¢    âŽ¥âŽŸ + trâŽœâŽ¢    âŽ¥âŽŸ
  âŽ�âŽ£3  4âŽ¦âŽ      âŽ�âŽ£6  8âŽ¦âŽ )r5   r�   r8   rÔ   rÑ   )ru  rv  r  r  r  r	  rÄ   rÄ   rÅ   Útest_pretty_Trace_issue_9044â  s    ÿÿÿÿr}  c            
      C   sÖ  t ddd�} tdƒ\}}}}}td| | ƒ}tdddƒ}tdddƒ}t|d	d	ƒ}	t|	ƒt|	ƒ  krjd
kspn t‚|||d …||d …f }	t|	ƒt|	ƒ  kr¨dks®n t‚|||d d…||d d…f }	t|	ƒt|	ƒ  krêdksðn t‚|d |…|d …f }	t|	ƒt|	ƒ  k�r$dk�s*n t‚|d |…|d …f }	t|	ƒt|	ƒ  k�r^dk�sdn t‚||d …d |…f }	t|	ƒt|	ƒ  k�r˜dk�sžn t‚|||…||…f }	t|	ƒt|	ƒ  k�rÒdk�sØn t‚||||…|||…f }	t|	ƒt|	ƒ  k�rdk�sn t‚||d |…|d |…f }	t|	ƒt|	ƒ  k�rNdk�sTn t‚|d ||…d ||…f }	t|	ƒt|	ƒ  k�rŒdk�s’n t‚|d d |…d d |…f }	t|	ƒt|	ƒ  k�rÊdk�sÐn t‚t|ddƒ}	t|	ƒt|	ƒ  k�rüd
k�sn t‚t|d | d fd | d fƒ}	t|	ƒt|	ƒ  k�r:d
k�s@n t‚t|d| d fd| d fƒ}	t|	ƒt|	ƒ  k�rxd
k�s~n t‚t|d| dfd| dfƒ}	t|	ƒt|	ƒ  k�r¶dk�s¼n t‚|ddd…ddd…f }	t|	ƒt|	ƒ  k�rôdk�sún t‚|ddd…ddd…f }	t|	ƒt|	ƒ  k�r2dk�s8n t‚|ddd… }	t|	ƒt|	ƒ  k�rfd k�sln t‚|d d…dd!d…f }	t|	ƒt|	ƒ  k�r¢d"k�s¨n t‚|d d…ddd…f }	t|	ƒt|	ƒ  k�rÞd#k�sän t‚|dd dd…f }	t|	ƒt|	ƒ  k�rd$k�sn t‚|dd…dd…f }	t|	ƒt|	ƒ  k�rPd%k�sVn t‚|ddd…ddd…f }	t|	ƒt|	ƒ  k�rŽd&k�s”n t‚|| dd …dd …f }	t|	ƒt|	ƒ  k�rÌd'k�sÒn t‚d S )(Nr&  Tr'  z	x y z w tru  rv  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, :]é	   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‰   r7   r�   rÑ   rÔ   )
r&  r  r  r  rl  Útru  rv  r~  rÐ   rÄ   rÄ   rÅ   Útest_MatrixSlice  sj    "" "&&&&&&&&&&&&&&&&&&&&r�  c                  C   sº   t ddd�} td| | ƒ}t|ƒt|ƒ  kr4dks:n t‚|j|  t¡}d}d}t|ƒ|ksbt‚t|ƒ|ksrt‚tt	dt	 ƒ}| |  |¡}d}d	}t|ƒ|ks¦t‚t|ƒ|ks¶t‚d S )
Nr&  Tr'  ru  z)              / T  \
(d -> sin(d)).\X *X/u4                âŽ› T  âŽž
(d â†¦ sin(d))Ë³âŽ�X â‹…XâŽ rã   z,/     1\      
|x -> -|.(n*X)
\     x/      u<   âŽ›    1âŽž      
âŽœx â†¦ â”€âŽŸË³(nâ‹…X)
âŽ�    xâŽ       )
r   r‰   r�   rÑ   rÔ   ÚTZ	applyfuncrq   r
   r  )r&  ru  rÐ   r  r  ÚlamdarÄ   rÄ   rÅ   Útest_MatrixExpressions=  s    "r„  c                  C   s°   ddl m}  tddd�}td|dƒ}td|dƒ}tdd	dd
d	gƒ}tdd	dd	dgƒ}t| ||ƒƒdksjt‚t| ||ƒƒdks€t‚t| ||ƒƒdks–t‚t| ||ƒƒdks¬t‚d S )Nr   )Ú
DotProductr&  Tr'  rV  rã   rW  rå   rä   ræ   zA*Bz[1  2  3]*[1  3  4]u   Aâ‹…Bu   [1  2  3]â‹…[1  3  4])Z%sympy.matrices.expressions.dotproductr…  r   r‰   r5   r�   rÔ   rÑ   )r…  r&  rV  rW  rX  rY  rÄ   rÄ   rÅ   Útest_pretty_dotproductb  s    r†  c                  C   s¼   ddl m} m}m}m}m} tdƒ}t| |ƒƒdks8t‚t| ||ƒƒƒdksPt‚t	dddƒ}t| |ƒƒdkspt‚t| || ƒƒd	ksˆt‚t| ||ddƒ|f||ddƒffƒƒƒd
ks¸t‚d S )Nr   )ÚDeterminantrˆ   rŒ   r�   rŽ   rw  u    â”‚1  2â”‚
â”‚    â”‚
â”‚3  4â”‚uG   â”‚      -1â”‚
â”‚âŽ¡1  2âŽ¤  â”‚
â”‚âŽ¢    âŽ¥  â”‚
â”‚âŽ£3  4âŽ¦  â”‚ru  rä   u   â”‚Xâ”‚u>   â”‚âŽ¡1  2âŽ¤    â”‚
â”‚âŽ¢    âŽ¥ + Xâ”‚
â”‚âŽ£3  4âŽ¦    â”‚ua   â”‚  ð�Ÿ™     Xâ”‚
â”‚         â”‚
â”‚âŽ¡1  2âŽ¤   â”‚
â”‚âŽ¢    âŽ¥  ð�Ÿ˜â”‚
â”‚âŽ£3  4âŽ¦   â”‚)
Úsympy.matricesr‡  rˆ   rŒ   r�   rŽ   r5   rÑ   rÔ   r‰   )r‡  rˆ   rŒ   r�   rŽ   r5  ru  rÄ   rÄ   rÅ   Útest_pretty_Determinantp  s     ÿÿÿþr‰  c               	   C   s*  t ttdk ftd dfƒ} d}d}t| ƒ|ks2t‚t| ƒ|ksBt‚t ttdk ftd dfƒ } d}d}t| ƒ|ksvt‚t| ƒ|ks†t‚tt ttdkftdfƒ t tt tdk ftd tdkfd	ƒ d } d
}d}t| ƒ|ksàt‚t| ƒ|ksðt‚tt ttdkftdfƒ t tt tdk ftd tdkfd	ƒ d } d}d}t| ƒ|k�sLt‚t| ƒ|k�s^t‚tt ttdkftdfƒ } d}d}t| ƒ|k�s’t‚t| ƒ|k�s¤t‚t ttdkftdfƒt tt tdk ftd tdkfd	ƒ } d}d}t| ƒ|k�søt‚t| ƒ|k�s
t‚t ttdkftdfƒ t tt tdk ftd tdkfd	ƒ } d}d}t| ƒ|k�s`t‚t| ƒ|k�srt‚t dtdt ƒdk fdttƒdk fttdddt ƒ dfƒ} d}d}t| ƒ|k�sÈt‚t| ƒ|k�sÚt‚tt ttdkftdfƒddd�} d}d}t| ƒ|k�st‚t| ƒ|k�s&t‚d S )Nrã   rä   TzJ/x   for x < 1
|             
< 2           
|x   otherwise
\             uT   âŽ§x   for x < 1
âŽª             
âŽ¨ 2           
âŽªx   otherwise
âŽ©             zY //x   for x < 1\
 ||             |
-|< 2           |
 ||x   otherwise|
 \\             /uw    âŽ›âŽ§x   for x < 1âŽž
 âŽœâŽª             âŽŸ
-âŽœâŽ¨ 2           âŽŸ
 âŽœâŽªx   otherwiseâŽŸ
 âŽ�âŽ©             âŽ r   )rã   Ta‚                        //x            \    
                      ||-   for x < 2|    
                      ||y            |    
    //x  for x > 0\   ||             |    
x + |<            | + |< 2           | + 1
    \\y  otherwise/   ||y   for x > 2|    
                      ||             |    
                      ||1   otherwise|    
                      \\             /    uÌ                        âŽ›âŽ§x            âŽž    
                      âŽœâŽªâ”€   for x < 2âŽŸ    
                      âŽœâŽªy            âŽŸ    
    âŽ›âŽ§x  for x > 0âŽž   âŽœâŽª             âŽŸ    
x + âŽœâŽ¨            âŽŸ + âŽœâŽ¨ 2           âŽŸ + 1
    âŽ�âŽ©y  otherwiseâŽ    âŽœâŽªy   for x > 2âŽŸ    
                      âŽœâŽª             âŽŸ    
                      âŽœâŽª1   otherwiseâŽŸ    
                      âŽ�âŽ©             âŽ     a‚                        //x            \    
                      ||-   for x < 2|    
                      ||y            |    
    //x  for x > 0\   ||             |    
x - |<            | + |< 2           | + 1
    \\y  otherwise/   ||y   for x > 2|    
                      ||             |    
                      ||1   otherwise|    
                      \\             /    uÌ                        âŽ›âŽ§x            âŽž    
                      âŽœâŽªâ”€   for x < 2âŽŸ    
                      âŽœâŽªy            âŽŸ    
    âŽ›âŽ§x  for x > 0âŽž   âŽœâŽª             âŽŸ    
x - âŽœâŽ¨            âŽŸ + âŽœâŽ¨ 2           âŽŸ + 1
    âŽ�âŽ©y  otherwiseâŽ    âŽœâŽªy   for x > 2âŽŸ    
                      âŽœâŽª             âŽŸ    
                      âŽœâŽª1   otherwiseâŽŸ    
                      âŽ�âŽ©             âŽ     z5  //x  for x > 0\
x*|<            |
  \\y  otherwise/uI     âŽ›âŽ§x  for x > 0âŽž
xâ‹…âŽœâŽ¨            âŽŸ
  âŽ�âŽ©y  otherwiseâŽ a(                  //x            \
                ||-   for x < 2|
                ||y            |
//x  for x > 0\ ||             |
|<            |*|< 2           |
\\y  otherwise/ ||y   for x > 2|
                ||             |
                ||1   otherwise|
                \\             /ut                  âŽ›âŽ§x            âŽž
                âŽœâŽªâ”€   for x < 2âŽŸ
                âŽœâŽªy            âŽŸ
âŽ›âŽ§x  for x > 0âŽž âŽœâŽª             âŽŸ
âŽœâŽ¨            âŽŸâ‹…âŽœâŽ¨ 2           âŽŸ
âŽ�âŽ©y  otherwiseâŽ  âŽœâŽªy   for x > 2âŽŸ
                âŽœâŽª             âŽŸ
                âŽœâŽª1   otherwiseâŽŸ
                âŽ�âŽ©             âŽ a1                   //x            \
                 ||-   for x < 2|
                 ||y            |
 //x  for x > 0\ ||             |
-|<            |*|< 2           |
 \\y  otherwise/ ||y   for x > 2|
                 ||             |
                 ||1   otherwise|
                 \\             /u}                   âŽ›âŽ§x            âŽž
                 âŽœâŽªâ”€   for x < 2âŽŸ
                 âŽœâŽªy            âŽŸ
 âŽ›âŽ§x  for x > 0âŽž âŽœâŽª             âŽŸ
-âŽœâŽ¨            âŽŸâ‹…âŽœâŽ¨ 2           âŽŸ
 âŽ�âŽ©y  otherwiseâŽ  âŽœâŽªy   for x > 2âŽŸ
                 âŽœâŽª             âŽŸ
                 âŽœâŽª1   otherwiseâŽŸ
                 âŽ�âŽ©             âŽ ))rä   rã   rÄ   )rÄ   )rã   r   ap  /                                 1     
|            0               for --- < 1
|                                |y|    
|                                       
<            1               for |y| < 1
|                                       
|   __0, 2 /1, 2       | 1\             
|y*/__     |           | -|   otherwise 
\  \_|2, 2 \      0, 1 | y/             u¸  âŽ§                                 1     
âŽª            0               for â”€â”€â”€ < 1
âŽª                                â”‚yâ”‚    
âŽª                                       
âŽ¨            1               for â”‚yâ”‚ < 1
âŽª                                       
âŽª  â•­â”€â•®0, 2 âŽ›1, 2       â”‚ 1âŽž             
âŽªyâ‹…â”‚â•¶â”�     âŽœ           â”‚ â”€âŽŸ   otherwise 
âŽ©  â•°â”€â•¯2, 2 âŽ�      0, 1 â”‚ yâŽ              Frò   zC               2
//x  for x > 0\ 
|<            | 
\\y  otherwise/ uU                  2
âŽ›âŽ§x  for x > 0âŽž 
âŽœâŽ¨            âŽŸ 
âŽ�âŽ©y  otherwiseâŽ  )	r^   r  r�   rÔ   rÑ   r  rY   rp   r   r  rÄ   rÄ   rÅ   Útest_pretty_piecewiseˆ  s¬    ÿ	ÿÿ	ÿ( ÿÿÿÿ( ÿÿÿÿÿÿ,ÿÿÿÿ.ÿÿÿÿ( ÿÿÿÿ ÿÿrŠ  c                  C   s0   t tttƒ} t| ƒdkst‚t| ƒdks,t‚d S )Nz)/y    for x  
<            
\z  otherwiseu/   âŽ§y    for x  
âŽ¨            
âŽ©z  otherwise)r.   r  r  r  r�   rÔ   rÑ   r  rÄ   rÄ   rÅ   Útest_pretty_ITEg  s
    ÿr‹  c                  C   sê  d} d}d}t | ƒ|kst‚t| ƒ|ks,t‚g } d}d}t | ƒ|ksHt‚t| ƒ|ksXt‚i } i }d}d}t | ƒ|ksxt‚t |ƒ|ksˆt‚t| ƒ|ks˜t‚t|ƒ|ks¨t‚dt f} d}d}t | ƒ|ksÊt‚t| ƒ|ksÚt‚td dt ttttƒd ttƒd  g} d	}d
}t | ƒ|k�st‚t| ƒ|k�s0t‚td dt ttttƒd ttƒd  f} d}d}t | ƒ|k�stt‚t| ƒ|k�s†t‚t	td dt ttttƒd ttƒd  ƒ} d}d}t | ƒ|k�sÌt‚t| ƒ|k�sÞt‚tttƒi} t
tttƒiƒ}d}d}t | ƒ|k�st‚t |ƒ|k�s&t‚t| ƒ|k�s8t‚t|ƒ|k�sJt‚dt dt tttƒd i} t
dt dt tttƒd iƒ}d}d}t | ƒ|k�s t‚t |ƒ|k�s²t‚t| ƒ|k�sÄt‚t|ƒ|k�sÖt‚td g} d}d}t | ƒ|k�sút‚t| ƒ|k�st‚td f} d}d}t | ƒ|k�s0t‚t| ƒ|k�sBt‚t	td ƒ} d}d}t | ƒ|k�sht‚t| ƒ|k�szt‚td di} t
td diƒ}d}d}t | ƒ|k�s°t‚t |ƒ|k�sÂt‚t| ƒ|k�sÔt‚t|ƒ|k�sæt‚d S )NrÄ   rè   rc  z{}rã   z 1  
(-,)
 x  u   âŽ›1 âŽž
âŽœâ”€,âŽŸ
âŽ�x âŽ rä   z†                 2        
  2  1        sin (theta) 
[x , -, x, y, -----------]
     x            2       
               cos (phi)  u˜   âŽ¡                2   âŽ¤
âŽ¢ 2  1        sin (Î¸)âŽ¥
âŽ¢x , â”€, x, y, â”€â”€â”€â”€â”€â”€â”€âŽ¥
âŽ¢    x           2   âŽ¥
âŽ£             cos (Ï†)âŽ¦z†                 2        
  2  1        sin (theta) 
(x , -, x, y, -----------)
     x            2       
               cos (phi)  u˜   âŽ›                2   âŽž
âŽœ 2  1        sin (Î¸)âŽŸ
âŽœx , â”€, x, y, â”€â”€â”€â”€â”€â”€â”€âŽŸ
âŽœ    x           2   âŽŸ
âŽ�             cos (Ï†)âŽ z{x: sin(x)}z8 1  1        2    
{-: -, x: sin (x)}
 x  y             uH   âŽ§1  1        2   âŽ«
âŽ¨â”€: â”€, x: sin (x)âŽ¬
âŽ©x  y            âŽ­z	  2 
[x ]u   âŽ¡ 2âŽ¤
âŽ£x âŽ¦z  2  
(x ,)u   âŽ› 2 âŽž
âŽ�x ,âŽ z  2    
{x : 1}u#   âŽ§ 2   âŽ«
âŽ¨x : 1âŽ¬
âŽ©     âŽ­)r�   rÔ   rÑ   r  r  rq   r`  rf   ra  r   r   )rÐ   r  r  Zexpr_2rÄ   rÄ   rÅ   Útest_pretty_sequ  sÎ    ÿÿÿÿÿÿ
ÿÿ*ÿ	ÿ*ÿ	ÿ,ÿ	ÿÿÿ ÿÿ
ÿÿ
ÿÿÿÿÿÿrŒ  c                  C   sÀ   t ƒ } t t ƒ ƒ}|| g}t|ƒdks(t‚t|ƒdks8t‚|| h}t|ƒdksPt‚t|ƒdks`t‚|| | |i}t|| | |iƒ}t|ƒdksŒt‚t|ƒdksœt‚t|ƒdks¬t‚t|ƒdks¼t‚d S )Nz[Basic(Basic()), Basic()]z{Basic(), Basic(Basic())}z2{Basic(): Basic(Basic()), Basic(Basic()): Basic()})r   r�   rÔ   rÑ   r   )Úb1Úb2rÐ   Úexpr2rÄ   rÄ   rÅ   Útest_any_object_in_sequenceI  s4    
ÿÿÿÿÿÿr�  c                  C   s    t tƒ ƒdkst‚ttƒ ƒdks$t‚t tƒ ƒdks6t‚ttƒ ƒdksHt‚dt th} t| ƒ}t | ƒdkslt‚t| ƒdks|t‚t |ƒdksŒt‚t|ƒdksœt‚d S )Nzset()zfrozenset()rã   z 1    
{-, x}
 x    u"   âŽ§1   âŽ«
âŽ¨â”€, xâŽ¬
âŽ©x   âŽ­z5           1     
frozenset({-, x})
           x     uO            âŽ›âŽ§1   âŽ«âŽž
frozensetâŽœâŽ¨â”€, xâŽ¬âŽŸ
         âŽ�âŽ©x   âŽ­âŽ )r�   ÚsetrÔ   rÑ   Ú	frozensetr  )Ús1Ús2rÄ   rÄ   rÅ   Útest_print_builtin_seta  s$    ÿÿÿÿr•  c                  C   sJ  t } t| tt td gŽ ƒdks$t‚t| tddƒŽ ƒdks>t‚t| tddƒŽ ƒdksXt‚ttt td hƒdkstt‚tttddƒƒƒdksŽt‚tttddƒƒƒdks¨t‚tttt td gƒƒdksÈt‚tttddƒƒƒd	ksât‚tttddƒƒƒd
ksüt‚ttdddƒƒdk�st‚d}d}ttdddƒƒ|k�s8t‚t	tdddƒƒ|k�sRt‚d}d}ttdddƒƒ|k�stt‚t	tdddƒƒ|k�sŽt‚d}d}ttdt
dƒƒ|k�s°t‚t	tdt
dƒƒ|k�sÊt‚d}d}ttt
ddƒƒ|k�sìt‚t	tt
ddƒƒ|k�st‚d}d}ttdt
 dƒƒ|k�s*t‚t	tdt
 dƒƒ|k�sFt‚d S )Nrä   z  2      
{x , x*y}rã   r  z{1, 2, 3, 4, 5}rï   z'{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}z)            2       
frozenset({x , x*y})zfrozenset({1, 2, 3, 4, 5})z2frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12})r   rå   z	{0, 1, 2}z{0, 1, ..., 29}u   {0, 1, â€¦, 29}é   z{30, 29, ..., 2}u   {30, 29, â€¦, 2}r  z{0, 2, ...}u   {0, 2, â€¦}z{..., 2, 0}u   {â€¦, 2, 0}rô   z{-2, -3, ...}u   {-2, -3, â€¦})rM   r�   r  r  rÔ   Úranger‘  r’  rK   rÑ   r   )r:  r  r  rÄ   rÄ   rÅ   Útest_pretty_sets†  sR    ÿÿÿÿÿr˜  c                  C   s>   t ddƒ} t| ƒ}d}d}t|ƒ|ks*t‚t|ƒ|ks:t‚d S )Nrã   rå   zSetExpr([1, 3]))rO   r¤   r�   rÔ   rÑ   )ZivÚser  r  rÄ   rÄ   rÅ   Útest_pretty_SetExpr¾  s    
rš  c                  C   sÂ  t tttftt ƒdddhddhƒ} d}d}t| ƒ|ks<t‚t| ƒ|ksLt‚t tttfftt ƒtdddhddhƒƒ} d}d}t| ƒ|ksŽt‚t| ƒ|ksžt‚t tttd ƒtj	ƒ} d	}d
}t| ƒ|ksÌt‚t| ƒ|ksÜt‚t ttdtd  ƒtj	ƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s"t‚t tttfdtt d  ƒtj	tj	ƒ} d}d}t| ƒ|k�sbt‚t| ƒ|k�stt‚tt
dƒt
dƒd  gƒdk�s˜t‚ttt
dƒt
dƒd gƒƒdk�s¾t‚d S )Nrã   rä   rå   ræ   z%{x + y | x in {1, 2, 3}, y in {3, 4}}u)   {x + y â”‚ x âˆŠ {1, 2, 3}, y âˆŠ {3, 4}}z&{x + y | (x, y) in {1, 2, 3} x {3, 4}}u*   {x + y â”‚ (x, y) âˆŠ {1, 2, 3} Ã— {3, 4}}z)  2                 
{x  | x in Naturals}u<   âŽ§ 2 â”‚      âŽ«
âŽ¨x  â”‚ x âˆŠ â„•âŽ¬
âŽ©   â”‚      âŽ­zS 1                  
{-- | x in Naturals}
  2                 
 x                  uf   âŽ§1  â”‚      âŽ«
âŽªâ”€â”€ â”‚ x âˆŠ â„•âŽª
âŽ¨ 2 â”‚      âŽ¬
âŽªx  â”‚      âŽª
âŽ©   â”‚      âŽ­z§    1                                    
{-------- | x in Naturals, y in Naturals}
        2                                
 (x + y)                                 u·   âŽ§   1     â”‚             âŽ«
âŽªâ”€â”€â”€â”€â”€â”€â”€â”€ â”‚ x âˆŠ â„•, y âˆŠ â„•âŽª
âŽ¨       2 â”‚             âŽ¬
âŽª(x + y)  â”‚             âŽª
âŽ©         â”‚             âŽ­Zihatrf  u/   âŽ¡  iÌ‚  âŽ¤
âŽ¢â”€â”€â”€â”€â”€âŽ¥
âŽ£i + 1âŽ¦u%   âŽ¡  iÌ‚  âŽ¤
âŽ¢     âŽ¥
âŽ£i + 1âŽ¦)r¢   r
   r  r  r�   rÔ   rÑ   r£   r   ÚNaturalsr   r5   )Zimgsetr  r  rÄ   rÄ   rÅ   Útest_pretty_ImageSetÇ  s6    $*&$rœ  c                  C   sä  d} d}t tttttƒdƒtjƒƒ| ks,t‚ttttttƒdƒtjƒƒ|ksPt‚t ttt	ttjdd�t
dƒƒƒdksxt‚tttt	ttjdd�t
dƒƒƒdks t‚t ttttdktdk ƒt
dd	d
ƒƒƒdksÎt‚tttttdktdk ƒt
dd	d
ƒƒƒdksüt‚t ttttdktdk ƒt
dd	ƒƒƒdk�s*t‚tttttdktdk ƒt
dd	ƒƒƒdk�sXt‚ttdtd	  dkƒ}d} d}t |ƒ| k�sˆt‚t|ƒ|k�sšt‚ttdtd	  dktjƒ}d} d}t |ƒ| k�sÎt‚t|ƒ|k�sàt‚d S )Nz#{x | x in (-oo, oo) and sin(x) = 0}u"   {x â”‚ x âˆŠ â„� âˆ§ (sin(x) = 0)}r   Frò   rã   z{1}r  rä   rå   ÚEmptySetõ   âˆ…z{2}z3     1      
{x | -- > 0}
      2     
     x      u|   âŽ§  â”‚ âŽ›1     âŽžâŽ«
âŽªx â”‚ âŽœâ”€â”€ > 0âŽŸâŽª
âŽ¨  â”‚ âŽœ 2    âŽŸâŽ¬
âŽª  â”‚ âŽ�x     âŽ âŽª
âŽ©  â”‚         âŽ­z                        1      
{x | x in (-oo, oo) and -- > 0}
                         2     
                        x      uª   âŽ§  â”‚         âŽ›1     âŽžâŽ«
âŽªx â”‚ x âˆŠ â„� âˆ§ âŽœâ”€â”€ > 0âŽŸâŽª
âŽ¨  â”‚         âŽœ 2    âŽŸâŽ¬
âŽª  â”‚         âŽ�x     âŽ âŽª
âŽ©  â”‚                 âŽ­)r�   r¡   r  r   rq   r   ÚRealsrÔ   rÑ   rJ   rM   r,   r3   )r  r  ZcondsetrÄ   rÄ   rÅ   Útest_pretty_ConditionSet  s(    $$((....r   c                  C   s4  ddl m}  | tddƒtddƒ ƒ}d}d}t|ƒ|ks<t‚t|ƒ|ksLt‚| tdd	ƒtdd
t ƒ dd�}d}d}t|ƒ|ks„t‚t|ƒ|ks”t‚| tdd	td
  ƒtddƒ ƒ}d}d}t|ƒ|ksÌt‚t|ƒ|ksÜt‚| tdd	td
  ƒtdd
t ƒ dd�}d}d}t|ƒ|k�st‚t|ƒ|k�s0t‚d S )Nr   )ÚComplexRegionrå   rç   ræ   r  z#{x + y*I | x, y in [3, 5] x [4, 6]}u+   {x + yâ‹…â…ˆ â”‚ x, y âˆŠ [3, 5] Ã— [4, 6]}rã   rä   T)Zpolarz@{r*(I*sin(theta) + cos(theta)) | r, theta in [0, 1] x [0, 2*pi)}uC   {râ‹…(â…ˆâ‹…sin(Î¸) + cos(Î¸)) â”‚ r, Î¸ âˆŠ [0, 1] Ã— [0, 2â‹…Ï€)}z“                       1            
{x + y*I | x, y in [3, --] x [4, 6]}
                        2           
                       a            uì   âŽ§        â”‚        âŽ¡   1 âŽ¤         âŽ«
âŽªx + yâ‹…â…ˆ â”‚ x, y âˆŠ âŽ¢3, â”€â”€âŽ¥ Ã— [4, 6]âŽª
âŽ¨        â”‚        âŽ¢    2âŽ¥         âŽ¬
âŽª        â”‚        âŽ£   a âŽ¦         âŽª
âŽ©        â”‚                        âŽ­a                                                   1               
{r*(I*sin(theta) + cos(theta)) | r, theta in [0, --] x [0, 2*pi)}
                                                  2              
                                                 a               uD  âŽ§                      â”‚        âŽ¡   1 âŽ¤           âŽ«
âŽªrâ‹…(â…ˆâ‹…sin(Î¸) + cos(Î¸)) â”‚ r, Î¸ âˆŠ âŽ¢0, â”€â”€âŽ¥ Ã— [0, 2â‹…Ï€)âŽª
âŽ¨                      â”‚        âŽ¢    2âŽ¥           âŽ¬
âŽª                      â”‚        âŽ£   a âŽ¦           âŽª
âŽ©                      â”‚                          âŽ­)Úsympy.sets.fancysetsr¡  rO   r�   rÔ   rÑ   r   r  )r¡  Zcregionr  r  rÄ   rÄ   rÅ   Útest_pretty_ComplexRegion:  s*      (r£  c                  C   sN   t ddƒt ddƒ } }d}d}tt| |ƒƒ|ks4t‚tt| |ƒƒ|ksJt‚d S )Nrä   rå   ræ   r  u   [2, 3] âˆª [4, 7]z[2, 3] U [4, 7])rO   rÑ   rP   rÔ   r�   )r  r  r  r  rÄ   rÄ   rÅ   Útest_pretty_Union_issue_10414g  s
    r¤  c                  C   s^   t dƒ\} }}}t| |ƒt||ƒ }}d}d}tt||ƒƒ|ksDt‚tt||ƒƒ|ksZt‚d S )Nz
x, y, z, wu   [x, y] âˆ© [z, w]z[x, y] n [z, w])r   rO   rÑ   rN   rÔ   r�   )r  r  r  rl  r  r  r  r  rÄ   rÄ   rÅ   Ú$test_pretty_Intersection_issue_10414o  s    r¥  c                  C   s@   d} t tddƒd ƒ| kst‚d} t tddƒd ƒ| ks<t‚d S )Nz      1
[0, 1] r   rã   z      2
[0, 1] rä   )rÑ   rO   rÔ   )r  rÄ   rÄ   rÅ   Útest_ProductSet_exponentx  s    r¦  c                  C   sB   d} t ddƒt ddƒ }}tt|| |tddƒ ƒƒ| ks>t‚d S )Nu)   ([4, 7] Ã— {1, 2}) âˆª ([2, 3] Ã— [4, 7])rä   rå   ræ   r  rã   )rO   rÑ   rP   rM   rÔ   )r  r  r  rÄ   rÄ   rÅ   Útest_ProductSet_parenthesis  s    r§  c                  C   sJ   d} d}t ddƒt ddƒ }}t|| ƒ| ks2t‚t|| ƒ|ksFt‚d S )Nz[2, 3] x [4, 7]u   [2, 3] Ã— [4, 7]rä   rå   ræ   r  )rO   r�   rÔ   rÑ   )r  r  r  r  rÄ   rÄ   rÅ   Ú%test_ProductSet_prod_char_issue_10413†  s
    r¨  c            
         s&  t td dtfƒ} tdƒ}d}d}t| ƒ|ks2t‚t| ƒ|ksBt‚d}d}t|ƒ|ksZt‚t|ƒ|ksjt‚t td dƒ}tddƒ}d	}d	}t|ƒ|ksšt‚t|ƒ|ksªt‚d
}d
}t|ƒ|ksÂt‚t|ƒ|ksÒt‚t td t dfƒ}tdt dfƒ}d}d}t|ƒ|k�st‚t|ƒ|k�s"t‚d}d}t|ƒ|k�s<t‚t|ƒ|k�sNt‚d}d}tt| |ƒƒ|k�snt‚tt| |ƒƒ|k�s†t‚d}d}tt||ƒƒ|k�s¦t‚tt||ƒƒ|k�s¾t‚d}d}tt||ƒƒ|k�sÞt‚tt||ƒƒ|k�söt‚d}d}tt| |ƒƒ|k�st‚tt| |ƒƒ|k�s.t‚d}d}tt||ƒƒ|k�sNt‚tt||ƒƒ|k�sft‚d}d}tt||ƒƒ|k�s†t‚tt||ƒƒ|k�sžt‚t td tdt	fƒ‰ t
t‡ fdd„ƒ t
t‡ fdd„ƒ tdƒ}t |td  tddfƒ}	d}d}t|	ƒ|k�st‚t|	ƒ|k�s"t‚d S )Nrä   r   rx  z[0, 1, 4, 9, ...]u   [0, 1, 4, 9, â€¦]z[1, 2, 1, 2, ...]u   [1, 2, 1, 2, â€¦]©r   rä   z	[0, 1, 4]z	[1, 2, 1]z[..., 9, 4, 1, 0]u   [â€¦, 9, 4, 1, 0]z[..., 2, 1, 2, 1]u   [â€¦, 2, 1, 2, 1]z[1, 3, 5, 11, ...]u   [1, 3, 5, 11, â€¦]z	[1, 3, 5]z[..., 11, 5, 3, 1]u   [â€¦, 11, 5, 3, 1]z[0, 2, 4, 18, ...]u   [0, 2, 4, 18, â€¦]z	[0, 2, 4]z[..., 18, 4, 2, 0]u   [â€¦, 18, 4, 2, 0]c                      s   t ˆ ƒS ©N©r�   rÄ   ©Zs7rÄ   rÅ   rh  à  ri  z'test_pretty_sequences.<locals>.<lambda>c                      s   t ˆ ƒS rª  )rÑ   rÄ   r¬  rÄ   rÅ   rh  á  ri  r  z[0, b, 4*b]u   [0, b, 4â‹…b])rG   r  r   rI   r�   rÔ   rÑ   rF   rH   r  rµ   ÚNotImplementedErrorr   )
r“  r”  r  r  Zs3Zs4Zs5Zs6r  Zs8rÄ   r¬  rÅ   Útest_pretty_sequences�  s~    
r®  c                  C   s>   t ttt tfƒ} d}d}t| ƒ|ks*t‚t| ƒ|ks:t‚d S )Nzt                      2*sin(3*x)      
2*sin(x) - sin(2*x) + ---------- + ...
                          3           uŒ                         2â‹…sin(3â‹…x)    
2â‹…sin(x) - sin(2â‹…x) + â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ + â€¦
                          3         )rC   r  r   r�   rÔ   rÑ   ©rÆ   r  r  rÄ   rÄ   rÅ   Útest_pretty_FourierSeriesë  s    ÿÿr°  c                  C   s<   t tdt ƒƒ} d}d}t| ƒ|ks(t‚t| ƒ|ks8t‚d S )Nrã   z¡ oo              
____             
\   `            
 \         -k  k 
  \   -(-1)  *x  
  /   -----------
 /         k     
/___,            
k = 1            uá    âˆž               
____             
â•²                
 â•²         -k  k 
  â•²   -(-1)  â‹…x  
  â•±   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
 â•±         k     
â•±                
â€¾â€¾â€¾â€¾             
k = 1            )rB   ro   r  r�   rÔ   rÑ   r¯  rÄ   rÄ   rÅ   Útest_pretty_FormalPowerSeries   s    ÿÿr±  c                  C   sv  t tttƒ} d}d}t| ƒ|ks$t‚t| ƒ|ks4t‚t td tdƒ} d}d}t| ƒ|ks\t‚t| ƒ|kslt‚t dt tdƒ} d}d	}t| ƒ|ks”t‚t| ƒ|ks¤t‚t ttƒt tdƒ} d
}d}t| ƒ|ksÐt‚t| ƒ|ksàt‚t ttƒt tddƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s"t‚t tttƒ tdƒ} d}d}t| ƒ|k�sPt‚t| ƒ|k�sbt‚t ttdƒd } d}d}t| ƒ|k�sŒt‚t| ƒ|k�sžt‚t tt td tdƒ tdƒ} d}d}t| ƒ|k�sÔt‚t| ƒ|k�sæt‚dt tt td tdƒ tdƒ } d}d}t| ƒ|k�s t‚t| ƒ|k�s2t‚t ttƒtddd�} d}d}t| ƒ|k�s`t‚t| ƒ|k�srt‚d S )Nz lim x
x->oo u   lim x
xâ”€â†’âˆž rä   r   z      2
 lim x 
x->0+  u         2
 lim x 
xâ”€â†’0â�º  rã   z     1
 lim -
x->0+xu        1
 lim â”€
xâ”€â†’0â�ºxz)     /sin(x)\
 lim |------|
x->0+\  x   /uG        âŽ›sin(x)âŽž
 lim âŽœâ”€â”€â”€â”€â”€â”€âŽŸ
xâ”€â†’0â�ºâŽ�  x   âŽ ú-z)     /sin(x)\
 lim |------|
x->0-\  x   /uG        âŽ›sin(x)âŽž
 lim âŽœâ”€â”€â”€â”€â”€â”€âŽŸ
xâ”€â†’0â�»âŽ�  x   âŽ z# lim (x + sin(x))
x->0+            u)    lim (x + sin(x))
xâ”€â†’0â�º            z        2
/ lim x\ 
\x->0+ / u+           2
âŽ› lim xâŽž 
âŽ�xâ”€â†’0â�º âŽ  z5     /       /y\\
 lim |x* lim |-||
x->0+\  y->0+\2//u]        âŽ›       âŽ›yâŽžâŽž
 lim âŽœxâ‹… lim âŽœâ”€âŽŸâŽŸ
xâ”€â†’0â�ºâŽ�  yâ”€â†’0â�ºâŽ�2âŽ âŽ z;       /       /y\\
2* lim |x* lim |-||
  x->0+\  y->0+\2//ue          âŽ›       âŽ›yâŽžâŽž
2â‹… lim âŽœxâ‹… lim âŽœâ”€âŽŸâŽŸ
  xâ”€â†’0â�ºâŽ�  yâ”€â†’0â�ºâŽ�2âŽ âŽ z+-)Údirzlim sin(x)
x->0      u   lim sin(x)
xâ”€â†’0      )rD   r  r   r�   rÔ   rÑ   rq   r  r  rÄ   rÄ   rÅ   Útest_pretty_limits#  sŒ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿr´  c                  C   sF   t td dt  d dƒ} d}d}t| ƒ|ks2t‚t| ƒ|ksBt‚d S )Nrç   é   rä   r   z3       / 5              \
CRootOf\x  + 11*x - 2, 0/u=          âŽ› 5              âŽž
CRootOfâŽ�x  + 11â‹…x - 2, 0âŽ )rA   r  r�   rÔ   rÑ   r  rÄ   rÄ   rÅ   Útest_pretty_ComplexRootOfÀ  s    ÿÿr¶  c                  C   s”   t td dt  d dd�} d}d}t| ƒ|ks4t‚t| ƒ|ksDt‚t td dt  d ttttƒƒƒ} d}d	}t| ƒ|ks€t‚t| ƒ|ks�t‚d S )
Nrç   rµ  rä   F)Úautoz-       / 5           \
RootSum\x  + 11*x - 2/u7          âŽ› 5           âŽž
RootSumâŽ�x  + 11â‹…x - 2âŽ z?       / 5                   z\
RootSum\x  + 11*x - 2, z -> e /uK          âŽ› 5                  zâŽž
RootSumâŽ�x  + 11â‹…x - 2, z â†¦ â„¯ âŽ )r@   r  r�   rÔ   rÑ   r
   r  rh   r  rÄ   rÄ   rÅ   Útest_pretty_RootSumÑ  s    ÿÿ$ÿÿr¸  c                  C   sÒ   t g ttƒ} d}d}t| ƒ|ks$t‚t| ƒ|ks4t‚td dt  t d td dt  t d g}t |ttdd�} d}d	}t| ƒ|ksŒt‚t| ƒ|ksœt‚|  d
¡} d}d}t| ƒ|ks¾t‚t| ƒ|ksÎt‚d S )Nz-GroebnerBasis([], x, y, domain=ZZ, order=lex)u.   GroebnerBasis([], x, y, domain=â„¤, order=lex)rä   rå   rã   r=   r  z£             /[ 2                 2              ]                              \
GroebnerBasis\[x  - x - 3*y + 1, y  - 2*x + y - 1], x, y, domain=ZZ, order=grlex/u·                âŽ›âŽ¡ 2                 2              âŽ¤                             âŽž
GroebnerBasisâŽ�âŽ£x  - x - 3â‹…y + 1, y  - 2â‹…x + y - 1âŽ¦, x, y, domain=â„¤, order=grlexâŽ r  zµ             /[       2           4      3      2           ]                            \
GroebnerBasis\[2*x - y  - y + 1, y  + 2*y  - 3*y  - 16*y + 7], x, y, domain=ZZ, order=lex/uÍ                âŽ›âŽ¡       2           4      3      2           âŽ¤                           âŽž
GroebnerBasisâŽ�âŽ£2â‹…x - y  - y + 1, y  + 2â‹…y  - 3â‹…y  - 16â‹…y + 7âŽ¦, x, y, domain=â„¤, order=lexâŽ )r?   r  r  r�   rÔ   rÑ   Zfglm)rÐ   r  r  ÚFrÄ   rÄ   rÅ   Útest_GroebnerBasisñ  s,    ÿÿ0ÿÿ
ÿÿrº  c                   C   s(   t tjƒdkst‚ttjƒdks$t‚d S )NÚUniversalSetu   ð�•Œ)r�   r   r»  rÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_pretty_UniversalSet"  s    r¼  c                  C   s8  t tdd�} t| ƒdkst‚t| ƒdks,t‚tttƒ} t| ƒdksFt‚t| ƒdksVt‚tttƒ} t| ƒdkspt‚t| ƒdks€t‚td	ƒ}t|Ž } t| ƒd
ks t‚t| ƒdks°t‚t|Ž } t| ƒdksÈt‚t| ƒdksØt‚t	ttdd�} t| ƒdksöt‚t| ƒdk�st‚t
ttdd�} t| ƒdk�s(t‚t| ƒdk�s:t‚tttdd�} t| ƒdk�sZt‚t| ƒdk�slt‚tttdd�} t| ƒdk�sŒt‚t| ƒdk�sžt‚tttdd�} t| ƒdk�s¾t‚t| ƒdk�sÐt‚tttdd�} t| ƒdk�sðt‚t| ƒdk�st‚tttdd�} t| ƒdk�s"t‚t| ƒdk�s4t‚d S )NFrò   zNot(x)u   Â¬xz	And(x, y)u   x âˆ§ yzOr(x, y)u   x âˆ¨ yza:fzAnd(a, b, c, d, e, f)u   a âˆ§ b âˆ§ c âˆ§ d âˆ§ e âˆ§ fzOr(a, b, c, d, e, f)u   a âˆ¨ b âˆ¨ c âˆ¨ d âˆ¨ e âˆ¨ fz	Xor(x, y)u   x âŠ» yz
Nand(x, y)u   x âŠ¼ yz	Nor(x, y)u   x âŠ½ yzImplies(x, y)u   x â†’ yzImplies(y, x)u   y â†’ xzEquivalent(x, y)õ   x â‡” y)r2   r  r�   rÔ   rÑ   r,   r  r3   r   r4   r0   r1   r/   r-   )rÐ   ZsymsrÄ   rÄ   rÅ   Útest_pretty_Boolean'  sJ    

r¾  c                  C   s²  t dƒ} t| ƒdkst‚t| ƒdks(t‚t} t| ƒdks<t‚t| ƒdksLt‚t} t| ƒdks`t‚t| ƒdkspt‚t} t| ƒdks„t‚t| ƒd	ks”t‚tt } t| ƒd
ks¬t‚t| ƒdks¼t‚tttf } t| ƒdksØt‚t| ƒdksèt‚t 	t¡} t| ƒdk�st‚t| ƒdk�st‚t 	tt¡} t| ƒdk�s4t‚t| ƒdk�sFt‚tj
tttd�} t| ƒdk�sht‚t| ƒdk�szt‚tj
tttd�} t| ƒdk�sœt‚t| ƒdk�s®t‚d S )Né   zGF(23)u	   â„¤â‚‚â‚ƒr:   u   â„¤r;   u   â„šr<   u   â„�zQQ[x]u   â„š[x]zQQ[x, y]u	   â„š[x, y]zZZ(x)u   â„¤(x)zZZ(x, y)u	   â„¤(x, y)r  zQQ[x, y, order=grlex]u   â„š[x, y, order=grlex]zQQ[x, y, order=ilex]u   â„š[x, y, order=ilex])r9   r�   rÔ   rÑ   r:   r;   r<   r  r  Ú
frac_fieldÚ	poly_ringr=   r>   r  rÄ   rÄ   rÅ   Útest_pretty_Domaing  s<    
rÂ  c                   C   s²   t tdƒddd�dkst‚t tdƒddd�dks4t‚t tdƒddd�dksNt‚t tdƒt dddd�dksnt‚t tdƒt dddd�d	ksŽt‚t tdƒt dddd�d	ks®t‚d S )
Nz0.3TF)Ú	full_precrÌ   z0.300000000000000r·  )rÃ  rË   rÌ   )z0.300000000000000*xzx*0.300000000000000)z0.3*xzx*0.3)rÎ   r   rÔ   r  rÄ   rÄ   rÄ   rÅ   Útest_pretty_prec›  s      rÄ  c                  C   sV   dd l } ddlm} |ƒ }| j}|| _zttddd� W 5 || _X | ¡ dksRt‚d S )Nr   )ÚStringIOF)rË   rÌ   zpi
)ÚsysÚiorÅ  Ústdoutrœ   r   ÚgetvaluerÔ   )rÆ  rÅ  ÚfdZssorÄ   rÄ   rÅ   Útest_pprint­  s    rË  c                  C   sH   G dd„ dƒ} G dd„ dƒ}t | ƒt| ƒks0t‚t |ƒt|ƒksDt‚dS )z;Test that the printer dispatcher correctly handles classes.c                   @   s   e Zd ZdS )ztest_pretty_class.<locals>.CNrÀ   rÄ   rÄ   rÄ   rÅ   rX  ¼  s   rX  c                   @   s   e Zd ZdS )ztest_pretty_class.<locals>.DNrÀ   rÄ   rÄ   rÄ   rÅ   rY  ¿  s   rY  N)r�   r  rÔ   )rX  rY  rÄ   rÄ   rÅ   Útest_pretty_classº  s    rÌ  c                  C   sZ   d} t dƒD ]}| |t|t ƒ 7 } qt| ƒ d¡dks<t‚t| dd� d¡dksVt‚d S )Nr   é   Ú
r  F)rÌ   )r—  rq   r  rÎ   ÚfindrÔ   )Z	huge_exprrf  rÄ   rÄ   rÅ   Útest_pretty_no_wrap_lineÆ  s
    rÐ  c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t tdƒdd�S )Nræ   Úgarbage)Úmethod)r�   r   rÄ   rÄ   rÄ   rÅ   rh  Ï  ri  ztest_settings.<locals>.<lambda>)rµ   Ú	TypeErrorrÄ   rÄ   rÄ   rÅ   Útest_settingsÎ  s    rÔ  c            	   	   C   sÔ  ddl m} m}m}m}m}m} t|| |d|fƒ}d}d}t|ƒ|ksLt	‚t
|ƒ|ks\t	‚t|| |t|fƒ}d}d}t|ƒ|ksˆt	‚t
|ƒ|ks˜t	‚t|t| | | t tfƒ |d|| fƒ}d}d}t|ƒ|ksÚt	‚t
|ƒ|ksêt	‚t|t| | | t tfƒ |dt| |  | t tfƒfƒ}d	}d
}t|ƒ|k�s<t	‚t
|ƒ|k�sNt	‚t|t| | | t tfƒ || | | d  |d  | |  d|   t| |  | t tfƒfƒ}d}d}t|ƒ|k�sÄt	‚t
|ƒ|k�sÖt	‚t|t| | | t tfƒ |d| | | d  |d  | |  d|   fƒ}d}d}t|ƒ|k�s:t	‚t
|ƒ|k�sLt	‚t| | dtfƒ}d}d}t|ƒ|k�svt	‚t
|ƒ|k�sˆt	‚t| d | dtfƒ}d}d}t|ƒ|k�s¶t	‚t
|ƒ|k�sÈt	‚t| d | dtfƒ}d}d}t|ƒ|k�söt	‚t
|ƒ|k�st	‚t| d d | dtfƒ}d}d}t|ƒ|k�s:t	‚t
|ƒ|k�sLt	‚t| d t| d   | | dtfƒ}d}d}t|ƒ|k�sŠt	‚t
|ƒ|k�sœt	‚td| d  | dtfƒ}d}d}t|ƒ|k�sÎt	‚t
|ƒ|k�sàt	‚tdt||   | dtfƒ}d}d}t|ƒ|k�st	‚t
|ƒ|k�s(t	‚tdt||   | dtftddfƒ}d }d!}tddddd|     d |d"dd|  f|dd|  tfƒddd|    }d#}d$}t|ƒ|k�s¾t	‚t
|ƒ|k�sÐt	‚d S )%Nr   )r  r  r  r)  r5  r&  z> n      
___     
\  `    
 \     k
 /    k 
/__,    
k = 0   uU     n     
 ___    
 â•²      
  â•²    k
  â•±   k 
 â•±      
 â€¾â€¾â€¾    
k = 0   zE  n      
 ___     
 \  `    
  \     k
  /    k 
 /__,    
k = oo   uW     n     
 ___    
 â•²      
  â•²    k
  â•±   k 
 â•±      
 â€¾â€¾â€¾    
k = âˆž   a     n              
  n               
______            
\     `           
 \        oo      
  \        /      
   \      |       
    \     |   n   
     )    |  x  dx
    /     |       
   /     /        
  /      -oo      
 /      k         
/_____,           
 k = 0            u*     n            
  n             
______          
â•²               
 â•²              
  â•²     âˆž       
   â•²    âŒ        
    â•²   âŽ®   n   
    â•±   âŽ®  x  dx
   â•±    âŒ¡       
  â•±     -âˆž      
 â•±     k        
â•±               
â€¾â€¾â€¾â€¾â€¾â€¾          
k = 0           a¸   oo                 
  /                 
 |                  
 |   x              
 |  x  dx           
 |                  
/                   
-oo                 
 ______             
 \     `            
  \         oo      
   \         /      
    \       |       
     \      |   n   
      )     |  x  dx
     /      |       
    /      /        
   /       -oo      
  /       k         
 /_____,            
  k = 0             u   âˆž                 
âŒ                  
âŽ®   x             
âŽ®  x  dx          
âŒ¡                 
-âˆž                
 ______           
 â•²                
  â•²               
   â•²      âˆž       
    â•²     âŒ        
     â•²    âŽ®   n   
     â•±    âŽ®  x  dx
    â•±     âŒ¡       
   â•±      -âˆž      
  â•±      k        
 â•±                
 â€¾â€¾â€¾â€¾â€¾â€¾           
 k = 0            rä   rã   a€            oo                          
           /                          
          |                           
          |   x                       
          |  x  dx                    
          |                           
         /                            
         -oo                          
          ______                      
          \     `                     
           \                  oo      
            \                  /      
             \                |       
              \               |   n   
               )              |  x  dx
              /               |       
             /               /        
            /                -oo      
           /                k         
          /_____,                     
     2        2       1   x           
k = n  + n + x  + x + - + -           
                      x   n           uY           âˆž                           
         âŒ                            
         âŽ®   x                       
         âŽ®  x  dx                    
         âŒ¡                           
         -âˆž                          
          ______                     
          â•²                          
           â•²                         
            â•²                âˆž       
             â•²               âŒ        
              â•²              âŽ®   n   
              â•±              âŽ®  x  dx
             â•±               âŒ¡       
            â•±                -âˆž      
           â•±                k        
          â•±                          
          â€¾â€¾â€¾â€¾â€¾â€¾                     
     2        2       1   x          
k = n  + n + x  + x + â”€ + â”€          
                      x   n          a/   2        2       1   x           
n  + n + x  + x + - + -           
                  x   n           
        ______                    
        \     `                   
         \                oo      
          \                /      
           \              |       
            \             |   n   
             )            |  x  dx
            /             |       
           /             /        
          /              -oo      
         /              k         
        /_____,                   
         k = 0                    uO   2        2       1   x          
n  + n + x  + x + â”€ + â”€          
                  x   n          
        ______                   
        â•²                        
         â•²                       
          â•²              âˆž       
           â•²             âŒ        
            â•²            âŽ®   n   
            â•±            âŽ®  x  dx
           â•±             âŒ¡       
          â•±              -âˆž      
         â•±              k        
        â•±                        
        â€¾â€¾â€¾â€¾â€¾â€¾                   
         k = 0                   z/ oo    
 __    
 \ `   
  )   x
 /_,   
x = 0  uO     âˆž    
 ___   
 â•²     
  â•²    
  â•±   x
 â•±     
 â€¾â€¾â€¾   
x = 0  z> oo     
___     
\  `    
 \     2
 /    x 
/__,    
x = 0   uW     âˆž     
 ___    
 â•²      
  â•²    2
  â•±   x 
 â•±      
 â€¾â€¾â€¾    
x = 0   z? oo    
___    
\  `   
 \    x
  )   -
 /    2
/__,   
x = 0  ug    âˆž     
____   
â•²      
 â•²     
  â•²   x
  â•±   â”€
 â•±    2
â•±      
â€¾â€¾â€¾â€¾   
x = 0  rå   zP oo     
____    
\   `   
 \     3
  \   x 
  /   --
 /    2 
/___,   
x = 0   us    âˆž      
____    
â•²       
 â•²     3
  â•²   x 
  â•±   â”€â”€
 â•±    2 
â•±       
â€¾â€¾â€¾â€¾    
x = 0   z• oo           
____          
\   `         
 \           n
  \   /    x\ 
   )  |    -| 
  /   | 3  2| 
 /    \x *y / 
/___,         
x = 0         uã     âˆž           
_____         
â•²             
 â•²            
  â•²          n
   â•²  âŽ›    xâŽž 
   â•±  âŽœ    â”€âŽŸ 
  â•±   âŽœ 3  2âŽŸ 
 â•±    âŽ�x â‹…y âŽ  
â•±             
â€¾â€¾â€¾â€¾â€¾         
x = 0         zP oo     
____    
\   `   
 \    1 
  \   --
  /    2
 /    x 
/___,   
x = 0   us    âˆž      
____    
â•²       
 â•²    1 
  â•²   â”€â”€
  â•±    2
 â•±    x 
â•±       
â€¾â€¾â€¾â€¾    
x = 0   zb oo       
____      
\   `     
 \     -a 
  \    ---
  /     b 
 /    y   
/___,     
x = 0     u‰    âˆž        
____      
â•²         
 â•²     -a 
  â•²    â”€â”€â”€
  â•±     b 
 â•±    y   
â•±         
â€¾â€¾â€¾â€¾      
x = 0     z�  2     oo     
____  ____     
\   ` \   `    
 \     \     -a
  \     \    --
  /     /    b 
 /     /    y  
/___, /___,    
y = 1 x = 0    uÍ     2     âˆž      
____  ____     
â•²     â•²        
 â•²     â•²     -a
  â•²     â•²    â”€â”€
  â•±     â•±    b 
 â•±     â•±    y  
â•±     â•±        
â€¾â€¾â€¾â€¾  â€¾â€¾â€¾â€¾     
y = 1 x = 0    éo   aŸ                1                          
          1 + -                          
   oo         n                          
 _____    _____                          
 \    `   \    `                         
  \        \      /        1    \        
   \        \     |1 + ---------|        
    \        \    |          1  |     1  
     )        )   |    1 + -----| + -----
    /        /    |            1|       1
   /        /     |        1 + -|   1 + -
  /        /      \            k/       k
 /____,   /____,                         
      1   k = 111                        
k = -----                                
    m + 1                                u‡                1                          
          1 + â”€                          
   âˆž          n                          
 ______   ______                         
 â•²        â•²                              
  â•²        â•²                             
   â•²        â•²     âŽ›        1    âŽž        
    â•²        â•²    âŽœ1 + â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ        
     â•²        â•²   âŽœ          1  âŽŸ     1  
     â•±        â•±   âŽœ    1 + â”€â”€â”€â”€â”€âŽŸ + â”€â”€â”€â”€â”€
    â•±        â•±    âŽœ            1âŽŸ       1
   â•±        â•±     âŽœ        1 + â”€âŽŸ   1 + â”€
  â•±        â•±      âŽ�            kâŽ        k
 â•±        â•±                              
 â€¾â€¾â€¾â€¾â€¾â€¾   â€¾â€¾â€¾â€¾â€¾â€¾                         
      1   k = 111                        
k = â”€â”€â”€â”€â”€                                
    m + 1                                )Ú	sympy.abcr  r  r  r)  r5  r&  r   r�   rÔ   rÑ   r   r+   r  )	r  r  r  r)  r5  r&  rÐ   r  r  rÄ   rÄ   rÅ   Útest_pretty_sumÒ  sú     ÿÿÿÿ*ÿÿÿÿÿÿ & ÿÿÿÿ,ÿÿÿÿ
ÿÿÿÿÿÿÿ$ÿÿÿÿÿÿ$ÿÿ
ÿÿ ÿÿÿÿr×  c                  C   sð   t } d}d}d}d}ddlm}m}m} t| ƒdks8t‚t| ƒdksHt‚t|  ||d  |d  ¡ƒ|ksnt‚t|  ||d  |d  ¡ƒ|ks”t‚td	| t	 |d  t
 |d  ƒ|ksÀt‚td	| t	 |d  t
 |d  ƒ|ksìt‚d S )
NzO              2
kilogram*meter 
---------------
          2    
    second     uo                 2
kilogramâ‹…meter 
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
          2    
    second     zm                    2
3*x*y*kilogram*meter 
---------------------
             2       
       second        uŸ                       2
3â‹…xâ‹…yâ‹…kilogramâ‹…meter 
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
             2       
       second        r   )Úkgr5  r:  rš   rä   rå   )rš   Úsympy.physics.unitsrØ  r5  r:  rÑ   rÔ   r�   Z
convert_tor  r  )rÐ   Ú
ascii_str1Zunicode_str1Ú
ascii_str2Zunicode_str2rØ  r5  r:  rÄ   rÄ   rÅ   Ú
test_unitsØ  s     ÿ	ÿ
ÿ	ÿ	&&,rÜ  c                  C   sÖ   t dƒ} t| tƒttd ƒ}d}d}t|ƒ|ks4t‚t|ƒ|ksDt‚t| tƒ t¡tdƒ}d}d}t|ƒ|ksrt‚t|ƒ|ks‚t‚t| tƒ t¡t ttfdt	ddƒfƒ}d	}d
}t|ƒ|ksÂt‚t|ƒ|ksÒt‚d S )NrÆ   rä   z(f(x))|     2
      |x=phi u   (f(x))â”‚   2
      â”‚x=Ï† r   z,/d       \|   
|--(f(x))||   
\dx      /|x=0uB   âŽ›d       âŽžâ”‚   
âŽœâ”€â”€(f(x))âŽŸâ”‚   
âŽ�dx      âŽ â”‚x=0rã   zm/d       \|          
|--(f(x))||          
|dx      ||          
|--------||          
\   y    /|x=0, y=1/2uŸ   âŽ›d       âŽžâ”‚          
âŽœâ”€â”€(f(x))âŽŸâ”‚          
âŽœdx      âŽŸâ”‚          
âŽœâ”€â”€â”€â”€â”€â”€â”€â”€âŽŸâ”‚          
âŽ�   y    âŽ â”‚x=0, y=1/2)
r	   r   r  ra  r�   rÔ   rÑ   r^  r  r   )rÆ   rÐ   r  r7  rÄ   rÄ   rÅ   Útest_pretty_Subs  s,    ÿÿÿÿ(ÿ	ÿ	rÝ  c                   C   s˜   t tttƒƒdkst‚t tttƒƒdks,t‚tttƒdd�dksDt‚ttdd�dksXt‚ttdt	d�tƒdd�d	ksxt‚ttdt	d�dd�d
ks”t‚d S )Nu   Î³(x, y)u   Î“(x, y)Trì   u   Î“(x)u   Î“rm   r3  u   Î³(x)r  )
rÑ   r¿   r  r  rÔ   ru   rÎ   rm   r   r	   rÄ   rÄ   rÄ   rÅ   Útest_gammas=  s     rÞ  c                  C   s°   t tttƒdd�dkst‚t tttƒdd�dks4t‚t tdd�dksHt‚t tdd�dks\t‚tdƒ} t | tƒdd�d	ks|t‚t | tttƒdd�d
ks˜t‚t | dd�dks¬t‚d S )NTrì   u   Î’(x, y)FzB(x, y)u   Î’rW  rb   u   Î²(x)zbeta(x, y, z)rØ   )rÎ   rb   r  r  rÔ   r	   r  )ZmybetarÄ   rÄ   rÅ   Ú	test_betaF  s    rß  c                  C   s@   G dd„ dt ƒ} t| dd�dks$t‚t| tƒdd�dks<t‚d S )Nc                   @   s   e Zd ZdS )z6test_function_subclass_different_name.<locals>.mygammaNrÀ   rÄ   rÄ   rÄ   rÅ   ÚmygammaS  s   rà  Trì   z
mygamma(x))rm   rÎ   rÔ   r  )rà  rÄ   rÄ   rÅ   Ú%test_function_subclass_different_nameR  s    rá  c                   C   s  t ttdtƒdd�dkst‚t ttdtƒdd�dks8t‚t ttdtƒdd�dksTt‚t ttttƒdd�d	kspt‚t ttttƒdd�d
ksŒt‚t ttdtƒdd�dks¨t‚t ttdtƒdd�dksÄt‚t ttdtƒdd�dksàt‚t ttttƒdd�d	ksüt‚t ttttƒdd�d
k�st‚d S )Nr   Trì   z	   n
<x> rã   z       n
<x - 1> r  z       n
<x + 1> z        n
<-a + x> z       n
<x - y> F)rÎ   r'   r  r&  rÔ   r  r  rÄ   rÄ   rÄ   rÅ   Útest_SingularityFunctionY  s<    ÿÿÿÿÿÿÿÿÿÿrâ  c                   C   sT   t ttƒdd�dkst‚t ttdƒdd�dks2t‚t tttdƒ dd�dksPt‚d S )NTrì   u   Î´(x)rã   u    (1)    
Î´    (x)u      (1)    
xâ‹…Î´    (x))rÎ   r|   r  rÔ   rÄ   rÄ   rÄ   rÅ   Útest_deltasŽ  s    ÿÿrã  c                  C   sŠ  t ddtƒ} d}d}t| ƒ|ks$t‚t| ƒ|ks4t‚t ddtƒ} d}d}t| ƒ|ksXt‚t| ƒ|ksht‚t dgdgtƒ} d	}d
}t| ƒ|ks�t‚t| ƒ|ks t‚t td dt fdtƒ} d}d}t| ƒ|ksÐt‚t| ƒ|ksàt‚t ttdƒdt fdtd ƒ} d}d}t| ƒ|k�st‚t| ƒ|k�s*t‚t ddgddgddddt d  d  d  ƒ} d}d}t| ƒ|k�stt‚t| ƒ|k�s†t‚d S )NrÄ   uB    â”Œâ”€  âŽ›  â”‚  âŽž
 â”œâ”€  âŽœ  â”‚ zâŽŸ
0â•µ 0 âŽ�  â”‚  âŽ z3  _         
 |_  /  |  \
 |   |  | z|
0  0 \  |  /)rã   uB    â”Œâ”€  âŽ›  â”‚  âŽž
 â”œâ”€  âŽœ  â”‚ xâŽŸ
0â•µ 1 âŽ�1 â”‚  âŽ z3  _         
 |_  /  |  \
 |   |  | x|
0  1 \1 |  /rä   rã   uB    â”Œâ”€  âŽ›2 â”‚  âŽž
 â”œâ”€  âŽœ  â”‚ xâŽŸ
1â•µ 1 âŽ�1 â”‚  âŽ z3  _         
 |_  /2 |  \
 |   |  | x|
1  1 \1 |  /rå   rô   )rå   ræ   rç   éýÿÿÿuŸ        âŽ›  Ï€         â”‚  âŽž
 â”Œâ”€  âŽœ  â”€, -2â‹…k   â”‚  âŽŸ
 â”œâ”€  âŽœ  3         â”‚ xâŽŸ
2â•µ 4 âŽœ            â”‚  âŽŸ
     âŽ�-3, 3, 4, 5 â”‚  âŽ z‰                      
  _  / pi         |  \
 |_  | --, -2*k   |  |
 |   | 3          | x|
2  4 |            |  |
     \-3, 3, 4, 5 |  /z2/3ui    â”Œâ”€  âŽ›2/3, Ï€, -2â‹…k â”‚  2âŽž
 â”œâ”€  âŽœ             â”‚ x âŽŸ
3â•µ 4 âŽ�-3, 3, 4, 5  â”‚   âŽ zg  _                      
 |_  /2/3, pi, -2*k |  2\
 |   |              | x |
3  4 \ -3, 3, 4, 5  |   /ræ   us       âŽ›     â”‚       1      âŽž
     âŽœ     â”‚ â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ
     âŽœ     â”‚         1    âŽŸ
 â”Œâ”€  âŽœ1, 2 â”‚ 1 + â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ
 â”œâ”€  âŽœ     â”‚           1  âŽŸ
2â•µ 2 âŽœ3, 4 â”‚     1 + â”€â”€â”€â”€â”€âŽŸ
     âŽœ     â”‚             1âŽŸ
     âŽœ     â”‚         1 + â”€âŽŸ
     âŽ�     â”‚             xâŽ a                             
     /     |       1      \
     |     | -------------|
  _  |     |         1    |
 |_  |1, 2 | 1 + ---------|
 |   |     |           1  |
2  2 |3, 4 |     1 + -----|
     |     |             1|
     |     |         1 + -|
     \     |             x/)	rn   r  r�   rÔ   rÑ   r  r   r)  r   ©rÐ   r  r  rÄ   rÄ   rÅ   Ú
test_hyperœ  sT    ÿÿÿÿÿÿÿ	ÿ
ÿÿ0ÿÿræ  c               
   C   sx  t tttgdgddgdddgtƒ} d}d}t| ƒ|ks:t‚t| ƒ|ksJt‚t dtd gdtdgg g td ƒ} d	}d
}t| ƒ|ks„t‚t| ƒ|ks”t‚d}d}t dgd dgdgdgtƒ} t| ƒ|ksÈt‚t| ƒ|ksØt‚t ddgddgdgddgddddt d  d  d  ƒ} d}d}t| ƒ|k�s,t‚t| ƒ|k�s>t‚t| tƒ} d}d}t| ƒ|k�sbt‚t| ƒ|k�stt‚d S )Nrã   r   rä   rå   u‚   â•­â”€â•®2, 3 âŽ›Ï€, Ï€, x     1    â”‚  âŽž
â”‚â•¶â”�     âŽœ                 â”‚ zâŽŸ
â•°â”€â•¯4, 5 âŽ� 0, 1    1, 2, 3 â”‚  âŽ zb __2, 3 /pi, pi, x     1    |  \
/__     |                   | z|
\_|4, 5 \  0, 1     1, 2, 3 |  /r  rç   uÄ           âŽ›   Ï€          â”‚   âŽž
â•­â”€â•®0, 2 âŽœ1, â”€  2, 5, Ï€ â”‚  2âŽŸ
â”‚â•¶â”�     âŽœ   7          â”‚ z âŽŸ
â•°â”€â•¯5, 0 âŽœ              â”‚   âŽŸ
        âŽ�              â”‚   âŽ zš        /   pi           |   \
 __0, 2 |1, --  2, 5, pi |  2|
/__     |   7            | z |
\_|5, 0 |                |   |
        \                |   /u³   â•­â”€â•® 1, 10 âŽ›1, 1, 1, 1, 1, 1, 1, 1, 1, 1  1 â”‚  âŽž
â”‚â•¶â”�       âŽœ                                â”‚ zâŽŸ
â•°â”€â•¯11,  2 âŽ�             1                1 â”‚  âŽ z� __ 1, 10 /1, 1, 1, 1, 1, 1, 1, 1, 1, 1  1 |  \
/__       |                                | z|
\_|11,  2 \             1                1 |  /r   ræ   uÌ          âŽ›           â”‚       1      âŽž
        âŽœ           â”‚ â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ
        âŽœ           â”‚         1    âŽŸ
â•­â”€â•®1, 2 âŽœ1, 2  3, 4 â”‚ 1 + â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ
â”‚â•¶â”�     âŽœ           â”‚           1  âŽŸ
â•°â”€â•¯4, 3 âŽœ 3    4, 5 â”‚     1 + â”€â”€â”€â”€â”€âŽŸ
        âŽœ           â”‚             1âŽŸ
        âŽœ           â”‚         1 + â”€âŽŸ
        âŽ�           â”‚             xâŽ aL          /           |       1      \
        |           | -------------|
        |           |         1    |
 __1, 2 |1, 2  3, 4 | 1 + ---------|
/__     |           |           1  |
\_|4, 3 | 3    4, 5 |     1 + -----|
        |           |             1|
        |           |         1 + -|
        \           |             x/uc  âŒ                                         
âŽ®         âŽ›           â”‚       1      âŽž   
âŽ®         âŽœ           â”‚ â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ   
âŽ®         âŽœ           â”‚         1    âŽŸ   
âŽ® â•­â”€â•®1, 2 âŽœ1, 2  3, 4 â”‚ 1 + â”€â”€â”€â”€â”€â”€â”€â”€â”€âŽŸ   
âŽ® â”‚â•¶â”�     âŽœ           â”‚           1  âŽŸ dx
âŽ® â•°â”€â•¯4, 3 âŽœ 3    4, 5 â”‚     1 + â”€â”€â”€â”€â”€âŽŸ   
âŽ®         âŽœ           â”‚             1âŽŸ   
âŽ®         âŽœ           â”‚         1 + â”€âŽŸ   
âŽ®         âŽ�           â”‚             xâŽ    
âŒ¡                                        a.    /                                       
 |                                        
 |         /           |       1      \   
 |         |           | -------------|   
 |         |           |         1    |   
 |  __1, 2 |1, 2  3, 4 | 1 + ---------|   
 | /__     |           |           1  | dx
 | \_|4, 3 | 3    4, 5 |     1 + -----|   
 |         |           |             1|   
 |         |           |         1 + -|   
 |         \           |             x/   
 |                                        
/                                         )rp   r   r  r  r�   rÔ   rÑ   r+   rå  rÄ   rÄ   rÅ   Útest_meijerg  sF    "ÿÿ"ÿ	ÿÿÿ:ÿÿ
ÿÿrç  c                  C   sú   t ddd�\} }}| | |d  }d}d}t|ƒ|ks:t‚t|ƒ|ksJt‚|d |  | }d}d}t|ƒ|ksrt‚t|ƒ|ks‚t‚| |d  | }d	}d
}t|ƒ|ksªt‚t|ƒ|ksºt‚| |d  | t }d}d}t|ƒ|ksæt‚t|ƒ|ksöt‚d S )NzA,B,CF©Zcommutativer  z     -1
A*B*C  u        -1
Aâ‹…Bâ‹…C  z -1    
C  *A*Bu    -1    
C  â‹…Aâ‹…Bz   -1  
A*C  *Bu      -1  
Aâ‹…C  â‹…Bz   -1  
A*C  *B
-------
   x   u1      -1  
Aâ‹…C  â‹…B
â”€â”€â”€â”€â”€â”€â”€
   x   )r   r�   rÔ   rÑ   r  )rV  rW  rX  rÐ   r  r  rÄ   rÄ   rÅ   Útest_noncommutative‘  s:    ÿÿÿÿÿÿÿÿré  c                  C   sN   t dƒ\} }t|tdƒ t| ƒƒ}d}d}t|ƒ|ks:t‚t|ƒ|ksJt‚d S )Núx yéÈ   zW     /  ___         \
     |\/ 2 *y    ___|
atan2|-------, \/ x |
     \  20          /uI        âŽ›âˆš2â‹…y    âŽž
atan2âŽœâ”€â”€â”€â”€, âˆšxâŽŸ
     âŽ� 20     âŽ )r   ra   rr   r�   rÔ   rÑ   r1  rÄ   rÄ   rÅ   Útest_pretty_special_functionsÑ  s    ÿÿrì  c                  C   s>   t ddƒ} t| ƒdkst‚tddt d�} t| ƒdks:t‚d S )N)r   rã   r©  z'Segment2D(Point2D(0, 1), Point2D(0, 2)))rã   rã   g®Gáz@)Zanglez0Ray2D(Point2D(1, 1), Point2D(2, tan(pi/50) + 1)))r*   r�   rÔ   r)   r   )ÚerÄ   rÄ   rÅ   Útest_pretty_geometryç  s    
rî  c                  C   s  t tƒ} d}t| ƒ|kst‚t| ƒ|ks,t‚tdtƒ} d}d}t| ƒ|ksNt‚t| ƒ|ks^t‚tttƒƒdksrt‚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tƒƒdksÖt‚tt	tƒƒdksêt‚tt
tƒƒdksþt‚d S )	NzEi(x)rã   u   Eâ‚�(z)zexpint(1, z)zShi(x)zSi(x)zCi(x)zChi(x))r\   r  r�   rÔ   rÑ   ri   r  r_   r`   r[   rZ   )rÐ   Ústringr  r  rÄ   rÄ   rÅ   Útest_expintî  s"    
rð  c                  C   s^  d} d}t dtd  ƒ}t|ƒ| ks(t‚t|ƒ|ks8t‚d} d}tdddt  ƒ}t|ƒ| ksbt‚t|ƒ|ksrt‚d} d}tdtd  ƒ}t|ƒ| ksšt‚t|ƒ|ksªt‚d} d	}tdddt  ƒ}t|ƒ| ksÔt‚t|ƒ|ksät‚d
} d}tddt ƒ}t|ƒ| k�st‚t|ƒ|k�st‚d} d}tddt dƒ}t|ƒ| k�sHt‚t|ƒ|k�sZt‚d S )Nz /  1  \
K|-----|
 \z + 1/u0    âŽ›  1  âŽž
KâŽœâ”€â”€â”€â”€â”€âŽŸ
 âŽ�z + 1âŽ rã   z  / |  1  \
F|1|-----|
 \ |z + 1/u<    âŽ› â”‚  1  âŽž
FâŽœ1â”‚â”€â”€â”€â”€â”€âŽŸ
 âŽ� â”‚z + 1âŽ z /  1  \
E|-----|
 \z + 1/u0    âŽ›  1  âŽž
EâŽœâ”€â”€â”€â”€â”€âŽŸ
 âŽ�z + 1âŽ z  / |  1  \
E|1|-----|
 \ |z + 1/u<    âŽ› â”‚  1  âŽž
EâŽœ1â”‚â”€â”€â”€â”€â”€âŽŸ
 âŽ� â”‚z + 1âŽ z  / |4\
Pi|3|-|
  \ |x/u)    âŽ› â”‚4âŽž
Î âŽœ3â”‚â”€âŽŸ
 âŽ� â”‚xâŽ rå   ræ   z   /   4| \
Pi|3; -|6|
  \   x| /u2    âŽ›   4â”‚ âŽž
Î âŽœ3; â”€â”‚6âŽŸ
 âŽ�   xâ”‚ âŽ r  )	rx   r  r�   rÔ   rÑ   ry   rz   r{   r  )r  r  rÐ   rÄ   rÄ   rÅ   Útest_elliptic_functions  sT    ÿÿÿÿÿÿÿÿÿÿÿÿrñ  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   )r¥   ÚDieÚExponentialÚpspaceÚwhereÚx1rã   u   Domain: 0 < xâ‚� âˆ§ xâ‚� < âˆžZd1r  ræ   u   Domain: dâ‚� = 5 âˆ¨ dâ‚� = 6r  r  u3   Domain: 0 â‰¤ a âˆ§ 0 â‰¤ b âˆ§ a < âˆž âˆ§ b < âˆž)
Zsympy.statsr¥   rò  ró  rô  rõ  rÑ   rÔ   r   Údomain)	r¥   rò  ró  rô  rõ  ru  rY  rV  rW  rÄ   rÄ   rÅ   Útest_RandomDomainf  s    


ÿrø  c                  C   s|   t  tt¡} t  tt¡}|  ttt  ¡}t|ƒdks:t‚t|ƒdksJt‚| tt ¡}t|ƒdksht‚t|ƒdksxt‚d S )Nz	x/(x + y)zx + y)	r;   rÀ  r  r  rÁ  Úconvertr�   rÔ   rÑ   )r¹  ÚRrÐ   rÄ   rÄ   rÅ   Útest_PrettyPolyt  s    rû  c                   C   s8   t tdddd�ƒdkst‚t ttdt ƒƒdks4t‚d S )Nrä   r÷   Frò   z1 
--
 5
2 rã   z 1 
 --
 pi
x  )r�   r   rÔ   r  r   rÄ   rÄ   rÄ   rÅ   Útest_issue_6285�  s    ÿrü  c                  C   s  t ttd tƒd ƒdkst‚tttd tƒd ƒdks<t‚t ttd tddfƒd ƒdks`t‚tttd tddfƒd ƒdks„t‚t ttd tddfƒd ƒdks¨t‚tttd tddfƒd ƒd	ksÌt‚td
ƒ} t t| tƒtƒd ƒdksòt‚tt| tƒtƒd ƒdk�st‚d S )Nrä   zS          2
/  /     \ 
| |      | 
| |  2   | 
| | x  dx| 
| |      | 
\/       / uN            2
âŽ›âŒ       âŽž 
âŽœâŽ®  2   âŽŸ 
âŽœâŽ® x  dxâŽŸ 
âŽ�âŒ¡      âŽ  r   rã   z_          2
/ 1      \ 
|___     | 
|\  `    | 
| \     2| 
| /    x | 
|/__,    | 
\x = 0   / u™             2
âŽ›  1     âŽž 
âŽœ ___    âŽŸ 
âŽœ â•²      âŽŸ 
âŽœ  â•²    2âŽŸ 
âŽœ  â•±   x âŽŸ 
âŽœ â•±      âŽŸ 
âŽœ â€¾â€¾â€¾    âŽŸ 
âŽ�x = 0   âŽ  zZ           2
/  2      \ 
|______   | 
| |  |   2| 
| |  |  x | 
| |  |    | 
\x = 1    / uŠ              2
âŽ›  2      âŽž 
âŽœâ”€â”¬â”€â”€â”¬â”€   âŽŸ 
âŽœ â”‚  â”‚   2âŽŸ 
âŽœ â”‚  â”‚  x âŽŸ 
âŽœ â”‚  â”‚    âŽŸ 
âŽ�x = 1    âŽ  rÆ   z/          2
/d       \ 
|--(f(x))| 
\dx      / u?             2
âŽ›d       âŽž 
âŽœâ”€â”€(f(x))âŽŸ 
âŽ�dx      âŽ  )	r�   r+   r  rÔ   rÑ   r   r   r	   r   )rÆ   rÄ   rÄ   rÅ   Útest_issue_6359Š  s2    ÿ
ÿ	ÿÿÿ
ÿÿÿrý  c                  C   s<   d} d}t dttƒ ƒ| ks t‚tdttƒ ƒ|ks8t‚d S )Nz  1  
-----
  ___
\/ x u   1 
â”€â”€
âˆšxrã   )r�   rr   r  rÔ   rÑ   )r  r  rÄ   rÄ   rÅ   Útest_issue_6739Ü  s    ÿÿrþ  c                  C   s"   dD ]} t t| ƒƒ| kst‚qd S )N)Zdexpr2_d1tauzdexpr2^d1tau)r�   r   rÔ   )Z	symb_namerÄ   rÄ   rÅ   Ú!test_complicated_symbol_unchangedî  s    rÿ  c                  C   sÚ  ddl m} m}m}m}m}m} | dƒ}| dƒ}| dƒ}|||dƒ}	|||dƒ}
||ƒ}|dƒ}t|ƒdkspt‚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�s
t‚|ƒ }t|ƒdk�s"t‚t	|ƒdk�s4t‚||	d|
t
jiƒ}t|ƒdk�sXt‚t	|ƒdk�sjt‚||	d|
t
ji|
|	 diƒ}t|ƒdk�s˜t‚t	|ƒdk�sªt‚||ƒ}t|ƒdk�sÄt‚t	|ƒdk�sÖt‚d S )Nr   )ÚObjectÚIdentityMorphismÚNamedMorphismÚCategoryÚDiagramÚDiagramGridÚA1ÚA2ÚA3Úf1Úf2ÚK1u   Aâ‚�z
f1:A1-->A2u   fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚‚z
id:A1-->A1u   id:Aâ‚�â€”â€”â–¶Aâ‚�zf2*f1:A1-->A3u   fâ‚‚âˆ˜fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚ƒu   Kâ‚�r�  rž  Úuniquez‡{f2*f1:A1-->A3: EmptySet, id:A1-->A1: EmptySet, id:A2-->A2: EmptySet, id:A3-->A3: EmptySet, f1:A1-->A2: {unique}, f2:A2-->A3: EmptySet}u´   {fâ‚‚âˆ˜fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚ƒ: âˆ…, id:Aâ‚�â€”â€”â–¶Aâ‚�: âˆ…, id:Aâ‚‚â€”â€”â–¶Aâ‚‚: âˆ…, id:Aâ‚ƒâ€”â€”â–¶Aâ‚ƒ: âˆ…, fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚‚: {unique}, fâ‚‚:Aâ‚‚â€”â€”â–¶Aâ‚ƒ: âˆ…}z¥{f2*f1:A1-->A3: EmptySet, id:A1-->A1: EmptySet, id:A2-->A2: EmptySet, id:A3-->A3: EmptySet, f1:A1-->A2: {unique}, f2:A2-->A3: EmptySet} ==> {f2*f1:A1-->A3: {unique}}uè   {fâ‚‚âˆ˜fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚ƒ: âˆ…, id:Aâ‚�â€”â€”â–¶Aâ‚�: âˆ…, id:Aâ‚‚â€”â€”â–¶Aâ‚‚: âˆ…, id:Aâ‚ƒâ€”â€”â–¶Aâ‚ƒ: âˆ…, fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚‚: {unique}, fâ‚‚:Aâ‚‚â€”â€”â–¶Aâ‚ƒ: âˆ…} â•�â•�â–¶ {fâ‚‚âˆ˜fâ‚�:Aâ‚�â€”â€”â–¶Aâ‚ƒ: {unique}}zA1  A2
      
A3    u   Aâ‚�  Aâ‚‚
      
Aâ‚ƒ    )Zsympy.categoriesr   r  r  r  r  r  r�   rÔ   rÑ   r   r�  )r   r  r  r  r  r  r  r  r  r	  r
  Zid_A1r  rU  ÚgridrÄ   rÄ   rÅ   Útest_categoriesó  s<     r  c                  C   sò   t  tt¡} |  d¡}| ttgdtd g¡}d}d}t|ƒ|ksFt‚t|ƒ|ksVt‚d}d}t|ƒ|ksnt‚t|ƒ|ks~t‚|  	td t¡}d}d}t|ƒ|ks¦t‚t|ƒ|ks¶t‚|| }d	}d
}t|ƒ|ksÖt‚t|ƒ|ksæt‚d}d}d S )Nrä   rã   u          2
â„š[x, y] z        2
QQ[x, y] u3   â•±        âŽ¡    2âŽ¤â•²
â•²[x, y], âŽ£1, x âŽ¦â•±z#              2  
<[x, y], [1, x ]>u   â•± 2   â•²
â•²x , yâ•±z  2    
<x , y>u�              2     
    â„š[x, y]      
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
â•±        âŽ¡    2âŽ¤â•²
â•²[x, y], âŽ£1, x âŽ¦â•±zY            2    
    QQ[x, y]     
-----------------
              2  
<[x, y], [1, x ]>u+  â•±âŽ¡    3âŽ¤                                                â•²
â”‚âŽ¢   x âŽ¥   â•±        âŽ¡    2âŽ¤â•²           â•±        âŽ¡    2âŽ¤â•²â”‚
â”‚âŽ¢1, â”€â”€âŽ¥ + â•²[x, y], âŽ£1, x âŽ¦â•±, [2, y] + â•²[x, y], âŽ£1, x âŽ¦â•±â”‚
â•²âŽ£   2 âŽ¦                                                â•±zç      3                                                  
     x                   2                           2   
<[1, --] + <[x, y], [1, x ]>, [2, y] + <[x, y], [1, x ]>>
     2                                                   )
r;   Úold_poly_ringr  r  Úfree_moduleÚ	submodulerÑ   rÔ   r�   Zideal)rú  r¹  rn  r  r  r   ÚQrÄ   rÄ   rÅ   Útest_PrettyModules*  sB    
ÿÿÿÿÿÿÿ
ÿ	ÿ	ÿr  c                  C   sp   t  t¡td d g } d}d}t| ƒ|ks0t‚t| ƒ|ks@t‚d}d}t| jƒ|ksZt‚t| jƒ|kslt‚d S )Nrä   rã   u=     â„š[x]  
â”€â”€â”€â”€â”€â”€â”€â”€
â•± 2    â•²
â•²x  + 1â•±z# QQ[x]  
--------
  2     
<x  + 1>u!       â•± 2    â•²
1 + â•²x  + 1â•±z      2     
1 + <x  + 1>)r;   r  r  rÑ   rÔ   r�   Úone)rú  r  r  rÄ   rÄ   rÅ   Útest_QuotientRing„  s    ÿ	ÿÿÿr  c                  C   sê   ddl m}  t t¡}| | d¡| d¡dgƒ}d}d}t|ƒ|ksHt‚t|ƒ|ksXt‚| | d¡| d¡ddgƒ}d}d}t|ƒ|ksŒt‚t|ƒ|ksœt‚| | d¡| d¡tgg dgƒ}d	}d
}t|ƒ|ksÖt‚t|ƒ|ksæt‚d S )Nr   )Úhomomorphismrã   u3             1         1
[0] : â„š[x]  â”€â”€> â„š[x] z/           1          1
[0] : QQ[x]  --> QQ[x] rä   u^   âŽ¡0  0âŽ¤       2         2
âŽ¢    âŽ¥ : â„š[x]  â”€â”€> â„š[x] 
âŽ£0  0âŽ¦                  zP[0  0]        2          2
[    ] : QQ[x]  --> QQ[x] 
[0  0]                    ui                       1
          1     â„š[x] 
[0] : â„š[x]  â”€â”€> â”€â”€â”€â”€â”€
                <[x]>z_                      1
           1     QQ[x] 
[0] : QQ[x]  --> ------
                 <[x]> )	Zsympy.polys.agcar  r;   r  r  r  rÑ   rÔ   r�   )r  rú  rÐ   r  r  rÄ   rÄ   rÅ   Útest_Homomorphismª  s.    
ÿÿÿÿ"ÿ	ÿr  c                  C   s@   t ddd�\} }t| | ƒ}t|ƒdks,t‚t|ƒdks<t‚d S )NzA BFrè  zTr(A*B)u	   Tr(Aâ‹…B))r   rX   r�   rÔ   rÑ   )rV  rW  r€  rÄ   rÄ   rÅ   Útest_Tré  s    r  c                  C   s*   t dtd dd�d } t| ƒdks&t‚d S )Nrô   rä   Frò   rç   z5 - 2*(x - 2))r   r  r�   rÔ   )ÚeqrÄ   rÄ   rÅ   Útest_pretty_Addð  s    r  c                   C   s8   t ttttƒƒƒdkst‚t ttttƒƒƒdks4t‚d S )Nu   x â‡Ž yu   x â†› y)rÑ   r2   r-   r  r  rÔ   r/   rÄ   rÄ   rÄ   rÅ   Útest_issue_7179õ  s    r  c                   C   s   t tttƒƒdkst‚d S )Nr½  )rÑ   r-   r  r  rÔ   rÄ   rÄ   rÄ   rÅ   Útest_issue_7180ú  s    r  c                   C   sd   t tjtj ƒdkst‚ttjtj ƒdks0t‚t tjtj ƒdksHt‚ttjtj ƒdks`t‚d S )Nz(-oo, oo) \ Naturalsu	   â„� \ â„•z(-oo, oo) \ Naturals0u   â„� \ â„•â‚€)r�   r   rŸ  r›  rÔ   rÑ   Z	Naturals0rÄ   rÄ   rÄ   rÅ   Útest_pretty_Complementþ  s    r  c               	   C   sh   ddl m}  t| tddƒtddƒdd�ƒdks2t‚ttƒ�$ t| tddƒtddƒdd�ƒ W 5 Q R X d S )	Nr   ©ÚSymmetricDifferencerä   rå   rç   Frò   u   [2, 3] âˆ† [3, 5])Úsympy.sets.setsr  rÑ   rO   rÔ   rµ   r­  r�   r  rÄ   rÄ   rÅ   Útest_pretty_SymmetricDifference  s    ÿÿ
r!  c                   C   s4   t tttjƒƒdkst‚ttttjƒƒdks0t‚d S )NzContains(x, Integers)u	   x âˆˆ â„¤)r�   rJ   r  r   ZIntegersrÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_pretty_Contains  s    r"  c                  C   sD   ddl m}  | ddd�}d}d}t|ƒ|ks0t‚t|ƒ|ks@t‚d S )Nr   ©Úsympifyz&((x+x**4)/(x-1))-(2*(x-1)**4/(x-1)**4)Frò   u�              4    4    
  2â‹…(x - 1)    x  + x
- â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ + â”€â”€â”€â”€â”€â”€
          4    x - 1 
   (x - 1)           zm           4    4    
  2*(x - 1)    x  + x
- ---------- + ------
          4    x - 1 
   (x - 1)           )Ú
sympy.corer$  r�   rÔ   rÑ   )r$  rí  r  r  rÄ   rÄ   rÅ   Útest_issue_8292  s    ÿ	ÿr&  c                  C   sD   t dƒ} | tƒ t¡ }d}d}t|ƒ|ks0t‚t|ƒ|ks@t‚d S )Nr  u!    d       
-â”€â”€(y(x))
 dx      z   d       
- --(y(x))
  dx      )r	   r  r^  r�   rÔ   rÑ   )r  rÐ   r  r  rÄ   rÄ   rÅ   Útest_issue_4335)  s    ÿÿr'  c                  C   s0   ddl m}  | ddd�}d}t|ƒ|ks,t‚d S )Nr   r#  z2*x*y**2/1**2 + 1Frò   uF        2    
2â‹…xâ‹…y     
â”€â”€â”€â”€â”€â”€ + 1
   2      
  1       )r%  r$  rÑ   rÔ   )r$  rí  r  rÄ   rÄ   rÅ   Útest_issue_8344<  s
    ÿr(  c                  C   sB   t dddd�} t dddd�}t| |dd�}d}t|ƒ|ks>t‚d S )Nrä   rå   Frò   r   rô   u    3 
2  
â”€â”€â”€
  2
10 )r   r   rÑ   rÔ   )r  r  rí  r  rÄ   rÄ   rÅ   Útest_issue_6324J  s    ÿr)  c                  C   sX   t td ƒttd ƒ } d}t| ƒ|ks,t‚t tƒtdƒd  } d}t| ƒ|ksTt‚d S )Nrä   u�              âŽ›xâŽž
        cosâŽœâ”€âŽŸ
           âŽ�2âŽ 
âŽ›   âŽ›xâŽžâŽž      
âŽœsinâŽœâ”€âŽŸâŽŸ      
âŽ�   âŽ�2âŽ âŽ       rµ  rï   u/           11
        â”€â”€
        13
(sin(x))  )rq   r  rf   rÑ   rÔ   r   )rí  r  rÄ   rÄ   rÅ   Útest_issue_7927Y  s    ÿ	ÿr*  c                  C   s”   ddl m} m} tdƒ}| t t||ƒt tt| ƒ |ddfƒ | td  t||ƒd t tdt | ƒ |ddfƒ  }d}t|ƒ|ks�t	‚d S )Nr   )rƒ  r€  rÈ   rã   rä   uH       1                              1                   
   2 âŒ                               âŒ                    
Î»â‹…x â‹…âŽ® 2â‹…Ï€â‹…Ï†(t)â‹…sin(2â‹…Ï€â‹…t) dt + Î»â‹…xâ‹…âŽ® Ï€â‹…Ï†(t)â‹…sin(Ï€â‹…t) dt
     âŒ¡                              âŒ¡                   
     0                              0                   )
rÖ  rƒ  r€  r	   r  r+   r   rq   rÑ   rÔ   )rƒ  r€  rÈ   rí  r  rÄ   rÄ   rÅ   Útest_issue_6134p  s    dÿr+  c            	      C   s�   d} t ddddƒt ddƒttƒ  }}}tt|t||ƒƒƒ| ksDt‚d}ttƒttƒttƒt ddƒf\}}}}tt	||t||ƒƒƒ|ksŒt‚d S )Nu   (2, 3) âˆª ([1, 2] \ {x})rä   rå   Trã   u   {x} âˆ© {y} âˆ© ({z} \ [1, 2]))
rO   rM   r  rÑ   rP   rL   rÔ   r  r  rN   )	r-  r  r  rT  r.  rU  rí  rÆ   ÚgrÄ   rÄ   rÅ   Útest_issue_9877€  s    $&r-  c                  C   sT   t tdtt dd� } t| ƒdks&t‚t tdtt t dd� }t|ƒdksPt‚d S )Nr  Frò   zc - (a + b)zc - (a - b + d))rT  r   r  r  r�   rÔ   rU  )Úexpr1r�  rÄ   rÄ   rÅ   Útest_issue_13651Š  s    r/  c                  C   sL   ddl m}  d}d}tddd�}t| |ƒƒ|ks4t‚t| |ƒƒ|ksHt‚d S )Nr   )Úprimenuznu(n)u   Î½(n)r&  Tr'  )Ú%sympy.functions.combinatorial.numbersr0  r   r�   rÔ   rÑ   )r0  rÚ  r-  r&  rÄ   rÄ   rÅ   Útest_pretty_primenu‘  s    r2  c                  C   sL   ddl m}  d}d}tddd�}t| |ƒƒ|ks4t‚t| |ƒƒ|ksHt‚d S )Nr   )Ú
primeomegazOmega(n)u   Î©(n)r&  Tr'  )r1  r3  r   r�   rÔ   rÑ   )r3  rÚ  r-  r&  rÄ   rÄ   rÅ   Útest_pretty_primeomegaœ  s    r4  c                  C   sF  ddl m}  d}d}d}d}d}d}d}d}d}	d	}
td
dd�}t| |dƒƒ|ksVt‚t| |dƒƒ|kslt‚t| |d 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sît‚t| |dƒd ƒ|k�s
t‚td| |dƒ ƒ|	k�s&t‚td| |dƒ ƒ|
k�sBt‚d S )Nr   )ÚModzx mod 7z(x + 1) mod 7z	2*x mod 7u   2â‹…x mod 7z(x mod 7) + 1z2*(x mod 7)u   2â‹…(x mod 7)r  Tr'  r  rã   rä   )r%  r5  r   r�   rÔ   rÑ   )r5  rÚ  r-  rÛ  r.  Z
ascii_str3Z
ucode_str3Z
ascii_str4Z
ucode_str4Z
ascii_str5Z
ucode_str5r  rÄ   rÄ   rÅ   Útest_pretty_Mod§  s,    r6  c                   C   s,   t tdƒƒdkst‚ttdƒƒdks(t‚d S )NÚ )r�   r   rÔ   rÑ   rÄ   rÄ   rÄ   rÅ   Útest_issue_11801Æ  s    r8  c                  C   st   t dƒ} td|  ƒ}d}t|ƒ|ks(t‚d}t|d ƒ|ks@t‚d}t|d ƒ|ksXt‚d}t| | ƒ|kspt‚d S )Nr  rã   rñ   u!      2
âŽ›1âŽž 
âŽœâ”€âŽŸ 
âŽ�xâŽ  rä   u       1
1 + â”€
    xu     1
xâ‹…â”€
  x)r   rW   rÑ   rÔ   )r  Úher  rÄ   rÄ   rÅ   Útest_pretty_UnevaluatedExprË  s    ÿÿÿÿr:  c                  C   s8   t ddgddggƒt ddgƒf} d}t| ƒ|ks4t‚d S )Nr   uM   âŽ›âŽ¡0  0âŽ¤  âŽ¡0âŽ¤âŽž
âŽœâŽ¢    âŽ¥, âŽ¢ âŽ¥âŽŸ
âŽ�âŽ£0  0âŽ¦  âŽ£0âŽ¦âŽ )r5   rÑ   rÔ   )rn  r  rÄ   rÄ   rÅ   Útest_issue_10472ô  s     ÿr;  c                  C   sÌ   t dddƒ} t dddƒ}t dddƒ}d}d}t| d ƒ|ks@t‚t| d ƒ|ksTt‚d	}d
}td| d  ƒ|kstt‚td| d  ƒ|ksŒt‚d}d}|d  || | ¡}t|ƒ|ks¸t‚t|ƒ|ksÈt‚d S )NrV  rã   rå   rW  rX  ZA_00u   Aâ‚€â‚€)r   r   z3*A_00u   3â‹…Aâ‚€â‚€z(-B + A)[0, 0])r‰   r�   rÔ   rÑ   Úsubs)rV  rW  rX  rÚ  r-  r¹  rÄ   rÄ   rÅ   Útest_MatrixElement_printing   s     r=  c                  C   s\   t dƒ\} }}}tdƒ}d}t| | | |j ƒ|ks:t‚d}td| |j ƒ|ksXt‚d S )Nzx y t jrí  uI   âŽ›   tâŽž    
âŽœâŽ›xâŽž âŽŸ j_e
âŽœâŽœâ”€âŽŸ âŽŸ    
âŽ�âŽ�yâŽ  âŽ     u%   âŽ›1âŽž    
âŽœâ”€âŽŸ j_e
âŽ�yâŽ     rã   )r   r¸   rÑ   rg  rÔ   )r  r  r€  rg  rí  r  rÄ   rÄ   rÅ   Útest_issue_12675  s    ÿÿr>  c                  C   sÐ   t dddƒ} t dddƒ}t dddƒ}t|  | | ƒdks>t‚t| | ƒdksRt‚t| | | | |  ||  ƒdkszt‚t dttƒ}t d	ttƒ}t|| ƒd
ks¦t‚d}tt | d| |  ƒ|ksÌt‚d S )NrV  rå   rW  rX  z-A*B*Cz-B + Az-A*B -B*C + A*B*Cr  zy*zx + y*z     2     
-2*y*  -a*xrô   )r‰   r�   rÔ   r&  r  )rV  rW  rX  r  r  r  rÄ   rÄ   rÅ   Útest_MatrixSymbol_printing,  s    (ÿr?  c                  C   sX   dt  } t| ƒdkst‚tt  }t|ƒdks0t‚ttt  dt   ƒ}t|ƒdksTt‚d S )NéZ   u   90Â°u   xÂ°u   cos(xÂ° + 90Â°))r›   r�   rÔ   r  rf   )r.  r�  Zexpr3rÄ   rÄ   rÅ   Útest_degree_printingA  s    rA  c                  C   s$  t dƒ} tt| j| j| j d| j | j  ƒƒdks8t‚ttt| j| jƒ ƒdksVt‚tt| j| j d| j | j  ƒƒdks‚t‚tt	| j| j d| j | j  ƒƒdks®t‚tt
| j| j| j d| j | j  ƒƒdksÞt‚tt| jd| j  ƒƒdksþt‚tt| jd| j  ƒƒd	k�s t‚d S )
NrV  rå   u"   (i_A)Ã—((x_A) i_A + (3â‹…y_A) j_A)u   xâ‹…(i_A)Ã—(j_A)u    âˆ‡Ã—((x_A) i_A + (3â‹…y_A) j_A)u!   âˆ‡â‹…((x_A) i_A + (3â‹…y_A) j_A)u#   (i_A)â‹…((x_A) i_A + (3â‹…y_A) j_A)u   âˆ‡(x_A + 3â‹…y_A)u   âˆ†(x_A + 3â‹…y_A))r¸   rÑ   r½   rf  r  r  rg  rÔ   rº   r»   r¼   r¹   r¾   )rV  rÄ   rÄ   rÅ   Ú test_vector_expr_pretty_printingJ  s    0,,0 rB  c                  C   sx  t dƒ} td| ƒ\}}}td| ƒ}td| gƒ\}}}}td| | gƒ}	| }
d}d}t|
ƒ|ksbt‚t|
ƒ|ksrt‚||ƒ}
d}d}t|
ƒ|ks’t‚t|
ƒ|ks¢t‚||ƒ}
d}d	}t|
ƒ|ksÂt‚t|
ƒ|ksÒt‚|| ƒ}
d
}d
}t|
ƒ|ksôt‚t|
ƒ|k�st‚d|| ƒ }
d}d}t|
ƒ|k�s.t‚t|
ƒ|k�s@t‚|	|| ƒ}
d}d}t|
ƒ|k�sft‚t|
ƒ|k�sxt‚|	|| ƒ}
d}d}t|
ƒ|k�sžt‚t|
ƒ|k�s°t‚|	|| ƒ||ƒ ||ƒ }
d}d}t|
ƒ|k�sæt‚t|
ƒ|k�søt‚dt ||ƒ }
d}d}t|
ƒ|k�s"t‚t|
ƒ|k�s4t‚||ƒd||ƒ  }
d}d}t|
ƒ|k�sbt‚t|
ƒ|k�stt‚d S )NÚLúi j kZi_0úA B C DÚHz-iz i
A 
  z i_0
A   
    u    iâ‚€
A  
   z  
A 
 irä  z     
-3*A 
    iu        
-3â‹…A 
    iz i 
H  
  jz L_0   
H      
    L_0u    Lâ‚€  
H    
   Lâ‚€z) i     L_0  k
H    *A   *B 
  L_0        u+    i    Lâ‚€  k
H   â‹…A  â‹…B 
  Lâ‚€       rã   z          i
(x + 1)*A 
          u"            i
(x + 1)â‹…A 
          rå   z   i    i
3*B  + A 
         u      i    i
3â‹…B  + A 
         )r°   r±   r´   r²   r�   rÔ   rÑ   r  )rC  rf  rg  r)  Zi0rV  rW  rX  rY  rF  rÐ   r  r  rÄ   rÄ   rÅ   Útest_pretty_print_tensor_expr[  s–    
ÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿrG  c                  C   s"  ddl m}  tdƒ}td|ƒ\}}}td|gƒ\}}}}td||gƒ}	| ||ƒ||ƒƒ}
d}d}t|
ƒ|kspt‚t|
ƒ|ks€t‚||ƒ| |	|| ƒ||ƒƒ }
d	}d
}t|
ƒ|ks¶t‚t|
ƒ|ksÆt‚||ƒ| ||ƒ|| ƒ d|	|| ƒ  ||ƒƒ }
d}d}t|
ƒ|k�st‚t|
ƒ|k�s&t‚||ƒ||ƒ | ||ƒ||ƒƒ }
d}d}t|
ƒ|k�sbt‚t|
ƒ|k�stt‚||ƒ||ƒ | || ƒ||ƒƒ }
d}d}t|
ƒ|k�s²t‚t|
ƒ|k�sÄt‚| || ƒ|| ƒ || ƒ|t	 ƒƒ}
d}t|
ƒ|k�st‚| d|| ƒ || ƒ|t	 ƒƒ}
d}t|
ƒ|k�s:t‚t
|	||ƒ|diƒ}
d}|}t|
ƒ|k�sht‚t|
ƒ|k�szt‚t
|	||ƒ|d|diƒ}
d}|}t|
ƒ|k�s¬t‚t|
ƒ|k�s¾t‚t
|	||ƒ|diƒ}
d}|}t
|	| |ƒ| diƒ}
d}|}t|
ƒ|k�st‚t|
ƒ|k�st‚d S )Nr   )ÚPartialDerivativerC  rD  rE  rF  z' d / i\
---|A |
  j\  /
dA     
       u=    âˆ‚ âŽ› iâŽž
â”€â”€â”€âŽœA âŽŸ
  jâŽ�  âŽ 
âˆ‚A     
       zO L_0  d / k   \
A   *---|H    |
       j\  L_0/
     dA        
               ua    Lâ‚€  âˆ‚ âŽ› k  âŽž
A  â‹…â”€â”€â”€âŽœH   âŽŸ
      jâŽ�  Lâ‚€âŽ 
    âˆ‚A       
             rå   z‹ L_0  d /   k       k     \
A   *---|3*H     + B *C   |
       j\    L_0       L_0/
     dA                    
                           už    Lâ‚€  âˆ‚ âŽ›   k      k    âŽž
A  â‹…â”€â”€â”€âŽœ3â‹…H    + B â‹…C  âŽŸ
      jâŽ�    Lâ‚€       Lâ‚€âŽ 
    âˆ‚A                  
                        zm/ i    i\   d  / L_0\
|A  + B |*-----|C   |
\       /   L_0\    /
          dD         
                     u�   âŽ› i    iâŽž  âˆ‚  âŽ› Lâ‚€âŽž
âŽœA  + B âŽŸâ‹…â”€â”€â”€â”€âŽœC  âŽŸ
âŽ�       âŽ    Lâ‚€âŽ�   âŽ 
          âˆ‚D       
                   zw/ L_0    L_0\  d /    \
|A    + B   |*---|C   |
\           /   j\ L_0/
              dD       
                       u’   âŽ› Lâ‚€    Lâ‚€âŽž  âˆ‚ âŽ›   âŽž
âŽœA   + B  âŽŸâ‹…â”€â”€â”€âŽœC  âŽŸ
âŽ�         âŽ    jâŽ� Lâ‚€âŽ 
            âˆ‚D      
                    u…      2            
  âˆ‚    âŽ›       âŽž
â”€â”€â”€â”€â”€â”€â”€âŽœA  + B âŽŸ
       âŽ� i    iâŽ 
âˆ‚A  âˆ‚A          
  n   j         uu      2         
  âˆ‚    âŽ›    âŽž
â”€â”€â”€â”€â”€â”€â”€âŽœ3â‹…A âŽŸ
       âŽ�   iâŽ 
âˆ‚A  âˆ‚A       
  n   j      rã   z i=1,j
H     
      z i=1,j=1
H       
        z i,j=1
H     
      z    j
H    
 i=1 )Zsympy.tensor.toperatorsrH  r°   r±   r´   r²   r�   rÔ   rÑ   r&  r³   )rH  rC  rf  rg  r)  rV  rW  rX  rY  rF  rÐ   r  r  rÄ   rÄ   rÅ   Ú&test_pretty_print_tensor_partial_derivÿ  sˆ    ÿ	ÿÿ	ÿ4ÿ	ÿ"ÿ	ÿ$ÿ	ÿ("ÿÿÿÿrI  c                  C   s2   t dddƒ} t| t| | ƒ ƒ}d}||ks.t‚d S )Nr  rã   z	a*(a x a))r‰   r�   r‹   rÔ   )r  rí  ÚresultrÄ   rÄ   rÅ   Útest_issue_15560®  s    rK  c                  C   s8   d} d}t tddƒƒ|kst‚ttddƒƒ| ks4t‚d S )Nu   Liâ‚‚(3)zpolylog(2, 3)rä   rå   )r�   rw   rÔ   rÑ   )ÚuresultÚaresultrÄ   rÄ   rÅ   Útest_print_polylogµ  s    rN  c                  C   sx   t dƒ\} }d}d}tt| |ƒƒ|ks*t‚tt| |ƒƒ|ks@t‚d}d}tt| |ƒƒ|ks^t‚tt| |ƒƒ|kstt‚d S )Nús, zu   Liâ‚›(z)zpolylog(s, z)u   Eâ‚›(z)zexpint(s, z))r   r�   rw   rÔ   rÑ   ri   )r:  r  rL  rM  rÄ   rÄ   rÅ   Ú(test_print_expint_polylog_symbolic_order¾  s    rP  c                  C   s.   t dƒ\} }d}tt| d |ƒƒ|ks*t‚d S )NrO  u%          âŽ› 2   âŽž
polylogâŽ�s , zâŽ rä   )r   rÑ   rw   rÔ   )r:  r  r  rÄ   rÄ   rÅ   Ú)test_print_polylog_long_order_issue_25309Ì  s    ÿrQ  c                  C   sT   t dƒ} tt| ddƒƒ d}d}tt| ddƒƒ|ks8t‚tt| ddƒƒ|ksPt‚d S )Nr  rã   rä   u   Î¦(a, 1, 2)zlerchphi(a, 1, 2))r   r�   rv   rÔ   rÑ   )r  rL  rM  rÄ   rÄ   rÅ   Útest_print_lerchphiÖ  s    rR  c                  C   s2   t  d¡} d}t| j| j| jfƒ}||ks.t‚d S )NÚNz(n_x, n_y, n_z))r�   ZReferenceFramer�   r  r  r  rÔ   )rS  rJ  rí  rÄ   rÄ   rÅ   Útest_issue_15583à  s    
rT  c            
      C   s¨  dd„ } ddl m} tdddƒ}| ||ƒƒdks4t‚tdddƒ}td	ddƒ}td
ddƒ}| | ƒdksjt‚| |||  | ƒdks†t‚| | | || |  | ƒdks¬t‚tdddƒ}| |ƒdksÈt‚tdddƒ}| |ƒdksät‚tdddƒ}| |ƒdk�st‚tdƒ}tdƒ}tdddƒ}tdddƒ}	| || | ||	  ƒdk�sLt‚tdddƒ}	tdddƒ}| || | ||	  ƒdk�s†t‚tdddƒ}| |ƒdk�s¤t‚d S )Nc                 S   s   t | dddd�S )NTFÚbold)rË   rÌ   Zmat_symbol_stylerÍ   r  rÄ   rÄ   rÅ   Ú
boldprettyê  s    z)test_matrixSymbolBold.<locals>.boldprettyr   )ÚtracerV  rä   u   tr(ð��€)rå   rW  rX  u   -ð��€u   -ð��� -ð��€â‹…ð��� + ð��€u&   -ð��� -ð��€â‹…ð��� -ð��€â‹…ð���â‹…ð��‚ZAddotu   ð��€ÌˆÚomegau   Ï‰Z	omeganormu   â€–Ï‰â€–r]  r  rT  rã   rU  u   bâ‹…ð��� + Î±â‹…ð���â‹…ð��œÚdeltaÚBetau   bâ‹…Î´ + Î±â‹…Î’â‹…ð��œZA_2u   ð��€â‚‚)Ú sympy.matrices.expressions.tracerW  r‰   rÔ   r   )
rV  rW  rV  rW  rX  rX  r  r  rT  rU  rÄ   rÄ   rÅ   Útest_matrixSymbolBoldè  s4    &""r\  c                   C   sp   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t ddƒd	ksHt‚t d
dƒdksZt‚t ddƒdkslt‚d S )Nr  u   Ìƒu   aÌƒZaau   aaÌƒZaaau   aaÌƒaZaaaau   aaaÌƒaZaaaaau   aaaÌƒaaZabcdefgu   âƒœu
   abcdâƒœefg)rž   rÔ   rÄ   rÄ   rÄ   rÅ   Útest_center_accent  s    r]  c                      s˜   ddl m‰  ˆ dt dd�dks$t‚ˆ dt dd�dks<t‚ˆ dt dd	d
�dksVt‚ˆ dt dd	d
�dkspt‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r«  rã   Frì   z1 + ITu   1 + â…ˆrg  )rË   Úimaginary_unitu   1 + â…‰c                      s   ˆ t t d�S )N©r^  ©r   rÄ   r«  rÄ   rÅ   rh     ri  z%test_imaginary_unit.<locals>.<lambda>c                      s   ˆ t dd�S )NZkkkr_  r`  rÄ   r«  rÄ   rÅ   rh  !  ri  )Úsympy.printing.prettyr�   r   rÔ   rµ   rÓ  Ú
ValueErrorrÄ   rÄ   r«  rÅ   Útest_imaginary_unit  s    rc  c                  C   s˜   ddl m} m}m} t| dƒƒdks(t‚t| dƒƒdks<t‚t|ddƒƒdksRt‚t|ddƒƒdksht‚t|ddƒƒd	ks~t‚t|ddƒƒd
ks”t‚d S )Nr   ©ÚIdentityrŽ   r�   ræ   r   u   ð�•€rä   Ú0u   ð�Ÿ˜Ú1u   ð�Ÿ™)rˆ  re  rŽ   r�   r�   rÔ   rÑ   rd  rÄ   rÄ   rÅ   Útest_str_special_matrices$  s    rh  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ttƒƒdksTt‚t ttƒƒdksht‚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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
tƒƒdk�s t‚t ttƒƒdk�s6t‚tttƒƒdk�sLt‚t ttƒƒd	k�sbt‚tttƒƒd
k�sxt‚t tttƒƒdk�s�t‚ttttƒƒdk�s¨t‚t ttƒƒdk�s¾t‚tttƒƒdk�sÔt‚d S )NzW(x)zW(x, y)zAi(x)zBi(x)zAi'(x)zBi'(x)zC(x)zS(x)zHeaviside(x)u   Î¸(x)zHeaviside(x, y)u   Î¸(x, y)zdirichlet_eta(x)u   Î·(x))r�   r   r  rÔ   rÑ   r  r    r"   r!   r#   r%   r&   r$   r(   rÄ   rÄ   rÄ   rÅ   Útest_pretty_misc_functions.  s,    ri  c                  C   sÒ   t ddd�\} }}td| |ƒ}td| |ƒ}t||ƒ}d}d}t|ƒ|ksLt‚t|ƒ|ks\t‚t|d| ƒ}d	}d
}t|ƒ|ks‚t‚t|ƒ|ks’t‚t||j d| ƒ}d}d}t|ƒ|ks¾t‚t|ƒ|ksÎt‚d S )Nzm, n, pTr'  rV  rW  z .n
A  u	    âˆ˜n
A  rã   z .(n + 1)
A        u    âˆ˜(n + 1)
A        z,      .(n + 1)
/   T\        
\A*B /        u8         âˆ˜(n + 1)
âŽ›   TâŽž        
âŽ�Aâ‹…B âŽ         )r   r‰   r�   r�   rÔ   rÑ   r‚  )r5  r&  r;  rV  rW  rÐ   r  r  rÄ   rÄ   rÅ   Útest_hadamard_powerG  s0    
ÿÿÿÿÿÿrj  c                  C   sL   t ddd�} tt| | t dfƒƒdks*t‚tt| | t dfƒƒdksHt‚d S )Nr&  Tr'  rã   z;   1     
  __     
  \ `    
   )    n
  /_,    
n = -oo  uW     1     
 ___    
 â•²      
  â•²     
  â•±    n
 â•±      
 â€¾â€¾â€¾    
n = -âˆž  )r   r�   r   r   rÔ   rÑ   )r&  rÄ   rÄ   rÅ   Útest_issue_17258z  s    ÿÿrk  c                  C   s&   d} dd„ | D ƒddddgks"t ‚d S )Nu   vÌ‡_mc                 S   s   g | ]}t |ƒ‘qS rÄ   )rŸ   )Ú.0ÚsymrÄ   rÄ   rÅ   Ú
<listcomp>“  s     z%test_is_combining.<locals>.<listcomp>FT)rÔ   )ÚlinerÄ   rÄ   rÅ   Útest_is_combining‘  s    
ÿrp  c                  C   sÔ   t tdtdƒ  ƒdkst‚ttdtdƒ  ƒdks8t‚t tdt  ƒdksPt‚ttdt  ƒdksht‚t tdt  ƒdks€t‚ttdt  ƒdks˜t‚tdƒ} td	d|   ƒd
ks¸t‚t d	d|   ƒdksÐt‚d S )Nrã   z  / -1\
  \e  /
pi     u    âŽ› -1âŽž
 âŽ�â„¯  âŽ 
Ï€     z  1 
  --
  pi
pi  u    1
 â”€
 Ï€
Ï€ z3      1     
  ----------
  EulerGamma
pi          u    1
 â”€
 Î³
Ï€ Zx_17r  u   xâ‚�â‚‡___
 â•²â•± 7 zx_17___
  \/ 7 )r�   r   rh   rÔ   rÑ   r   r   )r  rÄ   rÄ   rÅ   Útest_issue_17616—  s2    ÿÿÿÿÿÿÿÿrq  c                   C   s6   t tt tƒƒdkst‚t ttt dƒƒdks2t‚d S )Nz{..., -1, 0, 1, ...}r  z{..., 1, 0, -1, ...})r�   rK   r   rÔ   rÄ   rÄ   rÄ   rÅ   Útest_issue_17857Ä  s    rr  c               
   C   sÐ   t dƒ} t dƒ}tt| t|  t| ƒ dƒtjƒƒdks:t‚tt| t|d t	dt
ƒƒt| d |d ƒƒƒdksrt‚tt| ttd| dkf| d d	 | dkfd	| dkf| d d
fƒd	 dƒt	ddƒƒƒdksÌt‚d S )Nr  r&  r   uu   âŽ§  â”‚         âŽ›      x    âŽžâŽ«
âŽ¨x â”‚ x âˆŠ â„‚ âˆ§ âŽ�-x + â„¯  = 0âŽ âŽ¬
âŽ©  â”‚                      âŽ­rä   u¡   âŽ§  â”‚     âŽ§-n   nâŽ«   âŽ›n         âŽžâŽ«
âŽ¨x â”‚ x âˆŠ âŽ¨â”€â”€â”€, â”€âŽ¬ âˆ§ âŽœâ”€ âˆˆ [0, âˆž)âŽŸâŽ¬
âŽ©  â”‚     âŽ© 2   2âŽ­   âŽ�2         âŽ âŽ­rã   rå   rS  Tu  âŽ§  â”‚              âŽ›âŽ›âŽ§   1     for x â‰¥ 3âŽž          âŽžâŽ«
âŽª  â”‚              âŽœâŽœâŽª                  âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽªx                 âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽªâ”€ - 0.5  for x â‰¥ 2âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽª2                 âŽŸ          âŽŸâŽª
âŽ¨x â”‚ x âˆŠ [0, 3] âˆ§ âŽœâŽœâŽ¨                  âŽŸ - 0.5 = 0âŽŸâŽ¬
âŽª  â”‚              âŽœâŽœâŽª  0.5    for x â‰¥ 1âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽª                  âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽª   x              âŽŸ          âŽŸâŽª
âŽª  â”‚              âŽœâŽœâŽª   â”€     otherwiseâŽŸ          âŽŸâŽª
âŽ©  â”‚              âŽ�âŽ�âŽ©   2              âŽ           âŽ âŽ­)r   rÑ   r¡   r   rh   r   Z	ComplexesrÔ   rJ   rO   r   rM   r^   )r  r&  rÄ   rÄ   rÅ   Útest_issue_18272É  s&     ÿ.ÿ0
ÿÿÿÿþrs  c                  C   s$   ddl m}  t| dƒƒdks t‚d S )Nr   ©ÚStrr  )Úsympy.core.symbolru  r�   rÔ   rt  rÄ   rÄ   rÅ   Útest_Strä  s    rw  c                  C   s†   t dƒ} t ddd�}td| |ƒ}tt|ƒƒdks4t‚tt|ƒƒdksHt‚tt|dkƒƒd	ks`t‚td
| |ƒ}tt||ƒƒdks‚t‚d S )NÚmuÚsigmaT)Zpositiveru  zE[X]zVar(X)r   zP(X > 0)rv  z	Cov(X, Y))r   r¥   r�   r§   rÔ   r©   r¨   r¦   )rx  ry  ru  rv  rÄ   rÄ   rÅ   Útest_symbolic_probabilityé  s    rz  c                  C   s  ddl m}  ddlm} tdƒ}tdƒ\}}|||t tfdtd|dtfƒtt	dt t
|t ƒ | dt|t ƒ |d   |t k|tk @ t|dƒ@ fd	ƒt|| ƒ t |dtfƒfƒ}t| |ƒƒd
ksÐt‚t|||t tfdtd|dtfƒtd|dtfƒfƒƒdk�st‚d S )Nr   )Úpiecewise_fold)ÚFourierSeriesr  zk nrã   rô   rä   )r   Tu{  âŽ§                      2â‹…sin(3â‹…x)                                
âŽª2â‹…sin(x) - sin(2â‹…x) + â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ + â€¦  for n > -âˆž âˆ§ n < âˆž âˆ§ n â‰  0
âŽ¨                          3                                     
âŽª                                                                
âŽ©                 0                            otherwise         rf  )Z$sympy.functions.elementary.piecewiser{  Úsympy.series.fourierr|  r   r   r   rG   r   r^   rf   rq   r   rÑ   rÔ   r�   )r{  r|  r  r)  r&  ÚforÄ   rÄ   rÅ   Útest_issue_21758ô  s,     Lÿ
ÿÿþ
ÿ ÿÿ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ÚBaseScalarFieldrê  T)Úrealrn  rä   ÚPÚrectr  )rs  r€  r�  r‚  rƒ  r   r�   rÔ   )
r€  r�  r‚  rƒ  r  r  r5  r;  r†  r  rÄ   rÄ   rÅ   Útest_diffgeom  s    


r‡  c               	   C   sŒ   t ƒ �" ddlm}  | dƒdks$t‚W 5 Q R X t ƒ � ddlm} |ddd�}W 5 Q R X t ƒ �$ |j|j  krxdks~n t‚W 5 Q R X d S )Nr   )Úxstrrã   rg  )Ú
prettyFormr:  )Úunicode)r·   Ú&sympy.printing.pretty.pretty_symbologyrˆ  rÔ   Z sympy.printing.pretty.stringpictr‰  rŠ  r:  )rˆ  r‰  r;  rÄ   rÄ   rÅ   Útest_deprecated_prettyForm  s    rŒ  c                   C   sP   t ddƒdkst‚t ddƒdks$t‚t dddƒdks8t‚t dddƒd	ksLt‚d S )
Nrg  rä   z1 rå   z 1 r²  z-1-rç   z--1--)r    rÔ   rÄ   rÄ   rÄ   rÅ   Útest_center   s    r�  )N)N(ª  Zsympy.concrete.productsr   Zsympy.concrete.summationsr   Zsympy.core.addr   Zsympy.core.basicr   Zsympy.core.containersr   r   Zsympy.core.functionr   r	   r
   r   Zsympy.core.mulr   r%  r   r   r   Zsympy.core.numbersr   r   r   r   Zsympy.core.powerr   Zsympy.core.relationalr   r   r   r   r   r   Zsympy.core.singletonr   rv  r   r   Z$sympy.functions.elementary.complexesr   Z&sympy.functions.elementary.exponentialr   Zsympy.functions.special.besselr    r!   r"   r#   Z'sympy.functions.special.delta_functionsr$   Z'sympy.functions.special.error_functionsr%   r&   Z-sympy.functions.special.singularity_functionsr'   Z&sympy.functions.special.zeta_functionsr(   Zsympy.geometry.liner)   r*   Zsympy.integrals.integralsr+   Zsympy.logic.boolalgr,   r-   r.   r/   r0   r1   r2   r3   r4   Zsympy.matrices.denser5   r6   Z sympy.matrices.expressions.slicer7   r[  r8   Zsympy.polys.domains.finitefieldr9   Zsympy.polys.domains.integerringr:   Z!sympy.polys.domains.rationalfieldr;   Zsympy.polys.domains.realfieldr<   Zsympy.polys.orderingsr=   r>   Zsympy.polys.polytoolsr?   Zsympy.polys.rootoftoolsr@   rA   Zsympy.series.formalrB   r}  rC   Zsympy.series.limitsrD   Zsympy.series.orderrE   Zsympy.series.sequencesrF   rG   rH   rI   Zsympy.sets.containsrJ   r¢  rK   r   rL   rM   rN   rO   rP   Zsympy.codegen.astrQ   rR   rS   rT   rU   rV   Zsympy.core.exprrW   Zsympy.physics.quantum.tracerX   Zsympy.functionsrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   rˆ  r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   Zsympy.matrices.expressionsr�   Zsympy.physicsr�   Zsympy.physics.control.ltir‘   r’   r“   r”   r•   r–   r—   r˜   r™   rÙ  rš   r›   ra  rœ   r�   rÎ   r‹  rž   rŸ   r    Zsympy.sets.conditionsetr¡   Z
sympy.setsr¢   r£   Zsympy.sets.setexprr¤   Zsympy.stats.crv_typesr¥   Z sympy.stats.symbolic_probabilityr¦   r§   r¨   r©   Zsympy.tensor.arrayrª   r«   r¬   r­   r®   Zsympy.tensor.functionsr¯   Zsympy.tensor.tensorr°   r±   r²   r³   r´   Zsympy.testing.pytestrµ   r¶   r·   Zsympy.vectorr¸   r¹   rº   r»   r¼   r½   r¾   Zsympyrm  r¿   r  r  rT  rU  r  r  r  r)  r&  r:  r;  rÆ   r`  ra  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  r8  r9  r?  rK  rL  rP  rQ  rR  rZ  r[  r_  rb  rj  ro  rp  rt  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¶  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/  r2  r4  r6  r8  r:  r;  r=  r>  r?  rA  rB  rG  rI  rK  rN  rP  rQ  rR  rT  r\  r]  rc  rh  ri  rj  rk  rp  rq  rr  rs  rw  rz  r  r‡  rŒ  r�  rÄ   rÄ   rÄ   rÅ   Ú<module>   sô   , À(,$2


 /







&


   
 &
H

;



Z

>
<      
}



9
K
	
J
N

"
P
)
V
  
 7
T
 5


4
.
"
9
%


 `

 U

%
8
	
E
.
-

	


	
\

#
 

 
1

@
4





    

-
8
	


5

z
{
@b	R7Z&?
)	 % 0	

(	
3-