B
    ™‘[7F ã               @   s†  d dl mZmZ 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 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 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' d dl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dlm:Z: e5Z;e6Z<G dd„ de%ƒZ=dd„ Z>d#dd „Z?e?Z@d!d"„ ZAdS )$é    )Úprint_functionÚdivisionN)ÚS)ÚTuple)Ú_coeff_isneg)ÚMod)ÚMul)ÚRational)ÚPow)ÚEquality)ÚSymbol)Ú
PRECEDENCEÚ
precedenceÚprecedence_traditional)Úgroup)Úhas_variety)ÚSympifyError)Úrange)ÚAdd)ÚPrinter)Ússtr)Úrequires_partialé   )Ú
prettyFormÚ
stringPict)ÚxstrÚhobjÚvobjÚxobjÚxsymÚpretty_symbolÚpretty_atomÚpretty_use_unicodeÚpretty_try_use_unicodeÚgreek_unicodeÚUÚ	annotated)Údefault_sort_keyc               @   s®  e Zd ZdZdZdddddddœZd_dd„Ze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eZeZeZeZeZeZeZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z d+d,„ Z!d-d.„ Z"d/d0„ Z#d`d1d2„Z$d3d4„ Z%d5d6„ Z&d7d8„ Z'd9d:„ Z(d;d<„ Z)dad=d>„Z*dbd?d@„Z+dAdB„ Z,dCdD„ Z-e-Z.dEdF„ Z/dGdH„ Z0dIdJ„ Z1dKdL„ Z2dMdN„ Z3dOdP„ Z4dQdR„ Z5dSdT„ Z6dUdV„ Z7dWdX„ Z8dYdZ„ Z9e9Z:e9Z;d[d\„ Z<d]d^„ Z=d_d`„ Z>dadb„ Z?dcdd„ Z@dedf„ ZAdgdh„ ZBdidj„ ZCdkdl„ ZDdmdn„ ZEdodp„ ZFdqdr„ ZGdsdt„ ZHdudv„ ZIeZJdwdx„ ZKdydz„ ZLd{d|„ ZMeMZNeMZOeMZPeMZQd}d~„ ZRdd€„ ZSdd‚„ ZTdƒd„„ ZUd…d†„ ZVd‡dˆ„ ZWd‰dŠ„ ZXdcdŒd„ZYedŽd„ ƒZZdd‘„ 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µ„ Zmddd¶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Ý„ ZdÞdß„ Z‚dàdá„ Zƒdâdã„ Z„dädå„ Z…dædç„ Z†e†Z‡e†Zˆe†Z‰dddèdédê„ fdëdì„ZŠdídî„ Z‹dïdð„ ZŒdñdò„ Zdódô„ ZŽdõdö„ Zd÷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*„ Z©d+d,„ Zªd-d.„ Z«d/d0„ Z¬d1d2„ Z­d3d4„ Z®d5d6„ Z¯d7d8„ Z°d9d:„ Z±d;d<„ Z²d=d>„ Z³d?d@„ Z´dAdB„ ZµdCdD„ Z¶dEdF„ Z·dGdH„ Z¸dIdJ„ Z¹dKdL„ ZºdMdN„ Z»dOdP„ Z¼dQdR„ Z½dSdT„ Z¾dUdV„ Z¿dWdX„ ZÀdYdZ„ ZÁd[d\„ ZÂd]d^„ ZÃdS (e  ÚPrettyPrinterz?Printer, which converts an expression into 2D ASCII-art figure.Z_prettyNÚautoT)ÚorderÚ	full_precÚuse_unicodeÚ	wrap_lineÚnum_columnsÚuse_unicode_sqrt_charc             C   s   t  | |¡ dd„ | _d S )Nc             S   s   t t| ƒƒS )N)r   r   )Úx© r1   ú;lib/python3.7/site-packages/sympy/printing/pretty/pretty.pyÚ<lambda>4   s    z(PrettyPrinter.__init__.<locals>.<lambda>)r   Ú__init__ÚemptyPrinter)ÚselfÚsettingsr1   r1   r2   r4   2   s    zPrettyPrinter.__init__c             C   s   | j d rdS tƒ S d S )Nr,   T)Ú	_settingsr"   )r6   r1   r1   r2   Ú_use_unicode6   s    
zPrettyPrinter._use_unicodec             C   s   |   |¡jf | jŽS )N)Ú_printZrenderr8   )r6   Úexprr1   r1   r2   Údoprint=   s    zPrettyPrinter.doprintc             C   s   |S )Nr1   )r6   Úer1   r1   r2   Ú_print_stringPictA   s    zPrettyPrinter._print_stringPictc             C   s   t |ƒS )N)r   )r6   r=   r1   r1   r2   Ú_print_basestringD   s    zPrettyPrinter._print_basestringc             C   s&   t |  |j¡ ¡ Ž }t | d¡Ž }|S )NZatan2)r   Ú
_print_seqÚargsÚparensÚleft)r6   r=   Úpformr1   r1   r2   Ú_print_atan2G   s    zPrettyPrinter._print_atan2c             C   s   t |jƒ}t|ƒS )N)r    Únamer   )r6   r=   Zsymbr1   r1   r2   Ú_print_SymbolL   s    
zPrettyPrinter._print_Symbolc             C   s,   | j d }|dkr| jdk}tt||dƒS )Nr+   r)   r   )r+   )r8   Z_print_levelr   r   )r6   r=   r+   r1   r1   r2   Ú_print_FloatQ   s    

zPrettyPrinter._print_Floatc             C   s~   |j }|j}|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| d¡Ž }t| |  |¡¡Ž }t| d¡Ž }|S )Nú(ú)zMULTIPLICATION SIGN)Ú_expr1Ú_expr2r:   r   rC   Úrightr%   )r6   r=   Úvec1Úvec2rD   r1   r1   r2   Ú_print_CrossY   s    
zPrettyPrinter._print_Crossc             C   s`   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| |  tdƒ¡¡Ž }|S )NrI   rJ   zMULTIPLICATION SIGNÚNABLA)Ú_exprr:   r   rC   rM   r%   )r6   r=   ÚvecrD   r1   r1   r2   Ú_print_Curle   s    
zPrettyPrinter._print_Curlc             C   s`   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| |  tdƒ¡¡Ž }|S )NrI   rJ   zDOT OPERATORrQ   )rR   r:   r   rC   rM   r%   )r6   r=   rS   rD   r1   r1   r2   Ú_print_Divergencen   s    
zPrettyPrinter._print_Divergencec             C   s~   |j }|j}|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| d¡Ž }t| |  |¡¡Ž }t| d¡Ž }|S )NrI   rJ   zDOT OPERATOR)rK   rL   r:   r   rC   rM   r%   )r6   r=   rN   rO   rD   r1   r1   r2   Ú
_print_Dotw   s    
zPrettyPrinter._print_Dotc             C   s`   |j }|  |¡}t| d¡Ž }t| d¡Ž }t| |  tdƒ¡¡Ž }t| |  tdƒ¡¡Ž }|S )NrI   rJ   zDOT OPERATORrQ   )rR   r:   r   rC   rM   r%   )r6   r=   ÚfuncrD   r1   r1   r2   Ú_print_Gradientƒ   s    
zPrettyPrinter._print_Gradientc             C   s0   yt t|jjƒƒS  tk
r*   |  |¡S X d S )N)r   r!   Ú	__class__Ú__name__ÚKeyErrorr5   )r6   r=   r1   r1   r2   Ú_print_AtomŒ   s    zPrettyPrinter._print_Atomc             C   s*   | j r|  |¡S ddg}|  |dd¡S d S )Nz-ooZoorI   rJ   )r9   r\   r@   )r6   r=   Zinf_listr1   r1   r2   Ú_print_Realsœ   s    
zPrettyPrinter._print_Realsc             C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S )Nr   ú!)rA   r:   Ú
is_IntegerÚis_nonnegativeÚ	is_Symbolr   rB   rC   )r6   r=   r0   rD   r1   r1   r2   Ú_print_subfactorial£   s    

z!PrettyPrinter._print_subfactorialc             C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S )Nr   r^   )rA   r:   r_   r`   ra   r   rB   rM   )r6   r=   r0   rD   r1   r1   r2   Ú_print_factorial¬   s    

zPrettyPrinter._print_factorialc             C   sD   |j d }|  |¡}|jr |js2|js2t| ¡ Ž }t| d¡Ž }|S )Nr   z!!)rA   r:   r_   r`   ra   r   rB   rM   )r6   r=   r0   rD   r1   r1   r2   Ú_print_factorial2µ   s    

zPrettyPrinter._print_factorial2c             C   st   |j \}}|  |¡}|  |¡}dt| ¡ | ¡ ƒ }t| |¡Ž }t| |¡Ž }t| dd¡Ž }|jd d |_|S )Nú rI   rJ   r   é   )rA   r:   ÚmaxÚwidthr   ÚaboverB   Úbaseline)r6   r=   ÚnÚkZn_pformZk_pformÚbarrD   r1   r1   r2   Ú_print_binomial¾   s    


zPrettyPrinter._print_binomialc             C   sD   t dt|jƒ d ƒ}|  |j¡}|  |j¡}t t |||¡Ž }|S )Nre   )r   r   Zrel_opr:   ÚlhsÚrhsr   Únext)r6   r=   ÚopÚlÚrrD   r1   r1   r2   Ú_print_RelationalÎ   s
    zPrettyPrinter._print_Relationalc             C   sŽ   ddl m}m} | jr€|jd }|  |¡}t||ƒrB| j|ddS t||ƒrZ| j|ddS |j	rr|j
srt| ¡ Ž }t| d¡Ž S |  |¡S d S )Nr   )Ú
EquivalentÚImpliesu   â‡Ž)Úaltcharu   â†›õ   Â¬)Úsympyrv   rw   r9   rA   r:   Ú
isinstanceÚ_print_EquivalentÚ_print_ImpliesÚ
is_BooleanÚis_Notr   rB   rC   Ú_print_Function)r6   r=   rv   rw   ÚargrD   r1   r1   r2   Ú
_print_NotÖ   s    



zPrettyPrinter._print_Notc             C   sž   |j }|rt|j td}|d }|  |¡}|jrB|jsBt| ¡ Ž }xV|dd … D ]F}|  |¡}|jrv|jsvt| ¡ Ž }t| d| ¡Ž }t| |¡Ž }qPW |S )N)Úkeyr   r   z %s )	rA   Úsortedr'   r:   r~   r   r   rB   rM   )r6   r=   ÚcharÚsortrA   r   rD   Ú	pform_argr1   r1   r2   Z__print_Booleanç   s    

zPrettyPrinter.__print_Booleanc             C   s$   | j r|  |d¡S | j|ddS d S )Nu   âˆ§T)r†   )r9   Ú_PrettyPrinter__print_Booleanr€   )r6   r=   r1   r1   r2   Ú
_print_Andü   s    zPrettyPrinter._print_Andc             C   s$   | j r|  |d¡S | j|ddS d S )Nu   âˆ¨T)r†   )r9   rˆ   r€   )r6   r=   r1   r1   r2   Ú	_print_Or  s    zPrettyPrinter._print_Orc             C   s$   | j r|  |d¡S | j|ddS d S )Nu   âŠ»T)r†   )r9   rˆ   r€   )r6   r=   r1   r1   r2   Ú
_print_Xor  s    zPrettyPrinter._print_Xorc             C   s$   | j r|  |d¡S | j|ddS d S )Nu   âŠ¼T)r†   )r9   rˆ   r€   )r6   r=   r1   r1   r2   Ú_print_Nand  s    zPrettyPrinter._print_Nandc             C   s$   | j r|  |d¡S | j|ddS d S )Nu   âŠ½T)r†   )r9   rˆ   r€   )r6   r=   r1   r1   r2   Ú
_print_Nor  s    zPrettyPrinter._print_Norc             C   s(   | j r| j||pdddS |  |¡S d S )Nu   â†’F)r†   )r9   rˆ   r€   )r6   r=   rx   r1   r1   r2   r}     s    zPrettyPrinter._print_Impliesc             C   s(   | j r|  ||pd¡S | j|ddS d S )Nu   â‡”T)r†   )r9   rˆ   r€   )r6   r=   rx   r1   r1   r2   r|      s    zPrettyPrinter._print_Equivalentc             C   s(   |   |jd ¡}t| td| ¡ ƒ¡Ž S )Nr   Ú_)r:   rA   r   ri   r   rh   )r6   r=   rD   r1   r1   r2   Ú_print_conjugate&  s    zPrettyPrinter._print_conjugatec             C   s$   |   |jd ¡}t| dd¡Ž }|S )Nr   ú|)r:   rA   r   rB   )r6   r=   rD   r1   r1   r2   Ú
_print_Abs*  s    zPrettyPrinter._print_Absc             C   s8   | j r*|  |jd ¡}t| dd¡Ž }|S |  |¡S d S )Nr   ZlfloorZrfloor)r9   r:   rA   r   rB   r€   )r6   r=   rD   r1   r1   r2   Ú_print_floor0  s
    zPrettyPrinter._print_floorc             C   s8   | j r*|  |jd ¡}t| dd¡Ž }|S |  |¡S d S )Nr   ZlceilZrceil)r9   r:   rA   r   rB   r€   )r6   r=   rD   r1   r1   r2   Ú_print_ceiling8  s
    zPrettyPrinter._print_ceilingc             C   s  t |ƒr| jrtdƒ}nd}d }d}x~t|jƒD ]p\}}|  |¡}t| |¡Ž }||7 }|jrf|dkrv|tt	|ƒƒ }|d kr„|}q0t| 
d¡Ž }t| 
|¡Ž }q0W t|  |j¡ ¡ dtjiŽ}	t|ƒ}
|dkdkrä|
tt	|ƒƒ }
t|
 tj|¡Ž }
|
jd |
_tt |
|	¡Ž }
tj|
_|
S )NzPARTIAL DIFFERENTIALÚdr   r   re   ÚbindingF)r   r9   r%   ÚreversedZvariable_countr:   r   rC   r_   ÚstrrM   r;   rB   ÚFUNCÚbelowr   ZLINErj   rq   ÚMULr•   )r6   ZderivZderiv_symbolr0   Zcount_total_derivÚsymZnumÚsZdsÚfrD   r1   r1   r2   Ú_print_Derivative@  s2    

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ƒ}x4|D ],}|  t
t|ƒƒ dd¡¡}t| |¡Ž }qnW |S )Nr   )ÚPermutationÚCycleÚ r   ú,)Z sympy.combinatorics.permutationsrŸ   r    r   r   rB   ÚlistZcyclic_formr:   Úsizer—   ÚtupleÚreplacerM   )r6   ZdcrŸ   r    ZcycZdc_listÚirs   r1   r1   r2   Ú_print_Cyclee  s    

zPrettyPrinter._print_Cyclec             C   sÂ   |   |jjd ¡}t| d¡Ž }t| |   |jd ¡¡Ž }t| d¡Ž }t| |   |jd ¡¡Ž }t| ¡ Ž }|   |jjd ¡}t| d¡Ž }t| |¡Ž }t| ¡ Ž }tdƒ}t| |¡Ž }|S )Nr   z, r   ZPDF)r:   ÚpdfrA   r   rM   ÚdomainrB   )r6   r©   Úlimr   rD   r1   r1   r2   Ú
_print_PDFx  s    zPrettyPrinter._print_PDFc             C   sì  |j }|  |¡}|jr"t| ¡ Ž }|}xD|jD ]:}|  |d ¡}| ¡ dkrXt| ¡ Ž }t| d|¡Ž }q.W d}d }xZ|jD ]N}	|	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r2|  |	d ¡}|  |	d ¡}|r€tdd| ¡  ƒ}t| d	| ¡Ž }tdd
| ¡  ƒ}t| d	| ¡Ž }t| |¡Ž }t| |¡Ž }|s°t| d	¡Ž }|rÀ|}d}q~t| |¡Ž }q~W t| |¡Ž }tj|_|S )Nr   r   z dTrf   Úintr¡   é   re   é   F)Úfunctionr:   Úis_Addr   rB   Úlimitsrh   rM   Úheightr9   r   rj   Úlenrg   rC   ri   r™   rš   r•   )r6   Zintegralr   ÚprettyFr   r0   Z	prettyArgZ	firsttermrœ   r«   ÚhÚHÚ
ascii_modeZvintrD   ZprettyAZprettyBZspcr1   r1   r2   Ú_print_Integral‰  s\    

zPrettyPrinter._print_Integralc             C   s¦  |j }|  |¡}tddƒ}tddƒ}tddƒ}| jrBtddƒ}d}| ¡ }d}d}	d}
x2|jD ]&}|d d	 d
 d }g }| |||  | ¡ x*t|d ƒD ]}| |d|  | ¡ q¢W tdƒ}t	|j
|Ž Ž }|  |d ¡}|  t|d |d ƒ¡}t|	| ¡ ƒ}	|r| ¡ }
t	| |¡Ž }t	| |¡Ž }|rDd|_d}| ¡ }tdƒ}t	|j
dg|d  Ž Ž }t	| |¡Ž }t	| |¡Ž }q`W |	|
d  |_t	j|_|S )NrŽ   r   r   ú-u   â”¬Tr   rf   é   r®   re   r¡   F)Útermr:   r   r9   r³   r²   Úappendr   r   r   Ústackr   rg   ri   r™   rj   rM   rš   r•   )r6   r;   rW   Zpretty_funcZhorizontal_chrZ
corner_chrZvertical_chrZfunc_heightÚfirstÚ	max_upperÚsign_heightr«   rh   Z
sign_linesr§   Zpretty_signZpretty_upperZpretty_lowerr³   Zpaddingr1   r1   r2   Ú_print_ProductÕ  sL    




zPrettyPrinter._print_Productc             C   sÒ  | j  }dd„ }|j}|  |¡}|jr2t| ¡ Ž }| ¡ d }d}d}d}	xj|jD ]^}
t|
ƒdkrŽ|  |
d ¡}|  t	|
d |
d ƒ¡}nTt|
ƒdkr¾|  d¡}|  t	|
d |
d ƒ¡}n$t|
ƒdkrâ|  d¡}|  |
d ¡}t
|| ¡ ƒ}||| ¡ | ¡ |ƒ\}}}}tdƒ}t|j|Ž Ž }|r2| ¡ }	t| |¡Ž }t| |¡Ž }|r|| j|| ¡ d |j  | 8  _d	}tdƒ}t|jd
g| Ž Ž }t| |¡Ž }t| |¡Ž }qTW ||	d  |_tj|_|S )Nc          	   S   sä  ddd„}t | dƒ}|d }|d }| d }g }	|r|	 d| d ¡ |	 dd|d   ¡ x0td|ƒD ]"}
|	 d	d|
 d||
  f ¡ qjW |r²|	 d
d| d||  f ¡ x4ttd|ƒƒD ]"}
|	 dd|
 d||
  f ¡ qÂW |	 dd|d   d ¡ ||| |	dfS || }|| }tddƒ}|	 d| ¡ x<td|ƒD ].}
|	 dd|
 |d d||
 d  f ¡ qFW x@ttd|ƒƒD ].}
|	 dd|
 |d d||
 d  f ¡ qˆW |	 |d | ¡ ||d|  |	|fS d S )Nú<^>c             S   s„   |rt | ƒ|kr| S |t | ƒ }|dks<|dks<|tdƒkrH| d|  S |d }d| }|dkrld| |  S ||  d|t |ƒ   S )Nz<^>ú<re   rf   ú>)r´   r£   )rœ   ZwidZhowZneedZhalfZleadr1   r1   r2   Úadjust  s    z6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjustrf   r   rŽ   re   z\%s`z%s\%sz%s)%sz%s/%sú/r¢   r   Úsumr¯   z%s%s%sé   )NrÃ   )rg   r½   r   r–   r   )Z	hrequiredÚlowerÚupperZ	use_asciirÆ   r¶   r”   ÚwZmoreÚlinesr§   Zvsumr1   r1   r2   Úasum  s6    

""
..z&PrettyPrinter._print_Sum.<locals>.asumrf   Tr   r®   r   r¡   Fre   )r9   r°   r:   r±   r   rB   r³   r²   r´   r   rg   rh   r   r¾   ri   r™   rj   rM   rš   r•   )r6   r;   r¸   rÎ   r   rµ   r·   r¿   rÀ   rÁ   r«   ZprettyUpperZprettyLowerr”   r¶   ZslinesZ
adjustmentZ
prettySignZpadr1   r1   r2   Ú
_print_Sum  sP    *


zPrettyPrinter._print_Sumc       	      C   sú   |j \}}}}|  |¡}t|ƒtd kr8t| dd¡Ž }tdƒ}|  |¡}| jr`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ºd
nd}t| |  |¡¡Ž }t| |¡Ž }t| |¡dtjiŽ}|S )Nr   rI   rJ   r«   u   â”€â†’z->z+-r¡   ú+u   âºu   â»r•   )rA   r:   r   r   r   rB   r9   rM   r—   r   ÚInfinityÚNegativeInfinityr™   rš   )	r6   rs   r=   ÚzZz0ÚdirÚEZLimZLimArgr1   r1   r2   Ú_print_Limitq  s$    

zPrettyPrinter._print_Limitc                s´  |}i ‰ x@t |jƒD ]2}x,t |jƒD ]‰|  ||ˆf ¡ˆ |ˆf< q$W qW d}d}dg|j }x:t |jƒD ],‰t‡ ‡fdd„t |jƒD ƒpŽdgƒ|ˆ< qjW d}xþt |jƒD ]ð}d}x¦t |jƒD ]˜‰ˆ |ˆf }	|	 ¡ |ˆ ksât‚|ˆ |	 ¡  }
|
d }|
| }t|	 d| ¡Ž }	t|	 	d| ¡Ž }	|dkr6|	}q¾t| d| ¡Ž }t| |	¡Ž }q¾W |dkrj|}qªx t |ƒD ]}t| 
d¡Ž }qtW t| 
|¡Ž }qªW |dkr°td	ƒ}|S )
zL
        This method factors out what is essentially grid printing.
        rf   r   éÿÿÿÿc                s   g | ]}ˆ |ˆf   ¡ ‘qS r1   )rh   )Ú.0r§   )ÚMsÚjr1   r2   ú
<listcomp>Ÿ  s    z8PrettyPrinter._print_matrix_contents.<locals>.<listcomp>r   Nre   r¡   )r   ZrowsZcolsr:   rg   rh   ÚAssertionErrorr   rM   rC   r™   )r6   r=   ÚMr§   ÚhsepÚvsepÚmaxwÚDÚD_rowrœ   ÚwdeltaÚwleftÚwrightrŽ   r1   )rÙ   rÚ   r2   Ú_print_matrix_contents  sF    ",


z$PrettyPrinter._print_matrix_contentsc             C   s,   |   |¡}| ¡ d |_t| dd¡Ž }|S )Nrf   ú[ú])ræ   r³   rj   r   rB   )r6   r=   rá   r1   r1   r2   Ú_print_MatrixBaseÒ  s    
zPrettyPrinter._print_MatrixBasec             C   s   d}| j |jd d |dd„ dS )Nu   âŠ—c             S   s   t | ƒtd kS )Nr   )r   r   )r0   r1   r1   r2   r3   Þ  s    z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>)Úparenthesize)r@   rA   )r6   r;   Zcircled_timesr1   r1   r2   Ú_print_TensorProductÚ  s    z"PrettyPrinter._print_TensorProductc             C   s   d}| j |jd d |dd„ dS )Nu   âˆ§c             S   s   t | ƒtd kS )Nr   )r   r   )r0   r1   r1   r2   r3   ä  s    z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>)rê   )r@   rA   )r6   r;   Zwedge_symbolr1   r1   r2   Ú_print_WedgeProductà  s    z!PrettyPrinter._print_WedgeProductc             C   s<   |   |j¡}t| dd¡Ž }| ¡ d |_t| d¡Ž }|S )NrI   rJ   rf   Ztr)r:   r   r   rB   r³   rj   rC   )r6   r=   rá   r1   r1   r2   Ú_print_Traceæ  s
    zPrettyPrinter._print_Tracec             C   s¾   ddl m} ddlm} t|j|ƒrV|jjrV|jjrV|  	||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   )ÚMatrixSymbol)r   z_%d%dz, )Ú	delimiterrç   rè   )rC   rM   r•   )Úsympy.matricesrî   rz   r   r{   Úparentr§   Z	is_numberrÚ   r:   rF   r   rB   r@   r   rq   r˜   Ú
prettyFuncÚ
prettyArgs)r6   r;   rî   r   rò   ZprettyIndicesrD   r1   r1   r2   Ú_print_MatrixElementî  s    z"PrettyPrinter._print_MatrixElementc                sl   ˆ   |j¡}‡ fdd„}ˆ j||jƒ||jƒfddjdddd }tt ||¡d	tj	iŽ}||_
||_|S )
Nc                sZ   t | ƒ} | d dkr| d= | d | d d kr4| d= | d dkrHd| d< tˆ j| ddŽ S )Nrf   r   r   r¡   ú:)rï   )r£   r   r@   )r0   )r6   r1   r2   Úppslice  s    z1PrettyPrinter._print_MatrixSlice.<locals>.ppslicez, )rï   rç   rè   )rC   rM   r   r•   )r:   rñ   r@   ZrowsliceZcolslicerB   r   r   rq   r˜   rò   ró   )r6   Úmrò   rö   ró   rD   r1   )r6   r2   Ú_print_MatrixSlice  s    	 z PrettyPrinter._print_MatrixSlicec             C   s@   |   |j¡}ddlm} t|j|ƒs0t| ¡ Ž }|tdƒ }|S )Nr   )rî   ÚT)r:   r   rð   rî   r{   r   rB   )r6   r;   rD   rî   r1   r1   r2   Ú_print_Transpose  s    zPrettyPrinter._print_Transposec             C   sT   |   |j¡}| jrtdƒ}ntdƒ}ddlm} t|j|ƒsHt| ¡ Ž }|| }|S )Nu   â€ rÐ   r   )rî   )r:   r   r9   r   rð   rî   r{   rB   )r6   r;   rD   Zdagrî   r1   r1   r2   Ú_print_Adjoint$  s    
zPrettyPrinter._print_Adjointc             C   s(   |j jdkr|  |j d ¡S |  |j ¡S )N)r   r   )r   r   )ZblocksÚshaper:   )r6   ÚBr1   r1   r2   Ú_print_BlockMatrix0  s    z PrettyPrinter._print_BlockMatrixc             C   s„   d }xz|j D ]p}|  |¡}|d kr(|}q| ¡ d }tt|ƒƒr\tt |d¡Ž }|  |¡}ntt |d¡Ž }tt ||¡Ž }qW |S )Nr   re   z + )rA   r:   Zas_coeff_mmulr   r   r   r   rq   )r6   r;   rœ   ÚitemrD   Úcoeffr1   r1   r2   Ú_print_MatAdd5  s    
zPrettyPrinter._print_MatAddc             C   s‚   t |jƒ}ddlm}m}m} xXt|ƒD ]L\}}t||||fƒrft|jƒdkrft	|  
|¡ ¡ Ž ||< q(|  
|¡||< q(W t	j|Ž S )Nr   )r   ÚMatAddÚHadamardProductr   )r£   rA   rz   r   r  r  Ú	enumerater{   r´   r   r:   rB   Ú__mul__)r6   r;   rA   r   r  r  r§   Úar1   r1   r2   Ú_print_MatMulF  s    
zPrettyPrinter._print_MatMulc             C   s8   t |jƒ}x"t|ƒD ]\}}|  |¡||< qW tj|Ž S )N)r£   rA   r  r:   r   r  )r6   r;   rA   r§   r  r1   r1   r2   Ú_print_DotProductR  s    
zPrettyPrinter._print_DotProductc             C   sD   |   |j¡}ddlm} t|j|ƒs0t| ¡ Ž }||   |j¡ }|S )Nr   )rî   )r:   Úbaserð   rî   r{   r   rB   Úexp)r6   r;   rD   rî   r1   r1   r2   Ú_print_MatPowY  s    zPrettyPrinter._print_MatPowc                sD   ddl m‰ m‰ | jr tdƒ}nd}| j|jd d |‡ ‡fdd„dS )Nr   )r  ÚMatMulZRingz.*c                s   t | ˆ ˆfƒS )N)r{   )r0   )r  r  r1   r2   r3   h  s    z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>)rê   )rz   r  r  r9   r!   r@   rA   )r6   r;   Údelimr1   )r  r  r2   Ú_print_HadamardProducta  s    
z$PrettyPrinter._print_HadamardProductc                s@   ddl m‰ m‰ | jrd}nd}| j|jd d |‡ ‡fdd„dS )Nr   )r  r  u    â¨‚ z x c                s   t | ˆ ˆfƒS )N)r{   )r0   )r  r  r1   r2   r3   q  s    z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>)rê   )rz   r  r  r9   r@   rA   )r6   r;   r  r1   )r  r  r2   Ú_print_KroneckerProductj  s    z%PrettyPrinter._print_KroneckerProductc             C   s"   |   |jj¡}t| dd¡Ž }|S )Nrç   rè   )r:   Úlamdar;   r   rB   )r6   ÚXrá   r1   r1   r2   Ú_print_FunctionMatrixu  s    z#PrettyPrinter._print_FunctionMatrixc             C   s  ddl m} | jstdƒ‚||jkr0t|jjƒS g }g }t||ƒrP| ¡  	¡ }n
d|fg}x¦|D ]ž\}}t
|j 	¡ ƒ}|jdd„ d xv|D ]n\}	}
|
dkr®| d|	j ¡ n@|
d	krÈ| d
|	j ¡ n&|  |
¡ ¡ d }| |d |	j ¡ | |	j¡ qŒW q`W |d  d¡r(|d dd … |d< n$|d  d¡rL|d dd … |d< g }dg}g }xêt|ƒD ]Þ\}}| d¡ d|krd|}| || d¡}d|krüx˜tt|ƒƒD ]J}d||< || dkr¬|d |… d d ||  ||d d …  }P q¬W n<d|kr$d||< | dd||  ¡}n| dd||  ¡}|||< qdW dd„ |D ƒ}tdd„ |D ƒƒ}d|kr¶xDt|ƒD ]8\}}t|ƒdkrz| ddt|d ƒ ¡ d||< qzW xFt|ƒD ]8\}}| t|||  ƒ¡ xt|ƒD ]}|d t|ƒkr |t|ƒkr>| dt|d d	… ƒdt|ƒd    ¡ ||| krn|||   |||  d 7  < n0||  || d|d	 t|| ƒ d   7  < nT|t|ƒkrØ| dt|d d	… ƒdt|ƒd    ¡ ||  d|d	 d  7  < qîW qÂW td dd„ |D ƒ¡ƒS )Nr   )ÚVectorz:ASCII pretty printing of BasisDependent is not implementedc             S   s   | d   ¡ S )Nr   )Ú__str__)r0   r1   r1   r2   r3   Š  s    z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>)rƒ   r   r¡   r×   z(-1) re   z + r®   Ú
u   âŽŸu   âŽ u   âŽ  u   âŽžu   âŽž c             S   s   g | ]}|  d ¡‘qS )r  )Úsplit)rØ   r0   r1   r1   r2   rÛ   À  s    z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>c             S   s   g | ]}t |ƒ‘qS r1   )r´   )rØ   r0   r1   r1   r2   rÛ   Á  s    c             S   s   g | ]}|d d… ‘qS )Néýÿÿÿr1   )rØ   rœ   r1   r1   r2   rÛ   Ü  s    )Zsympy.vectorr  r9   ÚNotImplementedErrorZzeror   Z_pretty_formr{   ZseparateÚitemsr£   Ú
componentsr†   r½   r:   rB   Ú
startswithr  r¦   r   r´   rg   ÚinsertrÈ   Újoin)r6   r;   r  Zo1Zvectstrsr  ÚsystemZvectZ
inneritemsrl   ÚvZarg_strZlengthsZstrsÚflagr§   ZpartstrZtempstrZparenZ
n_newlinesÚpartsrÚ   r1   r1   r2   Ú_print_BasisDependentz  s’    





,


"(z#PrettyPrinter._print_BasisDependentc       	      C   sb  ddl m} | ¡ dkr&|  |d ¡S g gdd„ t| ¡ ƒD ƒ }dd„ |jD ƒ}xÜtj|Ž D ]Î}|d  || ¡ d}x²t| ¡ d	 ddƒD ]š}t	||d	  ƒ|j| k r®P |rÊ||  ||d	  ¡ nL||  |||d	  ƒ¡ t	||d	  ƒd	kr||| d ggƒ|| d< | }g ||d	 < qŽW q^W |d d }| ¡ d
 d	krX||gƒ}|  |¡S )Nr   )ÚImmutableMatrixr1   c             S   s   g | ]}g ‘qS r1   r1   )rØ   r§   r1   r1   r2   rÛ   ä  s    z2PrettyPrinter._print_NDimArray.<locals>.<listcomp>c             S   s   g | ]}t t|ƒƒ‘qS r1   )r£   r   )rØ   r§   r1   r1   r2   rÛ   å  s    r×   Tr   rf   )
rz   r#  Úrankr:   r   rü   Ú	itertoolsÚproductr½   r´   )	r6   r;   r#  Z	level_strZshape_rangesZouter_iZevenZback_outer_iZout_exprr1   r1   r2   Ú_print_NDimArrayÞ  s,    
zPrettyPrinter._print_NDimArrayc                sÂ  i ‰ xht |jƒD ]Z\}}|  |j¡ˆ |df< |jdkrHtdƒˆ |df< qttdƒ |  |j¡¡Ž ˆ |df< qW d}d}t|jƒ‰‡ ‡fdd„tdƒD ƒ}d }xútˆƒD ]î}d }	x¤tdƒD ]˜}
ˆ ||
f }| 	¡ ||
 ksÜt
‚||
 | 	¡  }|d }|| }t| d	| ¡Ž }t| d	| ¡Ž }|	d kr0|}	q¸t|	 d	| ¡Ž }	t|	 |¡Ž }	q¸W |d krd|	}q¦x t|ƒD ]}t| d	¡Ž }qnW t| |	¡Ž }q¦W t| d
d¡Ž }| ¡ d |_tj|_|S )Nr   TZ	otherwiser   zfor rf   c                s(   g | ] ‰ t ‡‡ fd d„tˆƒD ƒƒ‘qS )c                s   g | ]}ˆ |ˆf   ¡ ‘qS r1   )rh   )rØ   r§   )ÚPrÚ   r1   r2   rÛ     s    z=PrettyPrinter._print_Piecewise.<locals>.<listcomp>.<listcomp>)rg   r   )rØ   )r(  Úlen_args)rÚ   r2   rÛ     s   z2PrettyPrinter._print_Piecewise.<locals>.<listcomp>re   Ú{r¡   )r  rA   r:   r;   Úcondr   rM   r´   r   rh   rÜ   rC   r™   rB   r³   rj   ÚOPENr•   )r6   Zpexprrk   ZecrÞ   rß   rà   rá   r§   râ   rÚ   Úprã   rä   rå   rŽ   r1   )r(  r)  r2   Ú_print_Piecewise   sL    
$


zPrettyPrinter._print_Piecewisec             C   s   ddl m} |  | |¡¡S )Nr   )Ú	Piecewise)Z$sympy.functions.elementary.piecewiser/  r:   Zrewrite)r6   Ziter/  r1   r1   r2   Ú
_print_ITE8  s    zPrettyPrinter._print_ITEc             C   sT   d }x:|D ]2}|}|d kr |}q
t | d¡Ž }t | |¡Ž }q
W |d krPtdƒ}|S )Nz, re   )r   rM   r   )r6   r  rá   r  r-  r1   r1   r2   Ú_hprint_vec<  s    
zPrettyPrinter._hprint_vecc             C   s6   t | |¡Ž }ttd| ¡ ƒ|jd}t | ||¡Ž S )Nr   )rj   )r   rM   r   r   r³   rj   )r6   Úp1Úp2ZtmpÚsepr1   r1   r2   Ú_hprint_vseparatorK  s    z PrettyPrinter._hprint_vseparatorc                sŠ  ‡ fdd„|j D ƒ}‡ fdd„|jD ƒ}ˆ  |j¡}| ¡ d |_d }xD||gD ]8}ˆ  |¡}|d krl|}qPt| d¡Ž }t| |¡Ž }qPW | ¡ 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 r1   )r:   )rØ   r  )r6   r1   r2   rÛ   R  s    z.PrettyPrinter._print_hyper.<locals>.<listcomp>c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   Úb)r6   r1   r2   rÛ   S  s    rf   re   rI   rJ   r   ÚFr  )rj   )ÚapÚbqr:   Úargumentr³   rj   r1  r   r™   rC   rM   r5  rB   r&   r´   )r6   r=   r8  r9  r(  rá   r  râ   ri   r™   ÚszÚtr6  ÚaddÚimgr7  r1   )r6   r2   Ú_print_hyperP  s6    

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 }x|D ]}ˆ  || ¡||< qˆW x t	d
ƒD ]”}t
|d|f  ¡ |d|f  ¡ ƒ}xlt	d
ƒD ]`}|||f }	||	 ¡  d
 }
||
 |	 ¡  }t|	 d|
 ¡Ž }	t|	 d| ¡Ž }	|	|||f< qÜW q¬W 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 r1   )r:   )rØ   r  )r6   r1   r2   rÛ   „  s    z0PrettyPrinter._print_meijerg.<locals>.<listcomp>)r   r   c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   r  )r6   r1   r2   rÛ   …  s    )r   r   c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   r6  )r6   r1   r2   rÛ   †  s    )r   r   c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   r6  )r6   r1   r2   rÛ   ‡  s    )r   r   rf   r   r   re   z  rI   rJ   ÚGr  )rj   c             S   sZ   |   ¡ |  ¡  }|dkr | |fS |dkr>| t| d| ¡Ž fS t|  d|  ¡Ž |fS d S )Nr   re   )rh   r   rC   )r2  r3  Údiffr1   r1   r2   rÆ   ¹  s    z,PrettyPrinter._print_meijerg.<locals>.adjustz, )ZanZaotherZbmZbotherr:   r:  r³   rj   r1  r   rg   rh   r   rC   rM   r™   r5  rB   r&   r´   r8  r9  ) r6   r=   r  r(  ZvpÚidxr§   rà   rÚ   rœ   rC   rM   ZD1ZD2rá   ri   r™   r;  r<  r6  r=  r>  r7  ÚppZpqZpmZpnrÆ   ZpuZplZhtr-  r1   )r6   r2   Ú_print_meijerg€  sf    
"

zPrettyPrinter._print_meijergc             C   s"   t tddƒƒ}||  |jd ¡ S )NZExp1r=   r   )r   r!   r:   rA   )r6   r=   r	  r1   r1   r2   Ú_print_ExpBaseÔ  s    zPrettyPrinter._print_ExpBaseFc       	      C   sn   |j }|j}|rt|td}|s&|j}|  t|ƒ¡}t|  |¡ 	¡ Ž }tt
 ||¡dtjiŽ}||_||_|S )N)rƒ   r•   )rW   rA   r„   r'   rZ   r:   r   r   r@   rB   r   rq   r˜   rò   ró   )	r6   r=   r†   Ú	func_namerW   rA   rò   ró   rD   r1   r1   r2   r€   Ú  s    zPrettyPrinter._print_Functionc             C   sˆ   ddl m} ddlm}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|ddgiS )Nr   )ÚKroneckerDelta)ÚgammaÚ
lowergamma)Úbeta)Ú
DiracDelta)ÚChiÚdeltaÚGammarH  ÚBetarý   rL  )Z(sympy.functions.special.tensor_functionsrG  Z'sympy.functions.special.gamma_functionsrH  rI  Z&sympy.functions.special.beta_functionsrJ  Z'sympy.functions.special.delta_functionsrK  Z'sympy.functions.special.error_functionsrL  r$   )r6   rG  rH  rI  rJ  rK  rL  r1   r1   r2   Ú_special_function_classesñ  s    z'PrettyPrinter._special_function_classesc             C   sb   xN| j D ]D}t||ƒr|j|jkr| jr:t| j | d ƒS t| j | d ƒS qW |j}tt|ƒƒS )Nr   r   )rP  Ú
issubclassrZ   r9   r   r    )r6   r;   ÚclsrF  r1   r1   r2   Ú_print_FunctionClassÿ  s    z"PrettyPrinter._print_FunctionClassc             C   s
   |   |¡S )N)r5   )r6   r;   r1   r1   r2   Ú_print_GeometryEntity	  s    z#PrettyPrinter._print_GeometryEntityc             C   sb   |j \}}| jrd}nd}t|ƒdkr6|  |d ¡}n|  t|ƒ¡}tt |||  |¡¡ddiŽS )Nu    â†¦ z -> r   r   r•   rÉ   )rA   r9   r´   r:   r¥   r   r   rq   )r6   r=   Úvarsr;   ÚarrowZvar_formr1   r1   r2   Ú_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¡Ž }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 )N)r   ZZero)rØ   r-  r1   r1   r2   ú	<genexpr>  s    z-PrettyPrinter._print_Order.<locals>.<genexpr>r   z; r   u    â†’ z -> ÚO)r:   r;   ÚpointÚanyr´   Ú	variablesr   rM   r9   rB   rC   )r6   r;   rD   r1   r1   r2   Ú_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   rf   rÄ   rÅ   re   )r9   r:   rA   r   rM   r@   )r6   r=   Úshiftrk   r	  rD   r1   r1   r2   Ú_print_SingularityFunction/  s    z(PrettyPrinter._print_SingularityFunctionc             C   s    | j rtd nd}| j||dS )NrO  rý   )rF  )r9   r$   r€   )r6   r=   rF  r1   r1   r2   Ú_print_beta>  s    zPrettyPrinter._print_betac             C   s    | j rtd nd}| j||dS )NrN  )rF  )r9   r$   r€   )r6   r=   rF  r1   r1   r2   Ú_print_gammaB  s    zPrettyPrinter._print_gammac             C   s    | j rtd nd}| j||dS )NrN  )rF  )r9   r$   r€   )r6   r=   rF  r1   r1   r2   Ú_print_uppergammaF  s    zPrettyPrinter._print_uppergammac             C   s    | j rtd nd}| j||dS )NrH  rI  )rF  )r9   r$   r€   )r6   r=   rF  r1   r1   r2   Ú_print_lowergammaJ  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 )Nrf   rM  r   r   re   )
r9   r´   rA   r   r$   r:   rB   rM   rC   r€   )r6   r=   r  r6  ÚcrD   r1   r1   r2   Ú_print_DiracDeltaN  s     zPrettyPrinter._print_DiracDeltac             C   sJ   ddl m} |jd jr@| jr@|  |d|jd  ƒ|jd ƒ¡S |  |¡S )Nr   )ÚFunctionzE_%sr   )rz   rf  rA   r_   r9   r€   )r6   r=   rf  r1   r1   r2   Ú_print_expinta  s    "zPrettyPrinter._print_expintc             C   sD   t dƒ}t |  |j¡ ¡ Ž }t t ||¡dt jiŽ}||_||_|S )NrL  r•   )	r   r@   rA   rB   r   rq   r˜   rò   ró   )r6   r=   rò   ró   rD   r1   r1   r2   Ú
_print_Chig  s    zPrettyPrinter._print_Chic             C   s^   |   |jd ¡}t|jƒdkr$|}n|   |jd ¡}|  ||¡}t| ¡ Ž }t| d¡Ž }|S )Nr   r   rÕ   )r:   rA   r´   r5  r   rB   rC   )r6   r=   Úpforma0rD   Úpforma1r1   r1   r2   Ú_print_elliptic_ev  s    zPrettyPrinter._print_elliptic_ec             C   s.   |   |jd ¡}t| ¡ Ž }t| d¡Ž }|S )Nr   ÚK)r:   rA   r   rB   rC   )r6   r=   rD   r1   r1   r2   Ú_print_elliptic_k  s    zPrettyPrinter._print_elliptic_kc             C   sJ   |   |jd ¡}|   |jd ¡}|  ||¡}t| ¡ Ž }t| d¡Ž }|S )Nr   r   r7  )r:   rA   r5  r   rB   rC   )r6   r=   ri  rj  rD   r1   r1   r2   Ú_print_elliptic_f‡  s    zPrettyPrinter._print_elliptic_fc             C   s¤   | j rtd nd}|  |jd ¡}|  |jd ¡}t|jƒdkrN|  ||¡}n8|  |jd ¡}|  ||¡}t| d¡Ž }t| |¡Ž }t| ¡ Ž }t| |¡Ž }|S )NZPir   r   rf   z; )	r9   r$   r:   rA   r´   r5  r   rC   rB   )r6   r=   rF   ri  rj  rD   Zpforma2Zpformar1   r1   r2   Ú_print_elliptic_pi  s    z PrettyPrinter._print_elliptic_pic             C   s    | j rttdƒƒS |  tdƒ¡S )NZphiZGoldenRatio)r9   r   r    r:   r   )r6   r;   r1   r1   r2   Ú_print_GoldenRatiož  s    z PrettyPrinter._print_GoldenRatioc             C   s    | j rttdƒƒS |  tdƒ¡S )NrH  Z
EulerGamma)r9   r   r    r:   r   )r6   r;   r1   r1   r2   Ú_print_EulerGamma£  s    zPrettyPrinter._print_EulerGammac             C   s\   |   |jd ¡}|jtjkr(t| ¡ Ž }t| d¡Ž }t| |   |jd ¡¡Ž }tj|_|S )Nr   z mod r   )r:   rA   r•   r   rš   rB   rM   r,  )r6   r;   rD   r1   r1   r2   Ú
_print_Mod¨  s    zPrettyPrinter._print_Modc             C   sØ  | j dkrt|jƒ}n| j||d}g g  }}dd„ }xät|ƒD ]Ø\}}|jr”t|ƒr”|jdd\}	}
|  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@W |rÎd
}x,|D ] }|d k	r,| ¡ dkr,P q,W d}xx|D ]p}|| d }}|d	k r‚| d
 }}|r¦tt|jƒƒtt|jƒƒ }n
|  |¡}|rÀ|||ƒ}|||< qZW tj|Ž S )NÚnone)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º   z - r•   )r³   r•   r   ÚNEGZADDr   rB   rq   )rD   ÚindexZ	pform_negr-  r1   r1   r2   Úpretty_negative¸  s    z1PrettyPrinter._print_Add.<locals>.pretty_negativeF)ZrationalÚevaluater   r   T)r*   r£   rA   Z_as_ordered_termsr  Zis_Mulr   Zas_coeff_mulr:   r   r½   Úis_RationalÚqZ	is_NumberÚis_Relationalr   rB   r³   r—   r-  Ú__add__)r6   r;   r*   ZtermsZpformsÚindicesrv  r§   r¼   r   ÚotherrD   ZlargeÚnegativer1   r1   r2   Ú
_print_Add±  sH    







zPrettyPrinter._print_Addc                s¦  ddl m‰  g }g }| jdkr(| ¡ }n
t|jƒ}t|‡ fdd„d}x¶|D ]®}|jrª|jrª|j	j
rª|j	jrª|j	dkr’| t|j|j	 dd	¡ qú| t|j|j	 ƒ¡ qL|j
rð|tjk	rð|jd
krÔ| t|jƒ¡ |jd
krú| t|jƒ¡ qL| |¡ qLW ddlm}m}m}m}	 x²tdt|ƒƒD ] }
||
 jrDt|ƒd
ksn|
t|ƒd
 krŠt||
 ||||	fƒrŠt|  ||
 ¡ ¡ Ž ||
< n:||
 j r²t|  ||
 ¡ ¡ Ž ||
< n|  ||
 ¡||
< q&W xŠtdt|ƒƒD ]x}
||
 jrøt|ƒd
ks"|
t|ƒd
 kr>t||
 ||||	fƒr>t|  ||
 ¡ ¡ Ž ||
< n|  ||
 ¡||
< qÚW t|ƒdkrntj!|Ž S t|ƒdkrŽ| |  tj"¡¡ tj!|Ž tj!|Ž  S d S )Nr   )ÚQuantity)Úoldrs  c                s    t | ˆ ƒpt | tƒot | jˆ ƒS )N)r{   r
   r	  )r0   )r€  r1   r2   r3     s   
z*PrettyPrinter._print_Mul.<locals>.<lambda>)rƒ   r×   F)rw  r   )ÚIntegralr/  ÚProductÚSum)#Zsympy.physics.unitsr€  r*   Zas_ordered_factorsr£   rA   r„   Úis_commutativeZis_Powr
  rx  Zis_negativer½   r
   r	  r   rÑ   r-  r	   ry  rz   r‚  r/  rƒ  r„  r   r´   r±   r{   r   r:   rB   rz  r  ÚOne)r6   r&  r  r6  rA   rÿ   r‚  r/  rƒ  r„  r§   r1   )r€  r2   Ú
_print_Mulø  sH    






,,
zPrettyPrinter._print_Mulc                sh  |   |¡}| jd rV| jrV|tjkrV| ¡ dkrV| ¡ dksH|jrV|jrVt	| 
d¡Ž S tddƒ‰ tddƒˆ  }t|tƒrt|jƒ}|dkržd}nt|jd ƒ}| 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 )Nr/   r   u   âˆšrÇ   ú\Ú2r¡   r   rf   re   r  c             3   s*   | ]"}d ˆ| d  ˆ  d |  V  qdS )re   r   Nr1   )rØ   r§   )Ú_zZÚ
linelengthr1   r2   rX  O  s   z0PrettyPrinter._print_nth_root.<locals>.<genexpr>rŽ   )r:   r8   r9   r   ZHalfr³   rh   r_   r`   r   rC   r   r{   r	   r—   ry  rA   Úljustr´   r   rj   r  r   rM   rg   r   ri   )r6   r	  ZexptZbprettyZrootsignr
  Zdiagonalrœ   r1   )rŠ  r‹  r2   Ú_print_nth_root2  s:    





zPrettyPrinter._print_nth_rootc             C   sÌ   ddl m} | ¡ \}}|jr”|tjkr:tdƒ|  |¡ S ||ƒ\}}|tjkrh|j	rh|j
sh|  ||¡S |jr”|dk r”tdƒ|  t|| dd¡ S |jr¸t|  |¡ ¡ Ž  |  |¡¡S |  |¡|  |¡ S )Nr   )ÚfractionÚ1F)rw  )Zsympy.simplify.simplifyrŽ  Zas_base_expr…  r   ZNegativeOner   r:   r†  Zis_Atomr_   r  rx  r
   rz  rB   Ú__pow__)r6   ZpowerrŽ  r6  r=   rk   r”   r1   r1   r2   Ú
_print_Pow_  s    
zPrettyPrinter._print_Powc             C   s   |   |jd ¡S )Nr   )r:   rA   )r6   r;   r1   r1   r2   Ú_print_UnevaluatedExprp  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   r—   rt  Úabs)r6   r-  ry  r1   r1   r2   Z__print_numer_denoms  s    z!PrettyPrinter.__print_numer_denomc             C   s*   |   |j|j¡}|d k	r|S |  |¡S d S )N)Ú!_PrettyPrinter__print_numer_denomr-  ry  r5   )r6   r;   Úresultr1   r1   r2   Ú_print_Rational…  s    zPrettyPrinter._print_Rationalc             C   s*   |   |j|j¡}|d k	r|S |  |¡S d S )N)r•  Ú	numeratorÚdenominatorr5   )r6   r;   r–  r1   r1   r2   Ú_print_Fraction  s    zPrettyPrinter._print_Fractionc             C   st   t |jƒdkrDt|jƒsDddlm} |  ||jd t |jƒdd¡S | jrNdnd}| j|jd d d| d	d
„ dS d S )Nr   r   )r
   F)rw  õ   Ã—r0   z %s c             S   s   | j p| jp| jS )N)Úis_UnionÚis_IntersectionÚis_ProductSet)Úsetr1   r1   r2   r3   œ  s   z1PrettyPrinter._print_ProductSet.<locals>.<lambda>)rê   )r´   Úsetsr   rz   r
   r:   r9   r@   )r6   r-  r
   Z	prod_charr1   r1   r2   Ú_print_ProductSet•  s     zPrettyPrinter._print_ProductSetc             C   s   t |jtd}|  |ddd¡S )N)rƒ   r*  Ú}z, )r„   rA   r'   r@   )r6   rœ   r  r1   r1   r2   Ú_print_FiniteSetŸ  s    zPrettyPrinter._print_FiniteSetc             C   s„   | j rd}nd}|jjr6|j||d |j |d f}n>|jjsJt|ƒdkrlt|ƒ}t|ƒt|ƒ||d f}nt|ƒ}|  	|ddd¡S )Nu   â€¦z...r×   r¯   r*  r¢  z, )
r9   ÚstartZis_infiniteÚstepÚstopr´   Úiterrq   r¥   r@   )r6   rœ   ÚdotsÚprintsetÚitr1   r1   r2   Ú_print_Range£  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¢  rI   rç   rJ   rè   rf   )r¤  Úendr@   rA   Z	left_openZ
right_open)r6   r§   rC   rM   r1   r1   r2   Ú_print_Interval´  s    zPrettyPrinter._print_Intervalc             C   s    d}d}|   |jd d… ||¡S )NrÄ   rÅ   rf   )r@   rA   )r6   r§   rC   rM   r1   r1   r2   Ú_print_AccumulationBoundsÅ  s    z'PrettyPrinter._print_AccumulationBoundsc             C   s(   dt ddƒ }| j|jd d |dd„ dS )Nz %s ZIntersectionrk   c             S   s   | j p| jp| jS )N)rž  rœ  Úis_Complement)rŸ  r1   r1   r2   r3   Ð  s   z3PrettyPrinter._print_Intersection.<locals>.<lambda>)rê   )r!   r@   rA   )r6   Úurï   r1   r1   r2   Ú_print_IntersectionË  s    z!PrettyPrinter._print_Intersectionc             C   s(   dt ddƒ }| j|jd d |dd„ dS )Nz %s ZUnionr%   c             S   s   | j p| jp| jS )N)rž  r  r¯  )rŸ  r1   r1   r2   r3   Ø  s   z,PrettyPrinter._print_Union.<locals>.<lambda>)rê   )r!   r@   rA   )r6   r°  Zunion_delimiterr1   r1   r2   Ú_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 implementedz %s ZSymmetricDifference)r9   r  r!   r@   rA   )r6   r°  Zsym_delimeterr1   r1   r2   Ú_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 )N)rž  r  rœ  )rŸ  r1   r1   r2   r3   è  s   z1PrettyPrinter._print_Complement.<locals>.<lambda>)rê   )r@   rA   )r6   r°  rï   r1   r1   r2   Ú_print_Complementã  s    zPrettyPrinter._print_Complementc                sº   ˆj rd‰ nd‰ |jj}ˆ |jj¡}ˆ d¡}‡fdd„|jdd … D ƒ}t|ƒdkrzˆ |||d ˆ |d fdd	d
¡S t‡ fdd„t	||ƒD ƒƒ}ˆ ||f|d d…  dd	d
¡S d S )Nu   âˆŠÚinr   c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   r§   )r6   r1   r2   rÛ   ó  s    z1PrettyPrinter._print_ImageSet.<locals>.<listcomp>r   r   r*  r¢  re   c             3   s(   | ] \}}|ˆ |d fD ]
}|V  qqdS )r¢   Nr1   )rØ   ÚvarZsetvrÚ   )Úinnr1   r2   rX  ÷  s    z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>r×   )
r9   r  r\  r:   r;   rA   r´   r@   r¥   Úzip)r6   Útsr\  r;   rm   r   Zpargsr1   )r·  r6   r2   Ú_print_ImageSetë  s    
"zPrettyPrinter._print_ImageSetc          	   C   sÈ   | j rd}d}nd}d}|  t|jƒ¡}y|  |j ¡ ¡}W n4 tk
rp   |  |j¡}| j rl|  |dd¡}Y nX |  d¡}|jt	j
krž|  |||fdd	d
¡S |  |j¡}|  |||||||fdd	d
¡S )Nu   âˆŠu   âˆ§rµ  ÚandrI   rJ   r   r*  r¢  re   )r9   r@   r   r›   r:   Z	conditionÚas_exprÚAttributeErrorZbase_setr   ZUniversalSet)r6   r¹  r·  Z_andr\  r+  rm   r	  r1   r1   r2   Ú_print_ConditionSetú  s$    
z!PrettyPrinter._print_ConditionSetc             C   sX   | j rd}nd}|  |j¡}|  |j¡}|  d¡}|  |j¡}|  |||||fddd¡S )Nu   âˆŠrµ  r   r*  r¢  re   )r9   r@   r\  r:   r;   r   )r6   r¹  r·  r\  r;   rm   Zprodsetsr1   r1   r2   Ú_print_ComplexRegion  s    
z"PrettyPrinter._print_ComplexRegionc             C   sH   |j \}}| jr8d}tt |  |¡||  |¡¡ddiŽS tt|ƒƒS d S )Nu    âˆˆ r•   rÉ   )rA   r9   r   r   rq   r:   r   )r6   r=   r¶  rŸ  Zelr1   r1   r2   Ú_print_Contains!  s    
zPrettyPrinter._print_Containsc             C   s(   | j rd}nd}|  | ¡ ¡|  |¡ S )Nu   â€¦z...)r9   r  Útruncater:   )r6   rœ   r¨  r1   r1   r2   Ú_print_FourierSeries*  s    z"PrettyPrinter._print_FourierSeriesc             C   s   |   |j¡S )N)r  Zinfinite)r6   rœ   r1   r1   r2   Ú_print_FormalPowerSeries1  s    z&PrettyPrinter._print_FormalPowerSeriesc             C   s0   t |  |j¡ ¡ Ž }|  tdƒ¡}t | |¡Ž S )NZSetExpr)r   r:   rŸ  rB   r   rM   )r6   ZseZ
pretty_setÚpretty_namer1   r1   r2   Ú_print_SetExpr4  s    zPrettyPrinter._print_SetExprc             C   sž   | j rd}nd}|jtjkrV|j}|| |d ¡| |d ¡| |d ¡| |¡f}n>|jtjksl|jdkrŒ|d d… }| |¡ t	|ƒ}nt	|ƒ}|  
|¡S )Nu   â€¦z...r®   rf   r   r¯   )r9   r¤  r   rÒ   r¦  r   rÑ   Úlengthr½   r¥   Ú_print_list)r6   rœ   r¨  r¦  r©  r1   r1   r2   Ú_print_SeqFormula9  s    

zPrettyPrinter._print_SeqFormulaz, c             C   s   dS )NFr1   )r0   r1   r1   r2   r3   P  s    zPrettyPrinter.<lambda>c       	      C   s†   d }xX|D ]P}|   |¡}||ƒr,t| ¡ Ž }|d kr:|}q
tt ||¡Ž }tt ||¡Ž }q
W |d krntdƒ}t|j||ddŽ }|S )Nr¡   T)Úifascii_nougly)r:   r   rB   r   rq   )	r6   ÚseqrC   rM   rï   rê   rœ   rÿ   rD   r1   r1   r2   r@   O  s    

zPrettyPrinter._print_seqc             C   sT   d }x6|D ].}|d kr|}q
t | |¡Ž }t | |¡Ž }q
W |d krLt dƒS |S d S )Nr¡   )r   rM   )r6   rï   rA   rD   r   r1   r1   r2   r  e  s    
zPrettyPrinter.joinc             C   s   |   |dd¡S )Nrç   rè   )r@   )r6   rs   r1   r1   r2   rÇ  t  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¢   rI   rJ   T)rÉ  )r´   r   r   rq   r:   rB   r@   )r6   r<  Zptupler1   r1   r2   Ú_print_tuplew  s    zPrettyPrinter._print_tuplec             C   s
   |   |¡S )N)rË  )r6   r;   r1   r1   r2   Ú_print_Tuple~  s    zPrettyPrinter._print_Tuplec             C   sd   t | ¡ td}g }x@|D ]8}|  |¡}|  || ¡}tt |d|¡Ž }| |¡ qW |  |dd¡S )N)rƒ   z: r*  r¢  )	r„   Úkeysr'   r:   r   r   rq   r½   r@   )r6   r”   rÍ  r  rl   rl  ÚVrœ   r1   r1   r2   Ú_print_dict  s    

zPrettyPrinter._print_dictc             C   s
   |   |¡S )N)rÏ  )r6   r”   r1   r1   r2   Ú_print_DictŽ  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¢  T)rÉ  )r   r„   r'   r@   rB   )r6   rœ   r  Úprettyr1   r1   r2   Ú
_print_set‘  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¢  T)rÉ  rI   rJ   )	r   r„   r'   r@   rB   r   rq   ÚtyperZ   )r6   rœ   r  rÑ  r1   r1   r2   Ú_print_frozenset™  s    
zPrettyPrinter._print_frozensetc             C   s   t t|ƒƒS )N)r   r   )r6   Úringr1   r1   r2   Ú_print_PolyRing£  s    zPrettyPrinter._print_PolyRingc             C   s   t t|ƒƒS )N)r   r   )r6   Úfieldr1   r1   r2   Ú_print_FracField¦  s    zPrettyPrinter._print_FracFieldc             C   s   t t|ƒƒS )N)r   r—   )r6   Zelmr1   r1   r2   Ú_print_FreeGroupElement©  s    z%PrettyPrinter._print_FreeGroupElementc             C   s   t t|ƒƒS )N)r   r   )r6   Zpolyr1   r1   r2   Ú_print_PolyElement¬  s    z PrettyPrinter._print_PolyElementc             C   s   t t|ƒƒS )N)r   r   )r6   Zfracr1   r1   r2   Ú_print_FracElement¯  s    z PrettyPrinter._print_FracElementc             C   s*   |j r|  | ¡  ¡ ¡S |  | ¡ ¡S d S )N)Z
is_aliasedr:   Zas_polyr¼  )r6   r;   r1   r1   r2   Ú_print_AlgebraicNumber²  s    z$PrettyPrinter._print_AlgebraicNumberc             C   s:   | j |jdd|jg}t|  |¡ ¡ Ž }t| d¡Ž }|S )NÚlex)r*   ZCRootOf)r  r;   ru  r   r@   rB   rC   )r6   r;   rA   rD   r1   r1   r2   Ú_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)r  r;   Zfunr   ZIdentityFunctionr½   r:   r   r@   rB   rC   )r6   r;   rA   rD   r1   r1   r2   Ú_print_RootSum¾  s    zPrettyPrinter._print_RootSumc             C   s"   | j rd}nd}tt||j ƒƒS )Nu   â„¤_%dzGF(%d))r9   r   r    Úmod)r6   r;   Zformr1   r1   r2   Ú_print_FiniteFieldÉ  s    z PrettyPrinter._print_FiniteFieldc             C   s   | j rtdƒS tdƒS d S )Nu   â„¤ZZZ)r9   r   )r6   r;   r1   r1   r2   Ú_print_IntegerRingÑ  s    z PrettyPrinter._print_IntegerRingc             C   s   | j rtdƒS tdƒS d S )Nu   â„šZQQ)r9   r   )r6   r;   r1   r1   r2   Ú_print_RationalField×  s    z"PrettyPrinter._print_RationalFieldc             C   s>   | j rd}nd}|jrt|ƒS |  t|d t|jƒ ƒ¡S d S )Nu   â„ZRRrŽ   )r9   Úhas_default_precisionr   r:   r    r—   Ú	precision)r6   rª   Úprefixr1   r1   r2   Ú_print_RealFieldÝ  s    zPrettyPrinter._print_RealFieldc             C   s>   | j rd}nd}|jrt|ƒS |  t|d t|jƒ ƒ¡S d S )Nu   â„‚ZCCrŽ   )r9   rä  r   r:   r    r—   rå  )r6   rª   ræ  r1   r1   r2   Ú_print_ComplexFieldè  s    z!PrettyPrinter._print_ComplexFieldc             C   s^   t |jƒ}|jjs6ttdƒ |  |j¡¡Ž }| |¡ |  |dd¡}t| 	|  |j
¡¡Ž }|S )Nzorder=rç   rè   )r£   Úsymbolsr*   Ú
is_defaultr   rM   r:   r½   r@   rC   rª   )r6   r;   rA   r*   rD   r1   r1   r2   Ú_print_PolynomialRingó  s    

z#PrettyPrinter._print_PolynomialRingc             C   s^   t |jƒ}|jjs6ttdƒ |  |j¡¡Ž }| |¡ |  |dd¡}t| 	|  |j
¡¡Ž }|S )Nzorder=rI   rJ   )r£   ré  r*   rê  r   rM   r:   r½   r@   rC   rª   )r6   r;   rA   r*   rD   r1   r1   r2   Ú_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 )Nzorder=rç   rè   )	ré  r—   r*   Zdefault_orderr@   r   rC   r:   rª   )r6   r;   ÚgrD   r1   r1   r2   Ú_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*   )r  r*   )rØ   r   )Úbasisr6   r1   r2   rÛ     s   z6PrettyPrinter._print_GroebnerBasis.<locals>.<listcomp>z, rç   rè   )rC   rM   c                s   g | ]}ˆ   |¡‘qS r1   )r:   )rØ   Úgen)r6   r1   r2   rÛ     s    zdomain=zorder=)Úexprsr   r  rB   ÚgensrM   r:   rª   r*   rC   rY   rZ   )r6   rï  rñ  rò  rª   r*   rD   r1   )rï  r6   r2   Ú_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   rf   r   )rj   c          	      s8   g | ]0}ˆ j ˆ  |d  ¡tdƒˆ  |d ¡fdd‘qS )r   z==r   r¡   )rï   )r@   r:   r   )rØ   r  )r6   r1   r2   rÛ   2  s   z-PrettyPrinter._print_Subs.<locals>.<listcomp>)r:   r;   r   rB   r³   r   r   rj   rM   r@   r¸  r\  rZ  )r6   r=   rD   r¶   Zrvertr6  r1   )r6   r2   Ú_print_Subs'  s    

zPrettyPrinter._print_Subsc       	      C   s    t dƒ}|  |jd ¡}t d| ¡  ƒ}t | |¡Ž }t | |¡Ž }t|jƒdkrV|S |j\}}|}t |  |g¡ ¡ Ž }t t	 
||¡dt jiŽ}||_||_|S )NrÕ   r   re   r   r•   )r   r:   rA   rh   r™   rM   r´   r@   rB   r   rq   r˜   rò   ró   )	r6   r=   rD   r   r‡   r÷   r0   rò   ró   r1   r1   r2   Ú_print_euler8  s    
zPrettyPrinter._print_eulerc             C   sH   t dƒ}|  |jd ¡}t d| ¡  ƒ}t | |¡Ž }t | |¡Ž }|S )NÚCr   re   )r   r:   rA   rh   r™   rM   )r6   r=   rD   r   r‡   r1   r1   r2   Ú_print_catalanJ  s    zPrettyPrinter._print_catalanc             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   rM  r”   re   r•   )r:   rA   r   rM   r9   r   r    rC   rh   r™   ZPOW)r6   r=   rD   r  r6  ÚtopZbotr1   r1   r2   Ú_print_KroneckerDeltaR  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 )Úhasattrr:   r   rM   rú  ré  rŸ  )r6   r”   rD   r1   r1   r2   Ú_print_RandomDomain_  s    





z!PrettyPrinter._print_RandomDomainc             C   sD   y |j d k	r|  |j  |¡¡S W n tk
r4   Y nX |  t|ƒ¡S )N)rÕ  r:   Zto_sympyr   Úrepr)r6   r-  r1   r1   r2   Ú
_print_DMPq  s    
zPrettyPrinter._print_DMPc             C   s
   |   |¡S )N)rþ  )r6   r-  r1   r1   r2   Ú
_print_DMFz  s    zPrettyPrinter._print_DMFc             C   s   |   t|jƒ¡S )N)r:   r    rF   )r6   Úobjectr1   r1   r2   Ú_print_Object}  s    zPrettyPrinter._print_Objectc             C   s8   t dƒ}|  |j¡}|  |j¡}| ||¡d }t|ƒS )Nz-->r   )r   r:   rª   ÚcodomainrM   r   )r6   ÚmorphismrV  rª   r  Útailr1   r1   r2   Ú_print_Morphism€  s
    zPrettyPrinter._print_Morphismc             C   s.   |   t|jƒ¡}|  |¡}t| d|¡d ƒS )Nrõ   r   )r:   r    rF   r  r   rM   )r6   r  rÄ  Úpretty_morphismr1   r1   r2   Ú_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  )r6   r  r  r1   r1   r2   Ú_print_IdentityMorphismŽ  s    z%PrettyPrinter._print_IdentityMorphismc             C   sT   t dƒ}dd„ |jD ƒ}| ¡  | |¡d }|  |¡}|  |¡}t| |¡d ƒS )NÚ.c             S   s   g | ]}t |jƒ‘qS r1   )r    rF   )rØ   Z	componentr1   r1   r2   rÛ   ™  s   z:PrettyPrinter._print_CompositeMorphism.<locals>.<listcomp>rõ   r   )r   r  Úreverser  r:   r  r   rM   )r6   r  ZcircleZcomponent_names_listZcomponent_namesrÄ  r  r1   r1   r2   Ú_print_CompositeMorphism“  s    


z&PrettyPrinter._print_CompositeMorphismc             C   s   |   t|jƒ¡S )N)r:   r    rF   )r6   Úcategoryr1   r1   r2   Ú_print_Category¢  s    zPrettyPrinter._print_Categoryc             C   sX   |j s|  tj¡S |  |j ¡}|jrLdtdƒ }|  |j¡d }| ||¡}t|d ƒS )Nz %s z==>r   )Zpremisesr:   r   ZEmptySetZconclusionsr   rM   r   )r6   ZdiagramZpretty_resultZresults_arrowZpretty_conclusionsr1   r1   r2   Ú_print_Diagram¥  s    zPrettyPrinter._print_Diagramc                s@   ddl m} ddlm‰  |‡ ‡fdd„tˆjƒD ƒƒ}|  |¡S )Nr   )ÚMatrix)r   c                s(   g | ] ‰ ‡‡‡ fd d„t ˆjƒD ƒ‘qS )c                s,   g | ]$}ˆˆ|f r ˆˆ|f nˆ d ƒ‘qS )re   r1   )rØ   rÚ   )r   Úgridr§   r1   r2   rÛ   ·  s   z?PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>.<listcomp>)r   rh   )rØ   )r   r  )r§   r2   rÛ   ·  s   z4PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>)rð   r  rz   r   r   r³   ræ   )r6   r  r  Úmatrixr1   )r   r  r2   Ú_print_DiagramGrid´  s
    z PrettyPrinter._print_DiagramGridc             C   s   |   |dd¡S )Nrç   rè   )r@   )r6   r÷   r1   r1   r2   Ú_print_FreeModuleElement¼  s    z&PrettyPrinter._print_FreeModuleElementc             C   s   |   |jdd¡S )NrÄ   rÅ   )r@   rò  )r6   rÝ   r1   r1   r2   Ú_print_SubModuleÀ  s    zPrettyPrinter._print_SubModulec             C   s   |   |j¡|   |j¡ S )N)r:   rÕ  r$  )r6   rÝ   r1   r1   r2   Ú_print_FreeModuleÃ  s    zPrettyPrinter._print_FreeModulec             C   s   |   dd„ |jjD ƒdd¡S )Nc             S   s   g | ]
\}|‘qS r1   r1   )rØ   r0   r1   r1   r2   rÛ   Ç  s    z?PrettyPrinter._print_ModuleImplementedIdeal.<locals>.<listcomp>rÄ   rÅ   )r@   Ú_modulerò  )r6   rÝ   r1   r1   r2   Ú_print_ModuleImplementedIdealÆ  s    z+PrettyPrinter._print_ModuleImplementedIdealc             C   s   |   |j¡|   |j¡ S )N)r:   rÕ  Ú
base_ideal)r6   ÚRr1   r1   r2   Ú_print_QuotientRingÉ  s    z!PrettyPrinter._print_QuotientRingc             C   s   |   |j¡|   |jj¡ S )N)r:   ÚdatarÕ  r  )r6   r  r1   r1   r2   Ú_print_QuotientRingElementÌ  s    z(PrettyPrinter._print_QuotientRingElementc             C   s   |   |j¡|   |jj¡ S )N)r:   r  ÚmoduleÚkilled_module)r6   r÷   r1   r1   r2   Ú_print_QuotientModuleElementÏ  s    z*PrettyPrinter._print_QuotientModuleElementc             C   s   |   |j¡|   |j¡ S )N)r:   r	  r   )r6   rÝ   r1   r1   r2   Ú_print_QuotientModuleÒ  s    z#PrettyPrinter._print_QuotientModulec          	   C   sN   |   | ¡ ¡}| ¡ d |_t| d|   |j¡dtddƒ |   |j¡¡Ž }|S )Nrf   z : z %s> rº   )	r:   Z_sympy_matrixr³   rj   r   rM   rª   r   r  )r6   r¶   r  rD   r1   r1   r2   Ú_print_MatrixHomomorphismÕ  s
    z'PrettyPrinter._print_MatrixHomomorphismc             C   s   |j j|j }|  t|ƒ¡S )N)Ú
_coord_sysÚ_namesÚ_indexr:   r    )r6   r×  Ústringr1   r1   r2   Ú_print_BaseScalarFieldÜ  s    z$PrettyPrinter._print_BaseScalarFieldc             C   s(   t dƒd |jj|j  }|  t|ƒ¡S )NzPARTIAL DIFFERENTIALrŽ   )r%   r$  r%  r&  r:   r    )r6   r×  rœ   r1   r1   r2   Ú_print_BaseVectorFieldà  s    z$PrettyPrinter._print_BaseVectorFieldc             C   sX   |j }t|dƒr0|jj|j }|  dt|ƒ ¡S |  |¡}t| ¡ Ž }t| 	d¡Ž S d S )Nr$  u   â…† u   â…†)
Z_form_fieldrû  r$  r%  r&  r:   r    r   rB   rC   )r6   rA  r×  r'  rD   r1   r1   r2   Ú_print_Differentialä  s    

z!PrettyPrinter._print_Differentialc             C   s8   |   |jd ¡}t| d|jj ¡Ž }t| d¡Ž }|S )Nr   z%s(rJ   )r:   rA   r   rC   rY   rZ   rM   )r6   r-  rD   r1   r1   r2   Ú	_print_Trî  s    zPrettyPrinter._print_Trc             C   sH   |   |jd ¡}t| ¡ Ž }| jr6t| td ¡Ž }nt| d¡Ž }|S )Nr   Znu)r:   rA   r   rB   r9   rC   r$   )r6   r=   rD   r1   r1   r2   Ú_print_primenuõ  s    zPrettyPrinter._print_primenuc             C   sH   |   |jd ¡}t| ¡ Ž }| jr6t| td ¡Ž }nt| d¡Ž }|S )Nr   ZOmega)r:   rA   r   rB   r9   rC   r$   )r6   r=   rD   r1   r1   r2   Ú_print_primeomegaþ  s    zPrettyPrinter._print_primeomegac             C   s(   |j j dkr|  d¡}|S |  |¡S d S )NZdegreeõ   Â°)rF   r:   r5   )r6   r=   rD   r1   r1   r2   Ú_print_Quantity	  s    
zPrettyPrinter._print_Quantityc             C   sD   t dt|jƒ d ƒ}|  |j¡}|  |j¡}t t |||¡Ž }|S )Nre   )r   r   rr   r:   ro   rp   r   rq   )r6   r=   rr   rs   rt   rD   r1   r1   r2   Ú_print_AssignmentBase	  s
    z#PrettyPrinter._print_AssignmentBase)N)T)N)N)FN)N)ÄrZ   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodZ_default_settingsr4   Úpropertyr9   r<   r>   r?   rE   rG   Z_print_RandomSymbolrH   rP   rT   rU   rV   rX   r\   Z_print_InfinityZ_print_NegativeInfinityZ_print_EmptySetZ_print_NaturalsZ_print_Naturals0Z_print_IntegersZ_print_Complexesr]   rb   rc   rd   rn   ru   r‚   rˆ   r‰   rŠ   r‹   rŒ   r   r}   r|   r   r‘   Z_print_Determinantr’   r“   rž   r¨   r¬   r¹   rÂ   rÏ   rÖ   ræ   ré   Z_print_ImmutableMatrixZ_print_Matrixrë   rì   rí   rô   rø   rú   rû   rþ   r  r  r  r  r  r  Z_print_MatrixSymbolr  r"  r'  Z_print_ImmutableDenseNDimArrayZ_print_ImmutableSparseNDimArrayZ_print_MutableDenseNDimArrayZ_print_MutableSparseNDimArrayr.  r0  r1  r5  r?  rD  rE  r€   rP  rS  rT  rW  r]  r_  r`  ra  rb  rc  re  rg  rh  rk  rm  rn  ro  rp  rq  rr  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_SeqPerZ_print_SeqAddZ_print_SeqMulr@   r  rÇ  rË  rÌ  rÏ  rÐ  rÒ  rÔ  rÖ  rØ  rÙ  rÚ  rÛ  rÜ  rÞ  rß  rá  râ  rã  rç  rè  rë  rì  rî  ró  rô  rõ  r÷  rù  rü  rþ  rÿ  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r!  r"  r#  r(  r)  r*  r+  r,  r-  r/  r0  r1   r1   r1   r2   r(   %   sŒ  						%L7eE		d80T
	G:-
	

			
		r(   c             K   s4   t |ƒ}|jd }t|ƒ}z
| | ¡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"   r<   )r;   r7   rC  r,   Zuflagr1   r1   r2   rÑ  	  s    

rÑ  Tr)   c          
   C   s   t t| ||||||dƒ 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).

    )r-   r.   r,   r+   r*   r/   N)ÚprintrÑ  )r;   r-   r.   r,   r+   r*   r/   r1   r1   r2   Úpretty_print*	  s    !
r6  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)Úpydocr7  Zlocaler8  rÑ  Úencode)r;   r7   r7  r8  r1   r1   r2   Úpager_printR	  s
    r;  )TNNr)   NT)BZ
__future__r   r   r%  Z
sympy.corer   Zsympy.core.containersr   Zsympy.core.functionr   Zsympy.core.modr   Zsympy.core.mulr   Zsympy.core.numbersr	   Zsympy.core.powerr
   Zsympy.core.relationalr   Zsympy.core.symbolr   Zsympy.printing.precedencer   r   r   Zsympy.utilitiesr   Zsympy.utilities.iterablesr   Zsympy.core.sympifyr   Zsympy.core.compatibilityr   Zsympy.core.addr   Zsympy.printing.printerr   Zsympy.printing.strr   Zsympy.printing.conventionsr   Z
stringpictr   r   Zpretty_symbologyr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Zpprint_use_unicodeZpprint_try_use_unicoder(   rÑ  r6  Zpprintr;  r1   r1   r1   r2   Ú<module>   s`   8                   
$