
    MZdA                    j   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/m0Z0m1Z1m2Z2m3Z3 e/Z4e2Z5 G d de      Z6 ee6      d        Z7d Z8e8Z9d Z:y)    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	annotatedc                      e Zd ZdZdZddddddddddd
Zdd	Zd
 Zed        Z	d Z
d Zd Zd ZddZeZd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZeZeZeZeZeZ eZ!d Z"d Z#d Z$d Z%d Z&d Z'd  Z(dd!Z)d" Z*d# Z+d$ Z,d% Z-d& Z.dd'Z/dd(Z0d) Z1d* Z2d+ Z3d, Z4d- Z5d. Z6d/ Z7d0 Z8d1 Z9d2 Z:d3 Z;d4 Z<d5 Z=dd6Z>d7 Z?d8 Z@d9 ZAd: ZBd; ZCd< ZDd= ZEd> ZFd? ZGd@ ZHdA ZIdB ZJdC ZKdD ZLdE ZMdF ZNdG ZOdH ZPdI ZQdJ ZRdK ZSdL ZTdM ZUdN ZVdO ZWdP ZXdQ ZYdR ZZdS Z[dT Z\i fdUZ]dV Z^dW Z_dX Z`dY ZadZ Zbd[ Zcd\ Zdd] Zed^ Zfdd_Zgd` Zhda Zidb Zjdc Zk	 	 dddZlde Zmdf Zndg Zodh Zp	 	 	 ddjZqdk Zredl        Zsdm Ztdn Zudo Zvdp Zwdq Zxdr Zyds Zzdt Z{du Z|dv Z}dw Z~dx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZdddid dfdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdÄ ZdĄ Zdń ZdƄ ZdǄ ZdȄ ZdɄ Zdʄ ZeZd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)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                 (   t        j                  | |       t        | j                  d   t              s't        dj                  | j                  d               | j                  d   dvr't        dj                  | j                  d               y )Nr2   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settingss     >/usr/lib/python3/dist-packages/sympy/printing/pretty/pretty.pyr6   zPrettyPrinter.__init__/   s    x($..)9:C@DKKDNN[kLlmnn^^,-Z?SZZ[_[i[ijz[{|}} @    c                 *    t        t        |            S Nr   r9   r=   exprs     r?   emptyPrinterzPrettyPrinter.emptyPrinter7   s    #d)$$r@   c                 6    | j                   d   ryt               S )Nr,   T)r8   r   )r=   s    r?   _use_unicodezPrettyPrinter._use_unicode:   s    >>-(%''r@   c                 X     | j                  |      j                  di | j                  S )N )_printrenderr8   rD   s     r?   doprintzPrettyPrinter.doprintA   s%    't{{4 ''9$..99r@   c                     |S rB   rJ   r=   es     r?   _print_stringPictzPrettyPrinter._print_stringPictE   s    r@   c                     t        |      S rB   )r   rO   s     r?   _print_basestringzPrettyPrinter._print_basestringH   s    !}r@   c                     t        | j                  |j                        j                          }t        |j	                  d       }|S )Natan2)r   
_print_seqargsparensleftr=   rP   pforms      r?   _print_atan2zPrettyPrinter._print_atan2K   s:    DOOAFF3::<=EJJw/0r@   c                 D    t        |j                  |      }t        |      S rB   )r   namer   )r=   rP   	bold_namesymbs       r?   _print_SymbolzPrettyPrinter._print_SymbolP   s    QVVY/$r@   c                 F    | j                  || j                  d   dk(        S )Nr1   bold)ra   r8   rO   s     r?   _print_MatrixSymbolz!PrettyPrinter._print_MatrixSymbolT   s$    !!!T^^4F%G6%QRRr@   c                 t    | j                   d   }|dk(  r| j                  dk(  }t        t        ||            S )Nr+   r'      )r+   )r8   _print_levelr   r   )r=   rP   r+   s      r?   _print_FloatzPrettyPrinter._print_FloatW   s<     NN;/	))Q.I$qI677r@   c           	         |j                   }|j                  }| j                  |      }t        |j	                  d       }t        |j                  d       }t        |j	                  | j                  t        d                   }t        |j	                  d       }t        |j	                  | j                  |             }t        |j	                  d       }|S )N()MULTIPLICATION SIGN_expr1_expr2rK   r   rY   rightr!   r=   rP   vec1vec2r[   s        r?   _print_CrosszPrettyPrinter._print_Cross_   s    xxxxD!EJJsO,EKK,-EJJt{{15J3K'LMNEJJsO,EJJt{{4'89:EJJsO,r@   c           	      X   |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }t        |j                  | j                  t        d                   }|S )Nrj   rk   rl   NABLA_exprrK   r   rY   rp   r!   r=   rP   vecr[   s       r?   _print_CurlzPrettyPrinter._print_Curlk   s    ggC EJJsO,EKK,-EJJt{{15J3K'LMNEJJt{{1W:'>?@r@   c           	      X   |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }t        |j                  | j                  t        d                   }|S )Nrj   rk   DOT OPERATORrv   rw   ry   s       r?   _print_DivergencezPrettyPrinter._print_Divergencet   s    ggC EJJsO,EKK,-EJJt{{1^3D'EFGEJJt{{1W:'>?@r@   c           	         |j                   }|j                  }| j                  |      }t        |j	                  d       }t        |j                  d       }t        |j	                  | j                  t        d                   }t        |j	                  d       }t        |j	                  | j                  |             }t        |j	                  d       }|S )Nrj   rk   r}   rm   rq   s        r?   
_print_DotzPrettyPrinter._print_Dot}   s    xxxxD!EJJsO,EKK,-EJJt{{1^3D'EFGEJJsO,EJJt{{4'89:EJJsO,r@   c           	          |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }|S )Nrj   rk   rv   rw   r=   rP   funcr[   s       r?   _print_GradientzPrettyPrinter._print_Gradient   sc    wwD!EJJsO,EKK,-EJJt{{1W:'>?@r@   c           	          |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }|S )Nrj   rk   	INCREMENTrw   r   s       r?   _print_LaplacianzPrettyPrinter._print_Laplacian   sc    wwD!EJJsO,EKK,-EJJt{{1[>'BCDr@   c                     	 t        t        |j                  j                  |             S # t        $ r | j                  |      cY S w xY w)N)printer)r   r   	__class____name__KeyErrorrF   rO   s     r?   _print_AtomzPrettyPrinter._print_Atom   sC    	(k!++*>*>MNN 	($$Q''	(s   ), A	A	c                 j    | j                   r| j                  |      S ddg}| j                  |dd      S )Nz-oooorj   rk   )rH   r   rV   )r=   rP   inf_lists      r?   _print_RealszPrettyPrinter._print_Reals   s8    ##A&&t}H??8S#66r@   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S Nr   !)rW   rK   
is_Integeris_nonnegative	is_Symbolr   rX   rY   r=   rP   xr[   s       r?   _print_subfactorialz!PrettyPrinter._print_subfactorial   sX    FF1IA!"2"2q{{/EEJJsO,r@   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S r   rW   rK   r   r   r   r   rX   rp   r   s       r?   _print_factorialzPrettyPrinter._print_factorial   sY    FF1IA!"2"2q{{/EEKK,-r@   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S )Nr   z!!r   r   s       r?   _print_factorial2zPrettyPrinter._print_factorial2   sY    FF1IA!"2"2q{{/EEKK-.r@   c                 x   |j                   \  }}| j                  |      }| j                  |      }dt        |j                         |j                               z  }t	        |j                  |       }t	        |j                  |       }t	        |j                  dd       }|j                  dz   dz  |_        |S )N rj   rk   rf      )rW   rK   maxwidthr   aboverX   baseline)r=   rP   nkn_pformk_pformbarr[   s           r?   _print_binomialzPrettyPrinter._print_binomial   s    vv1++a.++a.#gmmow}}77GMM#./EKK01ELLc23..1,q0r@   c                    t        dt        |j                        z   dz         }| j                  |j                        }| j                  |j
                        }t        t        j                  |||      dt         j                  i}|S )Nr   binding)	r   r   rel_oprK   lhsrhsr   nextOPENr=   rP   oplrr[   s         r?   _print_RelationalzPrettyPrinter._print_Relational   sg    d188n,s23KKKKJOOAr15OzOr@   c                    ddl m}m} | j                  r|j                  d   }| j                  |      }t        ||      r| j                  |d      S t        ||      r| j                  |d      S |j                  r"|j                  st        |j                          }t        |j                  d       S | j                  |      S )Nr   )
EquivalentImpliesu   ⇎)altcharu   ↛   ¬)sympy.logic.boolalgr   r   rH   rW   rK   r7   _print_Equivalent_print_Implies
is_Booleanis_Notr   rX   rY   _print_Function)r=   rP   r   r   argr[   s         r?   
_print_NotzPrettyPrinter._print_Not   s    =&&)CKK$E#z*--c;d-ee#w'**38Z*[[~~cjj"ELLN3uzz.9::''**r@   c                    |j                   }|rt        |j                   t              }|d   }| j                  |      }|j                  r"|j
                  st        |j                          }|dd  D ]r  }| j                  |      }|j                  r"|j
                  st        |j                          }t        |j                  d|z         }t        |j                  |       }t |S )Nkeyr   rf    %s )	rW   sortedr   rK   r   r   r   rX   rp   )r=   rP   charsortrW   r   r[   	pform_args           r?   __print_BooleanzPrettyPrinter.__print_Boolean   s    vv!&&&67D1gC >>#**/E8 	8CC(I~~cjj&	(8(8(:;	FTM :;EI 67E	8 r@   c                 d    | j                   r| j                  |d      S | j                  |d      S )N   ∧Tr   rH   _PrettyPrinter__print_Booleanr   rO   s     r?   
_print_AndzPrettyPrinter._print_And  s5    ''+<=='''55r@   c                 d    | j                   r| j                  |d      S | j                  |d      S )Nu   ∨Tr   r   rO   s     r?   	_print_OrzPrettyPrinter._print_Or  s5    ''+;<<'''55r@   c                 d    | j                   r| j                  |d      S | j                  |d      S )Nu   ⊻Tr   r   rO   s     r?   
_print_XorzPrettyPrinter._print_Xor  4    ''955'''55r@   c                 d    | j                   r| j                  |d      S | j                  |d      S )Nu   ⊼Tr   r   rO   s     r?   _print_NandzPrettyPrinter._print_Nand  s4    '':66'''55r@   c                 d    | j                   r| j                  |d      S | j                  |d      S )Nu   ⊽Tr   r   rO   s     r?   
_print_NorzPrettyPrinter._print_Nor$  r   r@   c                 l    | j                   r| j                  ||xs dd      S | j                  |      S )Nu   →Fr   r   r=   rP   r   s      r?   r   zPrettyPrinter._print_Implies*  s;    ''7+L6LSX'YY''**r@   c                 l    | j                   r| j                  ||xs d      S | j                  |d      S )Nu   ⇔Tr   r   r   s      r?   r   zPrettyPrinter._print_Equivalent0  s:    ''7+S6STT'''55r@   c           	          | j                  |j                  d         }t        |j                  t	        d|j                                      S )Nr   _)rK   rW   r   r   r   r   rZ   s      r?   _print_conjugatezPrettyPrinter._print_conjugate6  s9    AFF1I&EKKc5;;=)ABDDr@   c                 r    | j                  |j                  d         }t        |j                  dd       }|S )Nr   |)rK   rW   r   rX   rZ   s      r?   
_print_AbszPrettyPrinter._print_Abs:  s2    AFF1I&ELLc23r@   c                     | j                   r8| j                  |j                  d         }t        |j	                  dd       }|S | j                  |      S )Nr   lfloorrfloorrH   rK   rW   r   rX   r   rZ   s      r?   _print_floorzPrettyPrinter._print_floor?  sL    KKq	*EXx @AEL''**r@   c                     | j                   r8| j                  |j                  d         }t        |j	                  dd       }|S | j                  |      S )Nr   lceilrceilr   rZ   s      r?   _print_ceilingzPrettyPrinter._print_ceilingG  sL    KKq	*EWg >?EL''**r@   c                 `   t        |j                        r| j                  rt        d      }nd}d }d}t	        |j
                        D ]  \  }}| j                  |      }t        |j                  |       }||z  }|j                  r|dkD  r|t        t        |            z  }||}`t        |j                  d       }t        |j                  |       } t        | j                  |j                        j                         dt        j                  i}	t        |      }
|dkD  dk7  r|
t        t        |            z  }
t        |
j                  t        j                   |       }
|
j"                  dz   |
_        t        t        j$                  |
|	       }
t        j&                  |
_        |
S )NPARTIAL DIFFERENTIALdr   rf   r   r   F)r   rE   rH   r!   reversedvariable_countrK   r   rY   r   r9   rp   rX   FUNCbelowr   LINEr   r   MULr   )r=   derivderiv_symbolr   count_total_derivsymnumsdsfr[   s              r?   _print_DerivativezPrettyPrinter._print_DerivativeO  sx   EJJ'D,=,=34LL !5!56 	-HCC AQVVL12B$NNaCH--y-,	- &*kk%**&=&D&D&FHOOH <(!e+:c*;&<==EEKK
;<!+JOOE156"r@   c                    ddl m}m} | |       k(  r!t        d      }t	        |j                          S  ||j                               j                  }|g k(  r4| j                  |j                  dz
        }t	        |j                          S t        d      }|D ]L  }| j                  t        t        |            j                  dd            }t	        |j                  |       }N |S )Nr   PermutationCycle rf   ,) sympy.combinatorics.permutationsr  r  r   r   rX   listcyclic_formrK   sizer9   tuplereplacerp   )r=   dcr  r  cycdc_listr)   r   s           r?   _print_CyclezPrettyPrinter._print_Cyclet  s    G=R.Cszz|,,bggi(44b=++bggk*Cszz|,,n 	,ACaM11#r:;Aciil+C	, 
r@   c                 X   ddl m}m} |j                  }|t	        d| dddd       n| j
                  j                  d	d
      }|r| j                   ||            S |j                  }t        t        t        |                  }t        d      }d
}t        ||      D ]q  \  }	}
| j                  |	      }| j                  |
      }t        |j!                  |       }|rd}nt        |j#                  d       }t        |j%                  |       }s t        |j'                          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
stacklevelr3   Tr  Fr   )r  r  r  print_cyclicr   r8   getr  
array_formr	  rangelenr   ziprK   r   r   rY   rp   rX   )r=   rE   r  r  r3   lowerupperresultfirstur   s1s2cols                 r?   _print_Permutationz PrettyPrinter._print_Permutation  s   G!.."%++6- 8 */+P ..,,]DAK$$U4[11U3u:&'Bu% 	4DAqQBQBbhhrl+C #((3-0c!23F	4 6==?++r@   c                    |j                   }| j                  |      }|j                  rt        |j	                          }|}|j
                  D ]W  }| j                  |d         }|j                         dkD  rt        |j	                          }t        |j                  d|       }Y d}d }|j
                  D ]  }	|j                         }
|
dz   }| j                   }|r|dz  }t        d|      }t        |      }|j                  ||
z
  dz  z   |_        t        |	      dkD  rt        |	      dk(  rt        d      }| j                  |	d         }t        |	      dk(  r(| j                  |	d         }| j                  |	d         }|rnt        ddj                         z
        }t        |j                  d	|z         }t        dd
j                         z
        }t        |j                  d	|z         }t        |j                         }t        |j!                         }|st        |j                  d	       }|r|}d}t        |j                  |       } t        |j                  |       }t        j"                  |_        |S )Nr   rf   z dTr   intr     r      F)functionrK   is_Addr   rX   limitsr   rp   heightrH   r   r   r  r   rY   r   r   r   r   )r=   integralr   prettyFr   r   	prettyArg	firsttermr   limhH
ascii_modevintr[   prettyAprettyBspcs                     r?   _print_IntegralzPrettyPrinter._print_Integral  sa    ++a.88 '.."23G  	:AAaD)I 1$&	(8(8(:;	ciii89C	: 	?? .	/C

AAA "...JQq>D t$E \\A- EN 3x!| s8q=(nG"kk#a&1Gs8q="kk#a&1G"kk#a&1G aW]]_!45C(',,sSy*ABGaW]]_!45C('--c	*BCG"EKK$89"EKK$89"EKK$45!	u.].	/` CHHQK("r@   c                     |j                   }| j                  |      }t        dd      }t        dd      }t        dd      }| j                  rt        dd      }d}|j	                         }d}d}	d}
|j
                  D ]Z  }| j                  |      \  }}|dz   d	z  d
z  dz
  }||z   ||dz
  z  z   |z   |z   g}t        |dz         D ]%  }|j                  d|z   d|dz
  z  z   |z   dz          ' t        d      }t         |j                  |  }t        |	|j	                               }	|r|j	                         }
t        |j                  |       }t        |j                  |       }|r	d|_        d}|j	                         }t        d      }t         |j                  dg|dz
  z    }t        |j!                  |       }t        |j!                  |       }] |	|
dz  z   |_        t        j"                  |_        |S )Nr   rf   r   -u   ┬Tr   r      r(  r   r  F)termrK   r   rH   r-  r,  '_PrettyPrinter__print_SumProduct_Limitsr  appendr   r   stackr   r   r   r   rp   r   r   )r=   rE   r   pretty_funchorizontal_chr
corner_chrvertical_chrfunc_heightr   	max_uppersign_heightr2  pretty_lowerpretty_upperr   
sign_linesr   pretty_signr-  paddings                       r?   _print_ProductzPrettyPrinter._print_Product  s*   yykk$'c1#q\
C|!#q\NEJ!((*	;; 	FC)-)G)G)L&L, 1_)Q.2E(:55QR79STWaadrrsJ;?+ _!!#"4uQw"H<"WZ]"]^_ %R.K$&7k&7&7&DEK I|':':'<=I)002$k&7&7&EFK$k&7&7&EFK'($ '')F nG -'--#
1C"DEG$k&7&7&@AK$k&7&7&DEK;	F>  );>9(nnr@   c                 \      fd} j                  |d         } ||d   |d         }||fS )Nc                     t        dt        d      z   dz         }j                  |       }j                  |      }t        t        j                  |||       }|S )Nr   ==)r   r   rK   r   r   )r   r   r   r   r   r[   r=   s         r?   print_startz<PrettyPrinter.__print_SumProduct_Limits.<locals>.print_start.  sS    C$t*,s23BC AC A
2q 9:ELr@   r   r   rf   )rK   )r=   r2  rR  prettyUpperprettyLowers   `    r?   __print_SumProduct_Limitsz'PrettyPrinter.__print_SumProduct_Limits-  s;    	 kk#a&)!#a&#a&1K''r@   c                    | j                    }d }|j                  }| j                  |      }|j                  rt	        |j                          }|j                         dz   }d}d}d}	|j                  D ]I  }
| j                  |
      \  }}t        ||j                               } |||j                         |j                         |      \  }}}}t        d      }t	         |j                  |  }|r|j                         }	t	        |j                  |       }t	        |j                  |       }|r8|xj                  ||j                         dz  |j                  z
  z
  z  c_        d}t        d      }t	         |j                  dg|z    }t	        |j!                  |       }t	        |j!                  |       }L s|nd}||	dz  z   |z   |_        t        j"                  |_        |S )Nc                    dd}t        | d      }|dz  }|dz   }| dz  }g }	|r|	j                  d|z  dz          |	j                  dd|dz
  z  z         t        d|      D ]!  }
|	j                  d|
z  dd||
z
  z         # |r|	j                  d|z  dd||z
  z         t        t        d|            D ]!  }
|	j                  d|
z  d	d||
z
  z         # |	j                  d	d|dz
  z  z   d
z          |||z   |	|fS ||z   }||z   }t	        dd      }|	j                  d|z         t        d|      D ](  }
|	j                  d|
z  |d   d||
z
  dz
  z         * t        t        d|            D ](  }
|	j                  d|
z  |d   d||
z
  dz
  z         * |	j                  |d   |z         ||d|z  z   |	|fS )Nc                     |rt        |       |kD  r| S |t        |       z
  }|dv s|t        d      vr| d|z  z   S |dz  }d|z  }|dk(  rd|z  | z   S || z   d|t        |      z
  z  z   S )N)<^><rY  r   r   >)r  r	  )r   widhowneedhalfleads         r?   adjustz6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjust=  s    c!fslHSV|,&#T%[*@s4x<'Qw4x#:t8a<'ax#tc$i'7"888r@   r   rf   r   r   z\%s`\rk   /r  sumr)  r      )NrY  )r   r@  r  r   r   )	hrequiredr  r  	use_asciira  r3  r   wmorelinesr)   vsums               r?   asumz&PrettyPrinter._print_Sum.<locals>.asum<  s   
9 Iq!A1AAAq=DES!Ws]+WQU45q! BALLSUCQK!@ABLLCGS!a%[!AB!%1+. AALLCE3A;!?@AS3A;.45!d(E4//HHE1~S!W%q! OALLSUDGS!a%!)_!MNO!%1+. OALLSUDGS!a%!)_!MNOT!Wa[)!af*eT11r@   r   Tr   r  Fr   )rH   r*  rK   r+  r   rX   r-  r,  r?  r   r   r   rA  r   r   r   rp   r   r   )r=   rE   r5  rl  r   r/  r4  r   rG  rH  r2  rT  rS  r   r3  slines
adjustment
prettySignpadascii_adjustments                       r?   
_print_SumzPrettyPrinter._print_Sum9  s   ***
(	2T MM++a.88 '.."23GNNq  	;; 	=C'+'E'Ec'J$KI{'9'9';<I (,;$$&(9(9(;Z(I$Aq&*#BJ#%5Z%5%5v%>?J(//1#Z%5%5k%BCJ#Z%5%5k%BCJ  A)91)<)0)9)9*: %; ;  R.Cicii#q12C#Z%5%5c%:;J *"2"27";<G9	=@ .8:Q${A~58HH$..r@   c                 
   |j                   \  }}}}| j                  |      }t        |      t        d   k  rt	        |j                  dd       }t	        d      }| j                  |      }| j                  rt	        |j                  d       }nt	        |j                  d       }t	        |j                  | j                  |             }t        |      dk(  s"|t        j                  t        j                  fv rd}n| j                  rt        |      d	k(  rd
nd}t	        |j                  | j                  |             }t	        |j                  |       }t	        |j                  |      dt        j                  i}|S )Nr   rj   rk   r2  u   ─→z->z+-r  +u   ⁺u   ⁻r   )rW   rK   r   r   r   rX   rH   rp   r9   r   InfinityNegativeInfinityr   r   )	r=   r   rP   zz0dirELimLimArgs	            r?   _print_LimitzPrettyPrinter._print_Limit  s:   1b#KKNa=Ju--AHHS#./AQ.e!fgFd!34FV\\$++b/:;s8trajj!2D2D%EEC  58X_1JaV\\$++c*:;<#))F+,#))A,?
?
r@   c           	         |}i }t        |j                        D ]7  }t        |j                        D ]  }| j                  |||f         |||f<    9 d}d}dg|j                  z  }t        |j                        D ]I  }t	        t        |j                        D cg c]  }|||f   j                          c}xs dg      ||<   K d}	t        |j                        D ]  }d}
t        |j                        D ]  }|||f   }|j                         ||   k  sJ ||   |j                         z
  }|dz  }||z
  }t        |j                  d|z         }t        |j                  d|z         }|
|}
{t        |
j                  d|z         }
t        |
j                  |       }
 |	|
}	t        |      D ]  }t        |	j                  d       }	 t        |	j                  |
       }	 |	t        d      }	|	S c c}w )zL
        This method factors out what is essentially grid printing.
        r   rf   r   Nr   r  )
r  rowscolsrK   r   r   r   rp   rY   r   )r=   rP   MMsr)   r5   hsepvsepmaxwDD_rowr   wdeltawleftwrightr   s                   r?   _print_matrix_contentsz$PrettyPrinter._print_matrix_contents  s    qvv 	0A166] 0;;qAw/1a40	0
  taff}qvv 	LAU166]C2ad8>>+CJsKDG	L qvv '	,AE166] 4q!tH wwyDG+++
 a1779,!%F
 34s5y 12 =E"EKKD$9:"EKKN3548 y 4[ .-. AGGEN+AO'	,R 92Ac Ds   G>
c                     | j                  |      }|j                         dz  |_        t        |j	                  ||       }|S )Nr   )r  r-  r   r   rX   )r=   rP   lparensrparensr  s        r?   _print_MatrixBasezPrettyPrinter._print_MatrixBase  s=    ''*XXZ]
'23r@   c                 <   |j                   }|j                  rqddlm} t	        ||      r| j                  |j                  dd      S | j                  |      }|j                         dz  |_	        t        |j                  dd       S | j                  |dd      S )Nr   )BlockMatrixr   )r  r  r   )r   is_MatrixExpr&sympy.matrices.expressions.blockmatrixr  r7   r  blocksrK   r-  r   r   rX   )r=   rP   matr  r  s        r?   _print_Determinantz PrettyPrinter._print_Determinant  s    eeJ#{+--cjj#s-SSC AQAJqxxS122))#sC)HHr@   c                 f    | j                   rd}nd}| j                  |j                  d d |d       S )Nu   ⊗.*c                 ,    t        |       t        d   k  S Nr   r   r   r   s    r?   <lambda>z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>      #9!#<
5@Q#Q r@   parenthesizerH   rV   rW   )r=   rE   circled_timess      r?   _print_TensorProductz"PrettyPrinter._print_TensorProduct  s<    $M Mtyy$mQ  S 	Sr@   c                 f    | j                   rd}nd}| j                  |j                  d d |d       S )Nr   z/\c                 ,    t        |       t        d   k  S r  r  r  s    r?   r  z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>  r  r@   r  r  )r=   rE   wedge_symbols      r?   _print_WedgeProductz!PrettyPrinter._print_WedgeProduct  s<    #L Ltyy$lQ  S 	Sr@   c                     | j                  |j                        }t        |j                  dd       }|j	                         dz  |_        t        |j                  d       }|S )Nrj   rk   r   tr)rK   r   r   rX   r-  r   rY   )r=   rP   r  s      r?   _print_TracezPrettyPrinter._print_Trace  sR    KKS)*XXZ]
/0r@   c                 |   ddl m} t        |j                  |      rv|j                  j
                  r`|j                  j
                  rJ| j                  t        |j                  j                  d|j                  |j                  fz  z               S | j                  |j                        }t        |j                          }| j                  |j                  |j                  fd      j                  dd      d   }t        t        j                  ||      d	t        j                  i}||_        ||_        |S )
Nr   MatrixSymbolz_%d%d, 	delimiter[]rY   rp   r   )sympy.matricesr  r7   parentr)   	is_numberr5   rK   r   r^   r   rX   rV   r   r   r   
prettyFunc
prettyArgs)r=   rE   r  r  prettyIndicesr[   s         r?   _print_MatrixElementz"PrettyPrinter._print_MatrixElement'  s   /t{{L1FF$$)9)9;;4;;++g8H.HHIK K T[[1J#Z%6%6%89J OOTVVTVV,<O f#Sf1!5M__Z?Az AE  *E,ELr@   c                     ddl m}  j                  |j                        }t	        |j                  |      st        |j                          } fd} j                   ||j                  |j                  j                         ||j                  |j                  j                        fd      j                  dd      d   }t        t        j                  ||      d	t
        j                  i}||_        ||_        |S )
Nr   r  c                     t        |       } | d   dk(  r| d= | d   dk(  rd| d<   | d   |k(  rd| d<   t        j                  | d       S )Nr   rf   r   r  :r  )r	  r   rV   )r   dimr=   s     r?   ppslicez1PrettyPrinter._print_MatrixSlice.<locals>.ppsliceB  s^    QAtqyaDtqy!ts{!tqC@AAr@   r  r  r  r  r  r   )r  r  rK   r  r7   r   rX   rV   rowslicer  colslicer  r   r   r   r  r  )r=   mr  r  r  r  r[   s   `      r?   _print_MatrixSlicez PrettyPrinter._print_MatrixSlice<  s    /[[*
!((L1#Z%6%6%89J	B __gajj!((--&HAJJ.&0;? % AAGSX[A\]^`
 &0ooj*&MOOOO &%r@   c                     |j                   }| j                  |      }ddlm}m} t        ||      s.t        ||      s"|j                  rt        |j                          }|t        d      z  }|S )Nr   r  r  T)	r   rK   r  r  r  r7   r  r   rX   )r=   rE   r  r[   r  r  s         r?   _print_TransposezPrettyPrinter._print_TransposeW  s[    hhC <3-3,1B1B/E
3(r@   c                    |j                   }| j                  |      }| j                  rt        d      }nt        d      }ddlm}m} t        ||      s.t        ||      s"|j                  rt        |j                          }||z  }|S )Nu   †rt  r   r  )
r   rK   rH   r   r  r  r  r7   r  rX   )r=   rE   r  r[   dagr  r  s          r?   _print_AdjointzPrettyPrinter._print_Adjointa  sr    hhC \*CS/C<3-3,1B1B/Es
r@   c                     |j                   j                  dk(  r| j                  |j                   d         S | j                  |j                         S )Nrf   rf   r   r   )r  shaperK   )r=   Bs     r?   _print_BlockMatrixz PrettyPrinter._print_BlockMatrixo  s<    88>>V#;;qxx~..{{188$$r@   c                 |   d }|j                   D ]  }| j                  |      }||}|j                         d   }t        |      j	                         r.t        t        j                  |d       }| j                  |      }nt        t        j                  |d       }t        t        j                  ||       } |S )Nr   r    + )rW   rK   as_coeff_mmulr   could_extract_minus_signr   r   r   )r=   rE   r   itemr[   coeffs         r?   _print_MatAddzPrettyPrinter._print_MatAddt  s    II 	;DKK%Ey**,Q/U8446"JOOAs$;<A KK-E"JOOAu$=>A
5 9:	; r@   c                 l   t        |j                        }ddlm} ddlm} ddlm} t        |      D ]n  \  }}t        |t        |||f      rAt        |j                        dkD  r)t        | j                  |      j                          ||<   [| j                  |      ||<   p t        j                  | S )Nr   HadamardProduct)KroneckerProductMatAddrf   )r	  rW   #sympy.matrices.expressions.hadamardr  $sympy.matrices.expressions.kroneckerr  !sympy.matrices.expressions.mataddr  	enumerater7   r   r  r   rK   rX   __mul__)r=   rE   rW   r  r  r  r)   as           r?   _print_MatMulzPrettyPrinter._print_MatMul  s    DIIGI<dO 	)DAq1sFO=MNODII*$dkk!n&;&;&=>Q++a.Q	) !!4((r@   c                 F    | j                   rt        d      S t        d      S )Nu   𝕀IrH   r   rD   s     r?   _print_IdentityzPrettyPrinter._print_Identity  !    HIIc?"r@   c                 F    | j                   rt        d      S t        d      S )Nu   𝟘0r  rD   s     r?   _print_ZeroMatrixzPrettyPrinter._print_ZeroMatrix  s!    IJJc?"r@   c                 F    | j                   rt        d      S t        d      S )Nu   𝟙1r  rD   s     r?   _print_OneMatrixzPrettyPrinter._print_OneMatrix  r  r@   c                     t        |j                        }t        |      D ]  \  }}| j                  |      ||<    t	        j
                  | S rB   )r	  rW   r  rK   r   r  r=   rE   rW   r)   r  s        r?   _print_DotProductzPrettyPrinter._print_DotProduct  sH    DIIdO 	%DAqkk!nDG	%!!4((r@   c                    | j                  |j                        }ddlm} t	        |j                  |      s,|j                  j
                  rt        |j                          }|| j                  |j                        z  }|S )Nr   r  )	rK   baser  r  r7   r  r   rX   exp)r=   rE   r[   r  s       r?   _print_MatPowzPrettyPrinter._print_MatPow  s]    DII&/$))\2tyy7N7N/EDHH-.r@   c           	          ddl m ddlm ddlm | j                  rt        d      }nd}| j                  |j                  d d |fd      S )	Nr   r  r  MatMulRingr  c                 "    t        | f      S rB   r7   )r   r  r  r  s    r?   r  z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>  s    z!ffo5V'W r@   r  )
r  r  r  r  !sympy.matrices.expressions.matmulr  rH   r   rV   rW   )r=   rE   delimr  r  r  s      @@@r?   _print_HadamardProductz$PrettyPrinter._print_HadamardProduct  sK    G<<'EEtyy$eW  Y 	Yr@   c                    | j                   rt        d      }n| j                  d      }| j                  |j                        }| j                  |j                        }t        |j                        t        d   k  rt        |j                          }t        t        j                  ||      dt        j                  i}||z  S )Nr  .r   r   )rH   r   rK   r  r  r   r   r   rX   r   r   r   )r=   rE   circpretty_base
pretty_exppretty_circ_exps         r?   _print_HadamardPowerz"PrettyPrinter._print_HadamardPower  s    v&D;;s#Dkk$)),[[*
dhh*U"33#Z%6%6%89J$__T:.
OO
 O++r@   c                     ddl m ddlm | j                  rd}nd}| j                  |j                  d d |fd      S )Nr   r  r  u    ⨂ z x c                      t        | f      S rB   r  )r   r  r  s    r?   r  z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>  s    z!ff5E'F r@   r  )r  r  r  r  rH   rV   rW   )r=   rE   r  r  r  s      @@r?   _print_KroneckerProductz%PrettyPrinter._print_KroneckerProduct  sC    <<8EEtyy$eF  H 	Hr@   c                     | j                  |j                  j                        }t        |j	                  dd       }|S Nr  r  )rK   lamdarE   r   rX   )r=   Xr  s      r?   _print_FunctionMatrixz#PrettyPrinter._print_FunctionMatrix  s2    KK%c*+r@   c                     |j                   dk(  sC|j                   |j                  }}t        |t        |dd      d      }| j	                  |      S | j                  d      | j                  |j                        z  S )Nrf   r  Fevaluate)r   denr   r
   
_print_MulrK   )r=   rE   r   r  ress        r?   _print_TransferFunctionz%PrettyPrinter._print_TransferFunction  sd    xx1}xxCc3sB7%HC??3'';;q>$++dhh"777r@   c                     t        |j                        }t        |j                        D ]-  \  }}t        | j	                  |      j                          ||<   / t        j                  | S rB   )r	  rW   r  r   rK   rX   r  r  s        r?   _print_SerieszPrettyPrinter._print_Series  s[    DIIdii( 	;DAq $++a."7"7"9:DG	;!!4((r@   c                    ddl m} t        |j                        }g }t	        t        |            D ]  \  }}t        ||      rgt        |j                        dkD  rO| j                  |      }|j                         dz  |_
        |j                  t        |j                                 y| j                  |      }|j                         dz  |_
        |j                  |        t        j                  | S )Nr   )MIMOParallelrf   r   )sympy.physics.control.ltir  r	  rW   r  r   r7   r  rK   r-  r   r@  r   rX   r  )r=   rE   r  rW   pretty_argsr)   r  
expressions           r?   _print_MIMOSerieszPrettyPrinter._print_MIMOSeries  s    :DIIhtn- 	/DAq1l+DII0B![[^
&0&7&7&91&<
#"":z/@/@/B#CD![[^
&0&7&7&91&<
#"":.	/ !!;//r@   c                 .   d }|j                   D ]  }| j                  |      }||}t        t        j                  |       }|j                         dz  |_        t        t        j                  |d       }t        t        j                  ||       } |S )Nr   r  )rW   rK   r   r   r   r-  r   )r=   rE   r   r  r[   s        r?   _print_ParallelzPrettyPrinter._print_Parallel  s    II 	;DKK%Ey
 23XXZ]

5 9:
5 9:	; r@   c                    ddl m} d }|j                  D ]  }| j                  |      }||}t	        t        j                  |       }|j                         dz  |_        t	        t        j                  |d       }t        ||      r|j                         dz
  |_        t	        t        j                  ||       } |S )Nr   )TransferFunctionMatrixr   r  rf   )
r  r"  rW   rK   r   r   r   r-  r   r7   )r=   rE   r"  r   r  r[   s         r?   _print_MIMOParallelz!PrettyPrinter._print_MIMOParallel  s    DII 
	;DKK%Ey
 23XXZ]

5 9:d$:;!"aAJ
5 9:
	; r@   c                 b   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        ||      r!t        |j                  |      r |g || }nt        ||      r@t        |j                  |      r*|j                  |k(  r || }nv |g ||j                   }nat        ||      r+t        |j                  |      r||k(  r || }n4 ||g| }n*||k(  r || }n|j                  |k(  r || }n
 |g || }t        t        j                  | j                  |             }	|	j                         dz  |	_        |j                  dk(  rt        t        j                  |	d       nt        t        j                  |	d       }	t        t        j                  |	| j                  |             }	| j                  |      |	z  S )Nr   )TransferFunctionSeriesrf   r   r  r   - )sympy.physics.controlr%  r&  sys1varr7   r	  rW   sys2r   r   r   rK   r-  r   sign)
r=   rE   r%  r&  r   tfnum_arg_listden_arg_listr  denoms
             r?   _print_FeedbackzPrettyPrinter._print_Feedback  s   B))-aDHH=R)3C)@tCHH~setyy&) DIINN+04		{ 	 c6"z$))V'D6,66CV$DII?O)PyyBl+6l6DII6-.:dii3Pbyl+S0<0byl+bl+:l:\:JOODKKO<=*>Bii2o
JOOE59:Z__UE:; 	JOOE4;;s3CDE{{3%%r@   c                    ddl m}m} | j                   ||j                  |j
                              }| j                  |j
                        }t        t        j                  |       }|j                  dk(  rt        t        j                  d|       nt        t        j                  d|       }t        t        j                  |       }d|_        t        t        j                  |d       }|j                         dz  |_        t        j                  |t        d            }t        |j
                  |      r|j                         d	z
  |_        t        t        j                  ||       }|S )
Nr   )
MIMOSeriesr"  r  zI + zI - z-1 r   r   rf   )r(  r3  r"  rK   r+  r)  r   r   r   r,  rp   rX   r   r-  r  r7   )r=   rE   r3  r"  inv_matplant	_feedbacks          r?   _print_MIMOFeedbackz!PrettyPrinter._print_MIMOFeedback=  s!   L++jDII>?DII&
 89	HL		UWJ
 0 0 CDZ--fi@A 	
 1 1) <=		
 0 0E BC	&--/2	&&y*S/B	dii!78!*!1!1!3a!7I
	5 AB	r@   c                     | j                  |j                        }|j                         dz
  |_        | j                  r	t
        d   nd}t        |j                  |       }|S )Nrf   tauz{t})rK   	_expr_matr-  r   rH   r    r   rp   )r=   rE   r  	subscripts       r?   _print_TransferFunctionMatrixz+PrettyPrinter._print_TransferFunctionMatrixO  sR    kk$..)zz|a',0,=,=M%(6	#))I./
r@   c                 	   ddl m} | j                  st        d      ||j                  k(  rt        |j                  j                        S g }g }t        ||      r|j                         j                         }nd|fg}|D ]  \  }}t        |j                  j                               }|j                  d        |D ]  \  }	}
|
dk(  r|j                  d|	j                  z          ng|
dk(  r|j                  d	|	j                  z          nC| j                  |
      j                         d   }|j                  |d
z   |	j                  z          |j                  |	j                           |d   j!                  d      r|d   dd  |d<   n|d   j!                  d
      r|d   dd  |d<   g }dg}g }t#        |      D ]  \  }}|j                  d       d|v s|}|j%                  ||   d      }d|v rOt'        t)        |            D ]7  }d||<   ||   dk(  s||dz      dk(  s|d | dz   d
z   ||   z   ||dz   d  z   } n; n9d|v r5|j+                  d      }|dk7  rd||<   |d | dz   d
z   ||   z   ||dz   d  z   }|||<    |D cg c]  }|j-                  d       }}t/        |D cg c]  }t)        |       c}      }d|v rHt#        |      D ]:  \  }}t)        |      dk(  s|j1                  dd
t)        |d         z         d||<   < t#        |      D ]+  \  }}|j                  t)        |||                   t'        |      D ]  }|dz   t)        |      k  r|t)        |      k\  r2|j                  d
t3        |d d       dt)        |      dz
  z  z   z         |||   k(  r|||   xx   |||      dz   z  cc<   v||xx   ||   d
|d   t)        ||         z
  dz   z  z   z  cc<   |t)        |      k\  r2|j                  d
t3        |d d       dt)        |      dz
  z  z   z         ||xx   d
|d   dz   z  z  cc<    . t        dj5                  |D cg c]  }|d d 	 c}            S c c}w c c}w c c}w )Nr   )Vectorz:ASCII pretty printing of BasisDependent is not implementedc                 (    | d   j                         S Nr   )__str__r  s    r?   r  z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>f  s    AaDLLN r@   r   rf   r  r  z(-1) r   r  r(  
u   ⎟u   ⎠)sympy.vectorr>  rH   NotImplementedErrorzeror   _pretty_formr7   separateitemsr	  
componentsr   r@  rK   rX   
startswithr  r  r  r  rfindsplitr   insertrd  join)r=   rE   r>  o1vectstrsrI  systemvect
inneritemsr   varg_strlengthsstrsflagr)   partstrtempstrparenindexr   
n_newlinespartsr5   r   s                            r?   _print_BasisDependentz#PrettyPrinter._print_BasisDependentV  s   '  %&bcc499dii4455dF#MMO))+EYKE! 	0LFDdoo3356JOO":O;" 01 6IIbnn- . "WIIgnn- . #kk!68A'G IIgmann<=/%0	00 a5E"qE!"IBqEUc"qE!"IBqEt#B- 	 JAwKKNw!!//(1+r:4?!&s7|!4 ""#Q"5>-NNSZ[`cd[dSeimSm '.fuo8Y&Y+.'/2:1+'>@GPQ	
@S'TG!" 87B $MM*LME{"#Q")&5/4V"V'*#+.6qk#:<CEAIJ<O#P11	 4 &((aggdm(("-Q#a&-.
9%bM  5u:?LLC3uQx=$9:DG 
 "" 	3HAuNN3uT!W~./:& 3Q3#e*$CI~C3ws|+<+,c'l1n+=,> %? @DG|T!WtAw%)??Q58c72;36uQx=4A3445 /6 $6 6 CI~C3ws|+<+,c'l1n+=,> %? @GsGBKM22G3	3& $))T$:QsV$:;<<9 )-6 %;s   Q8.Q=!Rc           	      h  
 ddl m
 |j                         dk(  r| j                  |d         S g gt	        |j                               D cg c]  }g  c}z   }|j
                  D cg c]  }t        t	        |             }}
fd}t        j                  | D ]  }|d   j                  ||          d}t	        |j                         dz
  dd      D ]  }t        ||dz            |j
                  |   k  r `|r||   j                  ||dz             nJ||   j                   |||dz                   t        ||dz            dk(  r |||   d   gg      ||   d<   | }g ||dz   <     |d   d   }	|j                         dz  dk(  r	 ||	g      }	| j                  |	      S c c}w c c}w )	Nr   )ImmutableMatrixrJ   c                      | d      S )NFr  rJ   )r   rb  s    r?   r  z0PrettyPrinter._print_NDimArray.<locals>.<lambda>  s    E: r@   r  Trf   r   )sympy.matrices.immutablerb  rankrK   r  r  r	  	itertoolsproductr@  r  )r=   rE   r)   	level_strshape_rangesr  outer_ievenback_outer_iout_exprrb  s             @r?   _print_NDimArrayzPrettyPrinter._print_NDimArray  s   <99;!;;tBx((Ddiik(:;1B;;	04

;1U1X;;: ((,7 	/GbM  g/D %diik!mR < /ya01DJJ|4LLl+229\!^3LMl+223!,q.143 49\A%5671<69'5b9:;7=	,/3x,.	,q.)/	/" Q<?99;?aH:H{{8$$3 <;s   	F*(F/c           
      ~   t        |      }t        d|j                         z        }t        d|j                         z        }d }d }t        |      D ]  \  }	}
| j                  |
j                  d         }|
|v s|rT||
j
                  k(  rE|
j
                  rt        t        j                  |d       }nt        t        j                  |d       }|
|v rMt        t        j                  |d       }t        t        j                  || j                  ||
                }d}nd}|
j
                  rht        |j                  |       }t        |j                  d|j                         z         }t        |j                  d|j                         z         }ngt        |j                  |       }t        |j                  d|j                         z         }t        |j                  d|j                         z         }|
j
                  } t        |j                  |       }t        |j                  |       }|S )Nr   r   r  =TF)r   r   r  rK   rW   is_upr   r   rp   r   r   )r=   r^   indices	index_mapcentertopbotlast_valenceprev_mapr)   r]  indpicpicts                r?   _printer_tensor_indicesz%PrettyPrinter._printer_tensor_indices  s   D!V\\^+,V\\^+,!'* 	'HAu[[A/F)#lekk6Q;;$jooc3&?@C$jooc3&?@C	!#Z__VS%AB#Z__VT[[SXIY=Z%[\ {{ #))F"34#V\\#flln2D%EF #))C,>"?@ #))F"34#V\\#flln2D%EF #))C,>"?@ ;;L+	'. 6<<,-4::c?+r@   c                 x    |j                   d   j                  }|j                         }| j                  ||      S r@  )rW   r^   get_indicesr{  )r=   rE   r^   rr  s       r?   _print_TensorzPrettyPrinter._print_Tensor   s6    yy|  ""$++D'::r@   c                     |j                   j                  d   j                  }|j                   j                         }|j                  }| j                  |||      S r@  )rE   rW   r^   r}  rs  r{  )r=   rE   r^   rr  rs  s        r?   _print_TensorElementz"PrettyPrinter._print_TensorElement  sJ    yy~~a %%))'')NN	++D'9EEr@   c                 <   |j                         \  }}|D cg c]M  }t        |      t        d   k  r%t        | j	                  |      j                          n| j	                  |      O }}t        j                  | }|rt        |j                  |       S |S c c}w r  )!_get_args_for_traditional_printerr   r   r   rK   rX   r  rY   )r=   rE   r,  rW   r)   r[   s         r?   _print_TensMulzPrettyPrinter._print_TensMul  s    ;;=
d 
  #1%
5(99 A--/0?C{{1~N
 

 ""D)uzz$/00L
s   ABc                     |j                   D cg c]M  }t        |      t        d   k  r%t        | j	                  |      j                          n| j	                  |      O }}t        j                  | S c c}w r  )rW   r   r   r   rK   rX   __add__)r=   rE   r)   rW   s       r?   _print_TensAddzPrettyPrinter._print_TensAdd  sz     YY
  #1%
5(99 A--/0?C{{1~N
 

 !!4((
s   AA5c                 `    |j                   d   }|j                  s| }| j                  |      S r@  )rW   rq  rK   )r=   rE   r   s      r?   _print_TensorIndexz PrettyPrinter._print_TensorIndex   s,    iilzz$C{{3r@   c                    | j                   rt        d      }nd}d }t        |j                        D ]]  }| j	                  |      }t        |j                  |       }||}0t        |j                  d       }t        |j                  |       }_ t        | j	                  |j                        j                         dt
        j                  i}t        |      }t        |j                        dkD  r'|| j	                  t        |j                              z  }t        |j                  t        j                  |       }|j                  dz   |_        t        t        j                   ||       }t
        j"                  |_        |S )Nr   r   r   r   rf   )rH   r!   r   	variablesrK   r   rY   rp   rE   rX   r   r  r   r   r   r   r   r   r   )	r=   r   r   r   variabler   r   r   r[   s	            r?   _print_PartialDerivativez&PrettyPrinter._print_PartialDerivative&  sA   34LL 1 	-HH%AQVVL12By-,	- &*kk%**&=&D&D&FHOOH <(u!#4;;s5??';<<EEKK
;<!+JOOE156"r@   c                    i }t        |j                        D ]  \  }}| j                  |j                        ||df<   |j                  dk(  rt        d      ||df<   Ft        t        d      j                  | j                  |j                               ||df<    d}d}t        |j                        }t        d      D 	cg c]7  }t        t        |      D 	cg c]  }	||	|f   j                          c}	      9 }
}}	d }t        |      D ]  }	d }t        d      D ]  }||	|f   }|j                         |
|   k  sJ |
|   |j                         z
  }|dz  }||z
  }t        |j                  d|z         }t        |j                  d|z         }||}{t        |j                  d|z         }t        |j                  |       } ||}t        |      D ]  }t        |j                  d       } t        |j                  |       } t        |j                  dd	       }|j                         dz  |_        t
        j                   |_        |S c c}	w c c}	}w )
Nr   T	otherwiserf   zfor r   r   {r  )r  rW   rK   rE   condr   rp   r  r  r   r   rY   r   rX   r-  r   r   r   )r=   pexprPr   ecr  r  len_argsr5   r)   r  r  r  pr  r  r  r   s                     r?   _print_PiecewisezPrettyPrinter._print_PiecewiseF  s[   uzz* 	EEArkk"''*AadGww$$[1!Q$$'--dkk"''.BCE!Q$	E uzz? q# eHo>Qq!tW]]_>? # #
 x 	,AE1X 4adGwwyDG+++a1779,!%F
 34s5y 12=E"EKKD$9:"EKKN3!4" y 4[ .-. AGGEN+A7	,: b)*XXZ]
OO	O ? #s   I"I8	I"I"c                 N    ddl m} | j                  |j                  |            S )Nr   )	Piecewise)$sympy.functions.elementary.piecewiser  rK   rewrite)r=   iter  s      r?   
_print_ITEzPrettyPrinter._print_ITE~  s    B{{3;;y122r@   c                     d }|D ]7  }|}||}
t        |j                  d       }t        |j                  |       }9 |t        d      }|S )Nr  r   )r   rp   r   )r=   rU  r  r  r  s        r?   _hprint_veczPrettyPrinter._hprint_vec  s^     	,AAy.
+	, 93Ar@   c                    |r%| j                   s| j                  |d|f|||d      S | j                  ||f|||      }t        t        d|j	                               |j
                        }| j                  |||f|||      S )Nr   T)rY   rp   r  ifascii_nougly)rY   rp   r  r   )rH   rV   r   r   r-  r   )	r=   p1p2rY   rp   r  r  tmpseps	            r?   _hprint_vseparatorz PrettyPrinter._hprint_vseparator  s    $"3"3??BR=t5-6t # M Moor2id%9oUc3::<03<<HC}4u)2  4 	4r@   c           	         |j                   D cg c]  }| j                  |       }}|j                  D cg c]  }| j                  |       }}| j                  |j                        }|j	                         dz  |_        d }||fD ]F  }| j                  |      }	||	}t        |j                  d       }t        |j                  |	       }H |j	                         dz  |_        t        |j                  d       }t        |j                  d       }| j                  ||      }t        |j                  dd       }|j	                         dz  dz
  }
|j	                         |
z
  dz
  }t        d      \  }}}}}t        d|
|z
  z  |z   d||z
  z  z   |
|z         }|dz   dz  }t        |j                  | j                  t        |j                                      }t        |j                  | j                  t        |j                                     }|
|z   |_        t        |j                  d|       }|S c c}w c c}w )	Nr   r   rj   rk   rf   FrB  r  )aprK   bqargumentr-  r   r  r   r   rY   rp   r  rX   r#   r  )r=   rP   r  r  br  r  r  rU  r  r   r   sztaddimgr  s                    r?   _print_hyperzPrettyPrinter._print_hyper  s   &'dd+dkk!n++&'dd+dkk!n++KK

#XXZ]
 b 	0A$$Q'Ey-/	0 XXZ]
 s$% ##Aq) c*+ 
A!
U"Q&&s^Aq#stuqy)C/$%!)2DD %
,Avkt{{3qtt9567CI 678S[
Q(Y ,+s
   I Ic                    i }|j                   D cg c]  }| j                  |       c}|d<   |j                  D cg c]  }| j                  |       c}|d<   |j                  D cg c]  }| j                  |       c}|d<   |j                  D cg c]  }| j                  |       c}|d<   | j                  |j
                        }|j                         dz  |_        i }|D ]  }| j                  ||         ||<    t        d      D ]  }t        |d|f   j                         |d|f   j                               }	t        d      D ]p  }
||
|f   }|	|j                         z
  dz  }|	|z
  |j                         z
  }t        |j                  d|z         }t        |j                  d|z         }|||
|f<   r  t        |d   j                  d	|d          }t        |j                  d       }t        |d   j                  d	|d          }t        |j                  |       }|j                         dz  |_        t        |j                  d       }t        |j                  d       }| j!                  ||      }t        |j#                  d
d       }|j                         dz  dz
  }|j                         |z
  dz
  }t%        d      \  }}}}}t        d||z
  z  |z   d||z
  z  z   ||z         }| j                  t'        |j(                              }| j                  t'        |j*                              }| j                  t'        |j                              }| j                  t'        |j                               }d } |||      \  }} |||      \  }}t        |j                  d|       }t        |j                  d|       }|j                  |z
  dz
  }|dkD  rt        |j                  d|z         }t        |j                  |       } ||_        t        |j                  |        }||z   |_        t        |j                  d|       }|S c c}w c c}w c c}w c c}w )Nr  )r   rf   )rf   r   r  r   r   rf   r   z  rj   rk   GrB  r  c                     | j                         |j                         z
  }|dk(  r| |fS |dkD  r| t        |j                  d|z         fS t        | j                  d| z         |fS )Nr   r   )r   r   rY   )r  r  diffs      r?   ra  z,PrettyPrinter._print_meijerg.<locals>.adjust  sk    88:
*Dqy2v:rwws4x'8999!2773u9#56::r@   r  )anrK   aotherbmbotherr  r-  r   r  r  r   r   r   rY   rp   r   r  rX   r#   r  r  r  )!r=   rP   rU  r  r  r  vpidxr)   r  r5   r   rY   rp   D1D2r  r   r   r  r  r  r  r  pppqpmpnra  puplhtr  s!                                    r?   _print_meijergzPrettyPrinter._print_meijerg  s    -.TT2T[[^2&	-.XX6T[[^6&	-.TT2T[[^2&	-.XX6T[[^6&	KK

#XXZ]
 	/C&&qv.BsG	/ q 	Ar1a&z'')2q!f:+;+;+=>D1X 1vJqwwy(Q.taggi/sTz 23e 45Aq6
	 F))$6
;<#'F))$6
;<% XXZ]
 s$% ##Aq) c*+ 
A!
U"Q&&s^Aq#stuqy)C/$%!)2DD %
, [[QTT#[[QTT#[[QTT#[[QTT#	; BBBB$+,$+,ZZ%!#6RXXd2g./B%

#S[
Q(] 3626s   Q$Q))Q.Q3c                 n    t        t        dd            }|| j                  |j                  d         z  S )NExp1rP   r   )r   r   rK   rW   )r=   rP   r  s      r?   _print_ExpBasezPrettyPrinter._print_ExpBase  s1     +fc23t{{166!9---r@   c                 ,    t        t        dd            S )Nr  rP   )r   r   rO   s     r?   _print_Exp1zPrettyPrinter._print_Exp1$  s    +fc233r@   c                 X    | j                  |j                  |j                  ||||      S )N)r   	func_namerY   rp   )_helper_print_functionr   rW   )r=   rP   r   r  rY   rp   s         r?   r   zPrettyPrinter._print_Function'  s-     **166166PY`dlq*rrr@   c                 (    | j                  |d      S NCr  r   rO   s     r?   _print_mathieuczPrettyPrinter._print_mathieuc-      ##A#55r@   c                 (    | j                  |d      S Nr   r  r  rO   s     r?   _print_mathieuszPrettyPrinter._print_mathieus0  r  r@   c                 (    | j                  |d      S )NzC'r  r  rO   s     r?   _print_mathieucprimez"PrettyPrinter._print_mathieucprime3      ##A#66r@   c                 (    | j                  |d      S )NzS'r  r  rO   s     r?   _print_mathieusprimez"PrettyPrinter._print_mathieusprime6  r  r@   r  c	                 b   |rt        |t              }|st        |d      r|j                  }|r| j	                  t        |            }	n%t        | j	                  |      j                          }	|rX| j                  rt        d      }
nd}
| j	                  |
      }
t        t        j                  |	|
      dt        j                  i}	t        | j                  ||      j                  ||       }t        t        j                  |	|      dt        j                  i}|	|_        ||_        |S )Nr   r   zModifier Letter Low Ringr  r   r  r  )r   r   hasattrr   rK   r   r   rX   rH   r   r   r   r   rV   r   r  r  )r=   r   rW   r   r  r  elementwiserY   rp   r  r  r  r[   s                r?   r  z$PrettyPrinter._helper_print_function9  s    $$45DWT:6IVI%67J#T[[%6%=%=%?@J  "#=>;;t$D#T2"J
  !K!R!R6:% "S "I J
 &0ooj*&MOOOO &%r@   c                 b    |j                   }|j                  }|g}| j                  ||dd      S )Nr  T)r  r  )r*  rE   r  )r=   rP   r   r   rW   s        r?   _print_ElementwiseApplyFunctionz-PrettyPrinter._print_ElementwiseApplyFunction^  s6    zzffu**4QU*VVr@   c                     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  s           r?   _special_function_classesz'PrettyPrinter._special_function_classesd  s    KMC?F?w!7 Ag.8=/<]73W=}V,c2]73W=eU^% 	%r@   c                 <   | j                   D ]n  }t        ||      s|j                  |j                  k(  s*| j                  rt	        | j                   |   d         c S t	        | j                   |   d         c S  |j                  }t	        t        |            S )Nr   rf   )r  
issubclassr   rH   r   r   )r=   rE   clsr  s       r?   _print_FunctionClassz"PrettyPrinter._print_FunctionClasst  s    11 	NC$$#,,)F$$%d&D&DS&I!&LMM%d&D&DS&I!&LMM	N MM	-	233r@   c                 $    | j                  |      S rB   )rF   rD   s     r?   _print_GeometryEntityz#PrettyPrinter._print_GeometryEntity~  s      &&r@   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr  r  r  rH   r    r   r=   rP   r  s      r?   _print_lerchphizPrettyPrinter._print_lerchphi  s,    ,0,=,=M%(:	##A#;;r@   c                 V    | j                   r	t        d   nd}| j                  ||      S )Netadirichlet_etar  r  r  s      r?   _print_dirichlet_etaz"PrettyPrinter._print_dirichlet_eta  s,    ,0,=,=M%(?	##A#;;r@   c                 *   | j                   r	t        d   nd}|j                  d   t        j                  u rKt        | j                  |j                  d         j                          }t        |j                  |       }|S | j                  ||      S )Ntheta	Heavisiderf   r   r  )
rH   r    rW   r   Halfr   rK   rX   rY   r   )r=   rP   r  r[   s       r?   _print_HeavisidezPrettyPrinter._print_Heaviside  s|    .2.?.?M'*[	66!9AFF1I 6 = = ?@E

9 56EL''Y'??r@   c                 (    | j                  |d      S r  r  rO   s     r?   _print_fresnelszPrettyPrinter._print_fresnels  r  r@   c                 (    | j                  |d      S r  r  rO   s     r?   _print_fresnelczPrettyPrinter._print_fresnelc  r  r@   c                 (    | j                  |d      S )NAir  r  rO   s     r?   _print_airyaizPrettyPrinter._print_airyai  r  r@   c                 (    | j                  |d      S )NBir  r  rO   s     r?   _print_airybizPrettyPrinter._print_airybi  r  r@   c                 (    | j                  |d      S )NzAi'r  r  rO   s     r?   _print_airyaiprimez PrettyPrinter._print_airyaiprime      ##A#77r@   c                 (    | j                  |d      S )NzBi'r  r  rO   s     r?   _print_airybiprimez PrettyPrinter._print_airybiprime  r  r@   c                 (    | j                  |d      S )NWr  r  rO   s     r?   _print_LambertWzPrettyPrinter._print_LambertW  r  r@   c                 (    | j                  |d      S )NCovr  r  rO   s     r?   _print_CovariancezPrettyPrinter._print_Covariance  r  r@   c                 (    | j                  |d      S )NVarr  r  rO   s     r?   _print_VariancezPrettyPrinter._print_Variance  r  r@   c                 (    | j                  |d      S )Nr  r  r  rO   s     r?   _print_Probabilityz PrettyPrinter._print_Probability  r  r@   c                 ,    | j                  |ddd      S )Nrz  r  r  )r  rY   rp   r  rO   s     r?   _print_Expectationz PrettyPrinter._print_Expectation  s    ##A3c#JJr@   c           	         |j                   }|j                  }| j                  rd}nd}t        |      dk(  r|d   j                  r|d   }| j                  |      }t        t        j                  ||| j                  |            ddiS )Nu    ↦  -> rf   r   r   re  )	rE   	signaturerH   r  	is_symbolrK   r   r   r   )r=   rP   rE   sigarrowvar_forms         r?   _print_LambdazPrettyPrinter._print_Lambda  s|    vvkk5EEs8q=SV--a&C;;s#:??8UDKK<MNZXYZZr@   c                    | j                  |j                        }|j                  rt        d |j                  D              st	        |j
                        dkD  r_t        |j                  d       }t	        |j
                        dkD  r1t        |j                  | j                  |j
                               }nHt	        |j
                        r3t        |j                  | j                  |j
                  d                }| j                  rt        |j                  d       }nt        |j                  d       }t	        |j                        dkD  r1t        |j                  | j                  |j                               }n3t        |j                  | j                  |j                  d                }t        |j                          }t        |j                  d       }|S )Nc              3   B   K   | ]  }|t         j                  k7    y wrB   )r   Zero).0r  s     r?   	<genexpr>z-PrettyPrinter._print_Order.<locals>.<genexpr>  s     ?qqAFF{?s   rf   ; r   u    → r%  O)rK   rE   pointanyr  r  r   rp   rH   rX   rY   r=   rE   r[   s      r?   _print_OrderzPrettyPrinter._print_Order  s]   DII&JJ3?DJJ??t~~"D 12E4>>"Q&"EKKDNN0K$LMT^^$"EKKDNN1<M0N$OP  "EKK0H$IJ"EKK$784::""EKKDJJ0G$HI"EKKDJJqM0J$KLELLN+EJJsO,r@   c                    | j                   r| j                  |j                  d   |j                  d   z
        }| j                  |j                  d         }t        d      }t        |j	                  |       }t        |j	                  d       }||z  }|S | j                  |j                  d         }| j                  |j                  d   |j                  d   z
        }| j                  |ddd      }||z  S )Nr   rf   r   rZ  r[  r   )rH   rK   rW   r   rp   rV   )r=   rP   shiftr   r  r[   s         r?   _print_SingularityFunctionz(PrettyPrinter._print_SingularityFunction  s    KKq	!&&) 34EAFF1I&Ac?Dtzz%01Dtzz#/D!GELAFF1I&AKKq	!&&) 34E??5#sC8D7Nr@   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr  r  r  r  r  s      r?   _print_betazPrettyPrinter._print_beta  s,    -1->->M&)C	##A#;;r@   c                 ,    d}| j                  ||      S )NzB'r  r  r  s      r?   _print_betainczPrettyPrinter._print_betainc  s    	##A#;;r@   c                 ,    d}| j                  ||      S )Nr  r  r  r  s      r?   _print_betainc_regularizedz(PrettyPrinter._print_betainc_regularized  s    	##A#;;r@   c                 V    | j                   r	t        d   nd}| j                  ||      S Nr  r  r  r  s      r?   _print_gammazPrettyPrinter._print_gamma  ,    .2.?.?M'*W	##A#;;r@   c                 V    | j                   r	t        d   nd}| j                  ||      S rA  r  r  s      r?   _print_uppergammazPrettyPrinter._print_uppergamma  rC  r@   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr  r  r  r  r  s      r?   _print_lowergammazPrettyPrinter._print_lowergamma  s,    .2.?.?M'*\	##A#;;r@   c                 t   | j                   rt        |j                        dk(  rt        t        d         }| j                  |j                  d         }t        |j                          }| j                  |j                  d         }t        |j                          }||z  }t        |j                  d       }t        |j                  |       }|S | j                  |j                  d         }t        |j                          }t        |j                  t        d          }|S | j                  |      S )Nr   r  rf   r   r   )
rH   r  rW   r   r    rK   rX   rp   rY   r   )r=   rP   r  r  cr[   s         r?   _print_DiracDeltazPrettyPrinter._print_DiracDelta  s    166{a}W56KKq	*
+KKq	*
+1"EKK$45"EKKN3KKq	*E/E

=+A BCEL''**r@   c                     |j                   d   j                  rI| j                  r=| j                   t	        d|j                   d   z        |j                   d               S | j                  |      S )Nr   zE_%srf   )rW   r   rH   r   r   rO   s     r?   _print_expintzPrettyPrinter._print_expint  s_    66!9D$5$5''(D!&&)1C(DQVVAY(OPP##A&&r@   c                     t        d      }t        | j                  |j                        j                          }t        t	        j
                  ||      dt         j                  i}||_        ||_        |S )Nr  r   )	r   rV   rW   rX   r   r   r   r  r  )r=   rP   r  r  r[   s        r?   
_print_ChizPrettyPrinter._print_Chi  sk      &
!8!?!?!AB
&0ooj*&MOOOO &%r@   c                 2   | j                  |j                  d         }t        |j                        dk(  r|}n0| j                  |j                  d         }| j                  ||      }t	        |j                          }t	        |j                  d       }|S )Nr   rf   rz  )rK   rW   r  r  r   rX   rY   )r=   rP   pforma0r[   pforma1s        r?   _print_elliptic_ezPrettyPrinter._print_elliptic_e$  s|    ++affQi(qvv;!Ekk!&&),G++GW=EELLN+EJJsO,r@   c                     | j                  |j                  d         }t        |j                          }t        |j	                  d       }|S )Nr   K)rK   rW   r   rX   rY   rZ   s      r?   _print_elliptic_kzPrettyPrinter._print_elliptic_k/  s?    AFF1I&ELLN+EJJsO,r@   c                     | j                  |j                  d         }| j                  |j                  d         }| j                  ||      }t        |j	                          }t        |j                  d       }|S )Nr   rf   r  )rK   rW   r  r   rX   rY   )r=   rP   rP  rQ  r[   s        r?   _print_elliptic_fzPrettyPrinter._print_elliptic_f5  sg    ++affQi(++affQi(''9ELLN+EJJsO,r@   c                    | j                   r	t        d   nd}| j                  |j                  d         }| j                  |j                  d         }t	        |j                        dk(  r| j                  ||      }n`| j                  |j                  d         }| j                  ||d      }t        |j                  d       }t        |j                  |       }t        |j                          }t        |j                  |       }|S )NPir   rf   r   Fr  r1  )	rH   r    rK   rW   r  r  r   rY   rX   )r=   rP   r^   rP  rQ  r[   pforma2pformas           r?   _print_elliptic_piz PrettyPrinter._print_elliptic_pi=  s    &*&7&7}T"T++affQi(++affQi(qvv;!++GW=Ekk!&&),G,,Wge,TFT!23FG 45EELLN+EJJt,-r@   c                 v    | j                   rt        t        d            S | j                  t	        d            S )NphiGoldenRatiorH   r   r   rK   r   rD   s     r?   _print_GoldenRatioz PrettyPrinter._print_GoldenRatioL  s/    mE233{{6-011r@   c                 v    | j                   rt        t        d            S | j                  t	        d            S )Nr  
EulerGammara  rD   s     r?   _print_EulerGammazPrettyPrinter._print_EulerGammaQ  s/    mG455{{6,/00r@   c                 6    | j                  t        d            S )Nr  )rK   r   rD   s     r?   _print_CatalanzPrettyPrinter._print_CatalanV  s    {{6#;''r@   c                 f   | j                  |j                  d         }|j                  t        j                  kD  rt        |j                          }t        |j                  d       }t        |j                  | j                  |j                  d                }t        j                  |_        |S )Nr   z mod rf   )rK   rW   r   r   r   rX   rp   r   r5  s      r?   
_print_ModzPrettyPrinter._print_ModY  s    DIIaL)==:>>)/EEKK01EKKDIIaL(ABC"r@   c                 p   | j                  ||      }g g }}d }t        |      D ]^  \  }}|j                  rp|j                         r`|j	                  d      \  }	}
|	dk(  rt        |
ddi}nt        |	 g|
ddi}| j                  |      }|j                   |||             |j                  r2|j                  dkD  r#|j                  d        |j                  |       |j                  r0|dk  r+| j                  |       }|j                   |||             |j                  r6|j                  t        | j                  |      j                                 ?|j                  | j                  |             a |rd	}|D ]  }||j                         dkD  s n d}|D ]t  }||   d}}|dk  r| d	}}|r>t        t        |j                               t        t        |j                              z  }n| j                  |      }|r	 |||      }|||<   v t        j"                  | S )
Nr*   c                 F   |dk(  r| j                         dkD  rd}nd}nd}| j                  t        j                  kD  s| j                  t        j                  k(  rt        | j                          }n| }t        j                  ||      }t        |dt        j                  iS )z'Prepend a minus sign to a pretty form. r   rf   z- r<  r'  r   )r-  r   r   NEGADDr   rX   r   )r[   r]  	pform_negr  s       r?   pretty_negativez1PrettyPrinter._print_Add.<locals>.pretty_negativef  s     z<<>A% $I #I!	
.==JNN2/	1-A q9jnn99r@   F)rationalr  r  rf   r   T)_as_ordered_termsr  is_Mulr  as_coeff_mulr   rK   r@  is_Rationalq	is_Numberis_Relationalr   rX   r-  r9   r  r  )r=   rE   r*   termspformsrr  rp  r)   r>  r  othernegtermr[   largenegatives                  r?   
_print_AddzPrettyPrinter._print_Addb  s   &&t5&9b	:* !' 	1GAt{{t<<>#00%0@uB;!5959G!5&A5A5AGG,oeQ78!!dffqjd#q!D1HTE*oeQ78##j$++d*;*B*B*DEFdkk$/0%	1( E $!);  "!&q5h!8&*UD(D&s466{3Js466{4KKE KK-E+E15E!q	"  !!6**r@   c                 F   ddl m |j                  }|d   t        j                  u st        d |dd  D              r}t        t        | j                  |            }|d   dk(  }|rt        ddd      |d<   t        j                  | }|r.t        d|j                  z   |j                  |j                        }|S g }g }| j                  dvr|j                         }nt        |j                        }t!        |fd	
      }|D ]S  }|j"                  r|j$                  r|j&                  j(                  r|j&                  j*                  rs|j&                  dk7  r3|j-                  t/        |j0                  |j&                   d             |j-                  t/        |j0                  |j&                                |j(                  r||t        j2                  urj|j4                  dk7  r$|j-                  t7        |j4                               |j8                  dk7  s|j-                  t7        |j8                               C|j-                  |       V |D 	cg c]  }	| j                  |	       }}	|D 
cg c]  }
| j                  |
       }}
t;        |      dk(  rt        j                  | S t;        |      dk(  r.|j-                  | j                  t        j                               t        j                  | t        j                  | z  S c c}	w c c}
w )Nr   )Quantityc              3   <   K   | ]  }t        |t                y wrB   )r7   r   )r/  r   s     r?   r0  z+PrettyPrinter._print_Mul.<locals>.<genexpr>  s     "Os:c6#:"Os   rf   z-1r  r<  )oldnonec                 p    t        |       xs( t        | t              xr t        | j                        S rB   )r7   r
   r  )r   r  s    r?   r  z*PrettyPrinter._print_Mul.<locals>.<lambda>  s1    *Q*A +K C(IZ-I r@   r   r  Fr  )sympy.physics.unitsr  rW   r   Oner4  r	  maprK   r   r  r   r   r   r*   as_ordered_factorsr   is_commutativeis_Powr  ru  is_negativer@  r
   r  ru  r  r	   rv  r  )r=   rg  rW   strargsnegoneobjr  r  r  aibir  s              @r?   r  zPrettyPrinter._print_Mul  so   0 ||7aees"Od12h"OO3t{{D12G QZ4'F'Q2
$$g.C suucllCKKHJ::_,--/D%D d !K L  	D""t{{txx7K7KPTPXPXPdPd88r>HHSTXXIFGHHSTXXI67!!d!**&<66Q;HHhtvv.066Q;HHhtvv.0	 ())T[[_))'()T[[_)) q6Q;%%q))1v{$++aee,.%%q)**<*<a*@@@ *)s    L>Lc                 6  	
 | j                  |      }| j                  d   rf| j                  rZ|dk(  rU|j                         dk(  rB|j	                         dk(  s|j
                  r#|j                  rt        |j                  d       S t        dd      	t        dd      	z   }| j                  |      }|j                         dk7  r&| j                  |      | j                  d|z        z  S |dk(  rdnt        |      j                  d      }t        |      dkD  rdt        |      dz
  z  |z   }t        |d	z   |z         }d
|_        |j                         dz
  
t        d	j                  	
fdt!        
      D                    }
dz
  |_        t        |j#                  |       }t%        d|j                        |_        t        t'        dd|j	                         z               }t        |j)                  |       }t        |j                  |       }|S )Nr/   r   rf   u   √rc  rb  r  r   rB  r   c              3   F   K   | ]  }d |z
  dz
  z  z   d |z  z     yw)r   rf   NrJ   )r/  r)   _zZ
linelengths     r?   r0  z0PrettyPrinter._print_nth_root.<locals>.<genexpr>  s5      (
 a!#$s*SU2(
s   !r   )rK   r8   rH   r-  r   r   r   r   rY   r   r9   ljustr  r   r   rO  r  rp   r   r   r   )r=   r  rootbprettyrootsignrprettyr  diagonalr   r  r  s            @@r?   _print_nth_rootzPrettyPrinter._print_nth_root  s   ++d# NN238I8I	gnn.!3A%__)<)<w||,=>?? 3la=3&++d#>>q ;;t$dkk!D&&999AIb3w<#5#5a#8s8a<CHqL)H4HcDj834^^%)
dii (
:&(
 
 
 'Nx~~h78  7#3#34tCW]]_!456a()x()r@   c                    ddl m} |j                         \  }}|j                  r|t        j
                  u rt        d      | j                  |      z  S  ||      \  }}|t        j                  u rQ|j                  rE|j                  s9|j                  s|j                  r!| j                  d   r| j                  ||      S |j                  r/|dk  r*t        d      | j                  t        || d            z  S |j                   rCt        | j                  |      j#                          j%                  | j                  |            S | j                  |      | j                  |      z  S )Nr   )fractionr  r0   Fr  )sympy.simplify.simplifyr  as_base_expr  r   NegativeOner   rK   r  is_Atomr   ru  r   r8   r  r
   rx  rX   __pow__)r=   powerr  r  rP   r   r   s          r?   
_print_PowzPrettyPrinter._print_Pow  s   4  "1AMM!!#t{{1~55A;DAqAEEzaii!--STS^S^7++Aq11}}Q!#t{{3q1"u3M'NNN??t{{1~4467??AOO{{1~t{{1~--r@   c                 >    | j                  |j                  d         S r@  )rK   rW   rD   s     r?   _print_UnevaluatedExprz$PrettyPrinter._print_UnevaluatedExpr%  s    {{499Q<((r@   c                    |dk(  r=|dk  r$t        t        |      t         j                        S t        t        |            S t        |      dk\  rut        |      dk\  rg|dk  r9t        t        |      t         j                        t        t        |            z  S t        t        |            t        t        |            z  S y )Nrf   r   )r   
   )r   r9   rm  abs)r=   r  rv  s      r?   __print_numer_denomz!PrettyPrinter.__print_numer_denom(  s    61u!#a&*..AA!#a&))Vr\c!fl1u!#a&*..A*SQRVBTTT
 "#a&)*SV*<<<r@   c                 x    | j                  |j                  |j                        }||S | j                  |      S rB   )!_PrettyPrinter__print_numer_denomr  rv  rF   r=   rE   r  s      r?   _print_RationalzPrettyPrinter._print_Rational:  s8    ))$&&$&&9M$$T**r@   c                 x    | j                  |j                  |j                        }||S | j                  |      S rB   )r  	numeratordenominatorrF   r  s      r?   _print_FractionzPrettyPrinter._print_FractionB  s:    ))$..$:J:JKM$$T**r@   c                 J   t        |j                        dk\  rXt        |j                        sC| j                  |j                  d         | j                  t        |j                              z  S | j                  rdnd}| j                  |j                  d d d|z  d       S )Nrf   r      ×r   r   c                 R    | j                   xs | j                  xs | j                  S rB   )is_Unionis_Intersectionis_ProductSetsets    r?   r  z1PrettyPrinter._print_ProductSet.<locals>.<lambda>P  s+    CLL =L#&#6#6=L:=:K:K r@   r  )r  setsr   rK   rH   rV   )r=   r  	prod_chars      r?   _print_ProductSetzPrettyPrinter._print_ProductSetJ  s    qvv;!K$7;;qvvay)T[[QVV-EEE595F5F1CI??1664v	7I1L # M Mr@   c                 `    t        |j                  t              }| j                  |ddd      S )Nr   r  }r  )r   rW   r   rV   )r=   r   rI  s      r?   _print_FiniteSetzPrettyPrinter._print_FiniteSetS  s(    qvv#34uc366r@   c                 @   | j                   rd}nd}|j                  j                  r<|j                  j                  r&|j                  j
                  r|ddd|f}n|ddd|f}n|j                  j                  r||d   |j                  z
  |d   f}ny|j                  j                  r#t        |      }t        |      t        |      |f}n@t        |      dkD  r't        |      }t        |      t        |      ||d   f}nt        |      }| j                  |ddd	      S )
N   …...r  r   rf   r)  r  r  r  )rH   startis_infinitestopstepis_positiveiterr   r  r  rV   )r=   r   dotsprintsetits        r?   _print_RangezPrettyPrinter._print_RangeW  s    ,DD77166#5#5vv!!Q4/Ar4/WW  QrUQVV^QrU2HVVaBBxb4/HVaZaBBxb426HQxHxc499r@   c                     |j                   |j                  k(  r | j                  |j                  d d dd      S |j                  rd}nd}|j
                  rd}nd}| j                  |j                  d d ||      S )	Nrf   r  r  rj   r  rk   r  r   )r  endrV   rW   	left_open
right_openr=   r)   rY   rp   s       r?   _print_IntervalzPrettyPrinter._print_Intervalp  sp    77aee??166"1:sC88 {{||??166"1:tU;;r@   c                 J    d}d}| j                  |j                  d d ||      S )NrZ  r[  r   rV   rW   r  s       r?   _print_AccumulationBoundsz'PrettyPrinter._print_AccumulationBounds  s)    qvvbqz477r@   c                 b    dt        dd      z  }| j                  |j                  d d |d       S )Nr   Intersectionr   c                 R    | j                   xs | j                  xs | j                  S rB   )r  r  is_Complementr  s    r?   r  z3PrettyPrinter._print_Intersection.<locals>.<lambda>  s+    8I8I 9A"||9A/2/@/@ r@   r  r   rV   rW   r=   r!  r  s      r?   _print_Intersectionz!PrettyPrinter._print_Intersection  s=    [==	qvvtT9-A  B 	Br@   c                 b    dt        dd      z  }| j                  |j                  d d |d       S )Nr   Unionr!   c                 R    | j                   xs | j                  xs | j                  S rB   )r  r  r  r  s    r?   r  z,PrettyPrinter._print_Union.<locals>.<lambda>  s-    8I8I 9H"229H696G6G r@   r  r  )r=   r!  union_delimiters      r?   _print_UnionzPrettyPrinter._print_Union  s=     ;w#<<qvvtT?-H  I 	Ir@   c                     | j                   st        d      dt        d      z  }| j                  |j                  d d |      S )Nz?ASCII pretty printing of SymmetricDifference is not implementedr   SymmetricDifference)rH   rE  r   rV   rW   )r=   r!  sym_delimeters      r?   _print_SymmetricDifferencez(PrettyPrinter._print_SymmetricDifference  s@      %&ghh-B!CCqvvtT=AAr@   c                 H    d}| j                  |j                  d d |d       S )Nz \ c                 R    | j                   xs | j                  xs | j                  S rB   )r  r  r  r  s    r?   r  z1PrettyPrinter._print_Complement.<locals>.<lambda>  s(    c&7&7 '/3;N;N '/"%,, r@   r  r  r  s      r?   _print_ComplementzPrettyPrinter._print_Complement  s.    	qvvtT9/  0 	0r@   c                    | j                   rdnd|j                  }|j                  }|j                  }| j	                  |j
                        }t        |      dk(  r3| j                  |d   |d   fd      }| j                  ||ddd	d
      S t        fdt        ||      D              }| j                  |d d d      }| j                  ||ddd	d
      S )N   ∊inrf   r   r   r  r  r  TrY   rp   r  r  c              3   B   K   | ]  \  }}|d d |dfD ]  }|   yw)r   r  NrJ   )r/  r*  setvr5   inns       r?   r0  z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>  s7      <	TS#tT:<a! <! <s   r  r  )rH   r  	base_setsr&  rK   rE   r  rV   r  r  r  )	r=   tsfunr  r&  rE   r   pargsr  s	           @r?   _print_ImageSetzPrettyPrinter._print_ImageSet  s    (CChh||MM	{{388$ y>Q1sDG <*-   /A**4033:># + O O  <SD-A < <Ecr
b9A**4033:># + O Or@   c                    | j                   rd}d}nd}d}| j                  t        |j                              }t	        |j
                  dd       }|*| j                  |j
                  j                               }nN| j                  |j
                        }| j                   r'| j                  |      }t        |j                          }|j                  t        j                  u r| j                  ||dddd	
      S | j                  |j                        }| j                  |||||fd	      }| j                  ||dddd	
      S )Nr  r   r  andas_exprr  r  Tr   r  r  )rH   rV   r   r   getattr	conditionrK   r  r   rX   base_setr   UniversalSetr  )	r=   r  r  _andr  r  r  r  r  s	            r?   _print_ConditionSetz!PrettyPrinter._print_ConditionSet  s7   (C %DCDOOE"&&M2	",,	48;;r||3356D;;r||,D  {{4(!4;;=1;;!..(**9d14T58 + : : {{2;;'OOYT4>&)  +&&y!#S6:c ' K 	Kr@   c                     | j                   rd}nd}| j                  |j                        }| j                  |j                        }| j                  |j
                        }| j                  |||fd      }| j                  ||dddd      S )	Nr  r  r   r  r  r  Tr  )rH   rV   r  rK   rE   r  r  )r=   r  r  r  rE   prodsetsr  s          r?   _print_ComplexRegionz"PrettyPrinter._print_ComplexRegion  s    (CCOOBLL1	{{277#;;rww'OOYX6&)  +&&tQS6:c ' K 	Kr@   c           	          |j                   \  }}| j                  r@d}t        t        j                  | j                  |      || j                  |            ddiS t        t        |            S )Nu    ∈ r   re  )rW   rH   r   r   r   rK   r   )r=   rP   r*  r  els        r?   _print_ContainszPrettyPrinter._print_Contains  sk    66S#Bzt{{3/?/14;;s3C E QNOQ Q d1g&&r@   c                 T   |j                   j                  t        j                  u rA|j                  j                  t        j                  u r| j                  |j                        S | j                  rd}nd}| j                  |j                               | j                  |      z   S )Nr  r  )
r  formular   r.  bnrK   a0rH   r  truncate)r=   r   r  s      r?   _print_FourierSeriesz"PrettyPrinter._print_FourierSeries  sr    44<<166!addllaff&<;;qtt$$,DDqzz|,t{{4/@@@r@   c                 8    | j                  |j                        S rB   )r  infiniter=   r   s     r?   _print_FormalPowerSeriesz&PrettyPrinter._print_FormalPowerSeries	  s    qzz**r@   c                     t        | j                  |j                        j                          }| j                  t	        d            }t        |j                  |       S )NSetExpr)r   rK   r  rX   r   rp   )r=   se
pretty_setpretty_names       r?   _print_SetExprzPrettyPrinter._print_SetExpr	  sK    RVV!4!;!;!=>
kk&"34;,,Z899r@   c                 ~   | j                   rd}nd}t        |j                  j                        dkD  s"t        |j                  j                        dkD  rt        d      |j                  t        j                  u rY|j                  }||j                  |dz
        |j                  |dz
        |j                  |dz
        |j                  |      f}nX|j                  t        j                  u s|j                  dkD  r"|d d }|j                  |       t        |      }nt        |      }| j                  |      S )	Nr  r  r   z@Pretty printing of sequences with symbolic bound not implementedr(  r   rf   r)  )rH   r  r  free_symbolsr  rE  r   rv  r  ru  lengthr@  r  _print_list)r=   r   r  r  r  s        r?   _print_SeqFormulazPrettyPrinter._print_SeqFormula	  s    ,DDqww##$q(C0C0C,Dq,H%&hii77a(((66DaggdQh/1Bq!1774=2HVVqzz!QXX\!uHOOD!XHQxH))r@   c                      y)NFrJ   r  s    r?   r  zPrettyPrinter.<lambda>%	  s    r@   c                 b   	 g }|D ]U  }| j                  |      }	 ||      rt        |	j                          }	|r|j                  |       |j                  |	       W |st	        d      }
nt        t	        j
                  |  }
t        |
j                  |||       }
|
S # t        $ r d }
|D ]n  }| j                  |      }	 ||      rt        |	j                          }	|
|	}
7t        t	        j
                  |
|       }
t        t	        j
                  |
|	       }
p |
t	        d      }
Y w xY w)Nr  rZ  )rK   r   rX   r@  r   r   AttributeErrorrM   )r=   seqrY   rp   r  r  r  rz  r  r[   r   s              r?   rV   zPrettyPrinter._print_seq$	  s-   "	#F %D)%&7EMM),e$% rN
 89. u^LM#  	#A 	?T*%&7E9A"JOOAy$ABA"JOOAu$=>A	? yrN	#s   BB   BD.-D.c                     d }|D ]5  }||}t        |j                  |       }t        |j                  |       }7 |t        d      S |S )Nr  )r   rp   )r=   r  rW   r[   r   s        r?   rO  zPrettyPrinter.joinM	  s\     	6C}"EKK	$:;"EKK$45	6 =b>!Lr@   c                 (    | j                  |dd      S r  rV   )r=   r   s     r?   r  zPrettyPrinter._print_list\	  s    q#s++r@   c                     t        |      dk(  rHt        t        j                  | j	                  |d         d       }t        |j                  ddd       S | j                  |dd      S )Nrf   r   r  rj   rk   TrZ  )r  r   r   r   rK   rX   rV   )r=   r  ptuples      r?   _print_tuplezPrettyPrinter._print_tuple_	  s\    q6Q;QqT1BC!HIFv}}S#d}KLL??1c3//r@   c                 $    | j                  |      S rB   )r$  rD   s     r?   _print_TuplezPrettyPrinter._print_Tuplef	  s      &&r@   c                    t        |j                         t              }g }|D ]U  }| j                  |      }| j                  ||         }t	        t        j                  |d|       }|j                  |       W | j                  |dd      S )Nr   z: r  r  )	r   keysr   rK   r   r   r   r@  rV   )r=   r   r(  rI  r   rT  Vr   s           r?   _print_dictzPrettyPrinter._print_dicti	  s    affh$45 	AAAAaD!AJOOAtQ78ALLO	 uc3//r@   c                 $    | j                  |      S rB   )r*  )r=   r   s     r?   _print_DictzPrettyPrinter._print_Dictv	  s    ""r@   c                     |st        d      S t        |t              }| j                  |      }t        |j	                  ddd       }|S )Nzset()r   r  r  TrZ  )r   r   r   rV   rX   r=   r   rI  prettys       r?   
_print_setzPrettyPrinter._print_sety	  sI    g&&q./'V]]3D]IJr@   c                 *   |st        d      S t        |t              }| j                  |      }t        |j	                  ddd       }t        |j	                  ddd       }t        t        j                  t        |      j                  |       }|S )	Nzfrozenset()r   r  r  TrZ  rj   rk   )	r   r   r   rV   rX   r   r   typer   r.  s       r?   _print_frozensetzPrettyPrinter._print_frozenset	  s    m,,q./'V]]3D]IJV]]3D]IJZ__T!W-=-=vFGr@   c                 F    | j                   rt        d      S t        d      S )Nu   𝕌r  r  r  s     r?   _print_UniversalSetz!PrettyPrinter._print_UniversalSet	  s"    HIIn--r@   c                 *    t        t        |            S rB   r   r   )r=   rings     r?   _print_PolyRingzPrettyPrinter._print_PolyRing	      $t*%%r@   c                 *    t        t        |            S rB   r7  )r=   fields     r?   _print_FracFieldzPrettyPrinter._print_FracField	  s    $u+&&r@   c                 *    t        t        |            S rB   rC   )r=   elms     r?   _print_FreeGroupElementz%PrettyPrinter._print_FreeGroupElement	  s    #c(##r@   c                 *    t        t        |            S rB   r7  )r=   polys     r?   _print_PolyElementz PrettyPrinter._print_PolyElement	  r:  r@   c                 *    t        t        |            S rB   r7  )r=   fracs     r?   _print_FracElementz PrettyPrinter._print_FracElement	  r:  r@   c                     |j                   r-| j                  |j                         j                               S | j                  |j                               S rB   )
is_aliasedrK   as_polyr  rD   s     r?   _print_AlgebraicNumberz$PrettyPrinter._print_AlgebraicNumber	  s<    ??;;t||~55788;;t||~..r@   c                     | j                  |j                  d      |j                  g}t        | j	                  |      j                          }t        |j                  d       }|S )Nlexrk  CRootOf)r  rE   r]  r   rV   rX   rY   r=   rE   rW   r[   s       r?   _print_ComplexRootOfz"PrettyPrinter._print_ComplexRootOf	  sU    		7DDOOD188:;EJJy12r@   c                 F   | j                  |j                  d      g}|j                  t        j                  ur*|j                  | j                  |j                               t        | j                  |      j                          }t        |j                  d       }|S )NrL  rk  RootSum)r  rE   r  r   IdentityFunctionr@  rK   r   rV   rX   rY   rN  s       r?   _print_RootSumzPrettyPrinter._print_RootSum	  sz    		78881---KKDHH-.DOOD188:;EJJy12r@   c                 f    | j                   rd}nd}t        t        ||j                  z              S )Nu   ℤ_%dzGF(%d))rH   r   r   mod)r=   rE   forms      r?   _print_FiniteFieldz PrettyPrinter._print_FiniteField	  s-    3DD-txx899r@   c                 F    | j                   rt        d      S t        d      S )Nu   ℤZZr  rD   s     r?   _print_IntegerRingz PrettyPrinter._print_IntegerRing	  "    ;<<d##r@   c                 F    | j                   rt        d      S t        d      S )Nu   ℚQQr  rD   s     r?   _print_RationalFieldz"PrettyPrinter._print_RationalField	  r[  r@   c                     | j                   rd}nd}|j                  rt        |      S | j                  t	        |dz   t        |j                        z               S )Nu   ℝRRr   rH   has_default_precisionr   rK   r   r9   	precisionr=   domainprefixs      r?   _print_RealFieldzPrettyPrinter._print_RealField	  Q    2FF''f%%;;}Vc\C@P@P<Q-QRSSr@   c                     | j                   rd}nd}|j                  rt        |      S | j                  t	        |dz   t        |j                        z               S )Nu   ℂCCr   ra  rd  s      r?   _print_ComplexFieldz!PrettyPrinter._print_ComplexField	  rh  r@   c                 v   t        |j                        }|j                  j                  sJt	        t	        d      j                  | j                  |j                               }|j                  |       | j                  |dd      }t	        |j                  | j                  |j                               }|S Norder=r  r  r	  symbolsr*   
is_defaultr   rp   rK   r@  rV   rY   re  r=   rE   rW   r*   r[   s        r?   _print_PolynomialRingz#PrettyPrinter._print_PolynomialRing	      DLL!zz$$
8 4 : :4;;tzz;R STEKKc3/EJJt{{4;;'?@Ar@   c                 v   t        |j                        }|j                  j                  sJt	        t	        d      j                  | j                  |j                               }|j                  |       | j                  |dd      }t	        |j                  | j                  |j                               }|S )Nrn  rj   rk   ro  rr  s        r?   _print_FractionFieldz"PrettyPrinter._print_FractionField	  rt  r@   c                 2   |j                   }t        |j                        t        |j                        k7  r|dt        |j                        z   fz   }| j	                  |dd      }t        |j                  | j                  |j                               }|S rm  )	rp  r9   r*   default_orderrV   r   rY   rK   re  )r=   rE   gr[   s       r?   _print_PolynomialRingBasez'PrettyPrinter._print_PolynomialRingBase	  sw    LLtzz?c$"4"455XDJJ/11A3,EJJt{{4;;'?@Ar@   c                    |j                   D cg c]  }| j                  ||j                        ! }}t        | j	                  d|      j                  dd       }|j                  D cg c]  }| j                  |       }}t        t        d      j                  | j                  |j                               }t        t        d      j                  | j                  |j                               }| j	                  d|g|z   ||gz         }t        |j                          }t        |j                  |j                  j                         }|S c c}w c c}w )Nrk  r  r  r  r  zdomain=rn  )exprsr  r*   r   rO  rX   gensrK   rp   re  rY   r   r   )	r=   basisr   r|  genr}  re  r*   r[   s	            r?   _print_GroebnerBasisz"PrettyPrinter._print_GroebnerBasis
  s,   "[[+ //#U[[/9 + +DIIdE299s#9NO-2ZZ9cS!99	"((U\\)BCE!''EKK(@AC 		$$&% @AELLN+EJJu'?'?@A!+ :s   $E,Ec                    | j                  |j                        }t        |j                          }|j	                         dkD  r|j	                         nd}t        t        d|      |j                        }t        |j                  |       }|j                  }|j	                         dz
  |_        t        |j                  | j                  t        |j                  |j                        D cg c]E  }| j                  | j                  |d         t        d      | j                  |d         fd      G c}             }||_        |S c c}w )	Nrf   r   r   r  r   rQ  r  r  )rK   rE   r   rX   r-  r   r   r   rp   rV   r  r  r3  r   )r=   rP   r[   r3  rvertr  rU  s          r?   _print_SubszPrettyPrinter._print_Subs
  s   AFF#ELLN+#llnq0ELLNa4Q<%..AEKK./NN!+EKK'*1;;'@9C"# OOT[[1.T
DKK!<MN  9C )D E F 9Cs   0A
Ec                    t        |      }| j                  |j                  d         }t        d|j                         z        }t        |j	                  |       }t        |j                  |       }t        |j                        dk(  r|S |j                  \  }}|}t        | j                  |g      j                          }	t        t        j                  ||	      dt         j                  i}||_        |	|_        |S )Nr   r   rf   r   )r   rK   rW   r   r   rp   r  rV   rX   r   r   r   r  r  )
r=   rP   r^   r[   r   r   r  r   r  r  s
             r?   _print_number_functionz$PrettyPrinter._print_number_function&
  s     4 kk!&&)$s399;/		 45	EKK	23qvv;!Lvv1
!!5!<!<!>?
&0ooj*&MOOOO%%r@   c                 &    | j                  |d      S )Nrz  r  rO   s     r?   _print_eulerzPrettyPrinter._print_euler:
      **1c22r@   c                 &    | j                  |d      S )Nr  r  rO   s     r?   _print_catalanzPrettyPrinter._print_catalan=
  r  r@   c                 &    | j                  |d      S )Nr  r  rO   s     r?   _print_bernoullizPrettyPrinter._print_bernoulli@
  r  r@   c                 &    | j                  |d      S )NLr  rO   s     r?   _print_lucaszPrettyPrinter._print_lucasE
  r  r@   c                 &    | j                  |d      S )Nr  r  rO   s     r?   _print_fibonaccizPrettyPrinter._print_fibonacciH
  r  r@   c                 &    | j                  |d      S )Nr  r  rO   s     r?   _print_tribonaccizPrettyPrinter._print_tribonacciK
  r  r@   c                 b    | j                   r| j                  |d      S | j                  |d      S )Nu   γ	stieltjes)rH   r  rO   s     r?   _print_stieltjeszPrettyPrinter._print_stieltjesN
  s2    ..q2PQQ..q+>>r@   c                 0   | j                  |j                  d         }t        |j                  t        d             }t        |j                  | j                  |j                  d                }| j                  rt        t        d            }nt        d      }|}t        |j                  d|j                         z         }t        |j                  d|j                         z         }t        |j                  |      dt        j                  iS )Nr   r  rf   r  r   r   r   )rK   rW   r   rp   rH   r   r   rY   r   r   POW)r=   rP   r[   r  r  ru  rv  s          r?   _print_KroneckerDeltaz#PrettyPrinter._print_KroneckerDeltaT
  s    AFF1I&EKK
389EKKAFF1I(>?@=12A3A!&&QWWY/0!''#aggi-01399S>B*..BBr@   c                    t        |d      rG| j                  d      }t        |j                  | j                  |j	                                      }|S t        |d      r| j                  d      }t        |j                  | j                  |j
                               }t        |j                  | j                  d             }t        |j                  | j                  |j                               }|S t        |d      rC| j                  d      }t        |j                  | j                  |j
                               }|S | j                  d       S )N
as_booleanzDomain: r  z in rp  z
Domain on )r  rK   r   rp   r  rp  r  )r=   r   r[   s      r?   _print_RandomDomainz!PrettyPrinter._print_RandomDomaina
  s   1l#KK
+EDKK,G HIELQKK
+EDKK		,B CDEDKK,? @AEDKK,> ?@ELQ	"KK-EDKK		,B CDEL;;t$$r@   c                     	 |j                   *| j                  |j                   j                  |            S 	 | j                  t	        |            S # t        $ r Y %w xY wrB   )r8  rK   to_sympyr   reprr=   r  s     r?   
_print_DMPzPrettyPrinter._print_DMPs
  s[    	vv!{{166??1#566 "
 {{47##  		s   5A 	AAc                 $    | j                  |      S rB   )r  r  s     r?   
_print_DMFzPrettyPrinter._print_DMF|
  s    q!!r@   c                 J    | j                  t        |j                              S rB   rK   r   r^   )r=   objects     r?   _print_ObjectzPrettyPrinter._print_Object
  s    {{=566r@   c                     t        d      }| j                  |j                        }| j                  |j                        }|j	                  ||      d   }t        |      S )Nz-->r   )r   rK   re  codomainrp   r   )r=   morphismr)  re  r  tails         r?   _print_MorphismzPrettyPrinter._print_Morphism
  sQ    UX__-;;x001||E8,Q/$r@   c                     | j                  t        |j                              }| j                  |      }t	        |j                  d|      d         S )Nr  r   )rK   r   r^   r  r   rp   )r=   r  r  pretty_morphisms       r?   _print_NamedMorphismz"PrettyPrinter._print_NamedMorphism
  sF    kk-">?..x8+++CA!DEEr@   c                 h    ddl m} | j                   ||j                  |j                  d            S )Nr   )NamedMorphismid)sympy.categoriesr  r  re  r  )r=   r  r  s      r?   _print_IdentityMorphismz%PrettyPrinter._print_IdentityMorphism
  s0    2(((//8+<+<dCE 	Er@   c                 @   t        d      }|j                  D cg c]  }t        |j                         }}|j	                          |j                  |      dz   }| j                  |      }| j                  |      }t        |j                  |      d         S c c}w )Nr  r  r   )
r   rJ  r   r^   reverserO  rK   r  r   rp   )r=   r  circle	componentcomponent_names_listcomponent_namesr  r  s           r?   _print_CompositeMorphismz&PrettyPrinter._print_CompositeMorphism
  s    c
 .6-@-@ B ) !.inn =  B  B$$& ++&:;cAkk/2..x8+++O<Q?@@ Bs   Bc                 J    | j                  t        |j                              S rB   r  )r=   categorys     r?   _print_CategoryzPrettyPrinter._print_Category
  s    {{=788r@   c                 >   |j                   s| j                  t        j                        S | j                  |j                         }|j                  r>dt        d      z  }| j                  |j                        d   }|j                  ||      }t        |d         S )Nr   z==>r   )premisesrK   r   EmptySetconclusionsr   rp   r   )r=   diagrampretty_resultresults_arrowpretty_conclusionss        r?   _print_DiagramzPrettyPrinter._print_Diagram
  s    ;;qzz**G$4$45"T%[0M!%W-@-@!A!!D)//13M -*++r@   c                    ddl m}  |t        |j                        D cg c]<  }t        |j                        D cg c]  }|||f   r|||f   n
t        d       c}> c}}      }| j                  |      S c c}w c c}}w )Nr   )Matrixr   )r  r  r  r-  r   r   r  )r=   gridr  r)   r5   matrixs         r?   _print_DiagramGridz PrettyPrinter._print_DiagramGrid
  s    )"'"46 $)#46 )-QT
$q!t*sC 6 6 7 **6226 6s   B 
 A;B 
;B 
c                 (    | j                  |dd      S r  r!  r=   r  s     r?   _print_FreeModuleElementz&PrettyPrinter._print_FreeModuleElement
  s    q#s++r@   c                 <    | j                  |j                  dd      S NrZ  r[  )rV   r}  r=   r  s     r?   _print_SubModulezPrettyPrinter._print_SubModule
  s    qvvsC00r@   c                 p    | j                  |j                        | j                  |j                        z  S rB   )rK   r8  re  r  s     r?   _print_FreeModulezPrettyPrinter._print_FreeModule
  s'    {{166"DKK$777r@   c                 z    | j                  |j                  j                  D cg c]  \  }| c}dd      S c c}w r  )rV   _moduler}  )r=   r  r   s      r?   _print_ModuleImplementedIdealz+PrettyPrinter._print_ModuleImplementedIdeal
  s-    QYY^^<cq<c3GG<s   8c                 p    | j                  |j                        | j                  |j                        z  S rB   )rK   r8  
base_idealr=   Rs     r?   _print_QuotientRingz!PrettyPrinter._print_QuotientRing
  s'    {{166"T[[%>>>r@   c                     | j                  |j                        | j                  |j                  j                        z   S rB   )rK   datar8  r  r  s     r?   _print_QuotientRingElementz(PrettyPrinter._print_QuotientRingElement
  s-    {{166"T[[1B1B%CCCr@   c                     | j                  |j                        | j                  |j                  j                        z   S rB   )rK   r  modulekilled_moduler  s     r?   _print_QuotientModuleElementz*PrettyPrinter._print_QuotientModuleElement
  s-    {{166"T[[1G1G%HHHr@   c                 p    | j                  |j                        | j                  |j                        z  S rB   )rK   r  r  r  s     r?   _print_QuotientModulez#PrettyPrinter._print_QuotientModule
  s'    {{166"T[[%AAAr@   c                 &   | j                  |j                               }|j                         dz  |_        t	        |j                  d| j                  |j                        dt        dd      z  | j                  |j                               }|S )Nr   z : z %s> r<  )	rK   _sympy_matrixr-  r   r   rp   re  r   r  )r=   r3  r  r[   s       r?   _print_MatrixHomomorphismz'PrettyPrinter._print_MatrixHomomorphism
  sq    Q__./ --/Q.FLLAHH0Ed3l"DKK

$;= >r@   c                 8    | j                  |j                        S rB   rK   r^   )r=   manifolds     r?   _print_ManifoldzPrettyPrinter._print_Manifold
  s    {{8==))r@   c                 8    | j                  |j                        S rB   r  )r=   patchs     r?   _print_PatchzPrettyPrinter._print_Patch
  s    {{5::&&r@   c                 8    | j                  |j                        S rB   r  )r=   coordss     r?   _print_CoordSystemz PrettyPrinter._print_CoordSystem
  s    {{6;;''r@   c                     |j                   j                  |j                     j                  }| j	                  t        |            S rB   )
_coord_sysrp  _indexr^   rK   r   )r=   r<  strings      r?   _print_BaseScalarFieldz$PrettyPrinter._print_BaseScalarField
  s6    !!))%,,7<<{{=011r@   c                     t        d      dz   |j                  j                  |j                     j                  z   }| j                  t        |            S )Nr   r   )r!   r  rp  r  r^   rK   r   )r=   r<  r   s      r?   _print_BaseVectorFieldz$PrettyPrinter._print_BaseVectorField
  sF    $%+e.>.>.F.Fu||.T.Y.YY{{=+,,r@   c                 j   | j                   rd}nd}|j                  }t        |d      rM|j                  j                  |j
                     j                  }| j                  |dz   t        |      z         S | j                  |      }t        |j                          }t        |j                  |       S )Nu   ⅆr   r  r   )rH   _form_fieldr  r  rp  r  r^   rK   r   r   rX   rY   )r=   r  r   r<  r  r[   s         r?   _print_Differentialz!PrettyPrinter._print_Differential
  s    2AA  5,'%%--ell;@@F;;q3wv)>>??KK&E/Euzz!}--r@   c                     | j                  |j                  d         }t        |j                  d|j                  j
                  z         }t        |j                  d       }|S )Nr   z%s(rk   )rK   rW   r   rY   r   r   rp   )r=   r  r[   s      r?   	_print_TrzPrettyPrinter._print_Tr
  sR    AFF1I&EJJu0D0D'EFGEKK,-r@   c                     | j                  |j                  d         }t        |j                          }| j                  r t        |j                  t        d          }|S t        |j                  d       }|S )Nr   nurK   rW   r   rX   rH   rY   r    rZ   s      r?   _print_primenuzPrettyPrinter._print_primenu  sj    AFF1I&ELLN+

=+> ?@E  

4 01Er@   c                     | j                  |j                  d         }t        |j                          }| j                  r t        |j                  t        d          }|S t        |j                  d       }|S )Nr   Omegar  rZ   s      r?   _print_primeomegazPrettyPrinter._print_primeomega  sj    AFF1I&ELLN+

=+A BCE  

7 34Er@   c                 |    |j                   j                   dk(  r| j                  d      }|S | j                  |      S )Ndegree   °)r^   rK   rF   rZ   s      r?   _print_QuantityzPrettyPrinter._print_Quantity  s7    66;;("KK 12EL$$Q''r@   c                     t        dt        |j                        z   dz         }| j                  |j                        }| j                  |j
                        }t        t        j                  |||       }|S )Nr   )r   r   r   rK   r   r   r   r   r   s         r?   _print_AssignmentBasez#PrettyPrinter._print_AssignmentBase  s^    d144j(3./KKKKJOOAr156r@   c                 8    | j                  |j                        S rB   r  r  s     r?   
_print_StrzPrettyPrinter._print_Str%  s    {{166""r@   rB   )F)T)r  r  )NNr  F)FNrj   rk   )FNr  Frj   rk   )r   
__module____qualname____doc__printmethod_default_settingsr6   rF   propertyrH   rM   rQ   rS   r\   ra   _print_RandomSymbolrd   rh   rt   r{   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:  rN  r?  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  r  r   r#  r1  r7  r<  r`  rn  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+  r6  r9  r;  r=  r?  rB  rE  rG  rJ  rL  rN  rR  rU  rW  r]  rb  re  rg  ri  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_SeqPer_print_SeqAdd_print_SeqMulrV   rO  r  r$  r&  r*  r,  r0  r3  r5  r9  r=  r@  rC  rF  rJ  rO  rS  rW  rZ  r^  rg  rk  rs  rv  rz  r  r  r  r  r  r  _print_bellr  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  rJ   r@   r?   r%   r%      s   IK !%#~% ( (:
  (S8

( "O)!O!O"!O""&7 +"*66666+6E
++#J&",JIV4l
(_B8CJ
ISS*6%
")###)	Y, H
8)0""&H$d=L%B @B !F;
F) @6p34.`Rh.4 CF!s6677 HLGJ%(#JW % %4'<<@6677886886K[*<<<<<<+&'
	2
1
(F+P:Az*X.$)$++M7:2<"8BIB0O:K>K'A+:
** &M%M%M#'tt('R,0'0#.&'$&&/	:$$	T	T

&"(333 #K333?C%$$"7 F
E
A9,3,18H?DIB*'(2-.(#r@   r%   c                     t        |      }|j                  d   }t        |      }	 |j                  |       t        |       S # t        |       w xY w)zReturns a string containing the prettified form of expr.

    For information on keyword arguments see pretty_print function.

    r,   )r%   r8   r   rM   )rE   r>   r  r,   uflags        r?   r/  r/  )  sK     
x	 B ,,}-K{+E"zz$5!5!s   A Ac                 .    t        t        | fi |       y)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/  )rE   kwargss     r?   pretty_printr)  <  s    V 
&
 
 !r@   c                 z    ddl m} ddlm} d|vrd|d<    |t	        | fi |j                   |                    y)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)pydocr+  localer,  r/  encode)rE   r>   r+  r,  s       r?   pager_printr0  l  s=     +H$"(	&
"
"
)
)*>*@
ABr@   );rf  
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#   pprint_use_unicodepprint_try_use_unicoder%   r/  r)  pprintr0  rJ   r@   r?   <module>rF     s       ' (  /   / $ + 7 T T : # 1 @ C' ' ' '
 ( / H,#G H,#VX " "$+"Z 
Cr@   