o
    o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dd	d
Zdd Zedd Z	dd Z
dd Zdd Zdd Zdd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(dd:d;Z)d<d= Z*d>d? Z+d@dA Z,dBdC Z-dDdE Z.ddFdGZ/ddHdIZ0dJdK Z1dLdM Z2dNdO Z3dPdQ Z4dRdS Z5dTdU Z6dVdW Z7dXdY Z8dZd[ Z9d\d] Z:d^d_ Z;d`da Z<dbdc Z=ddfdgZ>dhdi Z?djdk Z@dldm ZAdndo ZBdpdq ZCdrds ZDdtdu ZEdvdw ZFdxdy ZGdzd{ ZHd|d} ZId~d ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]i fddZ^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd ZgdddZhdd Zidd Zjdd ZkddĄ Zl		ƐdddȄZmddʄ Zndd̄ Zodd΄ ZpddЄ Zq			ƐdddӄZrddՄ Zseddׄ Ztddل Zuddۄ Zvdd݄ Zwdd߄ Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd 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 ZeZeZeZd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 ZeZ֐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߄ ZdS (  PrettyPrinterz?Printer, which converts an expression into 2D ASCII-art figure._prettyNautoTplaini)
order	full_precuse_unicode	wrap_linenum_columnsuse_unicode_sqrt_charroot_notationmat_symbol_styleimaginary_unitperm_cyclicc                 C   sV   t | | t| jd tstd| jd | jd dvr)td| jd d S )Nr5   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 rA   p/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/printing/pretty/pretty.pyr8   /   s   zPrettyPrinter.__init__c                 C      t t|S Nr   r;   r?   exprrA   rA   rB   emptyPrinter7      zPrettyPrinter.emptyPrinterc                 C   s   | j d rdS t S )Nr/   T)r:   r    r?   rA   rA   rB   _use_unicode:   s   
zPrettyPrinter._use_unicodec                 C   s   |  |jdi | jS )NrA   )_printrenderr:   rF   rA   rA   rB   doprintA      zPrettyPrinter.doprintc                 C   s   |S rD   rA   r?   erA   rA   rB   _print_stringPictE   s   zPrettyPrinter._print_stringPictc                 C   s   t |S rD   )r   rP   rA   rA   rB   _print_basestringH   s   zPrettyPrinter._print_basestringc                 C   s&   t | |j  }t |d }|S )Natan2)r   
_print_seqargsparensleftr?   rQ   pformrA   rA   rB   _print_atan2K   s   zPrettyPrinter._print_atan2Fc                 C   s   t |j|}t|S rD   )r   namer   )r?   rQ   	bold_namesymbrA   rA   rB   _print_SymbolP   s   zPrettyPrinter._print_Symbolc                 C   s   |  || jd dkS )Nr4   bold)r_   r:   rP   rA   rA   rB   _print_MatrixSymbolT   s   z!PrettyPrinter._print_MatrixSymbolc                 C   s,   | j d }|dkr| jdk}tt||dS )Nr.   r*      )r.   )r:   _print_levelr   r   )r?   rQ   r.   rA   rA   rB   _print_FloatW   s   

zPrettyPrinter._print_Floatc                 C   ~   |j }|j}| |}t|d }t|d }t|| td }t|d }t|| | }t|d }|S )N()MULTIPLICATION SIGN_expr1_expr2rL   r   rX   rightr"   r?   rQ   vec1vec2rZ   rA   rA   rB   _print_Cross_      
zPrettyPrinter._print_Crossc                 C   `   |j }| |}t|d }t|d }t|| td }t|| td }|S )Nrf   rg   rh   NABLA_exprrL   r   rX   rl   r"   r?   rQ   vecrZ   rA   rA   rB   _print_Curlk      
zPrettyPrinter._print_Curlc                 C   rr   )Nrf   rg   DOT OPERATORrs   rt   rv   rA   rA   rB   _print_Divergencet   ry   zPrettyPrinter._print_Divergencec                 C   re   )Nrf   rg   rz   ri   rm   rA   rA   rB   
_print_Dot}   rq   zPrettyPrinter._print_Dotc                 C   H   |j }| |}t|d }t|d }t|| td }|S )Nrf   rg   rs   rt   r?   rQ   funcrZ   rA   rA   rB   _print_Gradient      
zPrettyPrinter._print_Gradientc                 C   r}   )Nrf   rg   	INCREMENTrt   r~   rA   rA   rB   _print_Laplacian   r   zPrettyPrinter._print_Laplacianc                 C   s4   zt t|jj| dW S  ty   | | Y S w )N)printer)r   r   	__class____name__KeyErrorrH   rP   rA   rA   rB   _print_Atom   s
   zPrettyPrinter._print_Atomc                 C   s&   | j r| |S ddg}| |ddS )Nz-oooorf   rg   )rK   r   rU   )r?   rQ   inf_listrA   rA   rB   _print_Reals   s   
zPrettyPrinter._print_Realsc                 C   D   |j d }| |}|jr|js|jst|  }t|d }|S Nr   !)rV   rL   
is_Integeris_nonnegative	is_Symbolr   rW   rX   r?   rQ   xrZ   rA   rA   rB   _print_subfactorial      

z!PrettyPrinter._print_subfactorialc                 C   r   r   rV   rL   r   r   r   r   rW   rl   r   rA   rA   rB   _print_factorial   r   zPrettyPrinter._print_factorialc                 C   r   )Nr   z!!r   r   rA   rA   rB   _print_factorial2   r   zPrettyPrinter._print_factorial2c                 C   st   |j \}}| |}| |}dt| |  }t|| }t|| }t|dd }|jd d |_|S )N rf   rg   rb      )rV   rL   maxwidthr   aboverW   baseline)r?   rQ   nkn_pformk_pformbarrZ   rA   rA   rB   _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   rel_oprL   lhsrhsr   nextOPENr?   rQ   oplrrZ   rA   rA   rB   _print_Relational   s
   zPrettyPrinter._print_Relationalc                 C   s   ddl m}m} | jrF|jd }| |}t||r#| j|tddS t||r1| j	|tddS |j
r=|js=t|  }t|td S | |S )Nr   )
EquivalentImpliesNotEquiv)altcharNotArrowNot)sympy.logic.boolalgr   r   rK   rV   rL   r9   _print_Equivalentr   _print_Implies
is_Booleanis_Notr   rW   rX   _print_Function)r?   rQ   r   r   argrZ   rA   rA   rB   
_print_Not   s   




zPrettyPrinter._print_Notc                 C   s   |j }|rt|j td}|d }| |}|jr!|js!t|  }|dd  D ]#}| |}|jr:|js:t|  }t|d|  }t|| }q'|S )Nkeyr   rb    %s )	rV   sortedr   rL   r   r   r   rW   rl   )r?   rQ   charsortrV   r   rZ   	pform_argrA   rA   rB   __print_Boolean   s   

zPrettyPrinter.__print_Booleanc                 C   $   | j r| |tdS | j|ddS )NAndTr   rK   _PrettyPrinter__print_Booleanr   r   rP   rA   rA   rB   
_print_And     zPrettyPrinter._print_Andc                 C   r   )NOrTr   r   rP   rA   rA   rB   	_print_Or  r   zPrettyPrinter._print_Orc                 C   r   )NXorTr   r   rP   rA   rA   rB   
_print_Xor  r   zPrettyPrinter._print_Xorc                 C   r   )NNandTr   r   rP   rA   rA   rB   _print_Nand  r   zPrettyPrinter._print_Nandc                 C   r   )NNorTr   r   rP   rA   rA   rB   
_print_Nor$  r   zPrettyPrinter._print_Norc                 C   s(   | j r| j||ptdddS | |S )NArrowFr   r   r?   rQ   r   rA   rA   rB   r   *  s   
zPrettyPrinter._print_Impliesc                 C   s(   | j r| ||ptdS | j|ddS )NEquivTr   r   r   rA   rA   rB   r   0  s   zPrettyPrinter._print_Equivalentc                 C   s(   |  |jd }t|td|  S )Nr   _)rL   rV   r   r   r   r   rY   rA   rA   rB   _print_conjugate6  s   zPrettyPrinter._print_conjugatec                 C   s$   |  |jd }t|dd }|S )Nr   |)rL   rV   r   rW   rY   rA   rA   rB   
_print_Abs:  s   zPrettyPrinter._print_Absc                 C   4   | j r| |jd }t|dd }|S | |S )Nr   lfloorrfloorrK   rL   rV   r   rW   r   rY   rA   rA   rB   _print_floor?  
   
zPrettyPrinter._print_floorc                 C   r   )Nr   lceilrceilr   rY   rA   rA   rB   _print_ceilingG  r   zPrettyPrinter._print_ceilingc                 C   s  t |jr| jrtd}nd}d }d}t|jD ]8\}}| |}t|| }||7 }|j	r3|dkr;|tt
| }|d u rB|}qt|d }t|| }qt| |j dtji}	t|}
|dkdkrq|
tt
| }
t|
tj| }
|
jd |
_tt|
|	 }
tj|
_|
S )NPARTIAL DIFFERENTIALdr   rb   r   r   F)r   rG   rK   r"   reversedvariable_countrL   r   rX   r   r;   rl   rW   FUNCbelowr   LINEr   r   MULr   )r?   derivderiv_symbolr   count_total_derivsymnumsdsfrZ   rA   rA   rB   _print_DerivativeO  s8   

zPrettyPrinter._print_Derivativec                 C   s   ddl m}m} || krtd}t|  S || j}|g kr0| |j	d }t|  S td}|D ]}| t
t|dd}t|| }q6|S )Nr   PermutationCycle rb   ,) sympy.combinatorics.permutationsr   r   r   r   rW   listcyclic_formrL   sizer;   tuplereplacerl   )r?   dcr   r   cycdc_listr,   r   rA   rA   rB   _print_Cyclet  s   
zPrettyPrinter._print_Cyclec                 C   s   ddl m}m} |j}|d urtd| ddddd n| jd	d
}|r,| ||S |j}t	t
t|}td}d
}t||D ](\}	}
| |	}| |
}t|| }|r\d}nt|d }t|| }qBt|  S )Nr   r   zw
                Setting Permutation.print_cyclic is deprecated. Instead use
                init_printing(perm_cyclic=z).
                z1.6z#deprecated-permutation-print_cyclic   )deprecated_since_versionactive_deprecations_target
stacklevelr6   Tr   Fr   )r   r   r   print_cyclicr   r:   getr  
array_formr   rangelenr   ziprL   r   r   rX   rl   rW   )r?   rG   r   r   r6   lowerupperresultfirstur   s1s2colrA   rA   rB   _print_Permutation  s6   


z PrettyPrinter._print_Permutationc                 C   s  |j }| |}|jrt|  }|}|jD ]}| |d }| dkr+t|  }t|d| }qd}d }|jD ]}	| }
|
d }| j	 }|rO|d7 }t
d|}t|}|j||
 d  |_t|	dkrt|	dkrytd}| |	d }t|	dkr| |	d }| |	d }|rtdd|  }t|d	|  }tdd
|  }t|d	|  }t|| }t|| }|st|d	 }|r|}d}q;t|| }q;t|| }tj|_|S )Nr   rb   z dTr   intr      r      F)functionrL   is_Addr   rW   limitsr   rl   heightrK   r   r   r  r   rX   r   r   r   r   )r?   integralr   prettyFr   r   	prettyArg	firsttermr   limhH
ascii_modevintrZ   prettyAprettyBspcrA   rA   rB   _print_Integral  s\   



zPrettyPrinter._print_Integralc                 C   s  |j }| |}tdd}tdd}tdd}| jr$tdd}tdd}| }d}d}	d}
|jD ]}| |\}}|d d	 d
 d }|| ||d   | | g}t|d D ]}|d| d|d   | d  qYt	d}t
|j|  }t|	| }	|r| }
t
|| }t
|| }|rd|_d}| }t	d}t
|jdg|d    }t
|| }t
|| }q1|	|
d  |_t
j|_|S )Nr   rb   r   -UpTackTr   r      r  r   r   F)termrL   r   rK   r  r  '_PrettyPrinter__print_SumProduct_Limitsr  appendr   r   stackr   r   r   r   rl   r   r   )r?   rG   r   pretty_funchorizontal_chr
corner_chrvertical_chrfunc_heightr  	max_uppersign_heightr#  pretty_lowerpretty_upperr   
sign_linesr   pretty_signr  paddingrA   rA   rB   _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   rL   r   r   )r   r   r   r   r   rZ   rJ   rA   rB   print_start.  s
   

z<PrettyPrinter.__print_SumProduct_Limits.<locals>.print_startr   r   rb   rL   )r?   r#  rA  prettyUpperprettyLowerrA   rJ   rB   __print_SumProduct_Limits-  s   z'PrettyPrinter.__print_SumProduct_Limitsc                 C   sX  | j  }dd }|j}| |}|jrt|  }| d }d}d}d}	|jD ]n}
| |
\}}t	|| }|||
 |
 |\}}}}td}t|j|  }|rX| }	t|| }t|| }|rz| j|| d |j  8  _d}td}t|jdg|   }t|| }t|| }q(|s|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  q3|rV|	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  qttd|D ]}
|	dd|
 |d d||
 d  f  q|	|d |  ||d|  |	|fS )N<^>c                 S   s|   |rt | |kr
| S |t |  }|dv s|tdvr | d|  S |d }d| }|dkr2d| |  S ||  d|t |   S )N)rF  <rF  r   r   >)r  r   )r   widhowneedhalfleadrA   rA   rB   adjust=  s   z6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjustr   rb   r   r   z\%s`z%s\%sz%s)%sz%s/%s/r   sumr  r   z%s%s%s   )NrF  )r   r1  r  r   r   )	hrequiredr  r  	use_asciirN  r$  r   wmorelinesr,   vsumrA   rA   rB   asum<  s6   

  
**z&PrettyPrinter._print_Sum.<locals>.asumr   Tr   r   Fr   )rK   r  rL   r  r   rW   r  r  r0  r   r   r   r2  r   r   r   rl   r   r   )r?   rG   r&  rX  r   r   r%  r  r8  r9  r#  rD  rC  r   r$  slines
adjustment
prettySignpadascii_adjustmentrA   rA   rB   
_print_Sum9  sF   *


zPrettyPrinter._print_Sumc           	      C   s  |j \}}}}| |}t|td krt|dd }td}| |}| jr9t|tdd t	d  }nt|d }t|| | }t
|d	ksX|tjtjfv r[d
}n| jrlt
|dkrht	dnt	d}t|| | }t|| }t||dtji}|S )Nr   rf   rg   r#  r,  rb   r   z->z+-r   +SuperscriptPlusSuperscriptMinusr   )rV   rL   r   r   r   rW   rK   rl   r   r   r;   r   InfinityNegativeInfinityr   r   )	r?   r   rQ   zz0dirELimLimArgrA   rA   rB   _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 pBdg|< q0d}t |jD ]h}d}t |jD ]B |f }	|	 | ksiJ t|	 | \}
}t|	| }	t|		|
 }	|du r|	}qWt|d|  }t||	 }qW|du r|}qNt |D ]	}t|
d }qt|
| }qN|du rtd	}|S )
zL
        This method factors out what is essentially grid printing.
        r   rb   c                    s   g | ]
} |f   qS rA   r   .0r,   Msr7   rA   rB   
<listcomp>  s    z8PrettyPrinter._print_matrix_contents.<locals>.<listcomp>r   Nr   r   )r  rowscolsrL   r   r   r&   r   rl   rX   r   )r?   rQ   Mr,   hsepvsepmaxwDD_rowr   rX   rl   r   rA   ro  rB   _print_matrix_contents  sD   *z$PrettyPrinter._print_matrix_contents[]c                 C   s,   |  |}| d |_t||| }|S )Nr   )rz  r  r   r   rW   )r?   rQ   lparensrparensrx  rA   rA   rB   _print_MatrixBase  s   
zPrettyPrinter._print_MatrixBasec                 C   sl   |j }|jr.ddlm} t||r| j|jdddS | |}| d |_	t
|dd S | j|dddS )Nr   BlockMatrixr   )r}  r~  r   )r   is_MatrixExpr&sympy.matrices.expressions.blockmatrixr  r9   r  blocksrL   r  r   r   rW   )r?   rQ   matr  rx  rA   rA   rB   _print_Determinant  s   

z PrettyPrinter._print_Determinantc                 C   *   | j rd}nd}| j|jd d |dd dS )Nu   ⊗.*c                 S      t | td kS Nr   r   r   r   rA   rA   rB   <lambda>      z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>parenthesizerK   rU   rV   )r?   rG   circled_timesrA   rA   rB   _print_TensorProduct     z"PrettyPrinter._print_TensorProductc                 C   r  )Nu   ∧z/\c                 S   r  r  r  r  rA   rA   rB   r    r  z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>r  r  )r?   rG   wedge_symbolrA   rA   rB   _print_WedgeProduct  r  z!PrettyPrinter._print_WedgeProductc                 C   s<   |  |j}t|dd }| d |_t|d }|S )Nrf   rg   r   tr)rL   r   r   rW   r  r   rX   )r?   rQ   rx  rA   rA   rB   _print_Trace  s
   zPrettyPrinter._print_Tracec                 C   s   ddl m} t|j|r%|jjr%|jjr%| 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 )
Nr   MatrixSymbolz_%d%d, 	delimiterr{  r|  rX   rl   r   )sympy.matricesr  r9   parentr,   	is_numberr7   rL   r   r\   r   rW   rU   r   r   r   
prettyFunc
prettyArgs)r?   rG   r  r  prettyIndicesrZ   rA   rA   rB   _print_MatrixElement%  s,   
z"PrettyPrinter._print_MatrixElementc                    s   ddl m}  |j}t|j|st|  } 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r!d| d< t j| dd S )Nr   rb   r   r   :r  )r   r   rU   )r   dimrJ   rA   rB   ppslice@  s   z1PrettyPrinter._print_MatrixSlice.<locals>.ppslicer  r  r{  r|  r  r   )r  r  rL   r  r9   r   rW   rU   rowslicerr  colslicers  r   r   r   r  r  )r?   mr  r  r  r  rZ   rA   rJ   rB   _print_MatrixSlice:  s,   	
z PrettyPrinter._print_MatrixSlicec                 C   sV   |j }| |}ddlm}m} t||s#t||s#|jr#t|  }|td }|S )Nr   r  r  T)	r   rL   r  r  r  r9   r  r   rW   )r?   rG   r  rZ   r  r  rA   rA   rB   _print_TransposeU  s   

zPrettyPrinter._print_Transposec                 C   sn   |j }| |}| jrttd}ntd}ddlm}m} t||s1t||s1|j	r1t|
  }|| }|S )NDaggerr_  r   r  )r   rL   rK   r   r   r  r  r  r9   r  rW   )r?   rG   r  rZ   dagr  r  rA   rA   rB   _print_Adjoint_  s   

zPrettyPrinter._print_Adjointc                 C   s(   |j jdkr| |j d S | |j S )Nrb   rb   r   r   )r  shaperL   )r?   BrA   rA   rB   _print_BlockMatrixm  s   z PrettyPrinter._print_BlockMatrixc                 C   s   d }|j D ]8}| |}|d u r|}q| d }t| r-tt|d }| |}ntt|d }tt|| }q|S )Nr   r    + )rV   rL   as_coeff_mmulr   could_extract_minus_signr   r   r   )r?   rG   r   itemrZ   coeffrA   rA   rB   _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 ]'\}}t	|t
|||fr;t|jdkr;t| |  ||< q| |||< qtj| S )Nr   HadamardProduct)KroneckerProductMatAddrb   )r   rV   #sympy.matrices.expressions.hadamardr  $sympy.matrices.expressions.kroneckerr  !sympy.matrices.expressions.mataddr  	enumerater9   r   r  r   rL   rW   __mul__)r?   rG   rV   r  r  r  r,   arA   rA   rB   _print_MatMul  s   

zPrettyPrinter._print_MatMulc                 C      | j r	ttdS tdS )NIdentityMatrixIrK   r   r   rF   rA   rA   rB   _print_Identity     zPrettyPrinter._print_Identityc                 C   r  )N
ZeroMatrix0r  rF   rA   rA   rB   _print_ZeroMatrix  r  zPrettyPrinter._print_ZeroMatrixc                 C   r  )N	OneMatrix1r  rF   rA   rA   rB   _print_OneMatrix  r  zPrettyPrinter._print_OneMatrixc                 C   s4   t |j}t|D ]\}}| |||< q	tj| S rD   )r   rV   r  rL   r   r  r?   rG   rV   r,   r  rA   rA   rB   _print_DotProduct  s   

zPrettyPrinter._print_DotProductc                 C   sL   |  |j}ddlm} t|j|s|jjrt|  }||  |j }|S )Nr   r  )	rL   baser  r  r9   r  r   rW   exp)r?   rG   rZ   r  rA   rA   rB   _print_MatPow  s   zPrettyPrinter._print_MatPowc                    sZ   ddl m  ddlm ddlm | jrtd}nd}| j|j	d d | fddd	S )
Nr   r  r  MatMulRingr  c                    s   t |  fS rD   r9   r  r  r  r  rA   rB   r    r  z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>r  )
r  r  r  r  !sympy.matrices.expressions.matmulr  rK   r   rU   rV   r?   rG   delimrA   r  rB   _print_HadamardProduct  s   
z$PrettyPrinter._print_HadamardProductc                 C   sp   | j rtd}n| d}| |j}| |j}t|jtd k r(t|  }tt	
||dtji}|| S )Nr  .r   r   )rK   r   rL   r  r  r   r   r   rW   r   r   r   )r?   rG   circpretty_base
pretty_exppretty_circ_exprA   rA   rB   _print_HadamardPower  s   


z"PrettyPrinter._print_HadamardPowerc                    sT   ddl m  ddlm | jrdtd d}nd}| j|jd d | fddd	S )
Nr   r  r  r   TensorProductz x c                    s   t |  fS rD   r  r  r  r  rA   rB   r    s    z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>r  )r  r  r  r  rK   r   rU   rV   r  rA   r  rB   _print_KroneckerProduct  s   z%PrettyPrinter._print_KroneckerProductc                 C   s"   |  |jj}t|dd }|S Nr{  r|  )rL   lamdarG   r   rW   )r?   Xrx  rA   rA   rB   _print_FunctionMatrix  s   z#PrettyPrinter._print_FunctionMatrixc                 C   sP   |j dks|j |j}}t|t|ddddd}| |S | d| |j S )Nrb   rk  Fevaluate)r   denr   r
   
_print_MulrL   )r?   rG   r   r  resrA   rA   rB   _print_TransferFunction  s
   

z%PrettyPrinter._print_TransferFunctionc                 C   s>   t |j}t|jD ]\}}t| |  ||< q
tj| S rD   )r   rV   r  r   rL   rW   r  r  rA   rA   rB   _print_Series  s   

zPrettyPrinter._print_Seriesc                 C   s   ddl m} t|j}g }t|D ]5}t||r5t|jdkr5| |}| d |_	|
t|   q| |}| d |_	|
| qtj| S )Nr   )MIMOParallelrb   r   )sympy.physics.control.ltir  r   rV   r   r9   r  rL   r  r   r1  r   rW   r  )r?   rG   r  rV   pretty_argsr  
expressionrA   rA   rB   _print_MIMOSeries  s   



zPrettyPrinter._print_MIMOSeriesc                 C   sh   d }|j D ],}| |}|d u r|}qtt| }| d |_tt|d }tt|| }q|S )Nr   r  )rV   rL   r   r   r   r  r   )r?   rG   r   r  rZ   rA   rA   rB   _print_Parallel  s   

zPrettyPrinter._print_Parallelc                 C   s   ddl m} d }|jD ]8}| |}|d u r|}qtt| }| d |_tt|d }t	||r;| d |_tt|| }q|S )Nr   )TransferFunctionMatrixr   r  rb   )
r  r  rV   rL   r   r   r   r  r   r9   )r?   rG   r  r   r  rZ   rA   rA   rB   _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|r,t|jjn|jg}t||rEt|j|rE|g ||R  }nYt||ret|j|re|j|krZ|| }nD|g ||jR  }n9t||rt|j|r||kry|| }n%||g|R  }n||kr|| }n|j|kr|| }n	|g ||R  }t	t
| | }	|	 d |	_|jdkrt	t
|	d nt	t
|	d }	t	t
|	| | }	| ||	 S )Nr   )TransferFunctionSeriesrb   r   rk  r   - )sympy.physics.controlr   r  sys1varr9   r   rV   sys2r   r   r   rL   r  r   sign)
r?   rG   r   r  r   tfnum_arg_listden_arg_listr  denomrA   rA   rB   _print_Feedback  s:   






zPrettyPrinter._print_Feedbackc                 C   s   ddl m}m} | ||j|j}| |j}tt| }|j	dkr,tt
d| ntt
d| }tt| }d|_tt
|d }| d |_t|td}t|j|rb| d	 |_tt|| }|S )
Nr   )
MIMOSeriesr  rk  zI + zI - z-1 r   r   rb   )r  r  r  rL   r  r  r   r   r   r  rl   rW   r   r  r  r9   )r?   rG   r  r  inv_matplant	_feedbackrA   rA   rB   _print_MIMOFeedback;  s    z!PrettyPrinter._print_MIMOFeedbackc                 C   s>   |  |j}| d |_| jrtd nd}t|| }|S )Nrb   tauz{t})rL   	_expr_matr  r   rK   r!   r   rl   )r?   rG   r  	subscriptrA   rA   rB   _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  _A_B_C_DrL   r  )r?   rG   r  Ar  Crx  r  rA   rA   rB   _print_StateSpaceT  s   zPrettyPrinter._print_StateSpacec                 C   s>  ddl m} | jstd||jkrt|jjS g }g }t||r(| 	 }nd|fg}|D ]M\}}t
|j	 }|jdd d |D ]7\}	}
|
dkrU|d|	j  n |
d	krb|d
|	j  n| |
 d }||d |	j  ||	j qDq/|d dr|d dd  |d< n|d dr|d dd  |d< g }dg}g }t|D ]\}}|d d|v r=|}||| d}tdd|v rtt|D ]4}d||< || tddkr||d  dkr|d | tdd d ||  ||d d   } nqn2tdd|v r9|tdd}|d	kr9d||< |d | tdd d ||  ||d d   }|||< qdd |D }tdd |D }d|v rtt|D ]\}}t|dkrr|ddt|d   d||< qWt|D ]\}}|t|||   t|D ]}|d t|kr|t|kr|dt|d d	 dt|d     ||| kr|||   |||  d 7  < q||  || d|d	 t||  d   7  < q|t|kr|dt|d d	 dt|d     ||  d|d	 d  7  < qqxtddd |D S )Nr   )Vectorz:ASCII pretty printing of BasisDependent is not implementedc                 S   s   | d   S Nr   )__str__r  rA   rA   rB   r  m      z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>r   rb   r   rk  z(-1) r   r  r  
z)_extz)_lower_hookc                 S   s   g | ]}| d qS )r!  )splitrn  r   rA   rA   rB   rq        z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S rD   )r  r#  rA   rA   rB   	<genexpr>  s    z6PrettyPrinter._print_BasisDependent.<locals>.<genexpr>c                 S   s   g | ]}|d d qS )NrA   )rn  r   rA   rA   rB   rq        )sympy.vectorr  rK   NotImplementedErrorzeror   _pretty_formr9   separateitemsr   
componentsr   r1  rL   rW   
startswithr  r   r   r  r  rfindr   insertrP  join)r?   rG   r  o1vectstrsr-  systemvect
inneritemsr   varg_strlengthsstrsflagr,   partstrtempstrparenindex
n_newlinespartsr7   rA   rA   rB   _print_BasisDependent]  s   




&

$
 z#PrettyPrinter._print_BasisDependentc           	         sd  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 ]e}|d	 ||  d
}t| d d	d	D ]M}t	||d  |j| k r\ n=|rj|| ||d   n%|| |||d   t	||d  dkr||| d	 gg|| d	< | }g ||d < qKq4|d d }| d dkr||g}| |S )Nr   ImmutableMatrixrA   c                 S   s   g | ]}g qS rA   rA   rm  rA   rA   rB   rq    r  z2PrettyPrinter._print_NDimArray.<locals>.<listcomp>c                 S   s   g | ]}t t|qS rA   )r   r  rm  rA   rA   rB   rq    r'  c                    s    | ddS )NFr  rA   r  rD  rA   rB   r    r   z0PrettyPrinter._print_NDimArray.<locals>.<lambda>rk  Trb   r   )
sympy.matrices.immutablerE  rankrL   r  r  	itertoolsproductr1  r  )	r?   rG   	level_strshape_rangesr  outer_ievenback_outer_iout_exprrA   rD  rB   _print_NDimArray  s8   



zPrettyPrinter._print_NDimArrayc              	   C   sf  t |}t d|  }t d|  }d }d }|D ]}	| |	jd }
|	|v s*|rC||	jkrC|	jr;tt |d }ntt |d }|	|v r_tt |
d }
tt |
| ||	  }
d}nd}|	jrt ||
 }t |d|
   }t |d|
   }nt ||
 }t |d|
   }t |d|
   }|	j}qt|| }t|	| }|S )Nr   r   r   =TF)
r   r   rL   rV   is_upr   r   rl   r   r   )r?   r\   indices	index_mapcentertopbotlast_valenceprev_mapr@  indpicpictrA   rA   rB   _printer_tensor_indices  s6   z%PrettyPrinter._printer_tensor_indicesc                 C   s    |j d j}| }| ||S r  )rV   r\   get_indicesr\  )r?   rG   r\   rS  rA   rA   rB   _print_Tensor  s   zPrettyPrinter._print_Tensorc                 C   s,   |j jd j}|j  }|j}| |||S r  )rG   rV   r\   r]  rT  r\  )r?   rG   r\   rS  rT  rA   rA   rB   _print_TensorElement  s   
z"PrettyPrinter._print_TensorElementc                    s>   |  \}} fdd|D }tj| }|rt|| S |S )Nc                    8   g | ]}t |td  k rt |  n |qS r   r   r   r   rL   rW   rm  rJ   rA   rB   rq        z0PrettyPrinter._print_TensMul.<locals>.<listcomp>)!_get_args_for_traditional_printerr   r  rX   )r?   rG   r  rV   rZ   rA   rJ   rB   _print_TensMul  s   

zPrettyPrinter._print_TensMulc                    s    fdd|j D }tj| S )Nc                    r`  r   ra  rm  rJ   rA   rB   rq     rb  z0PrettyPrinter._print_TensAdd.<locals>.<listcomp>)rV   r   __add__)r?   rG   rV   rA   rJ   rB   _print_TensAdd  s   

zPrettyPrinter._print_TensAddc                 C   s    |j d }|js| }| |S r  )rV   rR  rL   )r?   rG   r   rA   rA   rB   _print_TensorIndex'  s   

z PrettyPrinter._print_TensorIndexc           	      C   s   | j rtd}nd}d }t|jD ]#}| |}t|| }|d u r&|}qt|d }t|| }qt| |j	 dtj
i}t|}t|jdkrX|| t|j }t|tj| }|jd |_tt|| }tj|_|S )Nr   r   r   r   rb   )rK   r"   r   	variablesrL   r   rX   rl   rG   rW   r   r  r   r   r   r   r   r   r   )	r?   r   r   r   variabler   r   r   rZ   rA   rA   rB   _print_PartialDerivative-  s0   

z&PrettyPrinter._print_PartialDerivativec                    s  i  t |jD ]-\}}| |j |df< |jdkr#td |df< qttd| |j  |df< qd}d}t|j fddtdD }d }tD ]p}d }	tdD ]K}
 ||
f }|	 ||
 ksjJ ||
 |	  }|d }|| }t|d	|  }t|
d	|  }|	d u r|}	qXt|	d	|  }	t|	| }	qX|d u r|	}qPt|D ]	}t|d	 }qt||	 }qPt|d
d }| d |_tj|_|S )Nr   T	otherwiserb   zfor r   c                    s(   g | ] t  fd dtD qS )c                 3   s     | ]} |f   V  qd S rD   rl  rm  )Pr7   rA   rB   r%  \  s    z<PrettyPrinter._print_Piecewise.<locals>.<listcomp>.<genexpr>)r   r  rn  rl  len_args)r7   rB   rq  \  s     z2PrettyPrinter._print_Piecewise.<locals>.<listcomp>r   {r   )r  rV   rL   rG   condr   rl   r  r  r   rX   r   rW   r  r   r   r   )r?   pexprr   ecru  rv  rw  rx  r,   ry  r7   pwdeltawleftwrightr   rA   rn  rB   _print_PiecewiseM  sP   

zPrettyPrinter._print_Piecewisec                 C   s   ddl m} | ||S )Nr   )	Piecewise)$sympy.functions.elementary.piecewisery  rL   rewrite)r?   itery  rA   rA   rB   
_print_ITE  s   zPrettyPrinter._print_ITEc                 C   sP   d }|D ]}|}|d u r|}qt |d }t || }q|d u r&td}|S )Nr  r   )r   rl   r   )r?   r8  rx  r  rt  rA   rA   rB   _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)rX   rl   r  ifascii_nougly)rX   rl   r  r   )rK   rU   r   r   r  r   )	r?   p1p2rX   rl   r  r  tmpseprA   rA   rB   _hprint_vseparator  s   
z PrettyPrinter._hprint_vseparatorc                    s   fdd|j D } fdd|jD } |j}| d |_d }||fD ]} |}|d u r5|}q't|d }t|| }q'| 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                       g | ]}  |qS rA   rB  rn  r  rJ   rA   rB   rq    r$  z.PrettyPrinter._print_hyper.<locals>.<listcomp>c                    r  rA   rB  rn  brJ   rA   rB   rq    r$  r   r   rf   rg   rb   Fr!  r  )apbqrL   argumentr  r   r~  r   r   rX   rl   r  rW   r$   r  )r?   rQ   r  r  rl  rx  r8  ry  r   r   sztr  addimgr  rA   rJ   rB   _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 ]} || ||< qCt	d
D ]H}t
|d|f  |d|f  }t	d
D ]0}|||f }	||	  d
 }
||
 |	  }t|	d|
  }	t|	d|  }	|	|||f< qjqSt|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rit|d|  }t|| }||_t|| }|| |_t|d| }|S )Nc                    r  rA   rB  r  rJ   rA   rB   rq    r$  z0PrettyPrinter._print_meijerg.<locals>.<listcomp>r  c                    r  rA   rB  r  rJ   rA   rB   rq    r$  )r   rb   c                    r  rA   rB  r  rJ   rA   rB   rq    r$  )rb   r   c                    r  rA   rB  r  rJ   rA   rB   rq    r$  r  r   r   rb   r   z  rf   rg   Gr!  r  c                 S   sV   |   |   }|dkr| |fS |dkr| t|d|  fS t| d|   |fS )Nr   r   )r   r   rX   )r  r  diffrA   rA   rB   rN  
  s   z,PrettyPrinter._print_meijerg.<locals>.adjustr  )anaotherbmbotherrL   r  r  r   r~  r  r   r   r   rX   rl   r   r  rW   r$   r  r  r  ) r?   rQ   r8  rl  vpidxr,   rw  r7   r   rX   rl   D1D2rx  r   r   r  r  r  r  r  r  pppqpmpnrN  puplhtrt  rA   rJ   rB   _print_meijerg  sj   "

zPrettyPrinter._print_meijergc                 C   s"   t tdd}|| |jd  S )NExp1rQ   r   )r   r   rL   rV   )r?   rQ   r  rA   rA   rB   _print_ExpBase%  s   zPrettyPrinter._print_ExpBasec                 C   s   t tddS )Nr  rQ   )r   r   rP   rA   rA   rB   _print_Exp1+     zPrettyPrinter._print_Exp1rf   rg   c                 C   s   | j |j|j||||dS )N)r   	func_namerX   rl   )_helper_print_functionr   rV   )r?   rQ   r   r  rX   rl   rA   rA   rB   r   .  s   zPrettyPrinter._print_Functionc                 C      | j |ddS Nr  r  r   rP   rA   rA   rB   _print_mathieuc4  r  zPrettyPrinter._print_mathieucc                 C   r  Nr   r  r  rP   rA   rA   rB   _print_mathieus7  r  zPrettyPrinter._print_mathieusc                 C   r  )NzC'r  r  rP   rA   rA   rB   _print_mathieucprime:  r  z"PrettyPrinter._print_mathieucprimec                 C   r  )NzS'r  r  rP   rA   rA   rB   _print_mathieusprime=  r  z"PrettyPrinter._print_mathieusprimer  c	                 C   s   |rt |td}|st|dr|j}|r| t|}	n	t| |  }	|rB| 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   r   zModifier Letter Low Ringr  r   r  r  )r   r   hasattrr   rL   r   r   rW   rK   r   r   r   r   rU   r   r  r  )r?   r   rV   r   r  r  elementwiserX   rl   r  r  r  rZ   rA   rA   rB   r  @  s8   



z$PrettyPrinter._helper_print_functionc                 C   s$   |j }|j}|g}| j||dddS )Nr   T)r  r  )r  rG   r  )r?   rQ   r   r   rV   rA   rA   rB   _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  Betar  r  )(sympy.functions.special.tensor_functionsr  'sympy.functions.special.gamma_functionsr  r  &sympy.functions.special.zeta_functionsr  &sympy.functions.special.beta_functionsr  'sympy.functions.special.delta_functionsr  'sympy.functions.special.error_functionsr  r!   )r?   r  r  r  r  r  r  r  rA   rA   rB   _special_function_classesk  s   z'PrettyPrinter._special_function_classesc                 C   sf   | j D ]&}t||r)|j|jkr)| jrt| j | d   S t| j | d   S q|j}tt|S )Nr   rb   )r  
issubclassr   rK   r   r   )r?   rG   clsr  rA   rA   rB   _print_FunctionClass{  s   
z"PrettyPrinter._print_FunctionClassc                 C   
   |  |S rD   )rH   rF   rA   rA   rB   _print_GeometryEntity  s   
z#PrettyPrinter._print_GeometryEntityc                 C   D   |  |jd }| jrt|r| td| |jd S | |S )Nr   zLi_%srb   rL   rV   rK   r%   r   r   r?   rQ   r  rA   rA   rB   _print_polylog     
zPrettyPrinter._print_polylogc                 C       | j rtd nd}| j||dS )Nr  r  r  rK   r!   r   r?   rQ   r  rA   rA   rB   _print_lerchphi     zPrettyPrinter._print_lerchphic                 C   r  )Netadirichlet_etar  r  r  rA   rA   rB   _print_dirichlet_eta  r  z"PrettyPrinter._print_dirichlet_etac                 C   sZ   | j rtd nd}|jd tju r&t| |jd   }t|| }|S | j	||dS )Ntheta	Heavisiderb   r   r  )
rK   r!   rV   r   Halfr   rL   rW   rX   r   )r?   rQ   r  rZ   rA   rA   rB   _print_Heaviside  s   zPrettyPrinter._print_Heavisidec                 C   r  r  r  rP   rA   rA   rB   _print_fresnels  r  zPrettyPrinter._print_fresnelsc                 C   r  r  r  rP   rA   rA   rB   _print_fresnelc  r  zPrettyPrinter._print_fresnelcc                 C   r  )NAir  r  rP   rA   rA   rB   _print_airyai  r  zPrettyPrinter._print_airyaic                 C   r  )NBir  r  rP   rA   rA   rB   _print_airybi  r  zPrettyPrinter._print_airybic                 C   r  )NzAi'r  r  rP   rA   rA   rB   _print_airyaiprime  r  z PrettyPrinter._print_airyaiprimec                 C   r  )NzBi'r  r  rP   rA   rA   rB   _print_airybiprime  r  z PrettyPrinter._print_airybiprimec                 C   r  )NWr  r  rP   rA   rA   rB   _print_LambertW  r  zPrettyPrinter._print_LambertWc                 C   r  )NCovr  r  rP   rA   rA   rB   _print_Covariance  r  zPrettyPrinter._print_Covariancec                 C   r  )NVarr  r  rP   rA   rA   rB   _print_Variance  r  zPrettyPrinter._print_Variancec                 C   r  )Nrl  r  r  rP   rA   rA   rB   _print_Probability  r  z PrettyPrinter._print_Probabilityc                 C   s   | j |ddddS )Nrg  r{  r|  )r  rX   rl   r  rP   rA   rA   rB   _print_Expectation  s   z PrettyPrinter._print_Expectationc                 C   sn   |j }|j}| jrdtd d}nd}t|dkr#|d jr#|d }| |}tt	||| |ddiS )Nr   ArrowFromBar -> rb   r   r   rQ  )
rG   	signaturerK   r   r  	is_symbolrL   r   r   r   )r?   rQ   rG   sigarrowvar_formrA   rA   rB   _print_Lambda  s   
zPrettyPrinter._print_Lambdac                 C   s  |  |j}|jrtdd |jD st|jdkr~t|d }t|jdkr4t||  |j }nt|jrFt||  |jd  }| jrWt|dt	d d }nt|d }t|jdkrqt||  |j }nt||  |jd  }t|
  }t|d	 }|S )
Nc                 s   s    | ]}|t jkV  qd S rD   )r   Zero)rn  rt  rA   rA   rB   r%        z-PrettyPrinter._print_Order.<locals>.<genexpr>rb   ; r   r   r   r  O)rL   rG   pointanyr  rh  r   rl   rK   r   rW   rX   r?   rG   rZ   rA   rA   rB   _print_Order  s"   
zPrettyPrinter._print_Orderc                 C   s   | j r0| |jd |jd  }| |jd }td}t|| }t|d }|| }|S | |jd }| |jd |jd  }| |ddd}|| S )Nr   rb   r   rG  rH  r   )rK   rL   rV   r   rl   rU   )r?   rQ   shiftr   r  rZ   rA   rA   rB   _print_SingularityFunction  s   z(PrettyPrinter._print_SingularityFunctionc                 C   r  )Nr  r  r  r  r  rA   rA   rB   _print_beta  r  zPrettyPrinter._print_betac                 C      d}| j ||dS )NzB'r  r  r  rA   rA   rB   _print_betainc     zPrettyPrinter._print_betaincc                 C   r  )Nr  r  r  r  rA   rA   rB   _print_betainc_regularized  r  z(PrettyPrinter._print_betainc_regularizedc                 C       | j rtd nd}| j||dS Nr  r  r  r  rA   rA   rB   _print_gamma  r  zPrettyPrinter._print_gammac                 C   r  r  r  r  rA   rA   rB   _print_uppergamma  r  zPrettyPrinter._print_uppergammac                 C   r  )Nr  r  r  r  r  rA   rA   rB   _print_lowergamma  r  zPrettyPrinter._print_lowergammac                 C   s   | j rYt|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 )Nr   r  rb   r   r   )
rK   r  rV   r   r!   rL   rW   rl   rX   r   )r?   rQ   r  r  crZ   rA   rA   rB   _print_DiracDelta
  s    
zPrettyPrinter._print_DiracDeltac                 C   r  )Nr   zE_%srb   r  r  rA   rA   rB   _print_expint  r  zPrettyPrinter._print_expintc                 C   sD   t d}t | |j  }t t||dt ji}||_||_|S )Nr  r   )	r   rU   rV   rW   r   r   r   r  r  )r?   rQ   r  r  rZ   rA   rA   rB   
_print_Chi#  s   
zPrettyPrinter._print_Chic                 C   s^   |  |jd }t|jdkr|}n|  |jd }| ||}t|  }t|d }|S )Nr   rb   rg  )rL   rV   r  r  r   rW   rX   )r?   rQ   pforma0rZ   pforma1rA   rA   rB   _print_elliptic_e2  s   zPrettyPrinter._print_elliptic_ec                 C   s.   |  |jd }t|  }t|d }|S )Nr   K)rL   rV   r   rW   rX   rY   rA   rA   rB   _print_elliptic_k=  s   zPrettyPrinter._print_elliptic_kc                 C   sJ   |  |jd }|  |jd }| ||}t|  }t|d }|S )Nr   rb   r  )rL   rV   r  r   rW   rX   )r?   rQ   r  r  rZ   rA   rA   rB   _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r'| ||}n| |jd }| j||dd}t|d }t|| }t|  }t|| }|S )NPir   rb   r   Fr  r  )	rK   r!   rL   rV   r  r  r   rX   rW   )r?   rQ   r\   r  r  rZ   pforma2pformarA   rA   rB   _print_elliptic_piK  s   z PrettyPrinter._print_elliptic_pic                 C       | j r	ttdS | tdS )NphiGoldenRatiorK   r   r   rL   r   rF   rA   rA   rB   _print_GoldenRatioZ     z PrettyPrinter._print_GoldenRatioc                 C   r  )Nr  
EulerGammar  rF   rA   rA   rB   _print_EulerGamma_  r  zPrettyPrinter._print_EulerGammac                 C   s   |  tdS )Nr  )rL   r   rF   rA   rA   rB   _print_Cataland  r  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 rb   )rL   rV   r   r   r   rW   rl   r   r  rA   rA   rB   
_print_Modg  s   zPrettyPrinter._print_Modc                 C   s  | j ||d}g g }}dd }t|D ]z\}}|jrM| rM|jdd\}	}
|	dkr3t|
ddi}nt|	 g|
R ddi}| |}|||| q|jr`|j	dkr`|d  || q|j
rv|d	k rv| | }|||| q|jr|t| |   q|| | q|rd
}|D ]}|d ur| dkr nqd}|D ]4}|| d}}|d	k r| d
}}|rtt|jtt|j	 }n| |}|r|||}|||< qtj| S )Nr-   c                 S   sj   |dkr|   dkrd}nd}nd}| jtjks| jtjkr%t|   }n| }t||}t|dtjiS )z'Prepend a minus sign to a pretty form. r   rb   z- r,  r  r   )r  r   r   NEGADDr   rW   r   )rZ   r@  	pform_negrt  rA   rA   rB   pretty_negativet  s   z1PrettyPrinter._print_Add.<locals>.pretty_negativeF)rationalrk  r  rb   r   T)_as_ordered_termsr  is_Mulr  as_coeff_mulr   rL   r1  is_Rationalq	is_Numberis_Relationalr   rW   r  r;   rt  re  )r?   rG   r-   termspformsrS  r(  r,   r/  r  othernegtermrZ   largenegativerA   rA   rB   
_print_Addp  sL   






zPrettyPrinter._print_Addc           	         s  ddl m  |j}|d tju stdd |dd  D rIttj|}|d dk}|r5t	ddd|d< t	j
| }|rGt	d|j |j|j}|S g }g }jd	vrW| }nt|j}t| fd
dd}|D ]W}|jr|jr|jjr|jjr|jdkr|t|j|j dd qh|t|j|j  qh|jr|tjur|jdkr|t|j |jdkr|t|j qh|| qhfdd|D }fdd|D }t|dkrt	j
| S t|dkr|tj t	j
| t	j
|  S )Nr   Quantityc                 s   s    | ]}t |tV  qd S rD   )r9   r   rn  r   rA   rA   rB   r%    r  z+PrettyPrinter._print_Mul.<locals>.<genexpr>rb   z-1r  r,  )oldnonec                    s    t |  pt | tot | j S rD   )r9   r
   r  r  r8  rA   rB   r    s   
 z*PrettyPrinter._print_Mul.<locals>.<lambda>r   rk  Fr  c                    r  rA   rB  )rn  airJ   rA   rB   rq    r$  z,PrettyPrinter._print_Mul.<locals>.<listcomp>c                    r  rA   rB  )rn  birJ   rA   rB   rq    r$  )sympy.physics.unitsr9  rV   r   Oner  r   maprL   r   r  r   r   r   r-   as_ordered_factorsr   is_commutativeis_Powr  r-  is_negativer1  r
   r  rb  rt  r	   r.  r  )	r?   rI  rV   strargsnegoneobjr  r  r  rA   )r9  r?   rB   r    sH   (







zPrettyPrinter._print_Mulc           	         sx  |  |}| jd r,| jr,|dkr,| dkr,| dks#|jr,|jr,t|t	d  S t
dd t
dd  }|  |}| dkrO|  ||  d|  S |dkrUdnt|d}t|dkrld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 )Nr2   r   rb   rO  \r   r   r!  r   c                 3   s,    | ]}d | d    d |  V  qdS )r   rb   NrA   rm  _zZ
linelengthrA   rB   r%    s
    
z0PrettyPrinter._print_nth_root.<locals>.<genexpr>r   )rL   r:   rK   r  r   r   r   r   rX   nth_rootr   r;   ljustr  r   r   r2  r  rl   r   r   r   )	r?   r  r'   bprettyrootsignrprettyr  diagonalr   rA   rJ  rB   _print_nth_root  s<   




zPrettyPrinter._print_nth_rootc                 C   s   ddl m} | \}}|jrU|tju rtd| | S ||\}}|tju r?|j	r?|j
s?|js4|jr?| jd r?| ||S |jrU|dk rUtd| t|| dd S |jrgt| |  | |S | || | S )Nr   )fractionr  r3   Fr  )sympy.simplify.simplifyrT  as_base_exprC  r   NegativeOner   rL   r@  is_Atomr   r-  r   r:   rS  r
   r0  rW   __pow__)r?   powerrT  r  rQ   r   r   rA   rA   rB   
_print_Pow!  s   
"zPrettyPrinter._print_Powc                 C   s   |  |jd S r  )rL   rV   rF   rA   rA   rB   _print_UnevaluatedExpr3     z$PrettyPrinter._print_UnevaluatedExprc                 C   s   |dkr|dk rt t|t jdS t t|S t|dkrBt|dkrB|dk r6t t|t jdt t| S t t|t t| S d S )Nrb   r   )r   
   )r   r;   r%  abs)r?   rt  r.  rA   rA   rB   __print_numer_denom6  s   z!PrettyPrinter.__print_numer_denomc                 C   &   |  |j|j}|d ur|S | |S rD   )!_PrettyPrinter__print_numer_denomrt  r.  rH   r?   rG   r  rA   rA   rB   _print_RationalH     
zPrettyPrinter._print_Rationalc                 C   ra  rD   )rb  	numeratordenominatorrH   rc  rA   rA   rB   _print_FractionP  re  zPrettyPrinter._print_Fractionc                 C   sh   t |jdkrt|js| |jd | t |j S | jr#tdnd}| j|jd d d| dd dS )	Nrb   r   Multiplicationr   r   c                 S      | j p| jp| jS rD   )is_Unionis_Intersectionis_ProductSetsetrA   rA   rB   r  ^      z1PrettyPrinter._print_ProductSet.<locals>.<lambda>r  )r  setsr   rL   rK   r   rU   )r?   rt  	prod_charrA   rA   rB   _print_ProductSetX  s    zPrettyPrinter._print_ProductSetc                 C   s   t |jtd}| |dddS )Nr   rp  }r  )r   rV   r   rU   )r?   r   r-  rA   rA   rB   _print_FiniteSeta  s   zPrettyPrinter._print_FiniteSetc                 C   s   | j rtd}nd}|jjr&|jjr&|jjr|ddd|f}nF|ddd|f}n>|jjr7||d |j |d f}n-|jjrIt|}t|t||f}nt	|dkr`t|}t|t|||d f}nt
|}| |ddd	S )
NDots...rk  r   rb   r  rp  rt  r  )rK   r   startis_infinitestopstepis_positiveiterr   r  r   rU   )r?   r   dotsprintsetitrA   rA   rB   _print_Rangee  s"   
zPrettyPrinter._print_Rangec                 C   s\   |j |jkr| |jd d ddS |jrd}nd}|jr d}nd}| |jd d ||S )	Nrb   rp  rt  rf   r{  rg   r|  r   )rx  endrU   rV   	left_open
right_openr?   r,   rX   rl   rA   rA   rB   _print_Interval~  s   zPrettyPrinter._print_Intervalc                 C   s    d}d}|  |jd d ||S )NrG  rH  r   rU   rV   r  rA   rA   rB   _print_AccumulationBounds  s   z'PrettyPrinter._print_AccumulationBoundsc                 C   (   dt dd }| j|jd d |dd dS )Nr   Intersectionr   c                 S   rj  rD   )rm  rk  is_Complementrn  rA   rA   rB   r    rp  z3PrettyPrinter._print_Intersection.<locals>.<lambda>r  r   rU   rV   r?   r  r  rA   rA   rB   _print_Intersection     z!PrettyPrinter._print_Intersectionc                 C   r  )Nr   Unionr"   c                 S   rj  rD   )rm  rl  r  rn  rA   rA   rB   r    rp  z,PrettyPrinter._print_Union.<locals>.<lambda>r  r  )r?   r  union_delimiterrA   rA   rB   _print_Union  r  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   SymmetricDifference)rK   r)  r   rU   rV   )r?   r  sym_delimeterrA   rA   rB   _print_SymmetricDifference  s   z(PrettyPrinter._print_SymmetricDifferencec                 C   s   d}| j |jd d |dd dS )Nz \ c                 S   rj  rD   )rm  rl  rk  rn  rA   rA   rB   r    s    z1PrettyPrinter._print_Complement.<locals>.<lambda>r  r  r  rA   rA   rB   _print_Complement  s   zPrettyPrinter._print_Complementc                    s   | j rtd nd |j}|j}|j}| |j}t|dkr8| 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 )NSmallElementOfinrb   r   r   r  rp  rt  TrX   rl   r  r  c                 3   s.    | ]\}}|d  d |dfD ]}|V  qqdS )r   r  NrA   )rn  r  setvr7   innrA   rB   r%    s   
 z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>rk  r   )rK   r   r  	base_setsr  rL   rG   r  rU   r  r   r  )r?   tsfunrq  r  rG   r   pargsrA   r  rB   _print_ImageSet  s*   
zPrettyPrinter._print_ImageSetc           	      C   s   | j rtd}td}nd}d}| t|j}t|jdd }|d ur,| |j }n| |j}| j r@| |}t	|
  }|jtju rQ| j||dddd	d
S | |j}| j|||||fd	d}| j||dddd	d
S )Nr  r   r  andas_exprrp  rt  Tr   r  r  )rK   r   rU   r   r   getattr	conditionrL   r  r   rW   base_setr   UniversalSetr  )	r?   r  r  _andrh  r  rq  r  r  rA   rA   rB   _print_ConditionSet  s2   


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   r  rp  rt  Tr  )rK   r   rU   rh  rL   rG   rq  r  )r?   r  r  rh  rG   prodsetsr  rA   rA   rB   _print_ComplexRegion  s   
z"PrettyPrinter._print_ComplexRegionc                 C   sP   |j \}}| jr"dtd d}tt| ||| |ddiS tt|S )Nr   	ElementOfr   rQ  )rV   rK   r   r   r   r   rL   r   )r?   rQ   r  ro  elrA   rA   rB   _print_Contains  s   

zPrettyPrinter._print_Containsc                 C   sT   |j jtju r|jjtju r| |jS | jrtd}nd}| 	|
 | | S )Nrv  rw  )r  formular   r  bnrL   a0rK   r   r7  truncate)r?   r   r~  rA   rA   rB   _print_FourierSeries	  s   
z"PrettyPrinter._print_FourierSeriesc                 C      |  |jS rD   )r7  infiniter?   r   rA   rA   rB   _print_FormalPowerSeries	  rI   z&PrettyPrinter._print_FormalPowerSeriesc                 C   s0   t | |j  }| td}t || S )NSetExpr)r   rL   ro  rW   r   rl   )r?   se
pretty_setpretty_namerA   rA   rB   _print_SetExpr	  s   zPrettyPrinter._print_SetExprc                 C   s   | j rtd}nd}t|jjdkst|jjdkrtd|jtju rA|j}||	|d |	|d |	|d |	|f}n|jtj
u sL|jdkr\|d d }|| t|}nt|}| |S )	Nrv  rw  r   z@Pretty printing of sequences with symbolic bound not implementedr  r   rb   r  )rK   r   r  rx  free_symbolsrz  r)  r   rc  r  rb  lengthr1  r   _print_list)r?   r   r~  rz  r  rA   rA   rB   _print_SeqFormula	  s    
 


zPrettyPrinter._print_SeqFormulac                 C   s   dS )NFrA   r  rA   rA   rB   r  3	  s    zPrettyPrinter.<lambda>c                 C   sx   g }|D ]}|  |}	||rt|	  }	|r|| ||	 q|s)td}
nttj|  }
t|
j|||d }
|
S )Nr   r  )rL   r   rW   r1  r   r   )r?   seqrX   rl   r  r  r  r2  r  rZ   r   rA   rA   rB   rU   2	  s   


zPrettyPrinter._print_seqc                 C   sL   d }|D ]}|d u r|}qt || }t || }q|d u r$t dS |S )Nr   )r   rl   )r?   r  rV   rZ   r   rA   rA   rB   r2  F	  s   zPrettyPrinter.joinc                 C      |  |ddS r  rU   )r?   r   rA   rA   rB   r  U	  r  zPrettyPrinter._print_listc                 C   sH   t |dkrtt| |d d }t|jdddd S | |ddS )Nrb   r   r   rf   rg   Tr  )r  r   r   r   rL   rW   rU   )r?   r  ptuplerA   rA   rB   _print_tupleX	  s   zPrettyPrinter._print_tuplec                 C   r  rD   )r  rF   rA   rA   rB   _print_Tuple_	     
zPrettyPrinter._print_Tuplec                 C   s`   t | td}g }|D ]}| |}| || }tt|d| }|| q| |ddS )Nr   z: rp  rt  )	r   keysr   rL   r   r   r   r1  rU   )r?   r   r  r-  r   r  Vr   rA   rA   rB   _print_dictb	  s   
zPrettyPrinter._print_dictc                 C   r  rD   )r  )r?   r   rA   rA   rB   _print_Dicto	  r  zPrettyPrinter._print_Dictc                 C   s:   |st dS t|td}| |}t |jdddd }|S )Nzset()r   rp  rt  Tr  )r   r   r   rU   rW   r?   r   r-  prettyrA   rA   rB   
_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   rp  rt  Tr  rf   rg   )	r   r   r   rU   rW   r   r   typer   r  rA   rA   rB   _print_frozensetz	  s   
zPrettyPrinter._print_frozensetc                 C   r  )NUniverser  r  r  rA   rA   rB   _print_UniversalSet	  r  z!PrettyPrinter._print_UniversalSetc                 C   rC   rD   r   r   )r?   ringrA   rA   rB   _print_PolyRing	  rI   zPrettyPrinter._print_PolyRingc                 C   rC   rD   r  )r?   fieldrA   rA   rB   _print_FracField	  rI   zPrettyPrinter._print_FracFieldc                 C   rC   rD   rE   )r?   elmrA   rA   rB   _print_FreeGroupElement	  rI   z%PrettyPrinter._print_FreeGroupElementc                 C   rC   rD   r  )r?   polyrA   rA   rB   _print_PolyElement	  rI   z PrettyPrinter._print_PolyElementc                 C   rC   rD   r  )r?   fracrA   rA   rB   _print_FracElement	  rI   z PrettyPrinter._print_FracElementc                 C   s&   |j r| |  S | | S rD   )
is_aliasedrL   as_polyr  rF   rA   rA   rB   _print_AlgebraicNumber	  s   z$PrettyPrinter._print_AlgebraicNumberc                 C   s:   | j |jdd|jg}t| |  }t|d }|S )Nlexr$  CRootOf)r7  rG   r@  r   rU   rW   rX   r?   rG   rV   rZ   rA   rA   rB   _print_ComplexRootOf	  s   z"PrettyPrinter._print_ComplexRootOfc                 C   sT   | j |jddg}|jtjur|| |j t| |	  }t|
d }|S )Nr  r$  RootSum)r7  rG   r  r   IdentityFunctionr1  rL   r   rU   rW   rX   r  rA   rA   rB   _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))rK   r   r   r   mod)r?   rG   formrA   rA   rB   _print_FiniteField	  s   z PrettyPrinter._print_FiniteFieldc                 C   r  )Nr  ZZr  rF   rA   rA   rB   _print_IntegerRing	  r  z PrettyPrinter._print_IntegerRingc                 C   r  )N	RationalsQQr  rF   rA   rA   rB   _print_RationalField	  r  z"PrettyPrinter._print_RationalFieldc                 C   >   | j rtd}nd}|jrt|S | t|d t|j S )NRealsRRr   rK   r   has_default_precisionr   rL   r   r;   	precisionr?   domainprefixrA   rA   rB   _print_RealField	     
zPrettyPrinter._print_RealFieldc                 C   r  )N	ComplexesCCr   r  r  rA   rA   rB   _print_ComplexField	  r  z!PrettyPrinter._print_ComplexFieldc                 C   ^   t |j}|jjsttd| |j }|| | |dd}t|	| |j
 }|S Norder=r{  r|  r   symbolsr-   
is_defaultr   rl   rL   r1  rU   rX   r  r?   rG   rV   r-   rZ   rA   rA   rB   _print_PolynomialRing	     

z#PrettyPrinter._print_PolynomialRingc                 C   r  )Nr  rf   rg   r  r  rA   rA   rB   _print_FractionField	  r  z"PrettyPrinter._print_FractionFieldc                 C   sV   |j }t|jt|jkr|dt|j f }| |dd}t|| |j }|S r   )	r  r;   r-   default_orderrU   r   rX   rL   r  )r?   rG   grZ   rA   rA   rB   _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$  )r7  r-   r:  basisr?   rA   rB   rq  	  s    z6PrettyPrinter._print_GroebnerBasis.<locals>.<listcomp>r  r{  r|  r  c                    r  rA   rB  rn  genrJ   rA   rB   rq   
  r$  zdomain=r  )exprsr   r2  rW   gensrl   rL   r  r-   rX   r   r   )r?   r  r  r  r  r-   rZ   rA   r  rB   _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 )Nrb   r   r   r  c              	      s8   g | ]} j  |d  td |d fddqS )r   r@  rb   r   r  )rU   rL   r   )rn  r8  rJ   rA   rB   rq  
  s    $z-PrettyPrinter._print_Subs.<locals>.<listcomp>)rL   rG   r   rW   r  r   r   r   rl   rU   r  rh  r  )r?   rQ   rZ   r$  rvertr  rA   rJ   rB   _print_Subs
  s   zPrettyPrinter._print_Subsc           
      C   s   t |}| |jd }t d|  }t || }t || }t|jdkr+|S |j\}}|}t | |g  }	t t	
||	dt ji}||_|	|_|S )Nr   r   rb   r   )r   rL   rV   r   r   rl   r  rU   rW   r   r   r   r  r  )
r?   rQ   r\   rZ   r   r   r  r   r  r  rA   rA   rB   _print_number_function
  s$   

z$PrettyPrinter._print_number_functionc                 C      |  |dS )Nrg  r  rP   rA   rA   rB   _print_euler3
  rI   zPrettyPrinter._print_eulerc                 C   r  )Nr  r  rP   rA   rA   rB   _print_catalan6
  rI   zPrettyPrinter._print_catalanc                 C   r  )Nr  r  rP   rA   rA   rB   _print_bernoulli9
  rI   zPrettyPrinter._print_bernoullic                 C   r  )NLr  rP   rA   rA   rB   _print_lucas>
  rI   zPrettyPrinter._print_lucasc                 C   r  )Nr  r  rP   rA   rA   rB   _print_fibonacciA
  rI   zPrettyPrinter._print_fibonaccic                 C   r  )Nr  r  rP   rA   rA   rB   _print_tribonacciD
  rI   zPrettyPrinter._print_tribonaccic                 C   s"   | j r| |td S | |dS )Nr  	stieltjes)rK   r  r!   rP   rA   rA   rB   _print_stieltjesG
  s   zPrettyPrinter._print_stieltjesc                 C   s   |  |jd }t|td }t||  |jd  }| jr(ttd}ntd}|}t|d|   }t|d|   }t|	|dtj
iS )Nr   r   rb   r  r   r   r   )rL   rV   r   rl   rK   r   r   rX   r   r   POW)r?   rQ   rZ   r  r  rV  rW  rA   rA   rB   _print_KroneckerDeltaM
  s   z#PrettyPrinter._print_KroneckerDeltac                 C   s   t |dr| d}t|| |  }|S t |drD| d}t|| |j }t|| d }t|| |j }|S t |dr[| d}t|| |j }|S | d S )N
as_booleanzDomain: ro  z in r  z
Domain on )r  rL   r   rl   r#  r  ro  )r?   r   rZ   rA   rA   rB   _print_RandomDomainZ
  s   






z!PrettyPrinter._print_RandomDomainc                 C   sD   z|j d ur| |j |W S W n	 ty   Y nw | t|S rD   )r  rL   to_sympyr   reprr?   rt  rA   rA   rB   
_print_DMPl
  s   
zPrettyPrinter._print_DMPc                 C   r  rD   )r(  r'  rA   rA   rB   
_print_DMFu
  r  zPrettyPrinter._print_DMFc                 C      |  t|jS rD   rL   r   r\   )r?   objectrA   rA   rB   _print_Objectx
  r]  zPrettyPrinter._print_Objectc                 C   s8   t d}| |j}| |j}|||d }t|S )Nz-->r   )r   rL   r  codomainrl   r   )r?   morphismr  r  r.  tailrA   rA   rB   _print_Morphism{
  s
   zPrettyPrinter._print_Morphismc                 C   s.   |  t|j}| |}t|d|d S )Nr  r   )rL   r   r\   r1  r   rl   )r?   r/  r  pretty_morphismrA   rA   rB   _print_NamedMorphism
  s   
z"PrettyPrinter._print_NamedMorphismc                 C   s"   ddl m} | ||j|jdS )Nr   )NamedMorphismid)sympy.categoriesr4  r3  r  r.  )r?   r/  r4  rA   rA   rB   _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 rA   )r   r\   )rn  	componentrA   rA   rB   rq  
  s    z:PrettyPrinter._print_CompositeMorphism.<locals>.<listcomp>r  r   )r   r.  reverser2  rL   r1  r   rl   )r?   r/  circlecomponent_names_listcomponent_namesr  r2  rA   rA   rB   _print_CompositeMorphism
  s   

z&PrettyPrinter._print_CompositeMorphismc                 C   r*  rD   r+  )r?   categoryrA   rA   rB   _print_Category
  r]  zPrettyPrinter._print_Categoryc                 C   sX   |j s	| tjS | |j }|jr&dtd }| |jd }|||}t|d S )Nr   z==>r   )premisesrL   r   EmptySetconclusionsr   rl   r   )r?   diagrampretty_resultresults_arrowpretty_conclusionsrA   rA   rB   _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   )rn  r7   )gridr,   rA   rB   rq  
  s    $z?PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>.<listcomp>)r  r   rm  rI  )r,   rB   rq  
  s
    
z4PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>)r  rH  r  r  rz  )r?   rI  rH  matrixrA   rJ  rB   _print_DiagramGrid
  s
   
z PrettyPrinter._print_DiagramGridc                 C   r  r  r  r?   r  rA   rA   rB   _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 rA   )r  r%  )rn  r
  rt  rA   rB   rq  
  r'  z=PrettyPrinter._print_SubModule.<locals>.<listcomp>.<listcomp>rA   r  rO  rA   rB   rq  
  s    z2PrettyPrinter._print_SubModule.<locals>.<listcomp>rG  rH  )r  rU   )r?   rt  r  rA   rO  rB   _print_SubModule
  s   zPrettyPrinter._print_SubModulec                 C   s   |  |j|  |j S rD   )rL   r  rG  r?   rt  rA   rA   rB   _print_FreeModule
  rO   zPrettyPrinter._print_FreeModulec                    s(   |j j |  fdd|jjD ddS )Nc                    s   g | ]\} |qS rA   rA   r#  r   rA   rB   rq  
  r$  z?PrettyPrinter._print_ModuleImplementedIdeal.<locals>.<listcomp>rG  rH  )r  r%  rU   _moduler  rQ  rA   rS  rB   _print_ModuleImplementedIdeal
  s    z+PrettyPrinter._print_ModuleImplementedIdealc                 C      |  |j|  |j S rD   )rL   r  
base_idealr?   RrA   rA   rB   _print_QuotientRing
  rO   z!PrettyPrinter._print_QuotientRingc                 C   s    |  |j||  |jj S rD   )rL   r  r%  rW  rX  rA   rA   rB   _print_QuotientRingElement
  s    z(PrettyPrinter._print_QuotientRingElementc                 C   s   |  |j|  |jj S rD   )rL   datamodulekilled_modulerM  rA   rA   rB   _print_QuotientModuleElement
  s   z*PrettyPrinter._print_QuotientModuleElementc                 C   rV  rD   )rL   r  r^  rQ  rA   rA   rB   _print_QuotientModule
  rO   z#PrettyPrinter._print_QuotientModulec              	   C   sN   |  | }| d |_t|d|  |jdtdd |  |j }|S )Nr   z : z %s> r,  )	rL   _sympy_matrixr  r   r   rl   r  r   r.  )r?   r$  rK  rZ   rA   rA   rB   _print_MatrixHomomorphism
  s   z'PrettyPrinter._print_MatrixHomomorphismc                 C   r  rD   rL   r\   )r?   manifoldrA   rA   rB   _print_Manifold
  rI   zPrettyPrinter._print_Manifoldc                 C   r  rD   rc  )r?   patchrA   rA   rB   _print_Patch
  rI   zPrettyPrinter._print_Patchc                 C   r  rD   rc  )r?   coordsrA   rA   rB   _print_CoordSystem
  rI   z PrettyPrinter._print_CoordSystemc                 C   s   |j j|j j}| t|S rD   )
_coord_sysr  _indexr\   rL   r   )r?   r  stringrA   rA   rB   _print_BaseScalarField
  s   z$PrettyPrinter._print_BaseScalarFieldc                 C   s*   t dd |jj|j j }| t|S )Nr   r   )r"   rj  r  rk  r\   rL   r   )r?   r  r   rA   rA   rB   _print_BaseVectorField
  s   z$PrettyPrinter._print_BaseVectorFieldc                 C   sn   | j rtd}nd}|j}t|dr%|jj|j j}| |d t	| S | |}t
|  }t
|| S )NDifferentialr   rj  r   )rK   r   _form_fieldr  rj  r  rk  r\   rL   r   r   rW   rX   )r?   r  r   r  rl  rZ   rA   rA   rB   _print_Differential
  s   


z!PrettyPrinter._print_Differentialc                 C   s8   |  |jd }t|d|jj  }t|d }|S )Nr   z%s(rg   )rL   rV   r   rX   r   r   rl   )r?   rt  rZ   rA   rA   rB   	_print_Tr
  s   zPrettyPrinter._print_Trc                 C   J   |  |jd }t|  }| jrt|td  }|S t|d }|S )Nr   nurL   rV   r   rW   rK   rX   r!   rY   rA   rA   rB   _print_primenu
     zPrettyPrinter._print_primenuc                 C   rs  )Nr   Omegaru  rY   rA   rA   rB   _print_primeomega  rw  zPrettyPrinter._print_primeomegac                 C   s@   |j j dkr| jr| td}|S | td}|S | |S )NdegreeDegree   )r\   rK   rL   r   chrrH   rY   rA   rA   rB   _print_Quantity  s   
zPrettyPrinter._print_Quantityc                 C   sD   t dt|j d }| |j}| |j}t t||| }|S )Nr   )r   r   r   rL   r   r   r   r   r   rA   rA   rB   _print_AssignmentBase  s
   z#PrettyPrinter._print_AssignmentBasec                 C   r  rD   rc  r  rA   rA   rB   
_print_Str#  rI   zPrettyPrinter._print_StrrD   )F)T)r{  r|  )NNr   F)FNrf   rg   )FNr  Frf   rg   )r   
__module____qualname____doc__printmethod_default_settingsr8   rH   propertyrK   rN   rR   rS   r[   r_   _print_RandomSymbolra   rd   rp   rx   r{   r|   r   r   r   _print_Infinity_print_NegativeInfinity_print_EmptySet_print_Naturals_print_Naturals0_print_Integers_print_Rationals_print_Complexes_print_EmptySequencer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r+  r?  r0  r^  rj  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  rP  r\  r^  r_  rd  rf  rg  rj  rx  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#  r7  r  rS  r[  r\  rb  rd  rh  rs  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  _print_SeqPer_print_SeqAdd_print_SeqMulrU   r2  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  _print_bellr  r  r  r   r"  r$  r(  r)  r-  r1  r3  r7  r=  r?  rG  rL  rN  rP  rR  rU  rZ  r[  r_  r`  rb  re  rg  ri  rm  rn  rq  rr  rv  ry  r~  r  r  rA   rA   rA   rB   r(      s   
					%%K6aC		

$	f!# 8	0T%

		H=,			
					
	r(   c                 K   s:   t |}|jd }t|}z
|| W t| S t| w )zReturns a string containing the prettified form of expr.

    For information on keyword arguments see pretty_print function.

    r/   )r(   r:   r    rN   )rG   r@   r  r/   uflagrA   rA   rB   r  '  s   

r  c                 K   s   t t| fi | 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  )rG   kwargsrA   rA   rB   pretty_print:  s   +r  c                 K   sH   ddl m} ddlm} d|vrd|d< |t| fi ||  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)getpreferredencodingr1   i  N)pydocr  localer  r  encode)rG   r@   r  r  rA   rA   rB   pager_printj  s
    r  )?rH  
sympy.corer   sympy.core.addr   sympy.core.containersr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r	   sympy.core.powerr
   sympy.core.sortingr   sympy.core.symbolr   sympy.core.sympifyr   sympy.printing.conventionsr   sympy.printing.precedencer   r   r   sympy.printing.printerr   r   sympy.printing.strr   sympy.utilities.iterablesr   sympy.utilities.exceptionsr    sympy.printing.pretty.stringpictr   r   &sympy.printing.pretty.pretty_symbologyr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   rM  pprint_use_unicodepprint_try_use_unicoder(   r  r  pprintr  rA   rA   rA   rB   <module>   sb    @                      
-