U
    L?h@š ã                   @   sh  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z7 e/Z8e2Z9G dd„ deƒZ:ee:ƒdd„ ƒZ;dd„ Z<e<Z=dd„ Z>dS )é    N)ÚS)ÚAdd)ÚTuple)ÚFunction©ÚMul)ÚNumberÚRational)ÚPow)Údefault_sort_key©ÚSymbol)ÚSympifyError)Úrequires_partial)Ú
PRECEDENCEÚ
precedenceÚprecedence_traditional)ÚPrinterÚprint_function)Ússtr)Úhas_variety)Úsympy_deprecation_warning)Ú
prettyFormÚ
stringPict)ÚhobjÚvobjÚxobjÚxsymÚpretty_symbolÚpretty_atomÚpretty_use_unicodeÚgreek_unicodeÚUÚpretty_try_use_unicodeÚ	annotatedÚis_subscriptable_in_unicodeÚ
center_padÚrootc                   @   s¢	  e Zd ZdZdZdddddddddddœ
Zdàd	d
„Zdd„ Zedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdádd„Ze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eZeZeZeZeZeZeZeZ eZ!d,d-„ Z"d.d/„ Z#d0d1„ Z$d2d3„ Z%d4d5„ Z&d6d7„ Z'd8d9„ Z(dâd:d;„Z)d<d=„ Z*d>d?„ Z+d@dA„ Z,dBdC„ Z-dDdE„ Z.dãdFdG„Z/dädHdI„Z0dJdK„ Z1dLdM„ Z2dNdO„ Z3dPdQ„ Z4dRdS„ Z5dTdU„ Z6dVdW„ Z7dXdY„ Z8dZd[„ Z9d\d]„ Z:d^d_„ Z;d`da„ Z<dbdc„ Z=dådfdg„Z>dhdi„ Z?djdk„ Z@dldm„ ZAdndo„ ZBdpdq„ ZCdrds„ ZDdtdu„ ZEdvdw„ ZFdxdy„ ZGdzd{„ ZHd|d}„ ZId~d„ ZJd€d„ ZKd‚dƒ„ ZLd„d…„ ZMd†d‡„ ZNdˆd‰„ ZOdŠd‹„ ZPdŒd„ ZQdŽd„ ZRdd‘„ ZSd’d“„ ZTd”d•„ ZUd–d—„ ZVd˜d™„ ZWdšd›„ ZXdœd„ ZYdždŸ„ ZZd d¡„ Z[d¢d£„ Z\d¤d¥„ Z]i fd¦d§„Z^d¨d©„ Z_dªd«„ Z`d¬d­„ Zad®d¯„ Zbd°d±„ Zcd²d³„ Zdd´dµ„ Zed¶d·„ Zfd¸d¹„ Zgdæd»d¼„Zhd½d¾„ Zid¿dÀ„ ZjdÁdÂ„ ZkdÃdÄ„ ZldçdÇdÈ„ZmdÉdÊ„ ZndËdÌ„ ZodÍdÎ„ ZpdÏdÐ„ ZqdèdÒdÓ„ZrdÔdÕ„ ZsedÖ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ñ„ Zdòdó„ Z‚dôdõ„ Zƒdöd÷„ Z„dødù„ Z…dúdû„ Z†düdý„ Z‡dþdÿ„ Zˆd d„ Z‰dd„ ZŠdd„ Z‹dd„ ZŒdd	„ Zd
d„ ZŽdd„ Zdd„ Zdd„ Z‘dd„ Z’dd„ Z“dd„ Z”dd„ Z•dd„ Z–dd„ Z—dd„ Z˜d d!„ Z™déd"d#„Zš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²e²Z³e²Z´e²ZµdddÑdTdU„ df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‚dƒ„ ZÌd„d…„ ZÍd†d‡„ ZÎdˆd‰„ ZÏdŠd‹„ ZÐdŒd„ ZÑdŽd„ ZÒdd‘„ ZÓd’d“„ ZÔd”d•„ ZÕeÕZÖd–d—„ Z×d˜d™„ ZØdšd›„ ZÙdœd„ ZÚdždŸ„ ZÛd d¡„ ZÜd¢d£„ ZÝd¤d¥„ ZÞd¦d§„ Zßd¨d©„ Zàdªd«„ Zád¬d­„ Zâd®d¯„ Zãd°d±„ Zäd²d³„ Zåd´dµ„ Zæd¶d·„ Zçd¸d¹„ Zèdºd»„ Zéd¼d½„ Zêd¾d¿„ ZëdÀdÁ„ ZìdÂdÃ„ ZídÄdÅ„ ZîdÆdÇ„ ZïdÈdÉ„ ZðdÊdË„ ZñdÌdÍ„ ZòdÎdÏ„ ZódÐdÑ„ ZôdÒdÓ„ ZõdÔdÕ„ ZödÖd×„ Z÷dØdÙ„ ZødÚdÛ„ ZùdÜdÝ„ ZúdÞdß„ ZûdS (ê  ÚPrettyPrinterz?Printer, which converts an expression into 2D ASCII-art figure.Z_prettyNÚautoTÚplainÚi)
ÚorderÚ	full_precÚuse_unicodeZ	wrap_lineÚnum_columnsÚuse_unicode_sqrt_charÚroot_notationÚmat_symbol_styleÚimaginary_unitÚperm_cyclicc                 C   sX   t  | |¡ t| jd tƒs2td | jd ¡ƒ‚n"| jd dkrTtd | jd ¡ƒ‚d S )Nr3   z&'imaginary_unit' must a string, not {})r+   Újz4'imaginary_unit' must be either 'i' or 'j', not '{}')r   Ú__init__Ú
isinstanceÚ	_settingsÚstrÚ	TypeErrorÚformatÚ
ValueError)ÚselfÚsettings© r?   úN/var/www/html/venv/lib/python3.8/site-packages/sympy/printing/pretty/pretty.pyr6   /   s
    zPrettyPrinter.__init__c                 C   s   t t|ƒƒS ©N©r   r9   ©r=   Úexprr?   r?   r@   ÚemptyPrinter7   s    zPrettyPrinter.emptyPrinterc                 C   s   | j d rdS tƒ S d S )Nr.   T)r8   r    ©r=   r?   r?   r@   Ú_use_unicode:   s    
zPrettyPrinter._use_unicodec                 C   s   |   |¡jf | jŽS rA   )Ú_printÚrenderr8   rC   r?   r?   r@   ÚdoprintA   s    zPrettyPrinter.doprintc                 C   s   |S rA   r?   ©r=   Úer?   r?   r@   Ú_print_stringPictE   s    zPrettyPrinter._print_stringPictc                 C   s   t |ƒS rA   )r   rK   r?   r?   r@   Ú_print_basestringH   s    zPrettyPrinter._print_basestringc                 C   s&   t |  |j¡ ¡ Ž }t | d¡Ž }|S )NÚatan2)r   Ú
_print_seqÚargsÚparensÚleft©r=   rL   Úpformr?   r?   r@   Ú_print_atan2K   s    zPrettyPrinter._print_atan2Fc                 C   s   t |j|ƒ}t|ƒS rA   )r   Únamer   )r=   rL   Z	bold_nameZsymbr?   r?   r@   Ú_print_SymbolP   s    zPrettyPrinter._print_Symbolc                 C   s   |   || jd dk¡S )Nr2   Úbold)rX   r8   rK   r?   r?   r@   Ú_print_MatrixSymbolT   s    z!PrettyPrinter._print_MatrixSymbolc                 C   s,   | j d }|dkr| jdk}tt||dƒS )Nr-   r)   é   )r-   )r8   Z_print_levelr   r   )r=   rL   r-   r?   r?   r@   Ú_print_FloatW   s    

zPrettyPrinter._print_Floatc                 C   s~   |j }|j}|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| d¡Ž }t| |  |¡¡Ž }t| d¡Ž }|S )Nú(ú)úMULTIPLICATION SIGN©Z_expr1Z_expr2rH   r   rS   Úrightr"   ©r=   rL   Zvec1Zvec2rU   r?   r?   r@   Ú_print_Cross_   s    
zPrettyPrinter._print_Crossc                 C   s`   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| |  tdƒ¡¡Ž }|S )Nr]   r^   r_   ÚNABLA©Z_exprrH   r   rS   ra   r"   ©r=   rL   ZvecrU   r?   r?   r@   Ú_print_Curlk   s    
zPrettyPrinter._print_Curlc                 C   s`   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| |  tdƒ¡¡Ž }|S )Nr]   r^   úDOT OPERATORrd   re   rf   r?   r?   r@   Ú_print_Divergencet   s    
zPrettyPrinter._print_Divergencec                 C   s~   |j }|j}|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| d¡Ž }t| |  |¡¡Ž }t| d¡Ž }|S )Nr]   r^   rh   r`   rb   r?   r?   r@   Ú
_print_Dot}   s    
zPrettyPrinter._print_Dotc                 C   sH   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }|S )Nr]   r^   rd   re   ©r=   rL   ÚfuncrU   r?   r?   r@   Ú_print_Gradient‰   s    
zPrettyPrinter._print_Gradientc                 C   sH   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }|S )Nr]   r^   Z	INCREMENTre   rk   r?   r?   r@   Ú_print_Laplacian‘   s    
zPrettyPrinter._print_Laplacianc                 C   s:   zt t|jj| dƒW S  tk
r4   |  |¡ Y S X d S )N)Úprinter)r   r   Ú	__class__Ú__name__ÚKeyErrorrE   rK   r?   r?   r@   Ú_print_Atom™   s    zPrettyPrinter._print_Atomc                 C   s*   | j r|  |¡S ddg}|  |dd¡S d S )Nz-ooZoor]   r^   )rG   rs   rP   )r=   rL   Zinf_listr?   r?   r@   Ú_print_Reals¬   s    
zPrettyPrinter._print_Realsc                 C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S ©Nr   ú!)rQ   rH   Ú
is_IntegerÚis_nonnegativeÚ	is_Symbolr   rR   rS   ©r=   rL   ÚxrU   r?   r?   r@   Ú_print_subfactorial³   s    

z!PrettyPrinter._print_subfactorialc                 C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S ru   ©rQ   rH   rw   rx   ry   r   rR   ra   rz   r?   r?   r@   Ú_print_factorial¼   s    

zPrettyPrinter._print_factorialc                 C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S )Nr   z!!r}   rz   r?   r?   r@   Ú_print_factorial2Å   s    

zPrettyPrinter._print_factorial2c                 C   st   |j \}}|  |¡}|  |¡}dt| ¡ | ¡ ƒ }t| |¡Ž }t| |¡Ž }t| dd¡Ž }|jd d |_|S )Nú r]   r^   r[   é   )rQ   rH   ÚmaxÚwidthr   ÚaboverR   Úbaseline)r=   rL   ÚnÚkZn_pformZk_pformÚbarrU   r?   r?   r@   Ú_print_binomialÎ   s    


zPrettyPrinter._print_binomialc                 C   sL   t dt|jƒ d ƒ}|  |j¡}|  |j¡}t t |||¡dt jiŽ}|S )Nr€   Úbinding)	r   r   Zrel_oprH   ÚlhsÚrhsr   ÚnextÚOPEN©r=   rL   ÚopÚlÚrrU   r?   r?   r@   Ú_print_RelationalÞ   s
    zPrettyPrinter._print_Relationalc                 C   sš   ddl m}m} | jrŒ|jd }|  |¡}t||ƒrF| j|tdƒdS t||ƒrb| j	|tdƒdS |j
rz|jszt| ¡ Ž }t| tdƒ¡Ž S |  |¡S d S )Nr   )Ú
EquivalentÚImpliesZNotEquiv)ÚaltcharZNotArrowÚNot)Zsympy.logic.boolalgr”   r•   rG   rQ   rH   r7   Ú_print_Equivalentr   Ú_print_ImpliesÚ
is_BooleanÚis_Notr   rR   rS   Ú_print_Function)r=   rL   r”   r•   ÚargrU   r?   r?   r@   Ú
_print_Notæ   s    



zPrettyPrinter._print_Notc                 C   sš   |j }|rt|j td}|d }|  |¡}|jrB|jsBt| ¡ Ž }|dd … D ]F}|  |¡}|jrt|jstt| ¡ Ž }t| d| ¡Ž }t| |¡Ž }qN|S )N©Úkeyr   r[   ú %s )	rQ   Úsortedr   rH   rš   r›   r   rR   ra   )r=   rL   ÚcharÚsortrQ   r   rU   Ú	pform_argr?   r?   r@   Z__print_Boolean÷   s    

zPrettyPrinter.__print_Booleanc                 C   s(   | j r|  |tdƒ¡S | j|ddS d S )NÚAndT©r¤   ©rG   Ú_PrettyPrinter__print_Booleanr   rœ   rK   r?   r?   r@   Ú
_print_And  s    zPrettyPrinter._print_Andc                 C   s(   | j r|  |tdƒ¡S | j|ddS d S )NÚOrTr§   r¨   rK   r?   r?   r@   Ú	_print_Or  s    zPrettyPrinter._print_Orc                 C   s(   | j r|  |tdƒ¡S | j|ddS d S )NZXorTr§   r¨   rK   r?   r?   r@   Ú
_print_Xor  s    zPrettyPrinter._print_Xorc                 C   s(   | j r|  |tdƒ¡S | j|ddS d S )NZNandTr§   r¨   rK   r?   r?   r@   Ú_print_Nand  s    zPrettyPrinter._print_Nandc                 C   s(   | j r|  |tdƒ¡S | j|ddS d S )NZNorTr§   r¨   rK   r?   r?   r@   Ú
_print_Nor$  s    zPrettyPrinter._print_Norc                 C   s,   | j r| j||ptdƒddS |  |¡S d S )NÚArrowFr§   r¨   ©r=   rL   r–   r?   r?   r@   r™   *  s    zPrettyPrinter._print_Impliesc                 C   s,   | j r|  ||ptdƒ¡S | j|ddS d S )NZEquivTr§   r¨   r±   r?   r?   r@   r˜   0  s    zPrettyPrinter._print_Equivalentc                 C   s(   |   |jd ¡}t| td| ¡ ƒ¡Ž S )Nr   Ú_)rH   rQ   r   r„   r   rƒ   rT   r?   r?   r@   Ú_print_conjugate6  s    zPrettyPrinter._print_conjugatec                 C   s$   |   |jd ¡}t| dd¡Ž }|S )Nr   ú|)rH   rQ   r   rR   rT   r?   r?   r@   Ú
_print_Abs:  s    zPrettyPrinter._print_Absc                 C   s8   | j r*|  |jd ¡}t| dd¡Ž }|S |  |¡S d S )Nr   ÚlfloorÚrfloor©rG   rH   rQ   r   rR   rœ   rT   r?   r?   r@   Ú_print_floor?  s
    zPrettyPrinter._print_floorc                 C   s8   | j r*|  |jd ¡}t| dd¡Ž }|S |  |¡S d S )Nr   ÚlceilÚrceilr¸   rT   r?   r?   r@   Ú_print_ceilingG  s
    zPrettyPrinter._print_ceilingc                 C   s  t |jƒr| jrtdƒ}nd}d }d}t|jƒD ]p\}}|  |¡}t| |¡Ž }||7 }|j	rf|dkrv|tt
|ƒƒ }|d kr„|}q0t| d¡Ž }t| |¡Ž }q0t|  |j¡ ¡ dtjiŽ}	t|ƒ}
|dkdkrâ|
tt
|ƒƒ }
t|
 tj|¡Ž }
|
jd |
_tt |
|	¡Ž }
tj|
_|
S )NúPARTIAL DIFFERENTIALÚdr   r[   r€   rŠ   F)r   rD   rG   r"   ÚreversedZvariable_countrH   r   rS   rw   r9   ra   rR   ÚFUNCÚbelowr   ÚLINEr…   r   ÚMULrŠ   )r=   ÚderivÚderiv_symbolr{   Zcount_total_derivÚsymÚnumÚsÚdsÚfrU   r?   r?   r@   Ú_print_DerivativeO  s8    

ÿÿzPrettyPrinter._print_Derivativec                 C   sž   ddl m}m} ||ƒ kr.tdƒ}t| ¡ Ž S || ¡ ƒj}|g kr`|  |j	d ¡}t| ¡ Ž S tdƒ}|D ],}|  t
t|ƒƒ dd¡¡}t| |¡Ž }ql|S )Nr   ©ÚPermutationÚCycleÚ r[   ú,)Ú sympy.combinatorics.permutationsrÍ   rÎ   r   r   rR   ÚlistZcyclic_formrH   Úsizer9   ÚtupleÚreplacera   )r=   ZdcrÍ   rÎ   ZcycZdc_listr+   r‘   r?   r?   r@   Ú_print_Cyclet  s    
zPrettyPrinter._print_Cyclec                 C   sâ   ddl m}m} |j}|d k	r8td|› ddddd n| j d	d
¡}|rX|  ||ƒ¡S |j}t	t
t|ƒƒƒ}tdƒ}d
}t||ƒD ]P\}	}
|  |	¡}|  |
¡}t| |¡Ž }|r¸d}nt| d¡Ž }t| |¡Ž }q„t| ¡ Ž S )Nr   rÌ   zw
                Setting Permutation.print_cyclic is deprecated. Instead use
                init_printing(perm_cyclic=z).
                z1.6z#deprecated-permutation-print_cyclicé   )Zdeprecated_since_versionZactive_deprecations_targetÚ
stacklevelr4   TrÏ   Fr€   )rÑ   rÍ   rÎ   Zprint_cyclicr   r8   ÚgetrÖ   Z
array_formrÒ   ÚrangeÚlenr   ÚziprH   r   rÁ   rS   ra   rR   )r=   rD   rÍ   rÎ   r4   ÚlowerÚupperÚresultÚfirstÚur‘   Ús1Ús2Úcolr?   r?   r@   Ú_print_Permutation‡  s6    þù


z PrettyPrinter._print_Permutationc                 C   sØ  |j }|  |¡}|jr"t| ¡ Ž }|}|jD ]:}|  |d ¡}| ¡ dkrVt| ¡ Ž }t| d|¡Ž }q,d}d }|jD ]D}	| ¡ }
|
d }| j	 }|r |d7 }t
d|ƒ}t|ƒ}|j||
 d  |_t|	ƒdkrŠt|	ƒdkrötdƒ}|  |	d ¡}t|	ƒdkr |  |	d ¡}|  |	d ¡}|rntdd| ¡  ƒ}t| d	| ¡Ž }tdd
| ¡  ƒ}t| d	| ¡Ž }t| |¡Ž }t| |¡Ž }|sžt| d	¡Ž }|r®|}d}qvt| |¡Ž }qvt| |¡Ž }tj|_|S )Nr   r[   z dTr   ÚintrÏ   é   r€   é   F)ÚfunctionrH   Úis_Addr   rR   Úlimitsrƒ   ra   ÚheightrG   r   r…   rÛ   r‚   rS   r„   rÁ   rÃ   rŠ   )r=   ZintegralrÊ   ÚprettyFr   r{   Z	prettyArgZ	firsttermrÈ   ÚlimÚhÚHÚ
ascii_modeZvintrU   ZprettyAZprettyBZspcr?   r?   r@   Ú_print_Integral¬  s^    


 ÿzPrettyPrinter._print_Integralc                 C   sš  |j }|  |¡}tddƒ}tddƒ}tddƒ}| jrHtddƒ}tddƒ}| ¡ }d}d}	d}
|jD ]}|  |¡\}}|d d	 d
 d }|| ||d   | | g}t|d ƒD ]&}| d| d|d   | d ¡ q´t	dƒ}t
|j|Ž Ž }t|	| ¡ ƒ}	|r| ¡ }
t
| |¡Ž }t
| |¡Ž }|r:d|_d}| ¡ }t	dƒ}t
|jdg|d  Ž Ž }t
| |¡Ž }t
| |¡Ž }qb|	|
d  |_t
j|_|S )Nr²   r[   r´   ú-ZUpTackTr   r   é   rç   r€   rÏ   F)ÚtermrH   r   rG   rì   rë   Ú'_PrettyPrinter__print_SumProduct_LimitsrÚ   Úappendr   r   Ústackr‚   r„   rÁ   r…   ra   rÃ   rŠ   )r=   rD   rl   Zpretty_funcZhorizontal_chrZ
corner_chrZvertical_chrZfunc_heightrà   Ú	max_upperÚsign_heightrî   Zpretty_lowerZpretty_upperrƒ   Z
sign_linesr²   Zpretty_signrì   Úpaddingr?   r?   r@   Ú_print_Product÷  sH    





$zPrettyPrinter._print_Productc                    s4   ‡ fdd„}ˆ   |d ¡}||d |d ƒ}||fS )Nc                    s>   t dtdƒ d ƒ}ˆ  | ¡}ˆ  |¡}t t |||¡Ž }|S )Nr€   ú==)r   r   rH   r   r   )r‹   rŒ   r   r‘   r’   rU   rF   r?   r@   Úprint_start.  s
    

z<PrettyPrinter.__print_SumProduct_Limits.<locals>.print_startr   r   r[   ©rH   )r=   rî   rþ   ÚprettyUpperÚprettyLowerr?   rF   r@   Z__print_SumProduct_Limits-  s    z'PrettyPrinter.__print_SumProduct_Limitsc                 C   sZ  | j  }dd„ }|j}|  |¡}|jr2t| ¡ Ž }| ¡ d }d}d}d}	|jD ]Ü}
|  |
¡\}}t	|| ¡ ƒ}||| 
¡ | 
¡ |ƒ\}}}}tdƒ}t|j|Ž Ž }|r°| ¡ }	t| |¡Ž }t| |¡Ž }|rô| j|| ¡ d |j  8  _d}tdƒ}t|jdg| Ž Ž }t| |¡Ž }t| |¡Ž }qP|s8|nd}||	d  | |_tj|_|S )	Nc              	   S   sÔ  ddd„}t | dƒ}|d }|d }| d }g }	|r
|	 d| d ¡ |	 dd|d   ¡ td|ƒD ]"}
|	 d	d|
 d||
  f ¡ qh|r®|	 d
d| d||  f ¡ ttd|ƒƒD ]"}
|	 dd|
 d||
  f ¡ q¼|	 dd|d   d ¡ ||| |	|fS || }|| }tddƒ}|	 d| ¡ td|ƒD ].}
|	 dd|
 |d d||
 d  f ¡ q<ttd|ƒƒD ].}
|	 dd|
 |d d||
 d  f ¡ qz|	 |d | ¡ ||d|  |	|fS d S )Nú<^>c                 S   s|   |rt | ƒ|kr| S |t | ƒ }|dks4|tdƒkr@| d|  S |d }d| }|dkrdd| |  S ||  d|t |ƒ   S )N)r  ú<r  r€   r   ú>)rÛ   rÒ   )rÈ   ZwidÚhowZneedZhalfZleadr?   r?   r@   Úadjust=  s    z6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjustr   r[   r²   r€   z\%s`z%s\%sz%s)%sz%s/%sú/rÐ   Úsumrè   r   z%s%s%sé   )Nr  )r‚   r÷   rÚ   r¿   r   )Z	hrequiredrÝ   rÞ   Z	use_asciir  rï   r¾   ÚwÚmoreÚlinesr+   Zvsumr?   r?   r@   Úasum<  s6    

  
,,z&PrettyPrinter._print_Sum.<locals>.asumr   Tr   rÏ   Fr€   )rG   ré   rH   rê   r   rR   rì   rë   rö   r‚   rƒ   r   rø   r„   rÁ   r…   ra   rÃ   rŠ   )r=   rD   rñ   r  rÊ   rí   rð   rà   rù   rú   rî   r  r   r¾   rï   ZslinesZ
adjustmentZ
prettySignÚpadZascii_adjustmentr?   r?   r@   Ú
_print_Sum9  sL    *

   ÿÿ
zPrettyPrinter._print_Sumc           	      C   s  |j \}}}}|  |¡}t|ƒtd kr8t| dd¡Ž }tdƒ}|  |¡}| jrrt| tddƒ› t	dƒ› ¡Ž }nt| d¡Ž }t| |  |¡¡Ž }t
|ƒd	ks°|tjtjfkr¶d
}n"| jrØt
|ƒdkrÐt	dƒnt	dƒ}t| |  |¡¡Ž }t| |¡Ž }t| |¡dtjiŽ}|S )Nr   r]   r^   rî   ró   r[   r°   z->z+-rÏ   ú+ZSuperscriptPlusZSuperscriptMinusrŠ   )rQ   rH   r   r   r   rR   rG   ra   r   r   r9   r   ÚInfinityÚNegativeInfinityrÁ   rÃ   )	r=   r‘   rL   ÚzZz0ÚdirÚEZLimZLimArgr?   r?   r@   Ú_print_Limitš  s$    

"zPrettyPrinter._print_Limitc                    sŠ  |}i ‰ t |jƒD ].}t |jƒD ]‰|  ||ˆf ¡ˆ |ˆf< q qd}d}dg|j }t |jƒD ],‰t‡ ‡fdd„t |jƒD ƒp„dgƒ|ˆ< q`d}t |jƒD ]Ö}d}t |jƒD ]†‰ˆ |ˆf }	|	 ¡ |ˆ ksÒt‚t|	 ¡ |ˆ ƒ\}
}t|	 	|¡Ž }	t|	 
|
¡Ž }	|dkr|	}q®t| 	d| ¡Ž }t| 	|	¡Ž }q®|dkrF|}qœt |ƒD ]}t| d¡Ž }qNt| |¡Ž }qœ|dkr†td	ƒ}|S )
zL
        This method factors out what is essentially grid printing.
        r   r[   éÿÿÿÿc                    s   g | ]}ˆ |ˆf   ¡ ‘qS r?   ©rƒ   ©Ú.0r+   ©ZMsr5   r?   r@   Ú
<listcomp>È  s     z8PrettyPrinter._print_matrix_contents.<locals>.<listcomp>r   Nr€   rÏ   )rÚ   ÚrowsÚcolsrH   r‚   rƒ   ÚAssertionErrorr&   r   ra   rS   rÁ   )r=   rL   ÚMr+   ÚhsepÚvsepÚmaxwÚDÚD_rowrÈ   rS   ra   r²   r?   r  r@   Ú_print_matrix_contents¶  sB    *


z$PrettyPrinter._print_matrix_contentsú[ú]c                 C   s,   |   |¡}| ¡ d |_t| ||¡Ž }|S )Nr   )r&  rì   r…   r   rR   )r=   rL   ÚlparensÚrparensr$  r?   r?   r@   Ú_print_MatrixBaseù  s    
zPrettyPrinter._print_MatrixBasec                 C   sp   |j }|jr\ddlm} t||ƒr4| j|jdddS |  |¡}| ¡ d |_	t
| dd¡Ž S | j|dddS d S )Nr   ©ÚBlockMatrixr´   )r)  r*  r   )r   Úis_MatrixExprÚ&sympy.matrices.expressions.blockmatrixr-  r7   r+  ÚblocksrH   rì   r…   r   rR   )r=   rL   Úmatr-  r$  r?   r?   r@   Ú_print_Determinantÿ  s    

z PrettyPrinter._print_Determinantc                 C   s*   | j rd}nd}| j|jd d |dd„ dS )Nu   âŠ—ú.*c                 S   s   t | ƒtd kS ©Nr   ©r   r   ©r{   r?   r?   r@   Ú<lambda>  ó    z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>©Úparenthesize©rG   rP   rQ   )r=   rD   Zcircled_timesr?   r?   r@   Ú_print_TensorProduct  s    ÿz"PrettyPrinter._print_TensorProductc                 C   s*   | j rd}nd}| j|jd d |dd„ dS )Nu   âˆ§z/\c                 S   s   t | ƒtd kS r4  r5  r6  r?   r?   r@   r7    r8  z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>r9  r;  )r=   rD   Zwedge_symbolr?   r?   r@   Ú_print_WedgeProduct  s    ÿz!PrettyPrinter._print_WedgeProductc                 C   s<   |   |j¡}t| dd¡Ž }| ¡ d |_t| d¡Ž }|S )Nr]   r^   r   Útr)rH   r   r   rR   rì   r…   rS   )r=   rL   r$  r?   r?   r@   Ú_print_Trace  s
    zPrettyPrinter._print_Tracec                 C   s²   ddl m} t|j|ƒrJ|jjrJ|jjrJ|  t|jj	d|j|jf  ƒ¡S |  |j¡}t
| ¡ Ž }| j|j|jfddjdddd }t
t ||¡d	t
jiŽ}||_||_|S d S )
Nr   ©ÚMatrixSymbolz_%d%dú, ©Ú	delimiterr'  r(  ©rS   ra   rŠ   )Úsympy.matricesrA  r7   Úparentr+   Z	is_numberr5   rH   r   rW   r   rR   rP   r   r   rÀ   Ú
prettyFuncÚ
prettyArgs)r=   rD   rA  rH  ZprettyIndicesrU   r?   r?   r@   Ú_print_MatrixElement%  s.    ÿÿÿ ÿÿ
ÿz"PrettyPrinter._print_MatrixElementc                    sœ   ddl m} ˆ  |j¡}t|j|ƒs0t| ¡ Ž }‡ fdd„}ˆ j||j|jj	ƒ||j
|jjƒfddjddd	d }tt ||¡d
tjiŽ}||_||_|S )Nr   r@  c                    sT   t | ƒ} | d dkr| d= | d dkr.d| d< | d |krBd| d< tˆ j| ddŽ S )Nr   r[   r   rÏ   ú:rC  )rÒ   r   rP   )r{   ÚdimrF   r?   r@   Úppslice@  s    z1PrettyPrinter._print_MatrixSlice.<locals>.ppslicerB  rC  r'  r(  rE  rŠ   )rF  rA  rH   rG  r7   r   rR   rP   Zrowslicer  Zcolslicer  r   r   rÀ   rH  rI  )r=   ÚmrA  rH  rM  rI  rU   r?   rF   r@   Ú_print_MatrixSlice:  s.    	ÿÿ ÿÿ
ÿÿz PrettyPrinter._print_MatrixSlicec                 C   sV   |j }|  |¡}ddlm}m} t||ƒsFt||ƒsF|jrFt| ¡ Ž }|tdƒ }|S )Nr   ©rA  r-  ÚT)	r   rH   rF  rA  r-  r7   r.  r   rR   )r=   rD   r1  rU   rA  r-  r?   r?   r@   Ú_print_TransposeU  s    

ÿÿzPrettyPrinter._print_Transposec                 C   sn   |j }|  |¡}| jr$ttdƒƒ}ntdƒ}ddlm}m} t||ƒsbt||ƒsb|j	rbt| 
¡ Ž }|| }|S )NÚDaggerr  r   rP  )r   rH   rG   r   r   rF  rA  r-  r7   r.  rR   )r=   rD   r1  rU   ZdagrA  r-  r?   r?   r@   Ú_print_Adjoint_  s    

ÿÿzPrettyPrinter._print_Adjointc                 C   s(   |j jdkr|  |j d ¡S |  |j ¡S )N©r[   r[   ©r   r   )r0  ÚshaperH   )r=   ÚBr?   r?   r@   Ú_print_BlockMatrixm  s    z PrettyPrinter._print_BlockMatrixc                 C   s€   d }|j D ]p}|  |¡}|d kr&|}q
| ¡ d }t|ƒ ¡ rZtt |d¡Ž }|  |¡}ntt |d¡Ž }tt ||¡Ž }q
|S )Nr   r€   ú + )rQ   rH   Zas_coeff_mmulr   Úcould_extract_minus_signr   r   r   )r=   rD   rÈ   ÚitemrU   Úcoeffr?   r?   r@   Ú_print_MatAddr  s    

zPrettyPrinter._print_MatAddc                 C   s   t |jƒ}ddlm} ddlm} ddlm} t|ƒD ]N\}}t	|t
|||fƒrvt|jƒdkrvt|  |¡ ¡ Ž ||< q6|  |¡||< q6tj|Ž S )Nr   ©ÚHadamardProduct)ÚKroneckerProduct©ÚMatAddr[   )rÒ   rQ   Ú#sympy.matrices.expressions.hadamardr`  Z$sympy.matrices.expressions.kroneckerra  Ú!sympy.matrices.expressions.mataddrc  Ú	enumerater7   r   rÛ   r   rH   rR   Ú__mul__)r=   rD   rQ   r`  ra  rc  r+   Úar?   r?   r@   Ú_print_MatMulƒ  s    
ÿzPrettyPrinter._print_MatMulc                 C   s   | j rttdƒƒS tdƒS d S )NZIdentityMatrixÚI©rG   r   r   rC   r?   r?   r@   Ú_print_Identity‘  s    zPrettyPrinter._print_Identityc                 C   s   | j rttdƒƒS tdƒS d S )NZ
ZeroMatrixÚ0rk  rC   r?   r?   r@   Ú_print_ZeroMatrix—  s    zPrettyPrinter._print_ZeroMatrixc                 C   s   | j rttdƒƒS tdƒS d S )NZ	OneMatrixÚ1rk  rC   r?   r?   r@   Ú_print_OneMatrix  s    zPrettyPrinter._print_OneMatrixc                 C   s4   t |jƒ}t|ƒD ]\}}|  |¡||< qtj|Ž S rA   )rÒ   rQ   rf  rH   r   rg  ©r=   rD   rQ   r+   rh  r?   r?   r@   Ú_print_DotProduct£  s    
zPrettyPrinter._print_DotProductc                 C   sL   |   |j¡}ddlm} t|j|ƒs8|jjr8t| ¡ Ž }||   |j¡ }|S )Nr   r@  )	rH   ÚbaserF  rA  r7   r.  r   rR   Úexp)r=   rD   rU   rA  r?   r?   r@   Ú_print_MatPowª  s    zPrettyPrinter._print_MatPowc                    sZ   ddl m‰  ddlm‰ ddlm‰ | jr4tdƒ}nd}| j|j	d d |‡ ‡‡fdd„d	S )
Nr   r_  rb  ©ÚMatMulÚRingr3  c                    s   t | ˆˆˆ fƒS rA   ©r7   r6  ©r`  rc  rw  r?   r@   r7  »  r8  z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>r9  )
rd  r`  re  rc  Ú!sympy.matrices.expressions.matmulrw  rG   r   rP   rQ   ©r=   rD   Údelimr?   rz  r@   Ú_print_HadamardProduct²  s    
ÿz$PrettyPrinter._print_HadamardProductc                 C   sp   | j rtdƒ}n
|  d¡}|  |j¡}|  |j¡}t|jƒtd k rPt| ¡ Ž }tt	 
||¡dtjiŽ}|| S )Nrx  Ú.r   rŠ   )rG   r   rH   rs  rt  r   r   r   rR   r   r   rÂ   )r=   rD   ÚcircZpretty_baseZ
pretty_expZpretty_circ_expr?   r?   r@   Ú_print_HadamardPower½  s    


þÿz"PrettyPrinter._print_HadamardPowerc                    sT   ddl m‰  ddlm‰ | jr0dtdƒ› d}nd}| j|jd d |‡ ‡fdd„d	S )
Nr   rb  rv  r€   ZTensorProductz x c                    s   t | ˆ ˆfƒS rA   ry  r6  ©rc  rw  r?   r@   r7  Õ  r8  z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>r9  )re  rc  r{  rw  rG   r   rP   rQ   r|  r?   r‚  r@   Ú_print_KroneckerProductÍ  s    ÿz%PrettyPrinter._print_KroneckerProductc                 C   s"   |   |jj¡}t| dd¡Ž }|S ©Nr'  r(  )rH   ÚlamdarD   r   rR   )r=   ÚXr$  r?   r?   r@   Ú_print_FunctionMatrix×  s    z#PrettyPrinter._print_FunctionMatrixc                 C   sT   |j dks:|j |j }}t|t|ddddd}|  |¡S |  d¡|  |j¡ S d S )Nr[   r  F©Úevaluate)rÇ   Údenr   r
   Ú
_print_MulrH   )r=   rD   rÇ   rŠ  Úresr?   r?   r@   Ú_print_TransferFunctionÜ  s
    

z%PrettyPrinter._print_TransferFunctionc                 C   s>   t |jƒ}t|jƒD ]\}}t|  |¡ ¡ Ž ||< qtj|Ž S rA   )rÒ   rQ   rf  r   rH   rR   rg  rq  r?   r?   r@   Ú_print_Seriesä  s    
zPrettyPrinter._print_Seriesc                 C   s˜   ddl m} t|jƒ}g }t|ƒD ]j}t||ƒrjt|jƒdkrj|  |¡}| ¡ d |_	| 
t| ¡ Ž ¡ q"|  |¡}| ¡ d |_	| 
|¡ q"tj|Ž S )Nr   )ÚMIMOParallelr[   r   )Úsympy.physics.control.ltir  rÒ   rQ   r¿   r7   rÛ   rH   rì   r…   r÷   r   rR   rg  )r=   rD   r  rQ   Zpretty_argsrh  Ú
expressionr?   r?   r@   Ú_print_MIMOSeriesê  s    


zPrettyPrinter._print_MIMOSeriesc                 C   sh   d }|j D ]X}|  |¡}|d kr&|}q
tt |¡Ž }| ¡ d |_tt |d¡Ž }tt ||¡Ž }q
|S )Nr   rZ  )rQ   rH   r   r   r   rì   r…   )r=   rD   rÈ   r\  rU   r?   r?   r@   Ú_print_Parallelù  s    

zPrettyPrinter._print_Parallelc                 C   sŒ   ddl m} d }|jD ]p}|  |¡}|d kr2|}qtt |¡Ž }| ¡ d |_tt |d¡Ž }t	||ƒrv| ¡ d |_tt ||¡Ž }q|S )Nr   )ÚTransferFunctionMatrixr   rZ  r[   )
r  r”  rQ   rH   r   r   r   rì   r…   r7   )r=   rD   r”  rÈ   r\  rU   r?   r?   r@   Ú_print_MIMOParallel  s    


z!PrettyPrinter._print_MIMOParallelc           
      C   s   ddl m}m} |j|dd|jƒ }}t||ƒr:t|jƒn|g}t|j|ƒrXt|jjƒn|jg}t||ƒr„t|j|ƒr„|||žŽ }nªt||ƒrÀt|j|ƒrÀ|j|kr®||Ž }n|||jfžŽ }nnt||ƒrøt|j|ƒrø||krè||Ž }n||f|žŽ }n6||kr||Ž }n"|j|kr"||Ž }n|||žŽ }t	t
 |  |¡¡Ž }	|	 ¡ d |	_|jdkrlt	t
 |	d¡Ž nt	t
 |	d¡Ž }	t	t
 |	|  |¡¡Ž }	|  |¡|	 S )Nr   )ÚTransferFunctionÚSeriesr[   r   r  rZ  ú - )Úsympy.physics.controlr–  r—  Úsys1Úvarr7   rÒ   rQ   Úsys2r   r   r   rH   rì   r…   Úsign)
r=   rD   r–  r—  rÇ   ÚtfZnum_arg_listZden_arg_listrŠ  Údenomr?   r?   r@   Ú_print_Feedback  s:    
ÿÿ





ÿzPrettyPrinter._print_Feedbackc                 C   sØ   ddl m}m} |  ||j|jƒ¡}|  |j¡}tt |¡Ž }|j	dkrXtt 
d|¡Ž ntt 
d|¡Ž }tt |¡Ž }d|_tt 
|d¡Ž }| ¡ d |_t |tdƒ¡}t|j|ƒrÄ| ¡ d	 |_tt ||¡Ž }|S )
Nr   )Ú
MIMOSeriesr”  r  zI + zI - z-1 r   r€   r[   )r™  r¡  r”  rH   rœ  rš  r   r   r   r  ra   rR   r…   rì   rg  r7   )r=   rD   r¡  r”  Zinv_matZplantZ	_feedbackr?   r?   r@   Ú_print_MIMOFeedback;  s     ÿz!PrettyPrinter._print_MIMOFeedbackc                 C   s>   |   |j¡}| ¡ d |_| jr(td nd}t| |¡Ž }|S )Nr[   Útauz{t})rH   Z	_expr_matrì   r…   rG   r!   r   ra   )r=   rD   r1  Ú	subscriptr?   r?   r@   Ú_print_TransferFunctionMatrixM  s
    z+PrettyPrinter._print_TransferFunctionMatrixc                 C   sD   ddl m} |j}|j}|j}|j}|||g||ggƒ}|  |j¡S )Nr   r,  )r/  r-  Z_AZ_BZ_CZ_DrH   r0  )r=   rD   r-  ÚArX  ÚCr$  r1  r?   r?   r@   Ú_print_StateSpaceT  s    zPrettyPrinter._print_StateSpacec                 C   sJ  ddl m} | jstdƒ‚||jkr0t|jjƒS g }g }t||ƒrP| ¡  	¡ }n
d|fg}|D ]š\}}t
|j 	¡ ƒ}|jdd„ d |D ]n\}	}
|
dkrª| d|	j ¡ n@|
d	krÄ| d
|	j ¡ n&|  |
¡ ¡ d }| |d |	j ¡ | |	j¡ qˆq^|d  d¡r |d dd … |d< n$|d  d¡rD|d dd … |d< g }dg}g }t|ƒD ]*\}}| d¡ d|krZ|}| || d¡}tddƒ|krtt|ƒƒD ]l}d||< || tddƒkr¨||d  dkr¨|d |… tddƒ d ||  ||d d …  } q|q¨ndtddƒ|kr|| tddƒ¡}|d	kr|d||< |d |… tddƒ d ||  ||d d …  }|||< qZdd„ |D ƒ}tdd„ |D ƒƒ}d|krôt|ƒD ]8\}}t|ƒdkrº| ddt|d ƒ ¡ d||< qºt|ƒD ]2\}}| t|||  ƒ¡ t|ƒD ]}|d t|ƒkrÖ|t|ƒkrt| dt|d d	… ƒdt|ƒd    ¡ ||| kr¤|||   |||  d 7  < n0||  || d|d	 t|| ƒ d   7  < nT|t|ƒkr| dt|d d	… ƒdt|ƒd    ¡ ||  d|d	 d  7  < q$qütd dd„ |D ƒ¡ƒS )Nr   )ÚVectorz:ASCII pretty printing of BasisDependent is not implementedc                 S   s   | d   ¡ S ©Nr   )Ú__str__r6  r?   r?   r@   r7  m  r8  z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>rŸ   r[   rÏ   r  z(-1) r€   rZ  rç   Ú
z)_extz)_lower_hookc                 S   s   g | ]}|  d ¡‘qS )r¬  )Úsplit©r  r{   r?   r?   r@   r  ¥  s     z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>c                 s   s   | ]}t |ƒV  qd S rA   )rÛ   r®  r?   r?   r@   Ú	<genexpr>¦  s     z6PrettyPrinter._print_BasisDependent.<locals>.<genexpr>c                 S   s   g | ]}|d d… ‘qS )Néýÿÿÿr?   )r  rÈ   r?   r?   r@   r  Á  s     )Zsympy.vectorr©  rG   ÚNotImplementedErrorÚzeror   Z_pretty_formr7   ZseparateÚitemsrÒ   Ú
componentsr¤   r÷   rH   rR   Ú
startswithrf  rÕ   r   rÚ   rÛ   Úrfindr‚   Úinsertr  Újoin)r=   rD   r©  Zo1Zvectstrsr³  ÚsystemZvectZ
inneritemsr‡   ÚvZarg_strÚlengthsÚstrsÚflagr+   ZpartstrZtempstrZparenÚindexZ
n_newlinesÚpartsr5   r?   r?   r@   Ú_print_BasisDependent]  sº    


ÿÿÿÿ

&ÿÿÿ
ÿÿÿ
ÿ"
ÿþÿ$z#PrettyPrinter._print_BasisDependentc           	         sh  ddl m‰  | ¡ dkr&|  |d ¡S g gdd„ t| ¡ ƒD ƒ }dd„ |jD ƒ}‡ fdd„}tj|Ž D ]Ì}|d	  || ¡ d
}t| ¡ d d	d	ƒD ]œ}t	||d  ƒ|j| k r¸ qh|rÔ||  ||d  ¡ nL||  |||d  ƒ¡ t	||d  ƒdkr ||| d	 ggƒ|| d	< | }g ||d < q–qh|d d }| ¡ d dkr^||gƒ}|  |¡S )Nr   ©ÚImmutableMatrixr?   c                 S   s   g | ]}g ‘qS r?   r?   r  r?   r?   r@   r  É  s     z2PrettyPrinter._print_NDimArray.<locals>.<listcomp>c                 S   s   g | ]}t t|ƒƒ‘qS r?   )rÒ   rÚ   r  r?   r?   r@   r  Ê  s     c                    s   ˆ | ddS )NFrˆ  r?   r6  rÁ  r?   r@   r7  Ì  r8  z0PrettyPrinter._print_NDimArray.<locals>.<lambda>r  Tr[   r   )
Zsympy.matrices.immutablerÂ  ÚrankrH   rÚ   rW  Ú	itertoolsÚproductr÷   rÛ   )	r=   rD   Z	level_strZshape_rangesr1  Zouter_iZevenZback_outer_iZout_exprr?   rÁ  r@   Ú_print_NDimArrayÃ  s6    

ÿÿ
zPrettyPrinter._print_NDimArrayc              	   C   sj  t |ƒ}t d| ¡  ƒ}t d| ¡  ƒ}d }d }|D ]}	|  |	jd ¡}
|	|ksV|rˆ||	jkrˆ|	jrxtt  |d¡Ž }ntt  |d¡Ž }|	|krÀtt  |
d¡Ž }
tt  |
|  ||	 ¡¡Ž }
d}nd}|	jrt | |
¡Ž }t | d|
 ¡  ¡Ž }t | d|
 ¡  ¡Ž }n:t | |
¡Ž }t | d|
 ¡  ¡Ž }t | d|
 ¡  ¡Ž }|	j}q4t| |¡Ž }t| 	|¡Ž }|S )Nr€   r   rÐ   ú=TF)
r   rƒ   rH   rQ   Úis_upr   r   ra   r„   rÁ   )r=   rW   ÚindicesÚ	index_mapÚcenterÚtopÚbotZlast_valenceZprev_mapr¾  ZindpicZpictr?   r?   r@   Ú_printer_tensor_indicesä  s6    
z%PrettyPrinter._printer_tensor_indicesc                 C   s    |j d j}| ¡ }|  ||¡S rª  )rQ   rW   Úget_indicesrÎ  )r=   rD   rW   rÉ  r?   r?   r@   Ú_print_Tensor  s    zPrettyPrinter._print_Tensorc                 C   s,   |j jd j}|j  ¡ }|j}|  |||¡S rª  )rD   rQ   rW   rÏ  rÊ  rÎ  )r=   rD   rW   rÉ  rÊ  r?   r?   r@   Ú_print_TensorElement  s    
z"PrettyPrinter._print_TensorElementc                    sB   |  ¡ \}}‡ fdd„|D ƒ}tj|Ž }|r:t| |¡Ž S |S d S )Nc                    s8   g | ]0}t |ƒtd  k r*tˆ  |¡ ¡ Ž nˆ  |¡‘qS r   ©r   r   r   rH   rR   r  rF   r?   r@   r    s   ÿÿz0PrettyPrinter._print_TensMul.<locals>.<listcomp>)Z!_get_args_for_traditional_printerr   rg  rS   )r=   rD   r  rQ   rU   r?   rF   r@   Ú_print_TensMul  s    
ý
zPrettyPrinter._print_TensMulc                    s   ‡ fdd„|j D ƒ}tj|Ž S )Nc                    s8   g | ]0}t |ƒtd  k r*tˆ  |¡ ¡ Ž nˆ  |¡‘qS r   rÒ  r  rF   r?   r@   r     s   ÿÿz0PrettyPrinter._print_TensAdd.<locals>.<listcomp>)rQ   r   Ú__add__)r=   rD   rQ   r?   rF   r@   Ú_print_TensAdd  s    
ýzPrettyPrinter._print_TensAddc                 C   s    |j d }|js| }|  |¡S rª  )rQ   rÈ  rH   )r=   rD   rÆ   r?   r?   r@   Ú_print_TensorIndex'  s    
z PrettyPrinter._print_TensorIndexc           	      C   sê   | j rtdƒ}nd}d }t|jƒD ]F}|  |¡}t| |¡Ž }|d krL|}q"t| d¡Ž }t| |¡Ž }q"t|  |j¡ 	¡ dtj
iŽ}t|ƒ}t|jƒdkr°||  t|jƒ¡ }t| tj|¡Ž }|jd |_tt ||¡Ž }tj|_|S )Nr½   r¾   r€   rŠ   r[   )rG   r"   r¿   Ú	variablesrH   r   rS   ra   rD   rR   rÀ   rÛ   rÁ   r   rÂ   r…   r   rÃ   rŠ   )	r=   rÄ   rÅ   r{   ÚvariablerÈ   rÉ   rÊ   rU   r?   r?   r@   Ú_print_PartialDerivative-  s0    

ÿÿz&PrettyPrinter._print_PartialDerivativec                    s²  i ‰ t |jƒD ]Z\}}|  |j¡ˆ |df< |jdkrFtdƒˆ |df< qttdƒ |  |j¡¡Ž ˆ |df< qd}d}t|jƒ‰‡ ‡fdd„tdƒD ƒ}d }tˆƒD ]æ}d }	tdƒD ]˜}
ˆ ||
f }| 	¡ ||
 ksÔt
‚||
 | 	¡  }|d }|| }t| d	| ¡Ž }t| d	| ¡Ž }|	d kr(|}	q°t|	 d	| ¡Ž }	t|	 |¡Ž }	q°|d krZ|	}q t|ƒD ]}t| d	¡Ž }qbt| |	¡Ž }q t| d
d¡Ž }| ¡ d |_tj|_|S )Nr   TZ	otherwiser[   zfor r   c                    s(   g | ] ‰ t ‡‡ fd d„tˆƒD ƒƒ‘qS )c                 3   s   | ]}ˆ |ˆf   ¡ V  qd S rA   r  r  )ÚPr5   r?   r@   r¯  \  s     z<PrettyPrinter._print_Piecewise.<locals>.<listcomp>.<genexpr>)r‚   rÚ   ©r  ©rÚ  Zlen_args)r5   r@   r  \  s   ÿz2PrettyPrinter._print_Piecewise.<locals>.<listcomp>r€   Ú{rÏ   )rf  rQ   rH   rD   Úcondr   ra   rÛ   rÚ   rƒ   r  rS   rÁ   rR   rì   r…   rŽ   rŠ   )r=   Zpexprr†   Úecr!  r"  r#  r$  r+   r%  r5   ÚpZwdeltaZwleftZwrightr²   r?   rÜ  r@   Ú_print_PiecewiseM  sP    
ÿ
ÿ

zPrettyPrinter._print_Piecewisec                 C   s   ddl m} |  | |¡¡S )Nr   )Ú	Piecewise)Z$sympy.functions.elementary.piecewiserâ  rH   Zrewrite)r=   Ziterâ  r?   r?   r@   Ú
_print_ITE…  s    zPrettyPrinter._print_ITEc                 C   sP   d }|D ]2}|}|d kr|}qt | d¡Ž }t | |¡Ž }q|d krLtdƒ}|S )NrB  r€   )r   ra   r   )r=   rº  r$  rh  rà  r?   r?   r@   Ú_hprint_vec‰  s    zPrettyPrinter._hprint_vecrÏ   c           	      C   sj   |r$| j s$| j|d|f|||ddS | j||f|||d}ttd| ¡ ƒ|jd}| j|||f|||dS )Nr´   T)rS   ra   rD  Úifascii_nougly)rS   ra   rD  ©r…   )rG   rP   r   r   rì   r…   )	r=   Úp1Úp2rS   ra   rD  rå  ÚtmpÚsepr?   r?   r@   Ú_hprint_vseparator˜  s    
 ÿÿz PrettyPrinter._hprint_vseparatorc                    s†  ‡ fdd„|j D ƒ}‡ fdd„|jD ƒ}ˆ  |j¡}| ¡ d |_d }||fD ]8}ˆ  |¡}|d krj|}qNt| d¡Ž }t| |¡Ž }qN| ¡ d |_t| 	d¡Ž }t| 
d¡Ž }ˆ  ||¡}t| dd¡Ž }| ¡ d d }| ¡ | d }	td	ƒ\}
}}}}td
||  | d
|	|   ||
 d}|
d d }t| 	ˆ  t|j ƒ¡¡Ž }t| 
ˆ  t|jƒ¡¡Ž }|| |_t| 
d|¡Ž }|S )Nc                    s   g | ]}ˆ   |¡‘qS r?   rÿ   ©r  rh  rF   r?   r@   r  £  s     z.PrettyPrinter._print_hyper.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   ©r  ÚbrF   r?   r@   r  ¤  s     r   r€   r]   r^   r[   ÚFr¬  ræ  )ÚapÚbqrH   Úargumentrì   r…   rä  r   rÁ   rS   ra   rë  rR   r$   rÛ   )r=   rL   rð  rñ  rÚ  r$  rº  r%  r„   rÁ   ÚszÚtrî  ÚaddÚimgrï  r?   rF   r@   Ú_print_hyper¡  s8    
ÿ
zPrettyPrinter._print_hyperc                     s  i }‡ fdd„|j D ƒ|d< ‡ fdd„|jD ƒ|d< ‡ fdd„|jD ƒ|d< ‡ fdd„|jD ƒ|d	< ˆ  |j¡}| ¡ d
 |_i }|D ]}ˆ  || ¡||< q†t	d
ƒD ]}t
|d|f  ¡ |d|f  ¡ ƒ}t	d
ƒD ]`}|||f }	||	 ¡  d
 }
||
 |	 ¡  }t|	 d|
 ¡Ž }	t|	 d| ¡Ž }	|	|||f< qÔq¦t|d  d|d ¡Ž }t| d¡Ž }t|d  d|d	 ¡Ž }t| |¡Ž }| ¡ d
 |_t| d¡Ž }t| d¡Ž }ˆ  ||¡}t| dd¡Ž }| ¡ d
 d }| ¡ | d }tdƒ\}}}}}td||  | d||   || d}ˆ  t|jƒ¡}ˆ  t|jƒ¡}ˆ  t|jƒ¡}ˆ  t|j ƒ¡}dd„ }|||ƒ\}}|||ƒ\}}t| d|¡Ž }t| d|¡Ž }|j| d
 }|dkrÒt| d| ¡Ž }t| |¡Ž }||_t| |¡Ž }|| |_t| d|¡Ž }|S )Nc                    s   g | ]}ˆ   |¡‘qS r?   rÿ   rì  rF   r?   r@   r  Õ  s     z0PrettyPrinter._print_meijerg.<locals>.<listcomp>rV  c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   rì  rF   r?   r@   r  Ö  s     )r   r[   c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   rí  rF   r?   r@   r  ×  s     )r[   r   c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   rí  rF   r?   r@   r  Ø  s     rU  r   r   r[   r€   z  r]   r^   ÚGr¬  ræ  c                 S   sZ   |   ¡ |  ¡  }|dkr | |fS |dkr>| t| d| ¡Ž fS t|  d|  ¡Ž |fS d S )Nr   r€   )rƒ   r   rS   )rç  rè  Údiffr?   r?   r@   r  
  s    z,PrettyPrinter._print_meijerg.<locals>.adjustrB  )ÚanZaotherZbmZbotherrH   rò  rì   r…   rä  rÚ   r‚   rƒ   r   rS   ra   rÁ   rë  rR   r$   rÛ   rð  rñ  ) r=   rL   rº  rÚ  ZvpÚidxr+   r#  r5   rÈ   rS   ra   ZD1ZD2r$  r„   rÁ   ró  rô  rî  rõ  rö  rï  ÚppZpqÚpmZpnr  ZpuÚplZhtrà  r?   rF   r@   Ú_print_meijergÑ  sh    "ÿ

zPrettyPrinter._print_meijergc                 C   s"   t tddƒƒ}||  |jd ¡ S )NÚExp1rL   r   )r   r   rH   rQ   )r=   rL   rs  r?   r?   r@   Ú_print_ExpBase%  s    zPrettyPrinter._print_ExpBasec                 C   s   t tddƒƒS )Nr   rL   )r   r   rK   r?   r?   r@   Ú_print_Exp1+  s    zPrettyPrinter._print_Exp1r]   r^   c                 C   s   | j |j|j||||dS )N)r¤   Ú	func_namerS   ra   )Ú_helper_print_functionrl   rQ   )r=   rL   r¤   r  rS   ra   r?   r?   r@   rœ   .  s    zPrettyPrinter._print_Functionc                 C   s   | j |ddS ©Nr§  ©r  ©rœ   rK   r?   r?   r@   Ú_print_mathieuc4  s    zPrettyPrinter._print_mathieucc                 C   s   | j |ddS ©Nr   r  r  rK   r?   r?   r@   Ú_print_mathieus7  s    zPrettyPrinter._print_mathieusc                 C   s   | j |ddS )NzC'r  r  rK   r?   r?   r@   Ú_print_mathieucprime:  s    z"PrettyPrinter._print_mathieucprimec                 C   s   | j |ddS )NzS'r  r  rK   r?   r?   r@   Ú_print_mathieusprime=  s    z"PrettyPrinter._print_mathieusprimerB  c	                 C   sÈ   |rt |td}|s$t|dƒr$|j}|r8|  t|ƒ¡}	nt|  |¡ ¡ Ž }	|r„| jr^t	dƒ}
nd}
|  |
¡}
tt
 |	|
¡dtjiŽ}	t| j||dj||dŽ }tt
 |	|¡dtjiŽ}|	|_||_|S )NrŸ   rq   zModifier Letter Low Ringr  rŠ   rC  rE  )r¢   r   Úhasattrrq   rH   r   r   rR   rG   r   r   r   rÂ   rP   rÀ   rH  rI  )r=   rl   rQ   r¤   r  rD  ÚelementwiserS   ra   rH  r€  rI  rU   r?   r?   r@   r  @  s:    


þÿ ÿ
ÿÿz$PrettyPrinter._helper_print_functionc                 C   s$   |j }|j}|g}| j||dddS )NrÏ   T)rD  r  )ré   rD   r  )r=   rL   rl   r   rQ   r?   r?   r@   Ú_print_ElementwiseApplyFunctione  s    z-PrettyPrinter._print_ElementwiseApplyFunctionc                 C   s    ddl m} ddlm}m} ddlm} ddlm} ddl	m
} ddlm} |td dg|td	 d	g|td
 dg|td dg|td dg|td dg|ddgiS )Nr   )ÚKroneckerDelta)ÚgammaÚ
lowergamma)Úlerchphi)Úbeta)Ú
DiracDelta)ÚChiÚdeltaÚGammaÚPhir  r  ÚBetarX  r  )Z(sympy.functions.special.tensor_functionsr  Z'sympy.functions.special.gamma_functionsr  r  Z&sympy.functions.special.zeta_functionsr  Z&sympy.functions.special.beta_functionsr  Z'sympy.functions.special.delta_functionsr  Z'sympy.functions.special.error_functionsr  r!   )r=   r  r  r  r  r  r  r  r?   r?   r@   Ú_special_function_classesk  s(     
 
 
 
 
 úz'PrettyPrinter._special_function_classesc                 C   sf   | j D ]L}t||ƒr|j|jkr| jr<t| j | d ƒ  S t| j | d ƒ  S q|j}tt|ƒƒS )Nr   r[   )r  Ú
issubclassrq   rG   r   r   )r=   rD   Úclsr  r?   r?   r@   Ú_print_FunctionClass{  s    
z"PrettyPrinter._print_FunctionClassc                 C   s
   |   |¡S rA   )rE   rC   r?   r?   r@   Ú_print_GeometryEntity…  s    z#PrettyPrinter._print_GeometryEntityc                 C   sD   |   |jd ¡}| jr:t|ƒr:|  td| ƒ|jd ƒ¡S |  |¡S )Nr   zLi_%sr[   ©rH   rQ   rG   r%   rœ   r   ©r=   rL   r¤  r?   r?   r@   Ú_print_polylog‰  s    zPrettyPrinter._print_polylogc                 C   s    | j rtd nd}| j||dS )Nr  r  r  ©rG   r!   rœ   ©r=   rL   r  r?   r?   r@   Ú_print_lerchphi  s    zPrettyPrinter._print_lerchphic                 C   s    | j rtd nd}| j||dS )NÚetaZdirichlet_etar  r#  r$  r?   r?   r@   Ú_print_dirichlet_eta“  s    z"PrettyPrinter._print_dirichlet_etac                 C   s^   | j rtd nd}|jd tjkrLt|  |jd ¡ ¡ Ž }t| |¡Ž }|S | j	||dS d S )NÚthetaZ	Heavisider[   r   r  )
rG   r!   rQ   r   ZHalfr   rH   rR   rS   rœ   )r=   rL   r  rU   r?   r?   r@   Ú_print_Heaviside—  s    zPrettyPrinter._print_Heavisidec                 C   s   | j |ddS r	  r  rK   r?   r?   r@   Ú_print_fresnels   s    zPrettyPrinter._print_fresnelsc                 C   s   | j |ddS r  r  rK   r?   r?   r@   Ú_print_fresnelc£  s    zPrettyPrinter._print_fresnelcc                 C   s   | j |ddS )NZAir  r  rK   r?   r?   r@   Ú_print_airyai¦  s    zPrettyPrinter._print_airyaic                 C   s   | j |ddS )NZBir  r  rK   r?   r?   r@   Ú_print_airybi©  s    zPrettyPrinter._print_airybic                 C   s   | j |ddS )NzAi'r  r  rK   r?   r?   r@   Ú_print_airyaiprime¬  s    z PrettyPrinter._print_airyaiprimec                 C   s   | j |ddS )NzBi'r  r  rK   r?   r?   r@   Ú_print_airybiprime¯  s    z PrettyPrinter._print_airybiprimec                 C   s   | j |ddS )NÚWr  r  rK   r?   r?   r@   Ú_print_LambertW²  s    zPrettyPrinter._print_LambertWc                 C   s   | j |ddS )NZCovr  r  rK   r?   r?   r@   Ú_print_Covarianceµ  s    zPrettyPrinter._print_Covariancec                 C   s   | j |ddS )NZVarr  r  rK   r?   r?   r@   Ú_print_Variance¸  s    zPrettyPrinter._print_Variancec                 C   s   | j |ddS )NrÚ  r  r  rK   r?   r?   r@   Ú_print_Probability»  s    z PrettyPrinter._print_Probabilityc                 C   s   | j |ddddS )Nr  r'  r(  )r  rS   ra   r  rK   r?   r?   r@   Ú_print_Expectation¾  s    z PrettyPrinter._print_Expectationc                 C   sn   |j }|j}| jr$dtdƒ› d}nd}t|ƒdkrF|d jrF|d }|  |¡}tt 	|||  |¡¡ddiŽS )Nr€   ZArrowFromBarú -> r[   r   rŠ   r	  )
rD   Ú	signaturerG   r   rÛ   Z	is_symbolrH   r   r   r   )r=   rL   rD   ÚsigÚarrowZvar_formr?   r?   r@   Ú_print_LambdaÁ  s    
zPrettyPrinter._print_Lambdac                 C   s  |   |j¡}|jr&tdd„ |jD ƒƒs4t|jƒdkrüt| d¡Ž }t|jƒdkrht| |   |j¡¡Ž }n$t|jƒrŒt| |   |jd ¡¡Ž }| jr®t| dt	dƒ› d¡Ž }nt| d¡Ž }t|jƒdkrât| |   |j¡¡Ž }nt| |   |jd ¡¡Ž }t| 
¡ Ž }t| d	¡Ž }|S )
Nc                 s   s   | ]}|t jkV  qd S rA   )r   ÚZero)r  rà  r?   r?   r@   r¯  Ð  s     z-PrettyPrinter._print_Order.<locals>.<genexpr>r[   ú; r   r€   r°   r6  ÚO)rH   rD   ÚpointÚanyrÛ   r×  r   ra   rG   r   rR   rS   ©r=   rD   rU   r?   r?   r@   Ú_print_OrderÎ  s$    ÿ
zPrettyPrinter._print_Orderc                 C   s¦   | j r`|  |jd |jd  ¡}|  |jd ¡}tdƒ}t| |¡Ž }t| d¡Ž }|| }|S |  |jd ¡}|  |jd |jd  ¡}|  |ddd¡}|| S d S )Nr   r[   r   r  r  r€   )rG   rH   rQ   r   ra   rP   )r=   rL   Úshiftr†   rs  rU   r?   r?   r@   Ú_print_SingularityFunctionã  s    z(PrettyPrinter._print_SingularityFunctionc                 C   s    | j rtd nd}| j||dS )Nr  rX  r  r#  r$  r?   r?   r@   Ú_print_betaò  s    zPrettyPrinter._print_betac                 C   s   d}| j ||dS )NzB'r  r  r$  r?   r?   r@   Ú_print_betaincö  s    zPrettyPrinter._print_betaincc                 C   s   d}| j ||dS )Nrj  r  r  r$  r?   r?   r@   Ú_print_betainc_regularizedú  s    z(PrettyPrinter._print_betainc_regularizedc                 C   s    | j rtd nd}| j||dS ©Nr  r  r#  r$  r?   r?   r@   Ú_print_gammaþ  s    zPrettyPrinter._print_gammac                 C   s    | j rtd nd}| j||dS rG  r#  r$  r?   r?   r@   Ú_print_uppergamma  s    zPrettyPrinter._print_uppergammac                 C   s    | j rtd nd}| j||dS )Nr  r  r  r#  r$  r?   r?   r@   Ú_print_lowergamma  s    zPrettyPrinter._print_lowergammac                 C   sÀ   | j r²t|jƒdkr€ttd ƒ}|  |jd ¡}t| ¡ Ž }|  |jd ¡}t| ¡ Ž }|| }t| d¡Ž }t| |¡Ž }|S |  |jd ¡}t| ¡ Ž }t| td ¡Ž }|S |  	|¡S d S )Nr   r  r[   r   r€   )
rG   rÛ   rQ   r   r!   rH   rR   ra   rS   rœ   )r=   rL   rh  rî  ÚcrU   r?   r?   r@   Ú_print_DiracDelta
  s     zPrettyPrinter._print_DiracDeltac                 C   sD   |   |jd ¡}| jr:t|ƒr:|  td| ƒ|jd ƒ¡S |  |¡S )Nr   zE_%sr[   r   r!  r?   r?   r@   Ú_print_expint  s    zPrettyPrinter._print_expintc                 C   sD   t dƒ}t |  |j¡ ¡ Ž }t t ||¡dt jiŽ}||_||_|S )Nr  rŠ   )	r   rP   rQ   rR   r   r   rÀ   rH  rI  )r=   rL   rH  rI  rU   r?   r?   r@   Ú
_print_Chi#  s    
ÿÿzPrettyPrinter._print_Chic                 C   s^   |   |jd ¡}t|jƒdkr$|}n|   |jd ¡}|  ||¡}t| ¡ Ž }t| d¡Ž }|S )Nr   r[   r  )rH   rQ   rÛ   rë  r   rR   rS   )r=   rL   Úpforma0rU   Úpforma1r?   r?   r@   Ú_print_elliptic_e2  s    zPrettyPrinter._print_elliptic_ec                 C   s.   |   |jd ¡}t| ¡ Ž }t| d¡Ž }|S )Nr   ÚK)rH   rQ   r   rR   rS   rT   r?   r?   r@   Ú_print_elliptic_k=  s    zPrettyPrinter._print_elliptic_kc                 C   sJ   |   |jd ¡}|   |jd ¡}|  ||¡}t| ¡ Ž }t| d¡Ž }|S )Nr   r[   rï  )rH   rQ   rë  r   rR   rS   )r=   rL   rO  rP  rU   r?   r?   r@   Ú_print_elliptic_fC  s    zPrettyPrinter._print_elliptic_fc                 C   s¨   | j rtd nd}|  |jd ¡}|  |jd ¡}t|jƒdkrN|  ||¡}n<|  |jd ¡}| j||dd}t| d¡Ž }t| |¡Ž }t| ¡ Ž }t| |¡Ž }|S )NÚPir   r[   r   F©rå  r<  )	rG   r!   rH   rQ   rÛ   rë  r   rS   rR   )r=   rL   rW   rO  rP  rU   Zpforma2Zpformar?   r?   r@   Ú_print_elliptic_piK  s    z PrettyPrinter._print_elliptic_pic                 C   s    | j rttdƒƒS |  tdƒ¡S )NÚphiZGoldenRatio©rG   r   r   rH   r   rC   r?   r?   r@   Ú_print_GoldenRatioZ  s    z PrettyPrinter._print_GoldenRatioc                 C   s    | j rttdƒƒS |  tdƒ¡S )Nr  Z
EulerGammarY  rC   r?   r?   r@   Ú_print_EulerGamma_  s    zPrettyPrinter._print_EulerGammac                 C   s   |   tdƒ¡S )Nrø  )rH   r   rC   r?   r?   r@   Ú_print_Cataland  s    zPrettyPrinter._print_Catalanc                 C   s\   |   |jd ¡}|jtjkr(t| ¡ Ž }t| d¡Ž }t| |   |jd ¡¡Ž }tj|_|S )Nr   z mod r[   )rH   rQ   rŠ   r   rÃ   rR   ra   rŽ   r@  r?   r?   r@   Ú
_print_Modg  s    zPrettyPrinter._print_Modc                 C   sÖ  | j ||d}g g  }}dd„ }t|ƒD ]ô\}}|jr˜| ¡ r˜|jdd\}	}
|	dkrft|
ddiŽ}nt|	 f|
žddiŽ}|  |¡}| |||ƒ¡ q(|jr¾|j	dkr¾| d ¡ | |¡ q(|j
rê|d	k rê|  | ¡}| |||ƒ¡ q(|jr| t|  |¡ ¡ Ž ¡ q(| |  |¡¡ q(|rÌd
}|D ]$}|d k	r,| ¡ dkr, qVq,d}|D ]p}|| d }}|d	k r‚| d
 }}|r¦tt|jƒƒtt|j	ƒƒ }n
|  |¡}|rÀ|||ƒ}|||< qZtj|Ž S )N©r,   c                 S   sj   |dkr |   ¡ dkrd}q$d}nd}| jtjks<| jtjkrJt|  ¡ Ž }n| }t ||¡}t|dtjiŽS )z'Prepend a minus sign to a pretty form. r   r[   z- ró   r˜  rŠ   )rì   rŠ   r   ÚNEGZADDr   rR   r   )rU   r¾  Z	pform_negrà  r?   r?   r@   Úpretty_negativet  s    
ÿz1PrettyPrinter._print_Add.<locals>.pretty_negativeF)Zrationalr  r‰  r[   r   T)Z_as_ordered_termsrf  Zis_Mulr[  Zas_coeff_mulr   rH   r÷   Úis_RationalÚqZ	is_NumberÚis_Relationalr   rR   rì   r9   rà  rÔ  )r=   rD   r,   ZtermsÚpformsrÉ  r`  r+   rõ   r]  ÚotherZnegtermrU   ZlargeÚnegativer?   r?   r@   Ú
_print_Addp  sJ    






zPrettyPrinter._print_Addc           	         s  ddl m‰  |j}|d tjks:tdd„ |dd … D ƒƒr’ttˆj|ƒƒ}|d dk}|rjt	dddƒ|d< t	j
|Ž }|rŽt	d|j |j|jƒ}|S g }g }ˆjd	kr®| ¡ }n
t|jƒ}t|‡ fd
d„d}|D ]À}|jr8|jr8|jjr8|jjr8|jdkr | t|j|j dd¡ n| t|j|j ƒ¡ qÐ|jr†|tjk	r†|jdkrh| t|jƒ¡ |jdkr| t|jƒ¡ qÐ| |¡ qÐ‡fdd„|D ƒ}‡fdd„|D ƒ}t|ƒdkrÎt	j
|Ž S t|ƒdkrî| ˆ tj¡¡ t	j
|Ž t	j
|Ž  S d S )Nr   ©ÚQuantityc                 s   s   | ]}t |tƒV  qd S rA   )r7   r   ©r  r   r?   r?   r@   r¯  À  s     z+PrettyPrinter._print_Mul.<locals>.<genexpr>r[   z-1ro  ró   )ÚoldÚnonec                    s    t | ˆ ƒpt | tƒot | jˆ ƒS rA   )r7   r
   rs  r6  rh  r?   r@   r7  Ö  s   
z*PrettyPrinter._print_Mul.<locals>.<lambda>rŸ   r  Frˆ  c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   )r  ZairF   r?   r@   r  é  s     z,PrettyPrinter._print_Mul.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   )r  ZbirF   r?   r@   r  ê  s     )Zsympy.physics.unitsri  rQ   r   ÚOner?  rÒ   ÚmaprH   r   rg  rÈ   r…   rŠ   r,   Zas_ordered_factorsr¢   Úis_commutativeZis_Powrt  ra  Zis_negativer÷   r
   rs  r  rà  r	   rb  rÛ   )	r=   rÅ  rQ   ZstrargsZnegoneÚobjrh  rî  r\  r?   )ri  r=   r@   r‹  ¸  sF    (



$
zPrettyPrinter._print_Mulc           	         sx  |   |¡}| jd rX| jrX|dkrX| ¡ dkrX| ¡ dksF|jrX|jrXt| t	d ¡Ž S t
ddƒ‰ t
ddƒˆ  }|   |¡}| ¡ dkrž|   |¡|   d| ¡ S |dkrªdnt|ƒ d¡}t|ƒdkrØdt|ƒd  | }t|d | ƒ}d	|_| ¡ d ‰td ‡ ‡fd
d„tˆƒD ƒ¡ƒ}ˆd |_t| |¡Ž }td|jƒ|_ttdd| ¡  ƒƒ}t| |¡Ž }t| |¡Ž }|S )Nr0   r   r[   r  ú\rÏ   r€   r¬  r   c                 3   s*   | ]"}d ˆ| d  ˆ  d |  V  qdS )r€   r[   Nr?   r  ©Z_zZZ
linelengthr?   r@   r¯    s   ÿz0PrettyPrinter._print_nth_root.<locals>.<genexpr>r²   )rH   r8   rG   rì   rƒ   rw   rx   r   rS   Únth_rootr   r9   ÚljustrÛ   r   r…   r¸  rÚ   ra   r‚   r   r„   )	r=   rs  r'   ZbprettyZrootsignZrprettyrt  ZdiagonalrÈ   r?   rr  r@   Ú_print_nth_rootõ  sD    
ÿ
ÿ
þýý

þ

zPrettyPrinter._print_nth_rootc                 C   sâ   ddl m} | ¡ \}}|jrª|tjkr:tdƒ|  |¡ S ||ƒ\}}|tjkr~|j	r~|j
s~|jsh|jr~| jd r~|  ||¡S |jrª|dk rªtdƒ|  t|| dd¡ S |jrÎt|  |¡ ¡ Ž  |  |¡¡S |  |¡|  |¡ S )Nr   )Úfractionro  r1   Frˆ  )Zsympy.simplify.simplifyrv  Zas_base_expro  r   ZNegativeOner   rH   rm  Zis_Atomrw   ra  ry   r8   ru  r
   rc  rR   Ú__pow__)r=   Úpowerrv  rî  rL   r†   r¾   r?   r?   r@   Ú
_print_Pow!  s    
"ÿzPrettyPrinter._print_Powc                 C   s   |   |jd ¡S rª  )rH   rQ   rC   r?   r?   r@   Ú_print_UnevaluatedExpr3  s    z$PrettyPrinter._print_UnevaluatedExprc                 C   s   |dkr0|dk r"t t|ƒt jdS t t|ƒƒS n\t|ƒdkrˆt|ƒdkrˆ|dk rnt t|ƒt jdt t|ƒƒ S t t|ƒƒt t|ƒƒ S nd S d S )Nr[   r   )rŠ   é
   )r   r9   r_  Úabs)r=   rà  rb  r?   r?   r@   Z__print_numer_denom6  s    z!PrettyPrinter.__print_numer_denomc                 C   s*   |   |j|j¡}|d k	r|S |  |¡S d S rA   )Ú!_PrettyPrinter__print_numer_denomrà  rb  rE   ©r=   rD   rß   r?   r?   r@   Ú_print_RationalH  s    zPrettyPrinter._print_Rationalc                 C   s*   |   |j|j¡}|d k	r|S |  |¡S d S rA   )r}  Ú	numeratorÚdenominatorrE   r~  r?   r?   r@   Ú_print_FractionP  s    zPrettyPrinter._print_Fractionc                 C   sl   t |jƒdkr8t|jƒs8|  |jd ¡|  t |jƒ¡ S | jrFtdƒnd}| j|jd d d| dd„ dS d S )	Nr[   r   ZMultiplicationr{   r¡   c                 S   s   | j p| jp| jS rA   )Úis_UnionÚis_IntersectionÚis_ProductSet©Úsetr?   r?   r@   r7  ^  s   ÿz1PrettyPrinter._print_ProductSet.<locals>.<lambda>r9  )rÛ   Úsetsr   rH   rG   r   rP   )r=   rà  Z	prod_charr?   r?   r@   Ú_print_ProductSetX  s     ÿzPrettyPrinter._print_ProductSetc                 C   s   t |jtd}|  |ddd¡S )NrŸ   rÝ  Ú}rB  )r¢   rQ   r   rP   )r=   rÈ   r³  r?   r?   r@   Ú_print_FiniteSeta  s    zPrettyPrinter._print_FiniteSetc                 C   sØ   | j rtdƒ}nd}|jjrL|jjrL|jjr<|ddd|f}qÈ|ddd|f}n||jjrn||d |j |d f}nZ|jjr’t|ƒ}t|ƒt|ƒ|f}n6t	|ƒdkrÀt|ƒ}t|ƒt|ƒ||d f}nt
|ƒ}|  |ddd	¡S )
NÚDotsú...r  r   r[   rè   rÝ  rŠ  rB  )rG   r   ÚstartÚis_infiniteÚstopÚstepZis_positiveÚiterr   rÛ   rÔ   rP   )r=   rÈ   ÚdotsÚprintsetÚitr?   r?   r@   Ú_print_Rangee  s"    
zPrettyPrinter._print_Rangec                 C   s`   |j |jkr$|  |jd d… dd¡S |jr0d}nd}|jr@d}nd}|  |jd d… ||¡S d S )	Nr[   rÝ  rŠ  r]   r'  r^   r(  r   )rŽ  ÚendrP   rQ   Z	left_openZ
right_open©r=   r+   rS   ra   r?   r?   r@   Ú_print_Interval~  s    zPrettyPrinter._print_Intervalc                 C   s    d}d}|   |jd d… ||¡S )Nr  r  r   ©rP   rQ   r˜  r?   r?   r@   Ú_print_AccumulationBounds  s    z'PrettyPrinter._print_AccumulationBoundsc                 C   s(   dt ddƒ }| j|jd d |dd„ dS )Nr¡   ZIntersectionr†   c                 S   s   | j p| jp| jS rA   )r…  rƒ  Úis_Complementr†  r?   r?   r@   r7  š  s   ÿz3PrettyPrinter._print_Intersection.<locals>.<lambda>r9  ©r   rP   rQ   ©r=   rá   rD  r?   r?   r@   Ú_print_Intersection•  s    ÿz!PrettyPrinter._print_Intersectionc                 C   s(   dt ddƒ }| j|jd d |dd„ dS )Nr¡   ÚUnionr"   c                 S   s   | j p| jp| jS rA   )r…  r„  rœ  r†  r?   r?   r@   r7  ¢  s   ÿz,PrettyPrinter._print_Union.<locals>.<lambda>r9  r  )r=   rá   Zunion_delimiterr?   r?   r@   Ú_print_Union  s    ÿzPrettyPrinter._print_Unionc                 C   s,   | j stdƒ‚dtdƒ }|  |jd d |¡S )Nz?ASCII pretty printing of SymmetricDifference is not implementedr¡   ZSymmetricDifference)rG   r±  r   rP   rQ   )r=   rá   Zsym_delimeterr?   r?   r@   Ú_print_SymmetricDifference¥  s    z(PrettyPrinter._print_SymmetricDifferencec                 C   s   d}| j |jd d |dd„ dS )Nz \ c                 S   s   | j p| jp| jS rA   )r…  r„  rƒ  r†  r?   r?   r@   r7  ²  s   z1PrettyPrinter._print_Complement.<locals>.<lambda>r9  rš  rž  r?   r?   r@   Ú_print_Complement­  s    ÿzPrettyPrinter._print_Complementc                    s¼   | j rtdƒ‰ nd‰ |j}|j}|j}|  |j¡}t|ƒdkrp| j|d ˆ |d fdd}| j	||ddd	dd
S t
‡ fdd„t||ƒD ƒƒ}| j|d d… dd}| j	||ddd	dd
S d S )NÚSmallElementOfÚinr[   r   r€   rC  rÝ  rŠ  T©rS   ra   rå  rD  c                 3   s,   | ]$\}}|d ˆ d |dfD ]
}|V  qqdS )r€   rB  Nr?   )r  r›  Zsetvr5   ©Úinnr?   r@   r¯  Ë  s    ÿ z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>r  rÏ   )rG   r   r…  Z	base_setsr7  rH   rD   rÛ   rP   rë  rÔ   rÜ   )r=   ÚtsÚfunrˆ  r7  rD   r   Zpargsr?   r§  r@   Ú_print_ImageSetµ  s2    
ÿ  þ  þzPrettyPrinter._print_ImageSetc           	      C   sÜ   | j rtdƒ}tdƒ}nd}d}|  t|jƒ¡}t|jdd ƒ}|d k	rX|  |j ¡ ¡}n(|  |j¡}| j r€|  |¡}t	| 
¡ Ž }|jtjkr¢| j||dddd	d
S |  |j¡}| j|||||fd	d}| j||dddd	d
S )Nr¤  r¦   r¥  ÚandÚas_exprrÝ  rŠ  Tr€   r¦  rC  )rG   r   rP   r   rÆ   ÚgetattrÚ	conditionrH   r­  r   rR   Zbase_setr   ÚUniversalSetrë  )	r=   r©  r¨  Z_andr×  r­  rÞ  rs  r§  r?   r?   r@   Ú_print_ConditionSetÒ  s6    


 þÿ ÿz!PrettyPrinter._print_ConditionSetc                 C   sb   | j rtdƒ}nd}|  |j¡}|  |j¡}|  |j¡}| j|||fdd}| j||dddddS )	Nr¤  r¥  r€   rC  rÝ  rŠ  Tr¦  )rG   r   rP   r×  rH   rD   rˆ  rë  )r=   r©  r¨  r×  rD   Zprodsetsr§  r?   r?   r@   Ú_print_ComplexRegionñ  s    
ÿ ÿz"PrettyPrinter._print_ComplexRegionc                 C   sT   |j \}}| jrDdtdƒ› d}tt |  |¡||  |¡¡ddiŽS tt|ƒƒS d S )Nr€   Z	ElementOfrŠ   r	  )rQ   rG   r   r   r   r   rH   r   )r=   rL   r›  r‡  Úelr?   r?   r@   Ú_print_Containsÿ  s    
 ÿÿzPrettyPrinter._print_Containsc                 C   sT   |j jtjkr(|jjtjkr(|  |j¡S | jr8tdƒ}nd}|  	| 
¡ ¡|  |¡ S )NrŒ  r  )rú  Zformular   r;  ZbnrH   Za0rG   r   rg  Útruncate)r=   rÈ   r“  r?   r?   r@   Ú_print_FourierSeries	  s    
z"PrettyPrinter._print_FourierSeriesc                 C   s   |   |j¡S rA   )rg  Zinfinite©r=   rÈ   r?   r?   r@   Ú_print_FormalPowerSeries	  s    z&PrettyPrinter._print_FormalPowerSeriesc                 C   s0   t |  |j¡ ¡ Ž }|  tdƒ¡}t | |¡Ž S )NZSetExpr)r   rH   r‡  rR   r   ra   )r=   ÚseZ
pretty_setÚpretty_namer?   r?   r@   Ú_print_SetExpr	  s    zPrettyPrinter._print_SetExprc                 C   sÊ   | j rtdƒ}nd}t|jjƒdks4t|jjƒdkr<tdƒ‚|jtjkr‚|j}|| 	|d ¡| 	|d ¡| 	|d ¡| 	|¡f}n>|jtj
ks˜|jdkr¸|d d… }| |¡ t|ƒ}nt|ƒ}|  |¡S )	NrŒ  r  r   z@Pretty printing of sequences with symbolic bound not implementedrç   r   r[   rè   )rG   r   rÛ   rŽ  Zfree_symbolsr  r±  r   r  r]  r  Úlengthr÷   rÔ   Ú_print_list)r=   rÈ   r“  r  r”  r?   r?   r@   Ú_print_SeqFormula	  s"    
  ÿ

zPrettyPrinter._print_SeqFormulac                 C   s   dS )NFr?   r6  r?   r?   r@   r7  3	  r8  zPrettyPrinter.<lambda>c                 C   sx   g }|D ]:}|   |¡}	||ƒr*t|	 ¡ Ž }	|r8| |¡ | |	¡ q|sRtdƒ}
nttj|Ž Ž }
t|
j|||dŽ }
|
S )NrÏ   rV  )rH   r   rR   r÷   r   r   )r=   ÚseqrS   ra   rD  r:  rå  rd  r\  rU   rÈ   r?   r?   r@   rP   2	  s    


zPrettyPrinter._print_seqc                 C   sP   d }|D ].}|d kr|}qt | |¡Ž }t | |¡Ž }q|d krHt dƒS |S d S )NrÏ   )r   ra   )r=   rD  rQ   rU   r   r?   r?   r@   r¸  F	  s    zPrettyPrinter.joinc                 C   s   |   |dd¡S r„  ©rP   )r=   r‘   r?   r?   r@   r½  U	  s    zPrettyPrinter._print_listc                 C   sL   t |ƒdkr:tt |  |d ¡d¡Ž }t|jddddŽ S |  |dd¡S d S )Nr[   r   rÐ   r]   r^   TrV  )rÛ   r   r   r   rH   rR   rP   )r=   rô  Zptupler?   r?   r@   Ú_print_tupleX	  s    zPrettyPrinter._print_tuplec                 C   s
   |   |¡S rA   )rÁ  rC   r?   r?   r@   Ú_print_Tuple_	  s    zPrettyPrinter._print_Tuplec                 C   s`   t | ¡ td}g }|D ]8}|  |¡}|  || ¡}tt |d|¡Ž }| |¡ q|  |dd¡S )NrŸ   z: rÝ  rŠ  )	r¢   Úkeysr   rH   r   r   r   r÷   rP   )r=   r¾   rÃ  r³  r‡   rR  ÚVrÈ   r?   r?   r@   Ú_print_dictb	  s    
zPrettyPrinter._print_dictc                 C   s
   |   |¡S rA   )rÅ  )r=   r¾   r?   r?   r@   Ú_print_Dicto	  s    zPrettyPrinter._print_Dictc                 C   s:   |st dƒS t|td}|  |¡}t |jddddŽ }|S )Nzset()rŸ   rÝ  rŠ  TrV  )r   r¢   r   rP   rR   ©r=   rÈ   r³  Úprettyr?   r?   r@   Ú
_print_setr	  s    
zPrettyPrinter._print_setc                 C   sd   |st dƒS t|td}|  |¡}t |jddddŽ }t |jddddŽ }t t t|ƒj|¡Ž }|S )	Nzfrozenset()rŸ   rÝ  rŠ  TrV  r]   r^   )	r   r¢   r   rP   rR   r   r   Útyperq   rÇ  r?   r?   r@   Ú_print_frozensetz	  s    
zPrettyPrinter._print_frozensetc                 C   s   | j rttdƒƒS tdƒS d S )NZUniverser°  rk  r·  r?   r?   r@   Ú_print_UniversalSet„	  s    z!PrettyPrinter._print_UniversalSetc                 C   s   t t|ƒƒS rA   ©r   r   )r=   Úringr?   r?   r@   Ú_print_PolyRingŠ	  s    zPrettyPrinter._print_PolyRingc                 C   s   t t|ƒƒS rA   rÍ  )r=   Úfieldr?   r?   r@   Ú_print_FracField	  s    zPrettyPrinter._print_FracFieldc                 C   s   t t|ƒƒS rA   rB   )r=   Úelmr?   r?   r@   Ú_print_FreeGroupElement	  s    z%PrettyPrinter._print_FreeGroupElementc                 C   s   t t|ƒƒS rA   rÍ  )r=   Zpolyr?   r?   r@   Ú_print_PolyElement“	  s    z PrettyPrinter._print_PolyElementc                 C   s   t t|ƒƒS rA   rÍ  )r=   Úfracr?   r?   r@   Ú_print_FracElement–	  s    z PrettyPrinter._print_FracElementc                 C   s*   |j r|  | ¡  ¡ ¡S |  | ¡ ¡S d S rA   )Z
is_aliasedrH   Zas_polyr­  rC   r?   r?   r@   Ú_print_AlgebraicNumber™	  s    z$PrettyPrinter._print_AlgebraicNumberc                 C   s:   | j |jdd|jg}t|  |¡ ¡ Ž }t| d¡Ž }|S )NÚlexr^  ZCRootOf)rg  rD   r¾  r   rP   rR   rS   ©r=   rD   rQ   rU   r?   r?   r@   Ú_print_ComplexRootOfŸ	  s    z"PrettyPrinter._print_ComplexRootOfc                 C   sT   | j |jddg}|jtjk	r0| |  |j¡¡ t|  |¡ 	¡ Ž }t| 
d¡Ž }|S )NrØ  r^  ZRootSum)rg  rD   rª  r   ZIdentityFunctionr÷   rH   r   rP   rR   rS   rÙ  r?   r?   r@   Ú_print_RootSum¥	  s    zPrettyPrinter._print_RootSumc                 C   s,   | j rtdƒ› d}nd}tt||j ƒƒS )NÚIntegersz_%dzGF(%d))rG   r   r   r   Úmod)r=   rD   Úformr?   r?   r@   Ú_print_FiniteField°	  s    z PrettyPrinter._print_FiniteFieldc                 C   s   | j rttdƒƒS tdƒS d S )NrÜ  ZZZrk  rC   r?   r?   r@   Ú_print_IntegerRing¸	  s    z PrettyPrinter._print_IntegerRingc                 C   s   | j rttdƒƒS tdƒS d S )NZ	RationalsZQQrk  rC   r?   r?   r@   Ú_print_RationalField¾	  s    z"PrettyPrinter._print_RationalFieldc                 C   sB   | j rtdƒ}nd}|jr"t|ƒS |  t|d t|jƒ ƒ¡S d S )NZRealsZRRr²   ©rG   r   Zhas_default_precisionr   rH   r   r9   Ú	precision©r=   ÚdomainÚprefixr?   r?   r@   Ú_print_RealFieldÄ	  s    
zPrettyPrinter._print_RealFieldc                 C   sB   | j rtdƒ}nd}|jr"t|ƒS |  t|d t|jƒ ƒ¡S d S )NZ	ComplexesÚCCr²   râ  rä  r?   r?   r@   Ú_print_ComplexFieldÏ	  s    
z!PrettyPrinter._print_ComplexFieldc                 C   s^   t |jƒ}|jjs6ttdƒ |  |j¡¡Ž }| |¡ |  |dd¡}t| 	|  |j
¡¡Ž }|S ©Núorder=r'  r(  ©rÒ   Úsymbolsr,   Ú
is_defaultr   ra   rH   r÷   rP   rS   rå  ©r=   rD   rQ   r,   rU   r?   r?   r@   Ú_print_PolynomialRingÚ	  s    

z#PrettyPrinter._print_PolynomialRingc                 C   s^   t |jƒ}|jjs6ttdƒ |  |j¡¡Ž }| |¡ |  |dd¡}t| 	|  |j
¡¡Ž }|S )Nrë  r]   r^   rì  rï  r?   r?   r@   Ú_print_FractionFieldæ	  s    

z"PrettyPrinter._print_FractionFieldc                 C   sV   |j }t|jƒt|jƒkr.|dt|jƒ f }|  |dd¡}t| |  |j¡¡Ž }|S rê  )	rí  r9   r,   Zdefault_orderrP   r   rS   rH   rå  )r=   rD   ÚgrU   r?   r?   r@   Ú_print_PolynomialRingBaseò	  s    z'PrettyPrinter._print_PolynomialRingBasec                    s´   ‡ ‡fdd„ˆ j D ƒ}tˆ d|¡jdddŽ }‡fdd„ˆ jD ƒ}ttdƒ ˆ ˆ j¡¡Ž }ttd	ƒ ˆ ˆ j¡¡Ž }ˆ d|g| ||g ¡}t| ¡ Ž }t| 	ˆ j
j¡Ž }|S )
Nc                    s   g | ]}ˆj |ˆ jd ‘qS )r^  )rg  r,   rj  ©Úbasisr=   r?   r@   r  ü	  s   ÿz6PrettyPrinter._print_GroebnerBasis.<locals>.<listcomp>rB  r'  r(  rE  c                    s   g | ]}ˆ   |¡‘qS r?   rÿ   ©r  ÚgenrF   r?   r@   r   
  s     zdomain=rë  )Úexprsr   r¸  rR   Úgensra   rH   rå  r,   rS   rp   rq   )r=   rõ  rø  rù  rå  r,   rU   r?   rô  r@   Ú_print_GroebnerBasisû	  s    ÿÿÿz"PrettyPrinter._print_GroebnerBasisc              	      sœ   ˆ   |j¡}t| ¡ Ž }| ¡ dkr,| ¡ nd}ttd|ƒ|jd}t| |¡Ž }|j}| ¡ d |_t| ˆ  	‡ fdd„t
|j|jƒD ƒ¡¡Ž }||_|S )Nr[   r   r´   ræ  c              	      s8   g | ]0}ˆ j ˆ  |d  ¡tdƒˆ  |d ¡fdd‘qS )r   rý   r[   rÏ   rC  )rP   rH   r   )r  rº  rF   r?   r@   r  
  s   ÿ$ÿz-PrettyPrinter._print_Subs.<locals>.<listcomp>)rH   rD   r   rR   rì   r   r   r…   ra   rP   rÜ   r×  r>  )r=   rL   rU   rï   Zrvertrî  r?   rF   r@   Ú_print_Subs
  s    þzPrettyPrinter._print_Subsc           
      C   s    t |ƒ}|  |jd ¡}t d| ¡  ƒ}t | |¡Ž }t | |¡Ž }t|jƒdkrV|S |j\}}|}t |  |g¡ ¡ Ž }	t t	 
||	¡dt jiŽ}||_|	|_|S )Nr   r€   r[   rŠ   )r   rH   rQ   rƒ   rÁ   ra   rÛ   rP   rR   r   r   rÀ   rH  rI  )
r=   rL   rW   rU   r   r¥   rN  r{   rH  rI  r?   r?   r@   Ú_print_number_function
  s$    

ÿÿz$PrettyPrinter._print_number_functionc                 C   s   |   |d¡S )Nr  ©rü  rK   r?   r?   r@   Ú_print_euler3
  s    zPrettyPrinter._print_eulerc                 C   s   |   |d¡S )Nr§  rý  rK   r?   r?   r@   Ú_print_catalan6
  s    zPrettyPrinter._print_catalanc                 C   s   |   |d¡S )NrX  rý  rK   r?   r?   r@   Ú_print_bernoulli9
  s    zPrettyPrinter._print_bernoullic                 C   s   |   |d¡S )NÚLrý  rK   r?   r?   r@   Ú_print_lucas>
  s    zPrettyPrinter._print_lucasc                 C   s   |   |d¡S )Nrï  rý  rK   r?   r?   r@   Ú_print_fibonacciA
  s    zPrettyPrinter._print_fibonaccic                 C   s   |   |d¡S )NrQ  rý  rK   r?   r?   r@   Ú_print_tribonacciD
  s    zPrettyPrinter._print_tribonaccic                 C   s&   | j r|  |td ¡S |  |d¡S d S )Nr  Z	stieltjes)rG   rü  r!   rK   r?   r?   r@   Ú_print_stieltjesG
  s    zPrettyPrinter._print_stieltjesc                 C   sž   |   |jd ¡}t| tdƒ¡Ž }t| |   |jd ¡¡Ž }| jrPttdƒƒ}ntdƒ}|}t| d| ¡  ¡Ž }t| d| ¡  ¡Ž }t| 	|¡dtj
iŽS )Nr   rÐ   r[   r  r¾   r€   rŠ   )rH   rQ   r   ra   rG   r   r   rS   rƒ   rÁ   ZPOW)r=   rL   rU   rh  rî  rÌ  rÍ  r?   r?   r@   Ú_print_KroneckerDeltaM
  s    z#PrettyPrinter._print_KroneckerDeltac                 C   sÄ   t |dƒr0|  d¡}t| |  | ¡ ¡¡Ž }|S t |dƒrˆ|  d¡}t| |  |j¡¡Ž }t| |  d¡¡Ž }t| |  |j¡¡Ž }|S t |dƒr¶|  d¡}t| |  |j¡¡Ž }|S |  d ¡S d S )NÚ
as_booleanzDomain: r‡  z in rí  z
Domain on )r  rH   r   ra   r  rí  r‡  )r=   r¾   rU   r?   r?   r@   Ú_print_RandomDomainZ
  s    





z!PrettyPrinter._print_RandomDomainc                 C   sF   z"|j d k	r |  |j  |¡¡W S W n tk
r6   Y nX |  t|ƒ¡S rA   )rÎ  rH   Úto_sympyr   Úrepr©r=   rà  r?   r?   r@   Ú
_print_DMPl
  s    
zPrettyPrinter._print_DMPc                 C   s
   |   |¡S rA   )r  r  r?   r?   r@   Ú
_print_DMFu
  s    zPrettyPrinter._print_DMFc                 C   s   |   t|jƒ¡S rA   ©rH   r   rW   )r=   Úobjectr?   r?   r@   Ú_print_Objectx
  s    zPrettyPrinter._print_Objectc                 C   s8   t dƒ}|  |j¡}|  |j¡}| ||¡d }t|ƒS )Nz-->r   )r   rH   rå  Úcodomainra   r   )r=   Úmorphismr9  rå  r  Útailr?   r?   r@   Ú_print_Morphism{
  s
    zPrettyPrinter._print_Morphismc                 C   s.   |   t|jƒ¡}|  |¡}t| d|¡d ƒS )NrK  r   )rH   r   rW   r  r   ra   )r=   r  rº  Úpretty_morphismr?   r?   r@   Ú_print_NamedMorphism„
  s    
z"PrettyPrinter._print_NamedMorphismc                 C   s"   ddl m} |  ||j|jdƒ¡S )Nr   )ÚNamedMorphismÚid)Zsympy.categoriesr  r  rå  r  )r=   r  r  r?   r?   r@   Ú_print_IdentityMorphism‰
  s    ÿz%PrettyPrinter._print_IdentityMorphismc                 C   sT   t dƒ}dd„ |jD ƒ}| ¡  | |¡d }|  |¡}|  |¡}t| |¡d ƒS )Nr  c                 S   s   g | ]}t |jƒ‘qS r?   )r   rW   )r  Ú	componentr?   r?   r@   r  ”
  s   ÿz:PrettyPrinter._print_CompositeMorphism.<locals>.<listcomp>rK  r   )r   r´  Úreverser¸  rH   r  r   ra   )r=   r  ÚcircleZcomponent_names_listZcomponent_namesrº  r  r?   r?   r@   Ú_print_CompositeMorphismŽ
  s    ÿ

z&PrettyPrinter._print_CompositeMorphismc                 C   s   |   t|jƒ¡S rA   r  )r=   Úcategoryr?   r?   r@   Ú_print_Category
  s    zPrettyPrinter._print_Categoryc                 C   sX   |j s|  tj¡S |  |j ¡}|jrLdtdƒ }|  |j¡d }| ||¡}t|d ƒS )Nr¡   z==>r   )ZpremisesrH   r   ZEmptySetZconclusionsr   ra   r   )r=   ZdiagramZpretty_resultZresults_arrowZpretty_conclusionsr?   r?   r@   Ú_print_Diagram 
  s     ÿzPrettyPrinter._print_Diagramc                    s2   ddl m} |‡ fdd„tˆ jƒD ƒƒ}|  |¡S )Nr   )ÚMatrixc                    s&   g | ]‰ ‡‡ fd d„t ˆjƒD ƒ‘qS )c                    s,   g | ]$}ˆ ˆ|f r ˆ ˆ|f nt d ƒ‘qS )r€   r   )r  r5   )Úgridr+   r?   r@   r  ±
  s   ÿz?PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>.<listcomp>)rÚ   rƒ   rÛ  ©r"  )r+   r@   r  ±
  s   þÿz4PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>)rF  r!  rÚ   rì   r&  )r=   r"  r!  Úmatrixr?   r#  r@   Ú_print_DiagramGrid¯
  s
    þz PrettyPrinter._print_DiagramGridc                 C   s   |   |dd¡S r„  rÀ  ©r=   rN  r?   r?   r@   Ú_print_FreeModuleElement¶
  s    z&PrettyPrinter._print_FreeModuleElementc                    s"   ‡ fdd„ˆ j D ƒ}|  |dd¡S )Nc                    s   g | ]}‡ fd d„|D ƒ‘qS )c                    s   g | ]}ˆ j  |¡‘qS r?   )rÎ  r	  )r  rò  ©r   r?   r@   r  »
  s     z=PrettyPrinter._print_SubModule.<locals>.<listcomp>.<listcomp>r?   rö  r(  r?   r@   r  »
  s     z2PrettyPrinter._print_SubModule.<locals>.<listcomp>r  r  )rù  rP   )r=   r   rù  r?   r(  r@   Ú_print_SubModuleº
  s    zPrettyPrinter._print_SubModulec                 C   s   |   |j¡|   |j¡ S rA   )rH   rÎ  rÃ  ©r=   r   r?   r?   r@   Ú_print_FreeModule¾
  s    zPrettyPrinter._print_FreeModulec                    s(   |j j‰ |  ‡ fdd„|jjD ƒdd¡S )Nc                    s   g | ]\}ˆ |ƒ‘qS r?   r?   r®  ©rÆ   r?   r@   r  Ã
  s     z?PrettyPrinter._print_ModuleImplementedIdeal.<locals>.<listcomp>r  r  )rÎ  r	  rP   Ú_modulerù  r*  r?   r,  r@   Ú_print_ModuleImplementedIdealÁ
  s    z+PrettyPrinter._print_ModuleImplementedIdealc                 C   s   |   |j¡|   |j¡ S rA   )rH   rÎ  Ú
base_ideal©r=   ÚRr?   r?   r@   Ú_print_QuotientRingÅ
  s    z!PrettyPrinter._print_QuotientRingc                 C   s    |   |j |¡¡|   |jj¡ S rA   )rH   rÎ  r	  r/  r0  r?   r?   r@   Ú_print_QuotientRingElementÈ
  s    z(PrettyPrinter._print_QuotientRingElementc                 C   s   |   |j¡|   |jj¡ S rA   )rH   ÚdataÚmoduleÚkilled_moduler&  r?   r?   r@   Ú_print_QuotientModuleElementË
  s    z*PrettyPrinter._print_QuotientModuleElementc                 C   s   |   |j¡|   |j¡ S rA   )rH   rs  r6  r*  r?   r?   r@   Ú_print_QuotientModuleÎ
  s    z#PrettyPrinter._print_QuotientModulec              	   C   sN   |   | ¡ ¡}| ¡ d |_t| d|   |j¡dtddƒ |   |j¡¡Ž }|S )Nr   z : z %s> ró   )	rH   Z_sympy_matrixrì   r…   r   ra   rå  r   r  )r=   rï   r$  rU   r?   r?   r@   Ú_print_MatrixHomomorphismÑ
  s     
ÿz'PrettyPrinter._print_MatrixHomomorphismc                 C   s   |   |j¡S rA   ©rH   rW   )r=   Zmanifoldr?   r?   r@   Ú_print_ManifoldØ
  s    zPrettyPrinter._print_Manifoldc                 C   s   |   |j¡S rA   r:  )r=   Úpatchr?   r?   r@   Ú_print_PatchÛ
  s    zPrettyPrinter._print_Patchc                 C   s   |   |j¡S rA   r:  )r=   Zcoordsr?   r?   r@   Ú_print_CoordSystemÞ
  s    z PrettyPrinter._print_CoordSystemc                 C   s   |j j|j j}|  t|ƒ¡S rA   )Ú
_coord_sysrí  Ú_indexrW   rH   r   )r=   rÐ  Ústringr?   r?   r@   Ú_print_BaseScalarFieldá
  s    z$PrettyPrinter._print_BaseScalarFieldc                 C   s*   t dƒd |jj|j j }|  t|ƒ¡S )Nr½   r²   )r"   r?  rí  r@  rW   rH   r   )r=   rÐ  rÈ   r?   r?   r@   Ú_print_BaseVectorFieldå
  s    z$PrettyPrinter._print_BaseVectorFieldc                 C   sr   | j rtdƒ}nd}|j}t|dƒrJ|jj|j j}|  |d t	|ƒ ¡S |  |¡}t
| ¡ Ž }t
| |¡Ž S d S )NZDifferentialr¾   r?  r€   )rG   r   Z_form_fieldr  r?  rí  r@  rW   rH   r   r   rR   rS   )r=   rù  r¾   rÐ  rA  rU   r?   r?   r@   Ú_print_Differentialé
  s    


z!PrettyPrinter._print_Differentialc                 C   s8   |   |jd ¡}t| d|jj ¡Ž }t| d¡Ž }|S )Nr   z%s(r^   )rH   rQ   r   rS   rp   rq   ra   )r=   rà  rU   r?   r?   r@   Ú	_print_Tr÷
  s    zPrettyPrinter._print_Trc                 C   sH   |   |jd ¡}t| ¡ Ž }| jr6t| td ¡Ž }nt| d¡Ž }|S )Nr   Únu©rH   rQ   r   rR   rG   rS   r!   rT   r?   r?   r@   Ú_print_primenuþ
  s    zPrettyPrinter._print_primenuc                 C   sH   |   |jd ¡}t| ¡ Ž }| jr6t| td ¡Ž }nt| d¡Ž }|S )Nr   ÚOmegarG  rT   r?   r?   r@   Ú_print_primeomega  s    zPrettyPrinter._print_primeomegac                 C   sB   |j j dkr4| jr"|  tdƒ¡}n|  tdƒ¡}|S |  |¡S d S )NZdegreeZDegreeé°   )rW   rG   rH   r   ÚchrrE   rT   r?   r?   r@   Ú_print_Quantity  s    zPrettyPrinter._print_Quantityc                 C   sD   t dt|jƒ d ƒ}|  |j¡}|  |j¡}t t |||¡Ž }|S )Nr€   )r   r   r   rH   r‹   rŒ   r   r   r   r?   r?   r@   Ú_print_AssignmentBase  s
    z#PrettyPrinter._print_AssignmentBasec                 C   s   |   |j¡S rA   r:  r·  r?   r?   r@   Ú
_print_Str#  s    zPrettyPrinter._print_Str)N)F)T)N)N)r'  r(  )NNrÏ   F)FNr]   r^   )FNrB  Fr]   r^   )N)ürq   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodZ_default_settingsr6   rE   ÚpropertyrG   rJ   rM   rN   rV   rX   Z_print_RandomSymbolrZ   r\   rc   rg   ri   rj   rm   rn   rs   Z_print_InfinityZ_print_NegativeInfinityZ_print_EmptySetZ_print_NaturalsZ_print_Naturals0Z_print_IntegersZ_print_RationalsZ_print_ComplexesZ_print_EmptySequencert   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  r<  r=  r?  rJ  rO  rR  rT  rY  r^  ri  rl  rn  rp  rr  ru  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/  r1  r2  r3  r4  r5  r:  rA  rC  rD  rE  rF  rH  rI  rJ  rL  rM  rN  rQ  rS  rT  rW  rZ  r[  r\  r]  rg  r‹  ru  ry  rz  r}  r  r‚  r‰  r‹  r–  r™  r›  rŸ  r¡  r¢  r£  r«  r±  r²  r´  r¶  r¸  r»  r¾  Z_print_SeqPerZ_print_SeqAddZ_print_SeqMulrP   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   Z_print_bellr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r'  r)  r+  r.  r2  r3  r7  r8  r9  r;  r=  r>  rB  rC  rD  rE  rH  rJ  rM  rN  rO  r?   r?   r?   r@   r(      s  ö
					%%K6aC		

$	f!# 8	0T ÿ
      þ
%

		H=,			
 ÿ
					
	r(   c                 K   s8   t |ƒ}|jd }t|ƒ}z| | ¡W ¢S t|ƒ X dS )zƒReturns a string containing the prettified form of expr.

    For information on keyword arguments see pretty_print function.

    r.   N)r(   r8   r    rJ   )rD   r>   rü  r.   Zuflagr?   r?   r@   rÈ  '  s    
rÈ  c                 K   s   t t| f|Žƒ dS )aÒ  Prints expr in pretty form.

    pprint is just a shortcut for this function.

    Parameters
    ==========

    expr : expression
        The expression to print.

    wrap_line : bool, optional (default=True)
        Line wrapping enabled/disabled.

    num_columns : int or None, optional (default=None)
        Number of columns before line breaking (default to None which reads
        the terminal width), useful when using SymPy without terminal.

    use_unicode : bool or None, optional (default=None)
        Use unicode characters, such as the Greek letter pi instead of
        the string pi.

    full_prec : bool or string, optional (default="auto")
        Use full precision.

    order : bool or string, optional (default=None)
        Set to 'none' for long expressions if slow; default is None.

    use_unicode_sqrt_char : bool, optional (default=True)
        Use compact single-character square root symbol (when unambiguous).

    root_notation : bool, optional (default=True)
        Set to 'False' for printing exponents of the form 1/n in fractional form.
        By default exponent is printed in root form.

    mat_symbol_style : string, optional (default="plain")
        Set to "bold" for printing MatrixSymbols using a bold mathematical symbol face.
        By default the standard face is used.

    imaginary_unit : string, optional (default="i")
        Letter to use for imaginary unit when use_unicode is True.
        Can be "i" (default) or "j".
    N)ÚprintrÈ  )rD   Úkwargsr?   r?   r@   Úpretty_print:  s    +rV  c                 K   sD   ddl m} ddlm} d|kr(d|d< |t| f|Ž |ƒ ¡ƒ dS )a‡  Prints expr using the pager, in pretty form.

    This invokes a pager command using pydoc. Lines are not wrapped
    automatically. This routine is meant to be used with a pager that allows
    sideways scrolling, like ``less -S``.

    Parameters are the same as for ``pretty_print``. If you wish to wrap lines,
    pass ``num_columns=None`` to auto-detect the width of the terminal.

    r   )Úpager)Úgetpreferredencodingr/   i ¡ N)ÚpydocrW  ÚlocalerX  rÈ  Úencode)rD   r>   rW  rX  r?   r?   r@   Úpager_printj  s
    r\  )?rÄ  Z
sympy.corer   Zsympy.core.addr   Zsympy.core.containersr   Zsympy.core.functionr   Zsympy.core.mulr   Zsympy.core.numbersr   r	   Zsympy.core.powerr
   Zsympy.core.sortingr   Zsympy.core.symbolr   Zsympy.core.sympifyr   Zsympy.printing.conventionsr   Zsympy.printing.precedencer   r   r   Zsympy.printing.printerr   r   Zsympy.printing.strr   Zsympy.utilities.iterablesr   Zsympy.utilities.exceptionsr   Z sympy.printing.pretty.stringpictr   r   Z&sympy.printing.pretty.pretty_symbologyr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   rs  Zpprint_use_unicodeZpprint_try_use_unicoder(   rÈ  rV  Úpprintr\  r?   r?   r?   r@   Ú<module>   s`   @                      
-