
    sg@                    v   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z7 e/Z8e2Z9 G d de      Z: ee:      d        Z;d Z<e<Z=d 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	annotatedis_subscriptable_in_unicode
center_padrootc                      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\dU Z]i fdVZ^dW Z_dX Z`dY ZadZ Zbd[ Zcd\ Zdd] Zed^ Zfd_ Zgdd`Zhda Zidb Zjdc Zkdd Zl	 	 ddeZmdf Zndg Zodh Zpdi Zq	 	 	 ddkZrdl Zsedm        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 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djd 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 )Nr5   z&'imaginary_unit' must a string, not {})r,   jz4'imaginary_unit' must be either 'i' or 'j', not '{}')r   __init__
isinstance	_settingsstr	TypeErrorformat
ValueError)selfsettingss     O/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/pretty/pretty.pyr9   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   r<   r@   exprs     rB   emptyPrinterzPrettyPrinter.emptyPrinter7   s    #d)$$rC   c                 6    | j                   d   ryt               S )Nr/   T)r;   r   )r@   s    rB   _use_unicodezPrettyPrinter._use_unicode:   s    >>-(%''rC   c                 X     | j                  |      j                  di | j                  S )N )_printrenderr;   rG   s     rB   doprintzPrettyPrinter.doprintA   s%    't{{4 ''9$..99rC   c                     |S rE   rM   r@   es     rB   _print_stringPictzPrettyPrinter._print_stringPictE   s    rC   c                     t        |      S rE   )r   rR   s     rB   _print_basestringzPrettyPrinter._print_basestringH   s    !}rC   c                     t        | j                  |j                        j                          }t        |j	                  d       }|S )Natan2)r   
_print_seqargsparensleftr@   rS   pforms      rB   _print_atan2zPrettyPrinter._print_atan2K   s:    DOOAFF3::<=EJJw/0rC   c                 D    t        |j                  |      }t        |      S rE   )r   namer   )r@   rS   	bold_namesymbs       rB   _print_SymbolzPrettyPrinter._print_SymbolP   s    QVVY/$rC   c                 F    | j                  || j                  d   dk(        S )Nr4   bold)rd   r;   rR   s     rB   _print_MatrixSymbolz!PrettyPrinter._print_MatrixSymbolT   s$    !!!T^^4F%G6%QRRrC   c                 t    | j                   d   }|dk(  r| j                  dk(  }t        t        ||            S )Nr.   r*      )r.   )r;   _print_levelr   r   )r@   rS   r.   s      rB   _print_FloatzPrettyPrinter._print_FloatW   s<     NN;/	))Q.I$qI677rC   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_expr2rN   r   r\   rightr!   r@   rS   vec1vec2r^   s        rB   _print_CrosszPrettyPrinter._print_Cross_   s    xxxxD!EJJsO,EKK,-EJJt{{15J3K'LMNEJJsO,EJJt{{4'89:EJJsO,rC   c           	      X   |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }t        |j                  | j                  t        d                   }|S )Nrm   rn   ro   NABLA_exprrN   r   r\   rs   r!   r@   rS   vecr^   s       rB   _print_CurlzPrettyPrinter._print_Curlk   s    ggC EJJsO,EKK,-EJJt{{15J3K'LMNEJJt{{1W:'>?@rC   c           	      X   |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }t        |j                  | j                  t        d                   }|S )Nrm   rn   DOT OPERATORry   rz   r|   s       rB   _print_DivergencezPrettyPrinter._print_Divergencet   s    ggC EJJsO,EKK,-EJJt{{1^3D'EFGEJJt{{1W:'>?@rC   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 )Nrm   rn   r   rp   rt   s        rB   
_print_DotzPrettyPrinter._print_Dot}   s    xxxxD!EJJsO,EKK,-EJJt{{1^3D'EFGEJJsO,EJJt{{4'89:EJJsO,rC   c           	          |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }|S )Nrm   rn   ry   rz   r@   rS   funcr^   s       rB   _print_GradientzPrettyPrinter._print_Gradient   sc    wwD!EJJsO,EKK,-EJJt{{1W:'>?@rC   c           	          |j                   }| j                  |      }t        |j                  d       }t        |j	                  d       }t        |j                  | j                  t        d                   }|S )Nrm   rn   	INCREMENTrz   r   s       rB   _print_LaplacianzPrettyPrinter._print_Laplacian   sc    wwD!EJJsO,EKK,-EJJt{{1[>'BCDrC   c                     	 t        t        |j                  j                  |             S # t        $ r | j                  |      cY S w xY w)N)printer)r   r   	__class____name__KeyErrorrI   rR   s     rB   _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oorm   rn   )rK   r   rY   )r@   rS   inf_lists      rB   _print_RealszPrettyPrinter._print_Reals   s8    ##A&&t}H??8S#66rC   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S Nr   !)rZ   rN   
is_Integeris_nonnegative	is_Symbolr   r[   r\   r@   rS   xr^   s       rB   _print_subfactorialz!PrettyPrinter._print_subfactorial   sX    FF1IA!"2"2q{{/EEJJsO,rC   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S r   rZ   rN   r   r   r   r   r[   rs   r   s       rB   _print_factorialzPrettyPrinter._print_factorial   sY    FF1IA!"2"2q{{/EEKK,-rC   c                     |j                   d   }| j                  |      }|j                  r|j                  s"|j                  st        |j                          }t        |j                  d       }|S )Nr   z!!r   r   s       rB   _print_factorial2zPrettyPrinter._print_factorial2   sY    FF1IA!"2"2q{{/EEKK-.rC   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 rm   rn   ri      )rZ   rN   maxwidthr   abover[   baseline)r@   rS   nkn_pformk_pformbarr^   s           rB   _print_binomialzPrettyPrinter._print_binomial   s    vv1++a.++a.#gmmow}}77GMM#./EKK01ELLc23..1,q0rC   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_oprN   lhsrhsr   nextOPENr@   rS   oplrr^   s         rB   _print_RelationalzPrettyPrinter._print_Relational   sg    d188n,s23KKKKJOOAr15OzOrC   c                    ddl m}m} | j                  r|j                  d   }| j                  |      }t        ||      r| j                  |t        d            S t        ||      r| j                  |t        d            S |j                  r"|j                  st        |j                          }t        |j                  t        d             S | j                  |      S )Nr   )
EquivalentImpliesNotEquiv)altcharNotArrowNot)sympy.logic.boolalgr   r   rK   rZ   rN   r:   _print_Equivalentr   _print_Implies
is_Booleanis_Notr   r[   r\   _print_Function)r@   rS   r   r   argr^   s         rB   
_print_NotzPrettyPrinter._print_Not   s    =&&)CKK$E#z*--c;z;R-SS#w'**3J8O*PP~~cjj"ELLN3uzz+e*<=>>''**rC   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   ri    %s )	rZ   sortedr   rN   r   r   r   r[   rs   )r@   rS   charsortrZ   r   r^   	pform_args           rB   __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 rC   c                 v    | j                   r| j                  |t        d            S | j                  |d      S )NAndTr   rK   _PrettyPrinter__print_Booleanr   r   rR   s     rB   
_print_AndzPrettyPrinter._print_And  9    '';u+=>>'''55rC   c                 v    | j                   r| j                  |t        d            S | j                  |d      S )NOrTr   r   rR   s     rB   	_print_OrzPrettyPrinter._print_Or  s9    '';t+<=='''55rC   c                 v    | j                   r| j                  |t        d            S | j                  |d      S )NXorTr   r   rR   s     rB   
_print_XorzPrettyPrinter._print_Xor  r   rC   c                 v    | j                   r| j                  |t        d            S | j                  |d      S )NNandTr   r   rR   s     rB   _print_NandzPrettyPrinter._print_Nand  s9    '';v+>??'''55rC   c                 v    | j                   r| j                  |t        d            S | j                  |d      S )NNorTr   r   rR   s     rB   
_print_NorzPrettyPrinter._print_Nor$  r   rC   c                 ~    | j                   r!| j                  ||xs t        d      d      S | j                  |      S )NArrowFr   r   r@   rS   r   s      rB   r   zPrettyPrinter._print_Implies*  s?    ''7+Jk'6JQV'WW''**rC   c                 ~    | j                   r| j                  ||xs t        d            S | j                  |d      S )NEquivTr   r   r   s      rB   r   zPrettyPrinter._print_Equivalent0  s>    ''7+Jk'6JKK'''55rC   c           	          | j                  |j                  d         }t        |j                  t	        d|j                                      S )Nr   _)rN   rZ   r   r   r   r   r]   s      rB   _print_conjugatezPrettyPrinter._print_conjugate6  s9    AFF1I&EKKc5;;=)ABDDrC   c                 r    | j                  |j                  d         }t        |j                  dd       }|S )Nr   |)rN   rZ   r   r[   r]   s      rB   
_print_AbszPrettyPrinter._print_Abs:  s2    AFF1I&ELLc23rC   c                     | j                   r8| j                  |j                  d         }t        |j	                  dd       }|S | j                  |      S )Nr   lfloorrfloorrK   rN   rZ   r   r[   r   r]   s      rB   _print_floorzPrettyPrinter._print_floor?  sL    KKq	*EXx @AEL''**rC   c                     | j                   r8| j                  |j                  d         }t        |j	                  dd       }|S | j                  |      S )Nr   lceilrceilr   r]   s      rB   _print_ceilingzPrettyPrinter._print_ceilingG  sL    KKq	*EWg >?EL''**rC   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   ri   r   r   F)r   rH   rK   r!   reversedvariable_countrN   r   r\   r   r<   rs   r[   FUNCbelowr   LINEr   r   MULr   )r@   derivderiv_symbolr   count_total_derivsymnumsdsfr^   s              rB   _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"rC   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 ri   ,) sympy.combinatorics.permutationsr  r  r   r   r[   listcyclic_formrN   sizer<   tuplereplacers   )r@   dcr  r  cycdc_listr,   r   s           rB   _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	, 
rC   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
stacklevelr6   Tr  Fr   )r  r  r  print_cyclicr   r;   getr  
array_formr  rangelenr   ziprN   r   r  r\   rs   r[   )r@   rH   r  r  r6   lowerupperresultfirstur   s1s2cols                 rB   _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==?++rC   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   ri   z dTr   intr     r      F)functionrN   is_Addr   r[   limitsr   rs   heightrK   r   r   r&  r   r\   r   r  r  r   )r@   integralr  prettyFr   r   	prettyArg	firsttermr	  limhH
ascii_modevintr^   prettyAprettyBspcs                     rB   _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("rC   c                    |j                   }| j                  |      }t        dd      }t        dd      }t        dd      }| j                  rt        dd      }t        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   ri   r   -UpTackTr   r      r3  r   r  F)termrN   r   rK   r8  r7  '_PrettyPrinter__print_SumProduct_Limitsr%  appendr   r   stackr   r   r  r   rs   r  r   )r@   rH   r   pretty_funchorizontal_chr
corner_chrvertical_chrfunc_heightr+  	max_uppersign_heightr=  pretty_lowerpretty_upperr   
sign_linesr   pretty_signr8  paddings                       rB   _print_ProductzPrettyPrinter._print_Product  s1   yykk$'c1#q\
C|!#q\Nh*J!((*	;; 	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rC   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   rN   r   r   )r   r   r   r   r   r^   r@   s         rB   print_startz<PrettyPrinter.__print_SumProduct_Limits.<locals>.print_start.  sS    C$t*,s23BC AC A
2q 9:ELrC   r   r   ri   )rN   )r@   r=  r^  prettyUpperprettyLowers   `    rB   __print_SumProduct_Limitsz'PrettyPrinter.__print_SumProduct_Limits-  s;    	 kk#a&)!#a&#a&1K''rC   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)<^><re  r   r   >)r&  r  )r	  widhowneedhalfleads         rB   adjustz6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjust=  s    c!fslHSV|,&#T%[*@s4x<'Qw4x#:t8a<'ax#tc$i'7"888rC   r   ri   r   r   z\%s`\rn   /r  sumr4  r      )Nre  )r   rL  r%  r   r   )	hrequiredr(  r)  	use_asciirm  r>  r   wmorelinesr,   vsums               rB   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1rC   r   Tr   r  Fr   )rK   r5  rN   r6  r   r[   r8  r7  rK  r   r   r   rM  r   r  r   rs   r  r   )r@   rH   r@  rx  r  r:  r?  r+  rS  rT  r=  r`  r_  r   r>  slines
adjustment
prettySignpadascii_adjustments                       rB   
_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$..rC   c                 \   |j                   \  }}}}| j                  |      }t        |      t        d   k  rt	        |j                  dd       }t	        d      }| j                  |      }| j                  r/t	        |j                  t        dd       t        d              }nt	        |j                  d       }t	        |j                  | j                  |             }t        |      d	k(  s"|t        j                  t        j                  fv rd
}n0| j                  r$t        |      dk(  rt        d      n
t        d      }t	        |j                  | j                  |             }t	        |j                  |       }t	        |j                  |      dt        j                  i}|S )Nr   rm   rn   r=  rG  ri   r   z->z+-r  +SuperscriptPlusSuperscriptMinusr   )rZ   rN   r   r   r   r[   rK   rs   r   r   r<   r   InfinityNegativeInfinityr  r  )	r@   r   rS   zz0dirELimLimArgs	            rB   _print_LimitzPrettyPrinter._print_Limit  sX   1b#KKNa=Ju--AHHS#./AQc1{7?S>T.U!VWFd!34FV\\$++b/:;s8trajj!2D2D%EEC  8;CCk"34[YkMlV\\$++c*:;<#))F+,#))A,?
?
rC   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 t        |j                         ||         \  }}t        |j                  |       }t        |j                  |       }|
|}
ut        |
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   ri   r   Nr   r  )r%  rowscolsrN   r   r   r%   r   rs   r\   r  )r@   rS   MMsr,   r8   hsepvsepmaxwDD_rowr	  r\   rs   r   s                  rB   _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+++
 )DG<e/t- =E"EKKD$9:"EKKN3144 y 4[ .-. AGGEN+AK%	,N 92A_ Ds   G8
c                     | j                  |      }|j                         dz  |_        t        |j	                  ||       }|S )Nr   )r  r8  r   r   r[   )r@   rS   lparensrparensr  s        rB   _print_MatrixBasezPrettyPrinter._print_MatrixBase  s=    ''*XXZ]
'23rC   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  r:   r  blocksrN   r8  r   r   r[   )r@   rS   matr  r  s        rB   _print_Determinantz PrettyPrinter._print_Determinant  s    eeJ#{+--cjj#s-SSC AQAJqxxS122))#sC)HHrC   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    rB   <lambda>z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>      #9!#<
5@Q#Q rC   parenthesizerK   rY   rZ   )r@   rH   circled_timess      rB   _print_TensorProductz"PrettyPrinter._print_TensorProduct  s<    $M Mtyy$mQ  S 	SrC   c                 f    | j                   rd}nd}| j                  |j                  d d |d       S )Nu   ∧z/\c                 ,    t        |       t        d   k  S r  r  r  s    rB   r  z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>  r  rC   r  r  )r@   rH   wedge_symbols      rB   _print_WedgeProductz!PrettyPrinter._print_WedgeProduct  s<    #L Ltyy$lQ  S 	SrC   c                     | j                  |j                        }t        |j                  dd       }|j	                         dz  |_        t        |j                  d       }|S )Nrm   rn   r   tr)rN   r   r   r[   r8  r   r\   )r@   rS   r  s      rB   _print_TracezPrettyPrinter._print_Trace  sR    KKS)*XXZ]
/0rC   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[]r\   rs   r   )sympy.matricesr  r:   parentr,   	is_numberr8   rN   r   ra   r   r[   rY   r   r   r   
prettyFunc
prettyArgs)r@   rH   r  r  prettyIndicesr^   s         rB   _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LrC   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   ri   r   r  :r  )r  r   rY   )r   dimr@   s     rB   ppslicez1PrettyPrinter._print_MatrixSlice.<locals>.ppslice@  s^    QAtqyaDtqy!ts{!tqC@AArC   r  r  r  r  r  r   )r  r  rN   r  r:   r   r[   rY   rowslicer  colslicer  r   r   r   r  r  )r@   mr  r  r  r  r^   s   `      rB   _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 &%rC   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   rN   r  r  r  r:   r  r   r[   )r@   rH   r  r^   r  r  s         rB   _print_TransposezPrettyPrinter._print_TransposeU  s[    hhC <3-3,1B1B/E
3(rC   c                 &   |j                   }| j                  |      }| j                  rt        t	        d            }nt        d      }ddlm}m} t        ||      s.t        ||      s"|j                  rt        |j                          }||z  }|S )NDaggerr  r   r  )r   rN   rK   r   r   r  r  r  r:   r  r[   )r@   rH   r  r^   dagr  r  s          rB   _print_AdjointzPrettyPrinter._print_Adjoint_  sw    hhC [23CS/C<3-3,1B1B/Es
rC   c                     |j                   j                  dk(  r| j                  |j                   d         S | j                  |j                         S )Nri   ri   r   r   )r  shaperN   )r@   Bs     rB   _print_BlockMatrixz PrettyPrinter._print_BlockMatrixm  s<    88>>V#;;qxx~..{{188$$rC   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    + )rZ   rN   as_coeff_mmulr   could_extract_minus_signr   r   r   )r@   rH   r	  itemr^   coeffs         rB   _print_MatAddzPrettyPrinter._print_MatAddr  s    II 	;DKK%Ey**,Q/U8446"JOOAs$;<A KK-E"JOOAu$=>A
5 9:	; rC   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MatAddri   )r  rZ   #sympy.matrices.expressions.hadamardr  $sympy.matrices.expressions.kroneckerr  !sympy.matrices.expressions.mataddr  	enumerater:   r   r&  r   rN   r[   __mul__)r@   rH   rZ   r  r  r  r,   as           rB   _print_MatMulzPrettyPrinter._print_MatMul  s    DIIGI<dO 	)DAq1sFO=MNODII*$dkk!n&;&;&=>Q++a.Q	) !!4((rC   c                 X    | j                   rt        t        d            S t        d      S )NIdentityMatrixIrK   r   r   rG   s     rB   _print_IdentityzPrettyPrinter._print_Identity  s&    k*:;<<c?"rC   c                 X    | j                   rt        t        d            S t        d      S )N
ZeroMatrix0r  rG   s     rB   _print_ZeroMatrixzPrettyPrinter._print_ZeroMatrix  s%    k,788c?"rC   c                 X    | j                   rt        t        d            S t        d      S )N	OneMatrix1r  rG   s     rB   _print_OneMatrixzPrettyPrinter._print_OneMatrix  s%    k+677c?"rC   c                     t        |j                        }t        |      D ]  \  }}| j                  |      ||<    t	        j
                  | S rE   )r  rZ   r  rN   r   r  r@   rH   rZ   r,   r  s        rB   _print_DotProductzPrettyPrinter._print_DotProduct  sH    DIIdO 	%DAqkk!nDG	%!!4((rC   c                    | j                  |j                        }ddlm} t	        |j                  |      s,|j                  j
                  rt        |j                          }|| j                  |j                        z  }|S )Nr   r  )	rN   baser  r  r:   r  r   r[   exp)r@   rH   r^   r  s       rB   _print_MatPowzPrettyPrinter._print_MatPow  s]    DII&/$))\2tyy7N7N/EDHH-.rC   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 rE   r:   )r   r  r  r	  s    rB   r  z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>  s    z!ffo5V'W rC   r  )
r  r  r  r  !sympy.matrices.expressions.matmulr	  rK   r   rY   rZ   )r@   rH   delimr  r  r	  s      @@@rB   _print_HadamardProductz$PrettyPrinter._print_HadamardProduct  sK    G<<'EEtyy$eW  Y 	YrC   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   )rK   r   rN   r  r  r   r   r   r[   r   r   r  )r@   rH   circpretty_base
pretty_exppretty_circ_exps         rB   _print_HadamardPowerz"PrettyPrinter._print_HadamardPower  s    v&D;;s#Dkk$)),[[*
dhh*U"33#Z%6%6%89J$__T:.
OO
 O++rC   c                     ddl m ddlm | j                  rdt        d       d}nd}| j                  |j                  d d |fd      S )	Nr   r  r  r   TensorProductz x c                      t        | f      S rE   r  )r   r  r	  s    rB   r  z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>  s    z!ff5E'F rC   r  )r  r  r  r	  rK   r   rY   rZ   )r@   rH   r  r  r	  s      @@rB   _print_KroneckerProductz%PrettyPrinter._print_KroneckerProduct  sR    <<O45Q7EEtyy$eF  H 	HrC   c                     | j                  |j                  j                        }t        |j	                  dd       }|S Nr  r  )rN   lamdarH   r   r[   )r@   Xr  s      rB   _print_FunctionMatrixz#PrettyPrinter._print_FunctionMatrix  s2    KK%c*+rC   c                     |j                   dk(  sC|j                   |j                  }}t        |t        |dd      d      }| j	                  |      S | j                  d      | j                  |j                        z  S )Nri   r  Fevaluate)r  denr   r
   
_print_MulrN   )r@   rH   r  r#  ress        rB   _print_TransferFunctionz%PrettyPrinter._print_TransferFunction  sd    xx1}xxCc3sB7%HC??3'';;q>$++dhh"777rC   c                     t        |j                        }t        |j                        D ]-  \  }}t        | j	                  |      j                          ||<   / t        j                  | S rE   )r  rZ   r  r   rN   r[   r  r  s        rB   _print_SerieszPrettyPrinter._print_Series  s[    DIIdii( 	;DAq $++a."7"7"9:DG	;!!4((rC   c                    ddl m} t        |j                        }g }t	        |      D ]  }t        ||      rgt        |j                        dkD  rO| j                  |      }|j                         dz  |_	        |j                  t        |j                                 v| j                  |      }|j                         dz  |_	        |j                  |        t        j                  | S )Nr   )MIMOParallelri   r   )sympy.physics.control.ltir*  r  rZ   r   r:   r&  rN   r8  r   rL  r   r[   r  )r@   rH   r*  rZ   pretty_argsr  
expressions          rB   _print_MIMOSerieszPrettyPrinter._print_MIMOSeries  s    :DII$ 	/A1l+DII0B![[^
&0&7&7&91&<
#"":z/@/@/B#CD![[^
&0&7&7&91&<
#"":.	/ !!;//rC   c                 .   d }|j                   D ]  }| j                  |      }||}t        t        j                  |       }|j                         dz  |_        t        t        j                  |d       }t        t        j                  ||       } |S )Nr   r  )rZ   rN   r   r   r   r8  r   )r@   rH   r	  r  r^   s        rB   _print_ParallelzPrettyPrinter._print_Parallel  s    II 	;DKK%Ey
 23XXZ]

5 9:
5 9:	; rC   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  ri   )
r+  r2  rZ   rN   r   r   r   r8  r   r:   )r@   rH   r2  r	  r  r^   s         rB   _print_MIMOParallelz!PrettyPrinter._print_MIMOParallel  s    DII 
	;DKK%Ey
 23XXZ]

5 9:d$:;!"aAJ
5 9:
	; rC   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Seriesri   r   r  r   - )sympy.physics.controlr5  r6  sys1varr:   r  rZ   sys2r   r   r   rN   r8  r   sign)
r@   rH   r5  r6  r  tfnum_arg_listden_arg_listr#  denoms
             rB   _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%%rC   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   )
MIMOSeriesr2  r  zI + zI - z-1 r   r   ri   )r8  rC  r2  rN   r;  r9  r   r   r   r<  rs   r[   r   r8  r  r:   )r@   rH   rC  r2  inv_matplant	_feedbacks          rB   _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	rC   c                     | j                  |j                        }|j                         dz
  |_        | j                  r	t
        d   nd}t        |j                  |       }|S )Nri   tauz{t})rN   	_expr_matr8  r   rK   r    r   rs   )r@   rH   r  	subscripts       rB   _print_TransferFunctionMatrixz+PrettyPrinter._print_TransferFunctionMatrixM  sR    kk$..)zz|a',0,=,=M%(6	#))I./
rC   c                     ddl m} |j                  }|j                  }|j                  }|j
                  } |||g||gg      }| j                  |j                        S )Nr   r  )r  r  _A_B_C_DrN   r  )r@   rH   r  Ar  Cr  r  s           rB   _print_StateSpacezPrettyPrinter._print_StateSpaceT  sS    FGGGGGGGGAq6Aq6*+{{3::&&rC   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      }t'        dd      |v rct)        t+        |            D ]K  }d||<   ||   t'        dd      k(  s||dz      dk(  s'|d | t'        dd      z   d
z   ||   z   ||dz   d  z   } nY nWt'        dd      |v rI|j-                  t'        dd            }|dk7  r)d||<   |d | t'        dd      z   d
z   ||   z   ||dz   d  z   }|||<    |D cg c]  }|j/                  d       }}t1        d |D              }d|v rHt#        |      D ]:  \  }}t+        |      dk(  s|j3                  dd
t+        |d         z         d||<   < t#        |      D ]+  \  }}|j                  t+        |||                   t)        |      D ]  }|dz   t+        |      k  r|t+        |      k\  r2|j                  d
t5        |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
t5        |d d       dt+        |      dz
  z  z   z         ||xx   d
|d   dz   z  z  cc<    . t        dj7                  |D cg c]  }|d d 	 c}            S c c}w c c}w )Nr   )Vectorz:ASCII pretty printing of BasisDependent is not implementedc                 (    | d   j                         S Nr   )__str__r  s    rB   r  z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>m  s    AaDLLN rC   r   ri   r  r  z(-1) r   r  r3  
z)_extz)_lower_hookc              3   2   K   | ]  }t        |        y wrE   )r&  ).0r   s     rB   	<genexpr>z6PrettyPrinter._print_BasisDependent.<locals>.<genexpr>  s     ,AQ,s   )sympy.vectorrV  rK   NotImplementedErrorzeror   _pretty_formr:   separateitemsr  
componentsr   rL  rN   r[   
startswithr  r  r   r%  r&  rfindsplitr   insertrp  join)r@   rH   rV  o1vectstrsrd  systemvect
inneritemsr   varg_strlengthsstrsflagr,   partstrtempstrparenindexr   
n_newlinespartsr8   r	  s                            rB   _print_BasisDependentz#PrettyPrinter._print_BasisDependent]  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:#w.!&s7|!4 ""#Q"5>T'1-=='%RS)BTX\B\ '.fuoWa8H&H+.'/2:1+'>@GPQ	
@S'TG!" .!,7 $MM$~q*ABE{"#Q")&5/D4K"K'*#+.6qk#:<CEAIJ<O#P11	 4 &((aggdm((,,,
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 )8 %;s   	R&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   )ImmutableMatrixrM   c                      | d      S )NFr!  rM   )r   r}  s    rB   r  z0PrettyPrinter._print_NDimArray.<locals>.<lambda>  s    E: rC   r  Tri   r   )sympy.matrices.immutabler}  rankrN   r%  r  r  	itertoolsproductrL  r&  )r@   rH   r,   	level_strshape_rangesr  outer_ievenback_outer_iout_exprr}  s             @rB   _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           
      f   t        |      }t        d|j                         z        }t        d|j                         z        }d }d }|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   rN   rZ   is_upr   r   rs   r   r  )r@   ra   indices	index_mapcentertopbotlast_valenceprev_maprx  indpicpicts               rB   _printer_tensor_indicesz%PrettyPrinter._printer_tensor_indices  s   D!V\\^+,V\\^+, 	'E[[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?+rC   c                 x    |j                   d   j                  }|j                         }| j                  ||      S rX  )rZ   ra   get_indicesr  )r@   rH   ra   r  s       rB   _print_TensorzPrettyPrinter._print_Tensor  s6    yy|  ""$++D'::rC   c                     |j                   j                  d   j                  }|j                   j                         }|j                  }| j                  |||      S rX  )rH   rZ   ra   r  r  r  )r@   rH   ra   r  r  s        rB   _print_TensorElementz"PrettyPrinter._print_TensorElement  sJ    yy~~a %%))'')NN	++D'9EErC   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   rN   r[   r  r\   )r@   rH   r<  rZ   r,   r^   s         rB   _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  )rZ   r   r   r   rN   r[   __add__)r@   rH   r,   rZ   s       rB   _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 rX  )rZ   r  rN   )r@   rH   r  s      rB   _print_TensorIndexz PrettyPrinter._print_TensorIndex'  s,    iilzz$C{{3rC   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   ri   )rK   r!   r   	variablesrN   r   r\   rs   rH   r[   r   r&  r  r   r  r   r   r  r   )	r@   r  r  r   variabler	  r
  r  r^   s	            rB   _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"rC   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]   t        fdt        |      D              " }}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 )Nr   T	otherwiseri   zfor r   c              3   H   K   | ]  }|f   j                           y wrE   )r   )r\  r,   Pr8   s     rB   r]  z1PrettyPrinter._print_Piecewise.<locals>.<genexpr>\  s     =AadGMMO=s   "r   {r  )r  rZ   rN   rH   condr   rs   r&  r%  r   r   r\   r  r[   r8  r   r   r   )r@   pexprr   ecr  r  len_argsr8   r  r  r,   r  pwdeltawleftwrightr   r  s          `         @rB   _print_PiecewisezPrettyPrinter._print_PiecewiseM  sD   uzz* 	EEArkk"''*AadGww$$[1!Q$$'--dkk"''.BCE!Q$	E uzz? q# =U8_== # #
 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c                 N    ddl m} | j                  |j                  |            S )Nr   )	Piecewise)$sympy.functions.elementary.piecewiser  rN   rewrite)r@   iter  s      rB   
_print_ITEzPrettyPrinter._print_ITE  s    B{{3;;y122rC   c                     d }|D ]7  }|}||}
t        |j                  d       }t        |j                  |       }9 |t        d      }|S )Nr  r   )r   rs   r   )r@   rp  r  r  r  s        rB   _hprint_veczPrettyPrinter._hprint_vec  s^     	,AAy.
+	, 93ArC   c                    |r%| j                   s| j                  |d|f|||d      S | j                  ||f|||      }t        t        d|j	                               |j
                        }| j                  |||f|||      S )Nr   T)r\   rs   r  ifascii_nougly)r\   rs   r  r   )rK   rY   r   r   r8  r   )	r@   p1p2r\   rs   r  r  tmpseps	            rB   _hprint_vseparatorz PrettyPrinter._hprint_vseparator  s    $"3"3??BR=t5-6t # M Moor2id%9oUc3::<03<<HC}4u)2  4 	4rC   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   rm   rn   ri   FrZ  r  )aprN   bqargumentr8  r   r  r   r  r\   rs   r  r[   r#   r&  )r@   rS   r  r  br  r  r  rp  r  r   r  sztaddimgr  s                    rB   _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   ri   )ri   r   r  r   r   ri   r   z  rm   rn   GrZ  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   r\   )r  r  diffs      rB   rm  z,PrettyPrinter._print_meijerg.<locals>.adjust
  sk    88:
*Dqy2v:rwws4x'8999!2773u9#56::rC   r  )anrN   aotherbmbotherr  r8  r   r  r%  r   r   r   r\   rs   r  r  r[   r#   r&  r  r  )!r@   rS   rp  r  r  r  vpidxr,   r  r8   r	  r\   rs   D1D2r  r   r  r  r  r  r  r  pppqpmpnrm  puplhtr  s!                                    rB   _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Exp1rS   r   )r   r   rN   rZ   )r@   rS   r  s      rB   _print_ExpBasezPrettyPrinter._print_ExpBase%  s1     +fc23t{{166!9---rC   c                 ,    t        t        dd            S )Nr  rS   )r   r   rR   s     rB   _print_Exp1zPrettyPrinter._print_Exp1+  s    +fc233rC   c                 X    | j                  |j                  |j                  ||||      S )N)r   	func_namer\   rs   )_helper_print_functionr   rZ   )r@   rS   r   r  r\   rs   s         rB   r   zPrettyPrinter._print_Function.  s-     **166166PY`dlq*rrrC   c                 (    | j                  |d      S NrS  r  r   rR   s     rB   _print_mathieuczPrettyPrinter._print_mathieuc4      ##A#55rC   c                 (    | j                  |d      S Nr   r  r  rR   s     rB   _print_mathieuszPrettyPrinter._print_mathieus7  r  rC   c                 (    | j                  |d      S )NzC'r  r  rR   s     rB   _print_mathieucprimez"PrettyPrinter._print_mathieucprime:      ##A#66rC   c                 (    | j                  |d      S )NzS'r  r  rR   s     rB   _print_mathieusprimez"PrettyPrinter._print_mathieusprime=  r  rC   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   rN   r   r   r[   rK   r   r   r   r  rY   r   r  r  )r@   r   rZ   r   r  r  elementwiser\   rs   r  r  r  r^   s                rB   r  z$PrettyPrinter._helper_print_function@  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 &%rC   c                 b    |j                   }|j                  }|g}| j                  ||dd      S )Nr  T)r  r  )r5  rH   r  )r@   rS   r   r   rZ   s        rB   _print_ElementwiseApplyFunctionz-PrettyPrinter._print_ElementwiseApplyFunctione  s6    zzffu**4QU*VVrC   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           rB   _special_function_classesz'PrettyPrinter._special_function_classesk  s    KMC?F?w!7 Ag.8=/<]73W=}V,c2]73W=eU^% 	%rC   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   ri   )r  
issubclassr   rK   r   r   )r@   rH   clsr  s       rB   _print_FunctionClassz"PrettyPrinter._print_FunctionClass{  s    11 	NC$$#,,)F$$%d&D&DS&I!&LMM%d&D&DS&I!&LMM	N MM	-	233rC   c                 $    | j                  |      S rE   )rI   rG   s     rB   _print_GeometryEntityz#PrettyPrinter._print_GeometryEntity  s      &&rC   c                     | j                  |j                  d         }| j                  r;t        |      r0| j	                   t        d|z        |j                  d               S | j	                  |      S )Nr   zLi_%sri   rN   rZ   rK   r$   r   r   r@   rS   rK  s      rB   _print_polylogzPrettyPrinter._print_polylog  se    KKq	*	!<Y!G''(E91D(EaffQi(PQQ##A&&rC   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr
  r  r  rK   r    r   r@   rS   r  s      rB   _print_lerchphizPrettyPrinter._print_lerchphi  s,    ,0,=,=M%(:	##A#;;rC   c                 V    | j                   r	t        d   nd}| j                  ||      S )Netadirichlet_etar  r  r  s      rB   _print_dirichlet_etaz"PrettyPrinter._print_dirichlet_eta  s,    ,0,=,=M%(?	##A#;;rC   c                 *   | j                   r	t        d   nd}|j                  d   t        j                  u rKt        | j                  |j                  d         j                          }t        |j                  |       }|S | j                  ||      S )Ntheta	Heavisideri   r   r  )
rK   r    rZ   r   Halfr   rN   r[   r\   r   )r@   rS   r  r^   s       rB   _print_HeavisidezPrettyPrinter._print_Heaviside  s|    .2.?.?M'*[	66!9AFF1I 6 = = ?@E

9 56EL''Y'??rC   c                 (    | j                  |d      S r  r  rR   s     rB   _print_fresnelszPrettyPrinter._print_fresnels  r  rC   c                 (    | j                  |d      S r  r  rR   s     rB   _print_fresnelczPrettyPrinter._print_fresnelc  r  rC   c                 (    | j                  |d      S )NAir  r  rR   s     rB   _print_airyaizPrettyPrinter._print_airyai  r  rC   c                 (    | j                  |d      S )NBir  r  rR   s     rB   _print_airybizPrettyPrinter._print_airybi  r  rC   c                 (    | j                  |d      S )NzAi'r  r  rR   s     rB   _print_airyaiprimez PrettyPrinter._print_airyaiprime      ##A#77rC   c                 (    | j                  |d      S )NzBi'r  r  rR   s     rB   _print_airybiprimez PrettyPrinter._print_airybiprime  r6  rC   c                 (    | j                  |d      S )NWr  r  rR   s     rB   _print_LambertWzPrettyPrinter._print_LambertW  r  rC   c                 (    | j                  |d      S )NCovr  r  rR   s     rB   _print_CovariancezPrettyPrinter._print_Covariance  r6  rC   c                 (    | j                  |d      S )NVarr  r  rR   s     rB   _print_VariancezPrettyPrinter._print_Variance  r6  rC   c                 (    | j                  |d      S )Nr  r  r  rR   s     rB   _print_Probabilityz PrettyPrinter._print_Probability  r  rC   c                 ,    | j                  |ddd      S )Nr  r  r  )r  r\   rs   r  rR   s     rB   _print_Expectationz PrettyPrinter._print_Expectation  s    ##A3c#JJrC   c           	      2   |j                   }|j                  }| j                  rdt        d       d}nd}t	        |      dk(  r|d   j
                  r|d   }| j                  |      }t        t        j                  ||| j                  |            ddiS )Nr   ArrowFromBar -> ri   r   r   rq  )
rH   	signaturerK   r   r&  	is_symbolrN   r   r   r   )r@   rS   rH   sigarrowvar_forms         rB   _print_LambdazPrettyPrinter._print_Lambda  s    vvkkN34A6EEs8q=SV--a&C;;s#:??8UDKK<MNZXYZZrC   c                    | j                  |j                        }|j                  rt        d |j                  D              st	        |j
                        dkD  rlt        |j                  d       }t	        |j
                        dkD  r1t        |j                  | j                  |j
                               }nHt	        |j
                        r3t        |j                  | j                  |j
                  d                }| j                  r%t        |j                  dt        d       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rE   )r   Zero)r\  r  s     rB   r]  z-PrettyPrinter._print_Order.<locals>.<genexpr>  s     ?qqAFF{?s   ri   ; r   r   r   rH  O)rN   rH   pointanyr&  r  r   rs   rK   r   r[   r\   r@   rH   r^   s      rB   _print_OrderzPrettyPrinter._print_Order  sk   DII&JJ3?DJJ??t~~"D 12E4>>"Q&"EKKDNN0K$LMT^^$"EKKDNN1<M0N$OP  "EKK!K4H3I0K$LM"EKK$784::""EKKDJJ0G$HI"EKKDJJqM0J$KLELLN+EJJsO,rC   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   ri   r   rf  rg  r   )rK   rN   rZ   r   rs   rY   )r@   rS   shiftr   r  r^   s         rB   _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7NrC   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr  r  r  r  r  s      rB   _print_betazPrettyPrinter._print_beta  s,    -1->->M&)C	##A#;;rC   c                 ,    d}| j                  ||      S )NzB'r  r  r  s      rB   _print_betainczPrettyPrinter._print_betainc  s    	##A#;;rC   c                 ,    d}| j                  ||      S )Nr  r  r  r  s      rB   _print_betainc_regularizedz(PrettyPrinter._print_betainc_regularized  s    	##A#;;rC   c                 V    | j                   r	t        d   nd}| j                  ||      S Nr	  r  r  r  s      rB   _print_gammazPrettyPrinter._print_gamma  ,    .2.?.?M'*W	##A#;;rC   c                 V    | j                   r	t        d   nd}| j                  ||      S rb  r  r  s      rB   _print_uppergammazPrettyPrinter._print_uppergamma  rd  rC   c                 V    | j                   r	t        d   nd}| j                  ||      S )Nr  r  r  r  r  s      rB   _print_lowergammazPrettyPrinter._print_lowergamma  s,    .2.?.?M'*\	##A#;;rC   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  ri   r   r   )
rK   r&  rZ   r   r    rN   r[   rs   r\   r   )r@   rS   r  r  cr^   s         rB   _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''**rC   c                     | j                  |j                  d         }| j                  r;t        |      r0| j	                   t        d|z        |j                  d               S | j	                  |      S )Nr   zE_%sri   r  r  s      rB   _print_expintzPrettyPrinter._print_expint  se    KKq	*	!<Y!G''(D)1C(DQVVAY(OPP##A&&rC   c                     t        d      }t        | j                  |j                        j                          }t        t	        j
                  ||      dt         j                  i}||_        ||_        |S )Nr  r   )	r   rY   rZ   r[   r   r   r   r  r  )r@   rS   r  r  r^   s        rB   
_print_ChizPrettyPrinter._print_Chi#  sk      &
!8!?!?!AB
&0ooj*&MOOOO &%rC   c                 2   | j                  |j                  d         }t        |j                        dk(  r|}n0| j                  |j                  d         }| j                  ||      }t	        |j                          }t	        |j                  d       }|S )Nr   ri   r  )rN   rZ   r&  r  r   r[   r\   )r@   rS   pforma0r^   pforma1s        rB   _print_elliptic_ezPrettyPrinter._print_elliptic_e2  s|    ++affQi(qvv;!Ekk!&&),G++GW=EELLN+EJJsO,rC   c                     | j                  |j                  d         }t        |j                          }t        |j	                  d       }|S )Nr   K)rN   rZ   r   r[   r\   r]   s      rB   _print_elliptic_kzPrettyPrinter._print_elliptic_k=  s?    AFF1I&ELLN+EJJsO,rC   c                     | j                  |j                  d         }| j                  |j                  d         }| j                  ||      }t        |j	                          }t        |j                  d       }|S )Nr   ri   r  )rN   rZ   r  r   r[   r\   )r@   rS   rq  rr  r^   s        rB   _print_elliptic_fzPrettyPrinter._print_elliptic_fC  sg    ++affQi(++affQi(''9ELLN+EJJsO,rC   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   ri   r   Fr  rR  )	rK   r    rN   rZ   r&  r  r   r\   r[   )r@   rS   ra   rq  rr  r^   pforma2pformas           rB   _print_elliptic_piz PrettyPrinter._print_elliptic_piK  s    &*&7&7}T"T++affQi(++affQi(qvv;!++GW=Ekk!&&),G,,Wge,TFT!23FG 45EELLN+EJJt,-rC   c                 v    | j                   rt        t        d            S | j                  t	        d            S )NphiGoldenRatiorK   r   r   rN   r   rG   s     rB   _print_GoldenRatioz PrettyPrinter._print_GoldenRatioZ  s/    mE233{{6-011rC   c                 v    | j                   rt        t        d            S | j                  t	        d            S )Nr  
EulerGammar  rG   s     rB   _print_EulerGammazPrettyPrinter._print_EulerGamma_  s/    mG455{{6,/00rC   c                 6    | j                  t        d            S )Nr  )rN   r   rG   s     rB   _print_CatalanzPrettyPrinter._print_Cataland  s    {{6#;''rC   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 ri   )rN   rZ   r   r   r  r[   rs   r   rV  s      rB   
_print_ModzPrettyPrinter._print_Modg  s    DIIaL)==:>>)/EEKK01EKKDIIaL(ABC"rC   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   ri   z- rG  r7  r   )r8  r   r   NEGADDr   r[   r   )r^   rx  	pform_negr  s       rB   pretty_negativez1PrettyPrinter._print_Add.<locals>.pretty_negativet  s     z<<>A% $I #I!	
.==JNN2/	1-A q9jnn99rC   F)rationalr  r"  ri   r   T)_as_ordered_termsr  is_Mulr  as_coeff_mulr   rN   rL  is_Rationalq	is_Numberis_Relationalr   r[   r8  r<   r  r  )r@   rH   r-   termspformsr  r  r,   rJ  r  othernegtermr^   largenegatives                  rB   
_print_AddzPrettyPrinter._print_Addp  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**rC   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rE   )r:   r   )r\  r   s     rB   r]  z+PrettyPrinter._print_Mul.<locals>.<genexpr>  s     "Os:c6#:"Os   ri   z-1r  rG  )oldnonec                 p    t        |       xs( t        | t              xr t        | j                        S rE   )r:   r
   r  )r   r  s    rB   r  z*PrettyPrinter._print_Mul.<locals>.<lambda>  s1    *Q*A +K C(IZ-I rC   r   r  Fr!  )sympy.physics.unitsr  rZ   r   OnerU  r  maprN   r   r  r	  r   r   r-   as_ordered_factorsr   is_commutativeis_Powr  r  is_negativerL  r
   r  r  r  r	   r  r&  )r@   r  rZ   strargsnegoneobjr  r  r  aibir  s              @rB   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                 D  	
 | j                  |      }| j                  d   rm| j                  ra|dk(  r\|j                         dk(  rI|j	                         dk(  s|j
                  r*|j                  rt        |j                  t        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 )Nr2   r   ri   ro  rn  r  r   rZ  r   c              3   F   K   | ]  }d |z
  dz
  z  z   d |z  z     yw)r   ri   NrM   )r\  r,   _zZ
linelengths     rB   r]  z0PrettyPrinter._print_nth_root.<locals>.<genexpr>  s5      (
 a!#$s*SU2(
s   !r   )rN   r;   rK   r8  r   r   r   r   r\   nth_rootr   r<   ljustr&  r   r   rj  r%  rs   r   r   r   )r@   r  r&   bprettyrootsignrprettyr  diagonalr	  r  r  s            @@rB   _print_nth_rootzPrettyPrinter._print_nth_root  s   ++d# NN238I8I	gnn.!3A%__)<)<w||HQK899 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()rC   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  r3   Fr!  )sympy.simplify.simplifyr  as_base_expr  r   NegativeOner   rN   r  is_Atomr   r  r   r;   r  r
   r  r[   __pow__)r@   powerr  r  rS   r   r   s          rB   
_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~--rC   c                 >    | j                  |j                  d         S rX  )rN   rZ   rG   s     rB   _print_UnevaluatedExprz$PrettyPrinter._print_UnevaluatedExpr3  s    {{499Q<((rC   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 )Nri   r   )r   
   )r   r<   r  abs)r@   r  r  s      rB   __print_numer_denomz!PrettyPrinter.__print_numer_denom6  s    61u!#a&*..AA!#a&))Vr\c!fl1u!#a&*..A*SQRVBTTT
 "#a&)*SV*<<<rC   c                 x    | j                  |j                  |j                        }||S | j                  |      S rE   )!_PrettyPrinter__print_numer_denomr  r  rI   r@   rH   r*  s      rB   _print_RationalzPrettyPrinter._print_RationalH  s8    ))$&&$&&9M$$T**rC   c                 x    | j                  |j                  |j                        }||S | j                  |      S rE   )r  	numeratordenominatorrI   r  s      rB   _print_FractionzPrettyPrinter._print_FractionP  s:    ))$..$:J:JKM$$T**rC   c                 \   t        |j                        dk\  rXt        |j                        sC| j                  |j                  d         | j                  t        |j                              z  S | j                  rt        d      nd}| j                  |j                  d d d|z  d       S )Nri   r   Multiplicationr   r   c                 R    | j                   xs | j                  xs | j                  S rE   )is_Unionis_Intersectionis_ProductSetsets    rB   r  z1PrettyPrinter._print_ProductSet.<locals>.<lambda>^  s+    CLL =L#&#6#6=L:=:K:K rC   r  )r&  setsr   rN   rK   r   rY   )r@   r  	prod_chars      rB   _print_ProductSetzPrettyPrinter._print_ProductSetX  s    qvv;!K$7;;qvvay)T[[QVV-EEE9=9J9J$45PSI??1664v	7I1L # M MrC   c                 `    t        |j                  t              }| j                  |ddd      S )Nr   r  }r  )r   rZ   r   rY   )r@   r	  rd  s      rB   _print_FiniteSetzPrettyPrinter._print_FiniteSeta  s(    qvv#34uc366rC   c                 R   | j                   rt        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Dots...r  r   ri   r4  r  r  r  )rK   r   startis_infinitestopstepis_positiveiterr   r&  r  rY   )r@   r	  dotsprintsetits        rB   _print_RangezPrettyPrinter._print_Rangee  s    v&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9rC   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 )	Nri   r  r  rm   r  rn   r  r   )r  endrY   rZ   	left_open
right_openr@   r,   r\   rs   s       rB   _print_IntervalzPrettyPrinter._print_Interval~  sp    77aee??166"1:sC88 {{||??166"1:tU;;rC   c                 J    d}d}| j                  |j                  d d ||      S )Nrf  rg  r   rY   rZ   r  s       rB   _print_AccumulationBoundsz'PrettyPrinter._print_AccumulationBounds  s)    qvvbqz477rC   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 rE   )r  r  is_Complementr  s    rB   r  z3PrettyPrinter._print_Intersection.<locals>.<lambda>  s+    8I8I 9A"||9A/2/@/@ rC   r  r   rY   rZ   r@   r,  r  s      rB   _print_Intersectionz!PrettyPrinter._print_Intersection  s=    [==	qvvtT9-A  B 	BrC   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 rE   )r  r  r  r  s    rB   r  z,PrettyPrinter._print_Union.<locals>.<lambda>  s-    8I8I 9H"229H696G6G rC   r  r  )r@   r,  union_delimiters      rB   _print_UnionzPrettyPrinter._print_Union  s=     ;w#<<qvvtT?-H  I 	IrC   c                     | j                   st        d      dt        d      z  }| j                  |j                  d d |      S )Nz?ASCII pretty printing of SymmetricDifference is not implementedr   SymmetricDifference)rK   r`  r   rY   rZ   )r@   r,  sym_delimeters      rB   _print_SymmetricDifferencez(PrettyPrinter._print_SymmetricDifference  s@      %&ghh-B!CCqvvtT=AArC   c                 H    d}| j                  |j                  d d |d       S )Nz \ c                 R    | j                   xs | j                  xs | j                  S rE   )r  r  r  r  s    rB   r  z1PrettyPrinter._print_Complement.<locals>.<lambda>  s(    c&7&7 '/3;N;N '/"%,, rC   r  r  r  s      rB   _print_ComplementzPrettyPrinter._print_Complement  s.    	qvvtT9/  0 	0rC   c                    | j                   rt        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SmallElementOfinri   r   r   r  r  r  Tr\   rs   r  r  c              3   B   K   | ]  \  }}|d d |dfD ]  }|   yw)r   r  NrM   )r\  r:  setvr8   inns       rB   r]  z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>  s7      <	TS#tT:<a! <! <s   r  r  )rK   r   r  	base_setsrI  rN   rH   r&  rY   r  r  r'  )	r@   tsfunr  rI  rH   r   pargsr  s	           @rB   _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rC   c                    | j                   rt        d      }t        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  )rK   r   rY   r   r  getattr	conditionrN   r  r   r[   base_setr   UniversalSetr  )	r@   r  r  _andr  r  r  r  rS  s	            rB   _print_ConditionSetz!PrettyPrinter._print_ConditionSet  sB   ./C u%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rC   c                 2   | j                   rt        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  )rK   r   rY   r  rN   rH   r  r  )r@   r  r  r  rH   prodsetsrS  s          rB   _print_ComplexRegionz"PrettyPrinter._print_ComplexRegion  s    ./CCOOBLL1	{{277#;;rww'OOYX6&)  +&&tQS6:c ' K 	KrC   c           	          |j                   \  }}| j                  rMdt        d       d}t        t	        j
                  | j                  |      || j                  |            ddiS t        t        |            S )Nr   	ElementOfr   rq  )rZ   rK   r   r   r   r   rN   r   )r@   rS   r:  r  els        rB   _print_ContainszPrettyPrinter._print_Contains  sz    66S[-.a0Bzt{{3/?/14;;s3C E QNOQ Q d1g&&rC   c                 f   |j                   j                  t        j                  u rA|j                  j                  t        j                  u r| j                  |j                        S | j                  rt        d      }nd}| j                  |j                               | j                  |      z   S )Nr  r  )r  formular   rQ  bnrN   a0rK   r   r  truncate)r@   r	  r  s      rB   _print_FourierSeriesz"PrettyPrinter._print_FourierSeries	  sw    44<<166!addllaff&<;;qtt$$v&DDqzz|,t{{4/@@@rC   c                 8    | j                  |j                        S rE   )r  infiniter@   r	  s     rB   _print_FormalPowerSeriesz&PrettyPrinter._print_FormalPowerSeries	  s    qzz**rC   c                     t        | j                  |j                        j                          }| j                  t	        d            }t        |j                  |       S )NSetExpr)r   rN   r  r[   r   rs   )r@   se
pretty_setpretty_names       rB   _print_SetExprzPrettyPrinter._print_SetExpr	  sK    RVV!4!;!;!=>
kk&"34;,,Z899rC   c                    | j                   rt        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 implementedr3  r   ri   r4  )rK   r   r&  r  free_symbolsr  r`  r   r  r  r  lengthrL  r  _print_list)r@   r	  r  r  r  s        rB   _print_SeqFormulazPrettyPrinter._print_SeqFormula	  s   v&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))rC   c                      y)NFrM   r  s    rB   r  zPrettyPrinter.<lambda>3	  s    rC   c                 >   g }|D ]U  }| j                  |      }	 ||      rt        |	j                          }	|r|j                  |       |j                  |	       W |st	        d      }
nt        t	        j
                  |  }
t        |
j                  |||       }
|
S )Nr  r{  )rN   r   r[   rL  r   r   )r@   seqr\   rs   r  r  r  r  r  r^   r	  s              rB   rY   zPrettyPrinter._print_seq2	  s      	!DKK%ED!"ELLN3i(MM% 	! 2AJOOV45Au^LMrC   c                     d }|D ]5  }||}t        |j                  |       }t        |j                  |       }7 |t        d      S |S )Nr  )r   rs   )r@   r  rZ   r^   r   s        rB   rj  zPrettyPrinter.joinF	  s\     	6C}"EKK	$:;"EKK$45	6 =b>!LrC   c                 (    | j                  |dd      S r  rY   )r@   r   s     rB   r;  zPrettyPrinter._print_listU	  s    q#s++rC   c                     t        |      dk(  rHt        t        j                  | j	                  |d         d       }t        |j                  ddd       S | j                  |dd      S )Nri   r   r  rm   rn   Tr{  )r&  r   r   r   rN   r[   rY   )r@   r  ptuples      rB   _print_tuplezPrettyPrinter._print_tupleX	  s\    q6Q;QqT1BC!HIFv}}S#d}KLL??1c3//rC   c                 $    | j                  |      S rE   )rE  rG   s     rB   _print_TuplezPrettyPrinter._print_Tuple_	  s      &&rC   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   rN   r   r   r   rL  rY   )r@   r   rI  rd  r   ru  Vr	  s           rB   _print_dictzPrettyPrinter._print_dictb	  s    affh$45 	AAAAaD!AJOOAtQ78ALLO	 uc3//rC   c                 $    | j                  |      S rE   )rK  )r@   r   s     rB   _print_DictzPrettyPrinter._print_Dicto	  s    ""rC   c                     |st        d      S t        |t              }| j                  |      }t        |j	                  ddd       }|S )Nzset()r   r  r  Tr{  )r   r   r   rY   r[   r@   r	  rd  prettys       rB   
_print_setzPrettyPrinter._print_setr	  sI    g&&q./'V]]3D]IJrC   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  Tr{  rm   rn   )	r   r   r   rY   r[   r   r   typer   rO  s       rB   _print_frozensetzPrettyPrinter._print_frozensetz	  s    m,,q./'V]]3D]IJV]]3D]IJZ__T!W-=-=vFGrC   c                 X    | j                   rt        t        d            S t        d      S )NUniverser  r  r0  s     rB   _print_UniversalSetz!PrettyPrinter._print_UniversalSet	  s&    k*566n--rC   c                 *    t        t        |            S rE   r   r   )r@   rings     rB   _print_PolyRingzPrettyPrinter._print_PolyRing	      $t*%%rC   c                 *    t        t        |            S rE   rY  )r@   fields     rB   _print_FracFieldzPrettyPrinter._print_FracField	  s    $u+&&rC   c                 *    t        t        |            S rE   rF   )r@   elms     rB   _print_FreeGroupElementz%PrettyPrinter._print_FreeGroupElement	  s    #c(##rC   c                 *    t        t        |            S rE   rY  )r@   polys     rB   _print_PolyElementz PrettyPrinter._print_PolyElement	  r\  rC   c                 *    t        t        |            S rE   rY  )r@   fracs     rB   _print_FracElementz PrettyPrinter._print_FracElement	  r\  rC   c                     |j                   r-| j                  |j                         j                               S | j                  |j                               S rE   )
is_aliasedrN   as_polyr  rG   s     rB   _print_AlgebraicNumberz$PrettyPrinter._print_AlgebraicNumber	  s<    ??;;t||~55788;;t||~..rC   c                     | j                  |j                  d      |j                  g}t        | j	                  |      j                          }t        |j                  d       }|S )Nlexr  CRootOf)r  rH   rx  r   rY   r[   r\   r@   rH   rZ   r^   s       rB   _print_ComplexRootOfz"PrettyPrinter._print_ComplexRootOf	  sU    		7DDOOD188:;EJJy12rC   c                 F   | j                  |j                  d      g}|j                  t        j                  ur*|j                  | j                  |j                               t        | j                  |      j                          }t        |j                  d       }|S )Nrn  r  RootSum)r  rH   r  r   IdentityFunctionrL  rN   r   rY   r[   r\   rp  s       rB   _print_RootSumzPrettyPrinter._print_RootSum	  sz    		78881---KKDHH-.DOOD188:;EJJy12rC   c                 ~    | j                   rt        d       d}nd}t        t        ||j                  z              S )NIntegersz_%dzGF(%d))rK   r   r   r   mod)r@   rH   forms      rB   _print_FiniteFieldz PrettyPrinter._print_FiniteField	  s:    !*-.c2DD-txx899rC   c                 X    | j                   rt        t        d            S t        d      S )Nrw  ZZr  rG   s     rB   _print_IntegerRingz PrettyPrinter._print_IntegerRing	  s&    k*566d##rC   c                 X    | j                   rt        t        d            S t        d      S )N	RationalsQQr  rG   s     rB   _print_RationalFieldz"PrettyPrinter._print_RationalField	  s&    k+677d##rC   c                     | j                   rt        d      }nd}|j                  rt        |      S | j	                  t        |dz   t        |j                        z               S )NRealsRRr   rK   r   has_default_precisionr   rN   r   r<   	precisionr@   domainprefixs      rB   _print_RealFieldzPrettyPrinter._print_RealField	  sV     )FF''f%%;;}Vc\C@P@P<Q-QRSSrC   c                     | j                   rt        d      }nd}|j                  rt        |      S | j	                  t        |dz   t        |j                        z               S )N	ComplexesCCr   r  r  s      rB   _print_ComplexFieldz!PrettyPrinter._print_ComplexField	  sV     -FF''f%%;;}Vc\C@P@P<Q-QRSSrC   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   rs   rN   rL  rY   r\   r  r@   rH   rZ   r-   r^   s        rB   _print_PolynomialRingz#PrettyPrinter._print_PolynomialRing	      DLL!zz$$
8 4 : :4;;tzz;R STEKKc3/EJJt{{4;;'?@ArC   c                 v   t        |j                        }|j                  j                  sJt	        t	        d      j                  | j                  |j                               }|j                  |       | j                  |dd      }t	        |j                  | j                  |j                               }|S )Nr  rm   rn   r  r  s        rB   _print_FractionFieldz"PrettyPrinter._print_FractionField	  r  rC   c                 2   |j                   }t        |j                        t        |j                        k7  r|dt        |j                        z   fz   }| j	                  |dd      }t        |j                  | j                  |j                               }|S r  )	r  r<   r-   default_orderrY   r   r\   rN   r  )r@   rH   gr^   s       rB   _print_PolynomialRingBasez'PrettyPrinter._print_PolynomialRingBase	  sw    LLtzz?c$"4"455XDJJ/11A3,EJJt{{4;;'?@ArC   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 )Nr  r  r  r  r  zdomain=r  )exprsr  r-   r   rj  r[   gensrN   rs   r  r\   r   r   )	r@   basisr   r  genr  r  r-   r^   s	            rB   _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 )	Nri   r   r   r  r   r]  r  r  )rN   rH   r   r[   r8  r   r   r   rs   rY   r'  r  rT  r   )r@   rS   r^   r>  rvertr  rp  s          rB   _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   ri   r   )r   rN   rZ   r   r  rs   r&  rY   r[   r   r   r   r  r  )
r@   rS   ra   r^   r   r   r  r   r  r  s
             rB   _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%%rC   c                 &    | j                  |d      S )Nr  r  rR   s     rB   _print_eulerzPrettyPrinter._print_euler3
      **1c22rC   c                 &    | j                  |d      S )NrS  r  rR   s     rB   _print_catalanzPrettyPrinter._print_catalan6
  r  rC   c                 &    | j                  |d      S )Nr  r  rR   s     rB   _print_bernoullizPrettyPrinter._print_bernoulli9
  r  rC   c                 &    | j                  |d      S )NLr  rR   s     rB   _print_lucaszPrettyPrinter._print_lucas>
  r  rC   c                 &    | j                  |d      S )Nr  r  rR   s     rB   _print_fibonaccizPrettyPrinter._print_fibonacciA
  r  rC   c                 &    | j                  |d      S )Nr  r  rR   s     rB   _print_tribonaccizPrettyPrinter._print_tribonacciD
  r  rC   c                 p    | j                   r| j                  |t        d         S | j                  |d      S )Nr  	stieltjes)rK   r  r    rR   s     rB   _print_stieltjeszPrettyPrinter._print_stieltjesG
  s6    ..q-2HII..q+>>rC   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  ri   r  r   r   r   )rN   rZ   r   rs   rK   r   r   r\   r   r  POW)r@   rS   r^   r  r  r  r  s          rB   _print_KroneckerDeltaz#PrettyPrinter._print_KroneckerDeltaM
  s    AFF1I&EKK
389EKKAFF1I(>?@=12A3A!&&QWWY/0!''#aggi-01399S>B*..BBrC   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 r  z
Domain on )r  rN   r   rs   r  r  r  )r@   r   r^   s      rB   _print_RandomDomainz!PrettyPrinter._print_RandomDomainZ
  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$$rC   c                     	 |j                   *| j                  |j                   j                  |            S 	 | j                  t	        |            S # t        $ r Y %w xY wrE   )rZ  rN   to_sympyr   reprr@   r  s     rB   
_print_DMPzPrettyPrinter._print_DMPl
  s[    	vv!{{166??1#566 "
 {{47##  		s   5A 	AAc                 $    | j                  |      S rE   )r  r  s     rB   
_print_DMFzPrettyPrinter._print_DMFu
  s    q!!rC   c                 J    | j                  t        |j                              S rE   rN   r   ra   )r@   objects     rB   _print_ObjectzPrettyPrinter._print_Objectx
  s    {{=566rC   c                     t        d      }| j                  |j                        }| j                  |j                        }|j	                  ||      d   }t        |      S )Nz-->r   )r   rN   r  codomainrs   r   )r@   morphismrL  r  r  tails         rB   _print_MorphismzPrettyPrinter._print_Morphism{
  sQ    UX__-;;x001||E8,Q/$rC   c                     | j                  t        |j                              }| j                  |      }t	        |j                  d|      d         S )Nr  r   )rN   r   ra   r  r   rs   )r@   r  r6  pretty_morphisms       rB   _print_NamedMorphismz"PrettyPrinter._print_NamedMorphism
  sF    kk-">?..x8+++CA!DEErC   c                 h    ddl m} | j                   ||j                  |j                  d            S )Nr   )NamedMorphismid)sympy.categoriesr  r  r  r  )r@   r  r  s      rB   _print_IdentityMorphismz%PrettyPrinter._print_IdentityMorphism
  s0    2(((//8+<+<dCE 	ErC   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   re  r   ra   reverserj  rN   r  r   rs   )r@   r  circle	componentcomponent_names_listcomponent_namesr6  r  s           rB   _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 rE   r  )r@   categorys     rB   _print_CategoryzPrettyPrinter._print_Category
  s    {{=788rC   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   )premisesrN   r   EmptySetconclusionsr   rs   r   )r@   diagrampretty_resultresults_arrowpretty_conclusionss        rB   _print_DiagramzPrettyPrinter._print_Diagram
  s    ;;qzz**G$4$45"T%[0M!%W-@-@!A!!D)//13M -*++rC   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%  r8  r   r   r  )r@   gridr  r,   r8   matrixs         rB   _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  rB  r@   r  s     rB   _print_FreeModuleElementz&PrettyPrinter._print_FreeModuleElement
  s    q#s++rC   c           
          |j                   D cg c]+  }|D cg c]  }|j                  j                  |       c}- }}}| j                  |dd      S c c}w c c}}w Nrf  rg  )r  rZ  r  rY   )r@   r  r  r  r  s        rB   _print_SubModulezPrettyPrinter._print_SubModule
  sL    =>VVDcS1#1DDtS#.. 2Ds   	A"AAAc                 p    | j                  |j                        | j                  |j                        z  S rE   )rN   rZ  r  r@   r  s     rB   _print_FreeModulezPrettyPrinter._print_FreeModule
  s'    {{166"DKK$777rC   c                     |j                   j                  }| j                  |j                  j                  D cg c]  \  } ||       c}dd      S c c}w r  )rZ  r  rY   _moduler  )r@   r  r  r   s       rB   _print_ModuleImplementedIdealz+PrettyPrinter._print_ModuleImplementedIdeal
  s>    ffoo!))..A3AAA3LLAs   Ac                 p    | j                  |j                        | j                  |j                        z  S rE   )rN   rZ  
base_idealr@   Rs     rB   _print_QuotientRingz!PrettyPrinter._print_QuotientRing
  s'    {{166"T[[%>>>rC   c                     | j                  |j                  j                  |            | j                  |j                  j                        z   S rE   )rN   rZ  r  r  r   s     rB   _print_QuotientRingElementz(PrettyPrinter._print_QuotientRingElement
  s6    {{166??1-.QVV=N=N1OOOrC   c                     | j                  |j                        | j                  |j                  j                        z   S rE   )rN   datamodulekilled_moduler  s     rB   _print_QuotientModuleElementz*PrettyPrinter._print_QuotientModuleElement
  s-    {{166"T[[1G1G%HHHrC   c                 p    | j                  |j                        | j                  |j                        z  S rE   )rN   r  r  r  s     rB   _print_QuotientModulez#PrettyPrinter._print_QuotientModule
  s'    {{166"T[[%AAArC   c                 &   | j                  |j                               }|j                         dz  |_        t	        |j                  d| j                  |j                        dt        dd      z  | j                  |j                               }|S )Nr   z : z %s> rG  )	rN   _sympy_matrixr8  r   r   rs   r  r   r  )r@   r>  r  r^   s       rB   _print_MatrixHomomorphismz'PrettyPrinter._print_MatrixHomomorphism
  sq    Q__./ --/Q.FLLAHH0Ed3l"DKK

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

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

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

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

7 34ErC   c                     |j                   j                   dk(  rD| j                  r| j                  t        d            }|S | j                  t	        d            }|S | j                  |      S )NdegreeDegree   )ra   rK   rN   r   chrrI   r]   s      rB   _print_QuantityzPrettyPrinter._print_Quantity  s_    66;;("  K$9: L CH-L$$Q''rC   c                     t        dt        |j                        z   dz         }| j                  |j                        }| j                  |j
                        }t        t        j                  |||       }|S )Nr   )r   r   r   rN   r   r   r   r   r   s         rB   _print_AssignmentBasez#PrettyPrinter._print_AssignmentBase  s^    d144j(3./KKKKJOOAr156rC   c                 8    | j                  |j                        S rE   r  r0  s     rB   
_print_StrzPrettyPrinter._print_Str#  s    {{166""rC   rE   )F)T)r  r  )NNr  F)FNrm   rn   )FNr  Frm   rn   )r   
__module____qualname____doc__printmethod_default_settingsr9   rI   propertyrK   rP   rT   rV   r_   rd   _print_RandomSymbolrg   rk   rw   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  r0  rE  rZ  rK  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r(  r.  r0  r3  rA  rG  rL  rT  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r   r$  r)  r+  r-  r0  r3  r5  r8  r;  r>  rA  rC  rE  rN  rW  rZ  r\  r^  r`  rc  rf  rh  rk  rm  ro  rs  rv  rx  r~  r  r  r  r  r  r$  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r'  r-  r1  r7  r<  _print_SeqPer_print_SeqAdd_print_SeqMulrY   rj  r;  rE  rG  rK  rM  rQ  rT  rW  r[  r_  rb  re  rh  rl  rq  ru  rz  r}  r  r  r  r  r  r  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,  r2  r4  r6  rM   rC   rB   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8AF
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((,0'0#.&'$&&/	:$$	T	T

&"(333 #K333?C%$$"7 F
E
A9,3,/8M?PIB*'(2-.(#rC   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(   r;   r   rP   )rH   rA   r  r/   uflags        rB   rP  rP  '  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)printrP  )rH   kwargss     rB   pretty_printrP  :  s    V 
&
 
 !rC   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)getpreferredencodingr1   i  N)pydocrR  localerS  rP  encode)rH   rA   rR  rS  s       rB   pager_printrW  j  s=     +H$"(	&
"
"
)
)*>*@
ABrC   )?r  
sympy.corer   sympy.core.addr   sympy.core.containersr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r	   sympy.core.powerr
   sympy.core.sortingr   sympy.core.symbolr   sympy.core.sympifyr   sympy.printing.conventionsr   sympy.printing.precedencer   r   r   sympy.printing.printerr   r   sympy.printing.strr   sympy.utilities.iterablesr   sympy.utilities.exceptionsr    sympy.printing.pretty.stringpictr   r   &sympy.printing.pretty.pretty_symbologyr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r  pprint_use_unicodepprint_try_use_unicoder(   rP  rP  pprintrW  rM   rC   rB   <module>rm     s       ' (  /   / $ + 7 T T : # 1 @ Cb b b b
 ( / F,#G F,#RX " "$+"Z 
CrC   