
    Ed<                    ~   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 e/Z4e2Z5 G d de          Z6 ee6          d             Z7d Z8e8Z9d Z:dS )    N)S)Add)Tuple)FunctionMul)NumberRational)Pow)default_sort_keySymbol)SympifyError)requires_partial)
PRECEDENCE
precedenceprecedence_traditional)Printerprint_function)sstr)has_variety)sympy_deprecation_warning)
prettyForm
stringPict)hobjvobjxobjxsympretty_symbolpretty_atompretty_use_unicodegreek_unicodeUpretty_try_use_unicode	annotatedc                      e Zd ZdZdZddddddddddd
Zdd	Zd
 Zed             Z	d Z
d Zd Zd ZddZeZd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZeZeZeZeZeZ eZ!d Z"d Z#d Z$d Z%d Z&d  Z'd! Z(dd"Z)d# Z*d$ Z+d% Z,d& Z-d' Z.dd(Z/dd)Z0d* Z1d+ Z2d, Z3d- Z4d. Z5d/ Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;d5 Z<d6 Z=dd9Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\i fdXZ]dY Z^dZ Z_d[ Z`d\ Zad] Zbd^ Zcd_ Zdd` Zeda ZfddcZgdd Zhde Zidf Zjdg Zk	 	 ddjZldk Zmdl Zndm Zodn Zp	 	 	 ddpZqdq Zredr             Zsds Ztdt Zudu Zvdv Zwdw Zxdx Zydy Zzdz Z{d{ Z|d| Z}d} Z~d~ Zd 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dod 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 ZdS )PrettyPrinterz?Printer, which converts an expression into 2D ASCII-art figure._prettyNautoTplaini)
order	full_precuse_unicode	wrap_linenum_columnsuse_unicode_sqrt_charroot_notationmat_symbol_styleimaginary_unitperm_cyclicc                 B   t          j        | |           t          | j        d         t                    s-t          d                    | j        d                             | j        d         dvr-t          d                    | j        d                             d S )Nr4   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     <lib/python3.11/site-packages/sympy/printing/pretty/pretty.pyr8   zPrettyPrinter.__init__/   s    x((($.)9:C@@ 	~DKKDN[kLlmmnnn^,-Z? 	~SZZ[_[ijz[{||}}}	~ 	~    c                 :    t          t          |                    S Nr   r;   r?   exprs     rA   emptyPrinterzPrettyPrinter.emptyPrinter7   s    #d))$$$rB   c                 <    | j         d         rdS t                      S )Nr.   T)r:   r!   )r?   s    rA   _use_unicodezPrettyPrinter._use_unicode:   s"    >-( 	(4%'''rB   c                 L     |                      |          j        di | j        S )N )_printrenderr:   rF   s     rA   doprintzPrettyPrinter.doprintA   s)    't{{4  '99$.999rB   c                     |S rD   rL   r?   es     rA   _print_stringPictzPrettyPrinter._print_stringPictE   s    rB   c                      t          |          S rD   )r   rQ   s     rA   _print_basestringzPrettyPrinter._print_basestringH   s    !}}rB   c                     t          |                     |j                                                   }t          |                    d           }|S )Natan2)r   
_print_seqargsparensleftr?   rR   pforms      rA   _print_atan2zPrettyPrinter._print_atan2K   sA    DOOAF33::<<=EJJw//0rB   Fc                 J    t          |j        |          }t          |          S rD   )r   namer   )r?   rR   	bold_namesymbs       rA   _print_SymbolzPrettyPrinter._print_SymbolP   s!    QVY//$rB   c                 L    |                      || j        d         dk              S )Nr3   bold)rc   r:   rQ   s     rA   _print_MatrixSymbolz!PrettyPrinter._print_MatrixSymbolT   s%    !!!T^4F%G6%QRRRrB   c                 z    | j         d         }|dk    r| j        dk    }t          t          ||                    S )Nr-   r)      )r-   )r:   _print_levelr   r   )r?   rR   r-   s      rA   _print_FloatzPrettyPrinter._print_FloatW   sE     N;/	 	/)Q.I$qI666777rB   c           	         |j         }|j        }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }t          |                    d           }t          |                    |                     |                     }t          |                    d           }|S )N()MULTIPLICATION SIGN_expr1_expr2rM   r   r[   rightr#   r?   rR   vec1vec2r]   s        rA   _print_CrosszPrettyPrinter._print_Cross_   s    xxD!!EJJsOO,EKK,,-EJJt{{15J3K3K'L'LMMNEJJsOO,EJJt{{4'8'899:EJJsOO,rB   c           	         |j         }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }t          |                    |                     t          d                               }|S )Nrl   rm   rn   NABLA_exprrM   r   r[   rr   r#   r?   rR   vecr]   s       rA   _print_CurlzPrettyPrinter._print_Curlk   s    gC  EJJsOO,EKK,,-EJJt{{15J3K3K'L'LMMNEJJt{{1W::'>'>??@rB   c           	         |j         }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }t          |                    |                     t          d                               }|S )Nrl   rm   DOT OPERATORrx   ry   r{   s       rA   _print_DivergencezPrettyPrinter._print_Divergencet   s    gC  EJJsOO,EKK,,-EJJt{{1^3D3D'E'EFFGEJJt{{1W::'>'>??@rB   c           	         |j         }|j        }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }t          |                    d           }t          |                    |                     |                     }t          |                    d           }|S )Nrl   rm   r   ro   rs   s        rA   
_print_DotzPrettyPrinter._print_Dot}   s    xxD!!EJJsOO,EKK,,-EJJt{{1^3D3D'E'EFFGEJJsOO,EJJt{{4'8'899:EJJsOO,rB   c           	      &   |j         }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }|S )Nrl   rm   rx   ry   r?   rR   funcr]   s       rA   _print_GradientzPrettyPrinter._print_Gradient   sq    wD!!EJJsOO,EKK,,-EJJt{{1W::'>'>??@rB   c           	      &   |j         }|                     |          }t          |                    d           }t          |                    d           }t          |                    |                     t          d                               }|S )Nrl   rm   	INCREMENTry   r   s       rA   _print_LaplacianzPrettyPrinter._print_Laplacian   sq    wD!!EJJsOO,EKK,,-EJJt{{1[>>'B'BCCDrB   c                     	 t          t          |j        j        |                     S # t          $ r |                     |          cY S w xY w)N)printer)r   r    	__class____name__KeyErrorrH   rQ   s     rA   _print_AtomzPrettyPrinter._print_Atom   s\    	(k!+*>MMMNNN 	( 	( 	($$Q'''''	(s   '* AAc                 p    | j         r|                     |          S ddg}|                     |dd          S )Nz-oooorl   rm   )rJ   r   rX   )r?   rR   inf_lists      rA   _print_RealszPrettyPrinter._print_Reals   s@     	7##A&&&t}H??8S#666rB   c                     |j         d         }|                     |          }|j        r|j        s"|j        st          |                                 }t          |                    d           }|S Nr   !)rY   rM   
is_Integeris_nonnegative	is_Symbolr   rZ   r[   r?   rR   xr]   s       rA   _print_subfactorialz!PrettyPrinter._print_subfactorial   sd    F1IA 	0!"2 	0q{ 	0/EEJJsOO,rB   c                     |j         d         }|                     |          }|j        r|j        s"|j        st          |                                 }t          |                    d           }|S r   rY   rM   r   r   r   r   rZ   rr   r   s       rA   _print_factorialzPrettyPrinter._print_factorial   sf    F1IA 	0!"2 	0q{ 	0/EEKK,,-rB   c                     |j         d         }|                     |          }|j        r|j        s"|j        st          |                                 }t          |                    d           }|S )Nr   z!!r   r   s       rA   _print_factorial2zPrettyPrinter._print_factorial2   sf    F1IA 	0!"2 	0q{ 	0/EEKK--.rB   c                    |j         \  }}|                     |          }|                     |          }dt          |                                |                                          z  }t	          |                    |           }t	          |                    |           }t	          |                    dd           }|j        dz   dz  |_        |S )N rl   rm   rh      )rY   rM   maxwidthr   aboverZ   baseline)r?   rR   nkn_pformk_pformbarr]   s           rA   _print_binomialzPrettyPrinter._print_binomial   s    v1++a..++a..#gmmoow}}777GMM#../EKK001ELLc223.1,q0rB   c                    t          dt          |j                  z   dz             }|                     |j                  }|                     |j                  }t          t          j        |||          dt           j        i}|S )Nr   binding)	r   r   rel_oprM   lhsrhsr   nextOPENr?   rR   oplrr]   s         rA   _print_RelationalzPrettyPrinter._print_Relational   sn    d18nn,s233KKKKJOAr155OzOOrB   c                    ddl m}m} | j        r|j        d         }|                     |          }t          ||          r|                     |d          S t          ||          r|                     |d          S |j	        r"|j
        st          |                                 }t          |                    d           S |                     |          S )Nr   )
EquivalentImpliesu   ⇎)altcharu   ↛   ¬)sympy.logic.boolalgr   r   rJ   rY   rM   r9   _print_Equivalent_print_Implies
is_Booleanis_Notr   rZ   r[   _print_Function)r?   rR   r   r   argr]   s         rA   
_print_NotzPrettyPrinter._print_Not   s    ======== 	+&)CKK$$E#z** f--c;d-eee#w'' \**38Z*[[[~ 4cj 4"ELLNN3uzz.99::''***rB   c                    |j         }|rt          |j         t                    }|d         }|                     |          }|j        r"|j        st          |                                 }|dd          D ]{}|                     |          }|j        r"|j        st          |                                 }t          |                    d|z             }t          |                    |           }||S )Nkeyr   rh    %s )	rY   sortedr   rM   r   r   r   rZ   rr   )r?   rR   charsortrY   r   r]   	pform_args           rA   __print_BooleanzPrettyPrinter.__print_Boolean   s    v 	8!&&6777D1gC  > 	0#* 	0/E8 	8 	8CC((I~ <cj <&	(8(8(:(:;	FTM : :;EI 6 67EErB   c                 j    | j         r|                     |d          S |                     |d          S )N   ∧Tr   rJ   _PrettyPrinter__print_Booleanr   rQ   s     rA   
_print_AndzPrettyPrinter._print_And  s=     	6''+<==='''555rB   c                 j    | j         r|                     |d          S |                     |d          S )Nu   ∨Tr   r   rQ   s     rA   	_print_OrzPrettyPrinter._print_Or  s=     	6''+;<<<'''555rB   c                 j    | j         r|                     |d          S |                     |d          S )Nu   ⊻Tr   r   rQ   s     rA   
_print_XorzPrettyPrinter._print_Xor  <     	6''9555'''555rB   c                 j    | j         r|                     |d          S |                     |d          S )Nu   ⊼Tr   r   rQ   s     rA   _print_NandzPrettyPrinter._print_Nand  s<     	6'':666'''555rB   c                 j    | j         r|                     |d          S |                     |d          S )Nu   ⊽Tr   r   rQ   s     rA   
_print_NorzPrettyPrinter._print_Nor$  r   rB   c                 n    | j         r|                     ||pdd          S |                     |          S )Nu   →Fr   r   r?   rR   r   s      rA   r   zPrettyPrinter._print_Implies*  sC     	+''7+L6LSX'YYY''***rB   c                 n    | j         r|                     ||pd          S |                     |d          S )Nu   ⇔Tr   r   r   s      rA   r   zPrettyPrinter._print_Equivalent0  sB     	6''7+S6STTT'''555rB   c           	          |                      |j        d                   }t          |                    t	          d|                                                     S )Nr   _)rM   rY   r   r   r   r   r\   s      rA   _print_conjugatezPrettyPrinter._print_conjugate6  sB    AF1I&&EKKc5;;==)A)ABBDDrB   c                     |                      |j        d                   }t          |                    dd           }|S )Nr   |)rM   rY   r   rZ   r\   s      rA   
_print_AbszPrettyPrinter._print_Abs:  s6    AF1I&&ELLc223rB   c                     | j         r?|                     |j        d                   }t          |                    dd           }|S |                     |          S )Nr   lfloorrfloorrJ   rM   rY   r   rZ   r   r\   s      rA   _print_floorzPrettyPrinter._print_floor?  sU     	+KKq	**EXx @ @AEL''***rB   c                     | j         r?|                     |j        d                   }t          |                    dd           }|S |                     |          S )Nr   lceilrceilr   r\   s      rA   _print_ceilingzPrettyPrinter._print_ceilingG  sU     	+KKq	**EWg > >?EL''***rB   c                    t          |j                  r| j        rt          d          }nd}d }d}t	          |j                  D ]\  }}|                     |          }t          |                    |           }||z  }|j	        r|dk    r|t          t          |                    z  }||}lt          |                    d           }t          |                    |           }t          |                     |j                                                  dt          j        i}	t          |          }
|dk    dk    r|
t          t          |                    z  }
t          |
                    t          j        |           }
|
j        dz   |
_        t          t          j        |
|	           }
t          j        |
_        |
S )NPARTIAL DIFFERENTIALdr   rh   r   r   F)r   rG   rJ   r#   reversedvariable_countrM   r   r[   r   r;   rr   rZ   FUNCbelowr   LINEr   r   MULr   )r?   derivderiv_symbolr   count_total_derivsymnumsdsfr]   s              rA   _print_DerivativezPrettyPrinter._print_DerivativeO  s   EJ'' 	 D,= 	 344LLL !566 	- 	-HCC  AQVVL112B$N .a .CHH--- --,&*kk%*&=&=&D&D&F&FHOH H <((!e+ 	>:c*;&<&<===EEKK
;;<!+JOE1556"rB   c                 ,   ddl m}m} | |            k    r*t          d          }t	          |                                 S  ||                                          j        }|g k    r8|                     |j	        dz
            }t	          |                                 S t          d          }|D ]a}|                     t          t          |                                        dd                    }t	          |                    |           }b|S )Nr   PermutationCycle rh   ,) sympy.combinatorics.permutationsr  r  r   r   rZ   listcyclic_formrM   sizer;   tuplereplacerr   )r?   dcr  r  cycdc_listr+   r   s           rA   _print_CyclezPrettyPrinter._print_Cyclet  s    GGGGGGGG= 	-R..Cszz||,,+bggii((4b= 	-++bgk**Cszz||,,nn 	, 	,ACaMM11#r::;;Aciill+CC
rB   c                    ddl m}m} |j        }|t	          d| dddd           n| j                            d	d
          }|r|                      ||                    S |j        }t          t          t          |                              }t          d          }d
}t          ||          D ]\  }	}
|                     |	          }|                     |
          }t          |                    |           }|rd}nt          |                    d           }t          |                    |           }t          |                                 S )Nr   r  zw
                Setting Permutation.print_cyclic is deprecated. Instead use
                init_printing(perm_cyclic=z).
                z1.6z#deprecated-permutation-print_cyclic   )deprecated_since_versionactive_deprecations_target
stacklevelr5   Tr  Fr   )r
  r  r  print_cyclicr   r:   getr  
array_formr  rangelenr   ziprM   r   r   r[   rr   rZ   )r?   rG   r  r  r5   lowerupperresultfirstur   s1s2cols                 rA   _print_Permutationz PrettyPrinter._print_Permutation  su   GGGGGGGG!. 	B%+6   */+P     .,,]DAAK 	2$$UU4[[111U3u::&&''Bu%% 	4 	4DAqQBQBbhhrll+C 1 #((3--0c!2!23FF6==??++rB   c                    |j         }|                     |          }|j        rt          |                                 }|}|j        D ]m}|                     |d                   }|                                dk    rt          |                                 }t          |                    d|           }nd}d }|j        D ]}	|                                }
|
dz   }| j	         }|r|dz  }t          d|          }t          |          }|j        ||
z
  dz  z   |_        t          |	          dk    rHt          |	          dk    r*t          d          }|                     |	d                   }t          |	          dk    r6|                     |	d                   }|                     |	d                   }|rt          dd|                                z
            }t          |                    d	|z             }t          dd
|                                z
            }t          |                    d	|z             }t          |                    |           }t          |                    |           }|st          |                    d	           }|r|}d}t          |                    |           }t          |                    |           }t          j        |_        |S )Nr   rh   z dTr   intr     r      F)functionrM   is_Addr   rZ   limitsr   rr   heightrJ   r   r   r  r   r[   r   r   r   r   )r?   integralr  prettyFr   r   	prettyArg	firsttermr   limhH
ascii_modevintr]   prettyAprettyBspcs                     rA   _print_IntegralzPrettyPrinter._print_Integral  s    ++a..8 	4 '.."2"23G  	: 	:AAaD))I  1$ <&	(8(8(:(:;	ciii889CC 	? .	/ .	/C

AAA "..J Qq>>D t$$E \A- EN 3xx!| : s88q= 2(nnG"kk#a&11Gs88q= 2"kk#a&11G"kk#a&11G D aW]]__!455C(',,sSy*A*ABGaW]]__!455C('--c	*B*BCG"EKK$8$89"EKK$8$89 6"EKK$4$45 /!		u.CHHQKK("rB   c                 b   |j         }|                     |          }t          dd          }t          dd          }t          dd          }| j        rt          dd          }d}|                                }d}d}	d}
|j        D ]}|                     |          \  }}|dz   d	z  d
z  dz
  }||z   ||dz
  z  z   |z   |z   g}t          |dz             D ])}|                    d|z   d|dz
  z  z   |z   dz              *t          d          }t           |j        |  }t          |	|                                          }	|r|                                }
t          |                    |           }t          |                    |           }|r	d|_        d}|                                }t          d          }t           |j        dg|dz
  z    }t          |                    |           }t          |                    |           }|	|
dz  z   |_        t          j        |_        |S )Nr   rh   r   -u   ┬Tr   r      r*  r   r  F)termrM   r   rJ   r/  r.  '_PrettyPrinter__print_SumProduct_Limitsr  appendr   r   stackr   r   r   r   rr   r   r   )r?   rG   r   pretty_funchorizontal_chr
corner_chrvertical_chrfunc_heightr"  	max_uppersign_heightr4  pretty_lowerpretty_upperr   
sign_linesr   pretty_signr/  paddings                       rA   _print_ProductzPrettyPrinter._print_Product  sc   ykk$''c1#q\\
C|| 	F!#q\\NEJ!((**	; 	F 	FC)-)G)G)L)L&L, 1_)Q.2E(:55QR79STWaadrrsJ;?++ _ _!!#"4uQw"H<"WZ]"]^^^^$R..K$&7k&7&DEK I|':':'<'<==I 3)0022$k&7&7&E&EFK$k&7&7&E&EFK '($ ''))F nnG -'-#
1C"DEG$k&7&7&@&@AK$k&7&7&D&DEKK(;>9(nrB   c                 |      fd}                      |d                   } ||d         |d                   }||fS )Nc                     t          dt          d          z   dz             }                    |           }                    |          }t          t          j        |||           }|S )Nr   ==)r   r   rM   r   r   )r   r   r   r   r   r]   r?   s         rA   print_startz<PrettyPrinter.__print_SumProduct_Limits.<locals>.print_start.  s_    C$t**,s233BC  AC  A
2q 9 9:ELrB   r   r   rh   rM   )r?   r4  rT  prettyUpperprettyLowers   `    rA   __print_SumProduct_Limitsz'PrettyPrinter.__print_SumProduct_Limits-  sW    	 	 	 	 	 kk#a&))!k#a&#a&11K''rB   c                    | j          }d }|j        }|                     |          }|j        rt	          |                                 }|                                dz   }d}d}d}	|j        D ]r}
|                     |
          \  }}t          ||                                          } |||
                                |
                                |          \  }}}}t          d          }t	           |j        |  }|r|                                }	t	          |                    |           }t	          |                    |           }|r2|xj        ||                                dz  |j        z
  z
  z  c_        d}t          d          }t	           |j        dg|z    }t	          |                    |           }t	          |                    |           }t|s|nd}||	dz  z   |z   |_        t          j        |_        |S )Nc                 &   dd}t          | d          }|dz  }|dz   }| dz  }g }	|r|	                    d|z  dz              |	                    dd|dz
  z  z             t          d|          D ]%}
|	                    d|
z  dd||
z
  z             &|r#|	                    d|z  d	d||z
  z             t          t          d|                    D ]%}
|	                    d|
z  d
d||
z
  z             &|	                    d
d|dz
  z  z   dz              |||z   |	|fS ||z   }||z   }t	          dd          }|	                    d|z             t          d|          D ]/}
|	                    d|
z  |d         d||
z
  dz
  z             0t          t          d|                    D ]/}
|	                    d|
z  |d         d||
z
  dz
  z             0|	                    |d         |z             ||d|z  z   |	|fS )N<^>c                     |rt          |           |k    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)r[  <r[  r   r   >)r  r  )r   widhowneedhalfleads         rA   adjustz6PrettyPrinter._print_Sum.<locals>.asum.<locals>.adjust=  s     c!ffsl HSVV|,& (#T%[[*@ (s4x<'Qw4x#: (t8a<'ax#tc$ii'7"888rB   r   rh   r   r   z\%s`\rm   /r	  sumr+  r      )Nr[  )r   rB  r  r   r   )	hrequiredr  r   	use_asciird  r5  r   wmorelinesr+   vsums               rA   asumz&PrettyPrinter._print_Sum.<locals>.asum<  s   
9 
9 
9 
9 Iq!!A1AAAq=DE 2S!Ws]+++WQU4555q! B BALLSUUUCQKK!@AAAA CLLCGGGS!a%[[!ABBB!%1++.. A AALLCEEE3A;;!?@@@@S3A;.4555!d(E4//HHE1~~S!W%%%q! O OALLSUUDGGS!a%!)__!MNNNN!%1++.. O OALLSUUDGGS!a%!)__!MNNNNT!Wa[)))!af*eT11rB   r   Tr   r  Fr   )rJ   r,  rM   r-  r   rZ   r/  r.  rA  r   r   r   rC  r   r   r   rr   r   r   )r?   rG   r7  ro  r  r1  r6  r"  rI  rJ  r4  rW  rV  r   r5  slines
adjustment
prettySignpadascii_adjustments                       rA   
_print_SumzPrettyPrinter._print_Sum9  s6   **
(	2 (	2 (	2T M++a..8 	4 '.."2"23GNNq  	; 	= 	=C'+'E'Ec'J'J$KI{'9'9';';<<I (,t;$$&&(9(9(;(;Z(I (I$Aq&*#BJ#%5Z%5v%>?J 2(//11#Z%5%5k%B%BCJ#Z%5%5k%B%BCJ   A)9)91)<)0)9*: %; ;   R..Cici#q12C#Z%5%5c%:%:;J *"2"27";";<GG .8>::Q${A~58HH$.rB   c                 h   |j         \  }}}}|                     |          }t          |          t          d         k    rt	          |                    dd           }t	          d          }|                     |          }| j        rt	          |                    d           }nt	          |                    d           }t	          |                    |                     |                     }t          |          dk    s|t          j
        t          j        fv rd}n| j        rt          |          d	k    rd
nd}t	          |                    |                     |                     }t	          |                    |           }t	          |                    |          dt          j        i}|S )Nr   rl   rm   r4  u   ─→z->z+-r  +u   ⁺u   ⁻r   )rY   rM   r   r   r   rZ   rJ   rr   r;   r   InfinityNegativeInfinityr   r   )	r?   r   rR   zz0dirELimLimArgs	            rA   _print_LimitzPrettyPrinter._print_Limit  sz   1b#KKNNa==Ju-- 	0AHHS#../AQ 	5.e!f!fgFFd!3!34FV\\$++b//::;s88t 	braj!2D%EE 	bCC  b58XX_a11JaV\\$++c*:*:;;<#))F++,#))A,,?
??
rB   c                 ,   |}i t          |j                  D ];}t          |j                  D ]$|                     ||f                   |f<   %<d}d}dg|j        z  }t          |j                  D ]6t	          fdt          |j                  D             pdg          |<   7d}t          |j                  D ]:}d}t          |j                  D ]ъ|f         }	|	                                |         k    sJ |         |	                                z
  }
|
dz  }|
|z
  }t          |	                    d|z             }	t          |	                    d|z             }	||	}t          |                    d|z             }t          |                    |	           }||}t          |          D ]}t          |	                    d           }t          |	                    |           }<|t          d          }|S )	zL
        This method factors out what is essentially grid printing.
        r   rh   c                 H    g | ]}|f                                          S rL   r   ).0r+   Msr7   s     rA   
<listcomp>z8PrettyPrinter._print_matrix_contents.<locals>.<listcomp>  s+    CCC2ad8>>++CCCrB   r   Nr   r  )
r  rowscolsrM   r   r   r   rr   r[   r   )r?   rR   Mr+   hsepvsepmaxwDD_rowr   wdeltawleftwrightr   r  r7   s                 @@rA   _print_matrix_contentsz$PrettyPrinter._print_matrix_contents  sE    qv 	0 	0A16]] 0 0;;qAw//1a40  taf}qv 	L 	LACCCCCU16]]CCCJsKKDGG qv '	, '	,AE16]] 4 4q!tH wwyyDG++++
 a17799,!%F
 3 34s5y 1 12  E"EKKD$9$9:"EKKNN3  4[[ . .-AGGENN+AA 	2ArB   []c                     |                      |          }|                                dz  |_        t          |                    ||           }|S )Nr   )r  r/  r   r   rZ   )r?   rR   lparensrparensr  s        rA   _print_MatrixBasezPrettyPrinter._print_MatrixBase  sE    ''**XXZZ]
'223rB   c                 P   |j         }|j        rddlm} t	          ||          r|                     |j        dd          S |                     |          }|                                dz  |_	        t          |                    dd           S |                     |dd          S )Nr   )BlockMatrixr   )r  r  r   )r   is_MatrixExpr&sympy.matrices.expressions.blockmatrixr  r9   r  blocksrM   r/  r   r   rZ   )r?   rR   matr  r  s        rA   _print_Determinantz PrettyPrinter._print_Determinant  s    e 	IJJJJJJ#{++ T--cj#s-SSSC  AQAJqxxS1122))#sC)HHHrB   c                 Z    | j         rd}nd}|                     |j        d d |d           S )Nu   ⊗.*c                 >    t          |           t          d         k    S Nr   r   r   r   s    rA   <lambda>z4PrettyPrinter._print_TensorProduct.<locals>.<lambda>      #9!#<#<
5@Q#Q rB   parenthesizerJ   rX   rY   )r?   rG   circled_timess      rA   _print_TensorProductz"PrettyPrinter._print_TensorProduct  sG     	!$MM Mty$mQQ  S S 	SrB   c                 Z    | j         rd}nd}|                     |j        d d |d           S )Nr   z/\c                 >    t          |           t          d         k    S r  r  r  s    rA   r  z3PrettyPrinter._print_WedgeProduct.<locals>.<lambda>  r  rB   r  r  )r?   rG   wedge_symbols      rA   _print_WedgeProductz!PrettyPrinter._print_WedgeProduct  sG     	!#LL Lty$lQQ  S S 	SrB   c                     |                      |j                  }t          |                    dd           }|                                dz  |_        t          |                    d           }|S )Nrl   rm   r   tr)rM   r   r   rZ   r/  r   r[   )r?   rR   r  s      rA   _print_TracezPrettyPrinter._print_Trace  s[    KKS))*XXZZ]
//0rB   c                 <   ddl m} t          |j        |          rV|j        j        rJ|j        j        r>|                     t          |j        j	        d|j        |j        fz  z                       S |                     |j                  }t          |                                 }|                     |j        |j        fd                              dd          d         }t          t          j        ||          d	t          j        i}||_        ||_        |S )
Nr   MatrixSymbolz_%d%d, 	delimiterr  r  r[   rr   r   )sympy.matricesr  r9   parentr+   	is_numberr7   rM   r   r`   r   rZ   rX   r   r   r   
prettyFunc
prettyArgs)r?   rG   r  r  prettyIndicesr]   s         rA   _print_MatrixElementz"PrettyPrinter._print_MatrixElement'  s$   //////t{L11 	F$	)-)9	;;4;+g8H.HHIIK K K T[11J#Z%6%6%8%89J OOTVTV,<O  f#Sf11!5M_Z??Az A AE  *E,ELrB   c                     ddl m}                      |j                  }t	          |j        |          st          |                                 } fd}                      ||j        |j        j	                   ||j
        |j        j                  fd                              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                              | d           S )Nr   rh   r   r  :r  )r  r   rX   )r   dimr?   s     rA   ppslicez1PrettyPrinter._print_MatrixSlice.<locals>.ppsliceB  sr    QAtqy aDtqy !ts{ !tqC@@AArB   r  r  r  r  r  r   )r  r  rM   r  r9   r   rZ   rX   rowslicer  colslicer  r   r   r   r  r  )r?   mr  r  r  r  r]   s   `      rA   _print_MatrixSlicez PrettyPrinter._print_MatrixSlice<  s   //////[[**
!(L11 	:#Z%6%6%8%89J	B 	B 	B 	B 	B __ggaj!(-&H&HGAJ..&0;? % A AAGSX[A\A\]^`
 &0oj*&M&MOOO O &%rB   c                     |j         }|                     |          }ddlm}m} t          ||          s2t          ||          s"|j        rt          |                                 }|t          d          z  }|S )Nr   r  r  T)	r   rM   r  r  r  r9   r  r   rZ   )r?   rG   r  r]   r  r  s         rA   _print_TransposezPrettyPrinter._print_TransposeW  s    hC  <<<<<<<<3-- 	03,,	0141B	0/E
3(rB   c                 (   |j         }|                     |          }| j        rt          d          }nt          d          }ddlm}m} t          ||          s2t          ||          s"|j        rt          |	                                 }||z  }|S )Nu   †rw  r   r  )
r   rM   rJ   r   r  r  r  r9   r  rZ   )r?   rG   r  r]   dagr  r  s          rA   _print_AdjointzPrettyPrinter._print_Adjointa  s    hC   	"\**CCS//C<<<<<<<<3-- 	03,,	0141B	0/Es
rB   c                     |j         j        dk    r |                     |j         d                   S |                     |j                   S )Nrh   rh   r   r   )r  shaperM   )r?   Bs     rA   _print_BlockMatrixz PrettyPrinter._print_BlockMatrixo  s?    8>V# 	/;;qx~...{{18$$$rB   c                    d }|j         D ]}|                     |          }||}|                                d         }t          |                                          r2t          t          j        |d           }|                     |          }nt          t          j        |d           }t          t          j        ||           }|S )Nr   r    + )rY   rM   as_coeff_mmulr   could_extract_minus_signr   r   r   )r?   rG   r   itemr]   coeffs         rA   _print_MatAddzPrettyPrinter._print_MatAddt  s    I 	; 	;DKK%%E 	;**,,Q/U884466 ?"JOAs$;$;<A KK--EE"JOAu$=$=>A
5 9 9:rB   c                    t          |j                  }ddlm} ddlm} ddlm} t          |          D ]\  }}t          |t          |||f          rJt          |j                  dk    r2t          |                     |                                           ||<   h|                     |          ||<   t          j        | S )Nr   HadamardProduct)KroneckerProductMatAddrh   )r  rY   #sympy.matrices.expressions.hadamardr  $sympy.matrices.expressions.kroneckerr  !sympy.matrices.expressions.mataddr  	enumerater9   r   r  r   rM   rZ   __mul__)r?   rG   rY   r  r  r  r+   as           rA   _print_MatMulzPrettyPrinter._print_MatMul  s    DIGGGGGGIIIIII<<<<<<dOO 	) 	)DAq1sFO=MNOO )DI*)$dkk!nn&;&;&=&=>Q++a..Q!4((rB   c                 L    | j         rt          d          S t          d          S )Nu   𝕀IrJ   r   rF   s     rA   _print_IdentityzPrettyPrinter._print_Identity  (     	#HIIIc??"rB   c                 L    | j         rt          d          S t          d          S )Nu   𝟘0r  rF   s     rA   _print_ZeroMatrixzPrettyPrinter._print_ZeroMatrix  s(     	#IJJJc??"rB   c                 L    | j         rt          d          S t          d          S )Nu   𝟙1r  rF   s     rA   _print_OneMatrixzPrettyPrinter._print_OneMatrix  r  rB   c                     t          |j                  }t          |          D ]\  }}|                     |          ||<   t	          j        | S rD   )r  rY   r  rM   r   r  r?   rG   rY   r+   r  s        rA   _print_DotProductzPrettyPrinter._print_DotProduct  sK    DIdOO 	% 	%DAqkk!nnDGG!4((rB   c                     |                      |j                  }ddlm} t	          |j        |          s'|j        j        rt          |                                 }||                      |j                  z  }|S )Nr   r  )	rM   baser  r  r9   r  r   rZ   exp)r?   rG   r]   r  s       rA   _print_MatPowzPrettyPrinter._print_MatPow  sv    DI&&//////$)\22 	0ty7N 	0/EDH--.rB   c           	          ddl m ddlm ddlm | j        rt          d          }nd}|                     |j	        d d |fd          S )	Nr   r  r  MatMulRingr  c                 *    t          | f          S rD   r9   )r   r  r  r  s    rA   r  z6PrettyPrinter._print_HadamardProduct.<locals>.<lambda>  s    z!ffo5V'W'W rB   r  )
r  r  r  r  !sympy.matrices.expressions.matmulr  rJ   r    rX   rY   )r?   rG   delimr  r  r  s      @@@rA   _print_HadamardProductz$PrettyPrinter._print_HadamardProduct  s    GGGGGG<<<<<<<<<<<< 	''EEEty$eWWWWWW  Y Y 	YrB   c                    | j         rt          d          }n|                     d          }|                     |j                  }|                     |j                  }t          |j                  t          d         k     rt          |                                 }t          t          j
        ||          dt          j        i}||z  S )Nr  .r   r   )rJ   r    rM   r  r  r   r   r   rZ   r   r   r   )r?   rG   circpretty_base
pretty_exppretty_circ_exps         rA   _print_HadamardPowerz"PrettyPrinter._print_HadamardPower  s     	$v&&DD;;s##Dkk$),,[[**
dh*U"33 	:#Z%6%6%8%89J$_T:..
O
 
 O++rB   c                 |    ddl m ddlm | j        rd}nd}|                     |j        d d |fd          S )Nr   r  r   u    ⨂ z x c                 (    t          | f          S rD   r  )r   r  r  s    rA   r  z7PrettyPrinter._print_KroneckerProduct.<locals>.<lambda>  s    z!ff5E'F'F rB   r  )r  r  r  r  rJ   rX   rY   )r?   rG   r  r  r  s      @@rA   _print_KroneckerProductz%PrettyPrinter._print_KroneckerProduct  sv    <<<<<<<<<<<< 	8EEEty$eFFFFF  H H 	HrB   c                 ~    |                      |j        j                  }t          |                    dd           }|S Nr  r  )rM   lamdarG   r   rZ   )r?   Xr  s      rA   _print_FunctionMatrixz#PrettyPrinter._print_FunctionMatrix  s4    KK%%c**+rB   c                    |j         dk    sE|j         |j        }}t          |t          |dd          d          }|                     |          S |                     d          |                     |j                  z  S )Nrh   r  Fevaluate)r   denr   r   
_print_MulrM   )r?   rG   r   r  ress        rA   _print_TransferFunctionz%PrettyPrinter._print_TransferFunction  su    x1} 	8xCc3sB777%HHHC??3''';;q>>$++dh"7"777rB   c                     t          |j                  }t          |j                  D ]6\  }}t          |                     |                                           ||<   7t          j        | S rD   )r  rY   r  r   rM   rZ   r  r  s        rA   _print_SerieszPrettyPrinter._print_Series  s`    DIdi(( 	; 	;DAq $++a.."7"7"9"9:DGG!4((rB   c                 6   ddl m} t          |j                  }g }t	          t          |                    D ]\  }}t          ||          rxt          |j                  dk    r`|                     |          }|	                                dz  |_
        |                    t          |                                            |                     |          }|	                                dz  |_
        |                    |           t          j        | S )Nr   )MIMOParallelrh   r   )sympy.physics.control.ltir!  r  rY   r  r   r9   r  rM   r/  r   rB  r   rZ   r  )r?   rG   r!  rY   pretty_argsr+   r  
expressions           rA   _print_MIMOSerieszPrettyPrinter._print_MIMOSeries  s
   ::::::DIhtnn-- 	/ 	/DAq1l++ /DI0B /![[^^
&0&7&7&9&91&<
#"":z/@/@/B/B#CDDDD![[^^
&0&7&7&9&91&<
#"":....!;//rB   c                 0   d }|j         D ]}|                     |          }||}t          t          j        |           }|                                dz  |_        t          t          j        |d           }t          t          j        ||           }|S )Nr   r  )rY   rM   r   r   r   r/  r   )r?   rG   r   r  r]   s        rA   _print_ParallelzPrettyPrinter._print_Parallel  s    I 	; 	;DKK%%E ;
 2 23XXZZ]

5 9 9:
5 9 9:rB   c                    ddl m} d }|j        D ]}|                     |          }||}t	          t          j        |           }|                                dz  |_        t	          t          j        |d           }t          ||          r|                                dz
  |_        t	          t          j        ||           }|S )Nr   )TransferFunctionMatrixr   r  rh   )
r"  r)  rY   rM   r   r   r   r/  r   r9   )r?   rG   r)  r   r  r]   s         rA   _print_MIMOParallelz!PrettyPrinter._print_MIMOParallel  s    DDDDDDI 
	; 
	;DKK%%E ;
 2 23XXZZ]

5 9 9:d$:;; 0!"aAJ
5 9 9:rB   c                 V   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 ||R  }nt          ||          r6t          |j        |          r!|j        |k    r || }nr |g ||j        R  }nbt          ||          r+t          |j        |          r||k    r || }n1 ||g|R  }n'||k    r || }n|j        |k    r || }n
 |g ||R  }t          t          j        |                     |                     }	|	                                dz  |	_        |j        dk    rt          t          j        |	d           nt          t          j        |	d           }	t          t          j        |	|                     |                     }	|                     |          |	z  S )Nr   )TransferFunctionSeriesrh   r   r  r   - )sympy.physics.controlr,  r-  sys1varr9   r  rY   sys2r   r   r   rM   r/  r   sign)
r?   rG   r,  r-  r   tfnum_arg_listden_arg_listr  denoms
             rA   _print_FeedbackzPrettyPrinter._print_Feedback  s~   BBBBBBBB)--aDH==R)3C)@)@KtCH~~~sety&));tDIN+++04	{ 	 c6"" 	;z$)V'D'D 	;&6,6666CCV$$ 	;DI?O)P)P 	;yB 7fl+f6l6DI666-.. 	;:di3P3P 	;by 1fl+fS0<000by ;fl+b ;fl+f:l:\:::JODKKOO<<=*>Bi2o <
JOE599::Z_UE::; 	JOE4;;s3C3CDDE{{3%%rB   c                    ddl m}m} |                      ||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           }|                                dz  |_        t          j        |t          d                    }t          |j        |          r|                                d	z
  |_        t          t          j        ||           }|S )
Nr   )
MIMOSeriesr)  r  zI + zI - z-1 r   r   rh   )r/  r:  r)  rM   r2  r0  r   r   r   r3  rr   rZ   r   r/  r  r9   )r?   rG   r:  r)  inv_matplant	_feedbacks          rA   _print_MIMOFeedbackz!PrettyPrinter._print_MIMOFeedback=  sR   LLLLLLLL++jjDI>>??DI&&
 8 89	HL	UW BJ
 0 C CDDZ-fi@@A 	
 1) < <=		
 0E B BC	&--//2	&y*S//BB	di!788 	8!*!1!1!3!3a!7I
	5 A AB	rB   c                     |                      |j                  }|                                dz
  |_        | j        rt
          d         nd}t          |                    |           }|S )Nrh   tauz{t})rM   	_expr_matr/  r   rJ   r"   r   rr   )r?   rG   r  	subscripts       rA   _print_TransferFunctionMatrixz+PrettyPrinter._print_TransferFunctionMatrixO  s[    kk$.))zz||a',0,=IM%((6	#))I../
rB   c                 z
   ddl m} | j        st          d          ||j        k    rt          |j        j                  S g }g }t          ||          r'|                                	                                }nd|fg}|D ]\  }}t          |j        	                                          }|                    d            |D ]\  }	}
|
dk    r|                    d|	j        z              nq|
dk    r|                    d	|	j        z              nM|                     |
                                          d         }|                    |d
z   |	j        z              |                    |	j                   |d                             d          r|d         dd          |d<   n.|d                             d
          r|d         dd          |d<   g }dg}g }t#          |          D ]\  }}|                    d           d|v r|}|                    ||         d          }d|v rit'          t)          |                    D ]K}d||<   ||         dk    r8||dz            dk    r)|d |         dz   d
z   ||         z   ||dz   d          z   } nLnKd|v rG|                    d          }|dk    r,d||<   |d |         dz   d
z   ||         z   ||dz   d          z   }|||<   d |D             }t-          d |D                       }d|v rYt#          |          D ]I\  }}t)          |          dk    r1|                    dd
t)          |d                   z             d||<   Jt#          |          D ]\  }}|                    t)          |||                                       t'          |          D ]O}|dz   t)          |          k    r|t)          |          k    rC|                    d
t1          |d d                   dt)          |          dz
  z  z   z             |||         k    r&|||         xx         |||                  dz   z  cc<   ||xx         ||         d
|d         t)          ||                   z
  dz   z  z   z  cc<   |t)          |          k    rC|                    d
t1          |d d                   dt)          |          dz
  z  z   z             ||xx         d
|d         dz   z  z  cc<   Qt          d                    d |D                                 S )Nr   )Vectorz:ASCII pretty printing of BasisDependent is not implementedc                 6    | d                                          S Nr   )__str__r  s    rA   r  z5PrettyPrinter._print_BasisDependent.<locals>.<lambda>f  s    AaDLLNN rB   r   rh   r  r  z(-1) r   r  r*  
u   ⎟u   ⎠c                 8    g | ]}|                     d           S )rI  )splitr  r   s     rA   r  z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>  s"    (((aggdmm(((rB   c                 ,    g | ]}t          |          S rL   )r  rL  s     rA   r  z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>  s    ---Q#a&&---rB   c                 "    g | ]}|d d         S )NrL   )r  r   s     rA   r  z7PrettyPrinter._print_BasisDependent.<locals>.<listcomp>  s     $:$:$:QssV$:$:$:rB   )sympy.vectorrE  rJ   NotImplementedErrorzeror   _pretty_formr9   separateitemsr  
componentsr   rB  rM   rZ   
startswithr  r  r  r  rfindr   insertrg  join)r?   rG   rE  o1vectstrsrU  systemvect
inneritemsr   varg_strlengthsstrsflagr+   partstrtempstrparenindex
n_newlinespartsr7   s                          rA   _print_BasisDependentz#PrettyPrinter._print_BasisDependentV  s1   ''''''  	d%&bccc49 	6di4555dF## 	 MMOO))++EEYKE! 	0 	0LFDdo335566JOO":":O;;;" 0 01 6 >IIbn- . . . . "W 
>IIgn- . . . . #kk !688A'G IIgman<===////%0* a5E"" 	qE!""IBqEEUc"" 	qE!""IBqEt#B-- 	  	 JAwKKNNNw  !!//(1+r::4? P!&s7||!4!4 " ""#Q"5>-NN "SZ[`cd[dSeimSm " '.fufo8Y&Y+.'/2:1+'>@GPQ	

@S'TG!E77B P $MM*LMME{ P"#Q")&5&/4V"V'*#+.6qk#:<CEAIJJ<O#P1((R(((--"---..
9 	 %bMM    5u::?  LLC3uQx==$9:::DG!" 	3 	3HAuNN3uT!W~..///:&& 3 3Q3#e**$ 3CII~ @C3wss|+<+<+,c'll1n+=,> %? @ @ @DG| 6T!WtAw%)??Q58c72;36uQx==4A3445 /6 $6 6 CII~ @C3wss|+<+<+,c'll1n+=,> %? @ @ @GGGsGBKM22GGGG3" $))$:$:T$:$:$:;;<<<rB   c           	        	 ddl m	 |                                dk    r|                     |d                   S g gd t	          |                                          D             z   }d |j        D             }	fd}t          j        | D ]}|d                             ||                    d}t	          |                                d	z
  dd          D ]}t          ||d	z                      |j        |         k     r n|r%||                             ||d	z                       nk||                              |||d	z                                 t          ||d	z                      d	k    r" |||         d         gg          ||         d<   | }g ||d	z   <   ɐ|d         d         }|                                d
z  d	k    r ||g          }|                     |          S )Nr   )ImmutableMatrixrL   c                     g | ]}g S rL   rL   r  r+   s     rA   r  z2PrettyPrinter._print_NDimArray.<locals>.<listcomp>  s    ;;;1B;;;rB   c                 F    g | ]}t          t          |                    S rL   )r  r  ro  s     rA   r  z2PrettyPrinter._print_NDimArray.<locals>.<listcomp>  s$    ;;;1U1XX;;;rB   c                      | d          S )NFr  rL   )r   rm  s    rA   r  z0PrettyPrinter._print_NDimArray.<locals>.<lambda>  s    E::: rB   r  Trh   r   )
sympy.matrices.immutablerm  rankrM   r  r  	itertoolsproductrB  r  )
r?   rG   	level_strshape_rangesr  outer_ievenback_outer_iout_exprrm  s
            @rA   _print_NDimArrayzPrettyPrinter._print_NDimArray  s(   <<<<<<99;;! 	);;tBx(((D;;diikk(:(:;;;;	;;
;;;:::: (,7 	/ 	/GbM  g///D %diikk!mR < < / /ya011DJ|4LL E =l+229\!^3LMMMMl+2233!,q.143 43 4 4 49\A%56771< =69c'5b9:;7= 7=	,/3x,.	,q.))Q<?99;;?a 	'sH:H{{8$$$rB   c           
         t          |          }t          d|                                z            }t          d|                                z            }d }d }t          |          D ]\  }	}
|                     |
j        d                   }|
|v s|rK||
j        k    r@|
j        rt          t          j        |d           }nt          t          j        |d           }|
|v rTt          t          j        |d           }t          t          j        ||                     ||
                              }d}nd}|
j        rt          |                    |           }t          |                    d|                                z             }t          |                    d|                                z             }n~t          |                    |           }t          |                    d|                                z             }t          |                    d|                                z             }|
j        }t          |	                    |           }t          |
                    |           }|S )Nr   r   r	  =TF)r   r   r  rM   rY   is_upr   r   rr   r   r   )r?   r`   indices	index_mapcentertopbotlast_valenceprev_mapr+   rh  indpicpicts                rA   _printer_tensor_indicesz%PrettyPrinter._printer_tensor_indices  s1   D!!V\\^^+,,V\\^^+,,!'** 	' 	'HAu[[A//F)# A Alek6Q A; A$joc3&?&?@CC$joc3&?&?@C	! !#Z_VS%A%AB#Z_VT[[SXIY=Z=Z%[%[\ { A #))F"3"34#V\\#fllnn2D%E%EF #))C,>"?"?@ #))F"3"34#V\\#fllnn2D%E%EF #))C,>"?"?@ ;LL6<<,,-4::c??+rB   c                 z    |j         d         j        }|                                }|                     ||          S rG  )rY   r`   get_indicesr  )r?   rG   r`   r  s       rA   _print_TensorzPrettyPrinter._print_Tensor   s7    y| ""$$++D':::rB   c                     |j         j        d         j        }|j                                         }|j        }|                     |||          S rG  )rG   rY   r`   r  r  r  )r?   rG   r`   r  r  s        rA   _print_TensorElementz"PrettyPrinter._print_TensorElement  sE    y~a %)''))N	++D'9EEErB   c                      |                                 \  }} fd|D             }t          j        | }|rt          |                    |           S |S )Nc                     g | ]c}t          |          t          d          k     r.t                              |                                           n                    |          dS r   r   r   r   rM   rZ   r  r+   r?   s     rA   r  z0PrettyPrinter._print_TensMul.<locals>.<listcomp>  p     
 
 
  #1%%
5(99NJA--//00?C{{1~~
 
 
rB   )!_get_args_for_traditional_printerr   r  r[   )r?   rG   r3  rY   r]   s   `    rA   _print_TensMulzPrettyPrinter._print_TensMul  su    ;;==
d
 
 
 
 
 
 

 "D) 	uzz$//00LrB   c                 F      fd|j         D             }t          j        | S )Nc                     g | ]c}t          |          t          d          k     r.t                              |                                           n                    |          dS r   r  r  s     rA   r  z0PrettyPrinter._print_TensAdd.<locals>.<listcomp>  r  rB   )rY   r   __add__)r?   rG   rY   s   `  rA   _print_TensAddzPrettyPrinter._print_TensAdd  s?    
 
 
 
 Y
 
 

 !4((rB   c                 Z    |j         d         }|j        s| }|                     |          S rG  )rY   r  rM   )r?   rG   r   s      rA   _print_TensorIndexz PrettyPrinter._print_TensorIndex   s0    ilz 	$C{{3rB   c                 .   | j         rt          d          }nd}d }t          |j                  D ]p}|                     |          }t          |                    |           }||}8t          |                    d           }t          |                    |           }qt          |                     |j                  	                                dt
          j
        i}t          |          }t          |j                  dk    r*||                     t          |j                            z  }t          |                    t          j        |           }|j        dz   |_        t          t          j        ||           }t
          j        |_        |S )Nr   r   r   r   rh   )rJ   r#   r   	variablesrM   r   r[   rr   rG   rZ   r   r  r   r   r   r   r   r   r   )	r?   r   r   r   variabler   r  r  r]   s	            rA   _print_PartialDerivativez&PrettyPrinter._print_PartialDerivative&  sk    	 344LLL 11 	- 	-HH%%AQVVL112B --,&*kk%*&=&=&D&D&F&FHOH H <((u!# 	=4;;s5?';';<<<EEKK
;;<!+JOE1556"rB   c                    i t          |j                  D ]\  }}|                     |j                  |df<   |j        dk    rt          d          |df<   Dt          t          d                              |                     |j                             |df<   d}d}t          |j                  fdt          d          D             }d }t                    D ]5}d }	t          d          D ]}
||
f         }|	                                ||
         k    sJ ||
         |	                                z
  }|dz  }||z
  }t          |                    d|z             }t          |
                    d|z             }|	|}	t          |	                    d|z             }	t          |	                    |           }	||	}t          |          D ]}t          |                    d           }t          |                    |	           }7t          |                    d	d
           }|                                dz  |_        t
          j        |_        |S )Nr   T	otherwiserh   zfor r   c                 d    g | ]+t          fd t                    D                       ,S )c                 H    g | ]}|f                                          S rL   r  )r  r+   Pr7   s     rA   r  z=PrettyPrinter._print_Piecewise.<locals>.<listcomp>.<listcomp>U  s)    >>>Qq!tW]]__>>>rB   )r   r  )r  r7   r  len_argss    @rA   r  z2PrettyPrinter._print_Piecewise.<locals>.<listcomp>U  sP     # # # >>>>>eHoo>>>?? # # #rB   r   {r  )r  rY   rM   rG   condr   rr   r  r  r   r[   r   rZ   r/  r   r   r   )r?   pexprr   ecr  r  r  r  r+   r  r7   pr  r  r  r   r  r  s                   @@rA   _print_PiecewisezPrettyPrinter._print_PiecewiseF  sw   uz** 	E 	EEArkk"'**AadGw$ E$[11!Q$$''--dkk"'.B.BCCE!Q$uz??# # # # #q# # #
 x 	, 	,AE1XX 4 4adGwwyyDG++++a17799,!%F
 3 34s5y 1 12 E"EKKD$9$9:"EKKNN3  4[[ . .-AGGENN+AAb))*XXZZ]
O	rB   c                 ^    ddl m} |                     |                    |                    S )Nr   )	Piecewise)$sympy.functions.elementary.piecewiser  rM   rewrite)r?   iter  s      rA   
_print_ITEzPrettyPrinter._print_ITE~  s2    BBBBBB{{3;;y11222rB   c                     d }|D ]A}|}||}	t          |                    d           }t          |                    |           }B|t          d          }|S )Nr  r   )r   rr   r   )r?   r`  r  r  r  s        rA   _hprint_veczPrettyPrinter._hprint_vec  sl     	, 	,AA ,.

+ 	 3ArB   r  c                 (   |r$| j         s|                     |d|f|||d          S |                     ||f|||          }t          t          d|                                          |j                  }|                     |||f|||          S )Nr   T)r[   rr   r  ifascii_nougly)r[   rr   r  r   )rJ   rX   r   r   r/  r   )	r?   p1p2r[   rr   r  r  tmpseps	            rA   _hprint_vseparatorz PrettyPrinter._hprint_vseparator  s     	M$"3 	M??BR=t5-6t # M M Moor2id%9oUUc3::<<003<HHHC}4u)2  4 4 	4rB   c           	           fd|j         D             } fd|j        D             }                     |j                  }|                                dz  |_        d }||fD ]T}                     |          }||}t          |                    d           }t          |                    |           }U|                                dz  |_        t          |	                    d           }t          |
                    d           }                     ||          }t          |                    dd           }|                                dz  dz
  }|                                |z
  dz
  }	t          d          \  }
}}}}t          d	||z
  z  |z   d	|	|z
  z  z   ||
z   
          }|
dz   dz  }t          |	                                         t          |j                                        }t          |
                                         t          |j                                       }||z   |_        t          |
                    d|           }|S )Nc                 :    g | ]}                     |          S rL   rU  r  r  r?   s     rA   r  z.PrettyPrinter._print_hyper.<locals>.<listcomp>  #    +++dkk!nn+++rB   c                 :    g | ]}                     |          S rL   rU  r  br?   s     rA   r  z.PrettyPrinter._print_hyper.<locals>.<listcomp>  r  rB   r   r   rl   rm   rh   FrI  r  )apbqrM   argumentr/  r   r  r   r   r[   rr   r  rZ   r%   r  )r?   rR   r  r  r  r  r`  r  r   r   sztr  addimgr  s   `               rA   _print_hyperzPrettyPrinter._print_hyper  s:   ++++ad+++++++ad+++KK
##XXZZ]
 b 	0 	0A$$Q''E 0-/ XXZZ]
 s$% ##Aq)) c**+ 

A!

U"Q&&s^^Aq#stuqy)C/$%!)2DD %
, , ,Avkt{{3qt9955667CII 6 6778S[
Q(rB   c                 f	    i } fd|j         D             |d<    fd|j        D             |d<    fd|j        D             |d<    fd|j        D             |d<                        |j                  }|                                d	z  |_        i }|D ] }                     ||                   ||<   !t          d	          D ]}t          |d
|f                                         |d|f                                                   }t          d	          D ]}|||f         }	||	                                z
  d	z  }
||
z
  |	                                z
  }t          |	                    d|
z             }	t          |	                    d|z             }	|	|||f<   t          |d                             d|d                    }t          |                    d           }t          |d                             d|d                    }t          |                    |           }|                                d	z  |_        t          |                    d           }t          |                    d           }                     ||          }t          |                    dd           }|                                d	z  dz
  }|                                |z
  dz
  }t%          d          \  }}}}}t          d||z
  z  |z   d||z
  z  z   ||z             }                     t'          |j                            }                     t'          |j                            }                     t'          |j                            }                     t'          |j                             }d } |||          \  }} |||          \  }}t          |                    d|           }t          |                    d|           }|j        |z
  d	z
  }|d
k    rt          |                    d|z             }t          |                    |           }||_        t          |                    |           }||z   |_        t          |                    d|           }|S )Nc                 :    g | ]}                     |          S rL   rU  r  s     rA   r  z0PrettyPrinter._print_meijerg.<locals>.<listcomp>  #    222T[[^^222rB   r  c                 :    g | ]}                     |          S rL   rU  r  s     rA   r  z0PrettyPrinter._print_meijerg.<locals>.<listcomp>  #    666T[[^^666rB   )r   rh   c                 :    g | ]}                     |          S rL   rU  r  s     rA   r  z0PrettyPrinter._print_meijerg.<locals>.<listcomp>  r  rB   )rh   r   c                 :    g | ]}                     |          S rL   rU  r  s     rA   r  z0PrettyPrinter._print_meijerg.<locals>.<listcomp>  r  rB   r  r   r   rh   r   z  rl   rm   GrI  r  c                     |                                  |                                 z
  }|dk    r| |fS |dk    r!| t          |                    d|z             fS t          |                     d| z             |fS )Nr   r   )r   r   r[   )r  r  diffs      rA   rd  z,PrettyPrinter._print_meijerg.<locals>.adjust  s    88::

*Dqy ;2v ;:rwws4x'8'8999!2773u9#5#56::rB   r  )anaotherbmbotherrM   r  r/  r   r  r  r   r   r   r[   rr   r   r  rZ   r%   r  r  r  ) r?   rR   r`  r  vpidxr+   r  r7   r   r[   rr   D1D2r  r   r   r  r  r  r  r  r  pppqpmpnrd  puplhtr  s    `                               rA   _print_meijergzPrettyPrinter._print_meijerg  su    2222QT222&	6666QX666&	2222QT222&	6666QX666&	KK
##XXZZ]
 	/ 	/C&&qv..BsGGq 	 	Ar1a&z''))2q!f:+;+;+=+=>>D1XX  1vJqwwyy(Q.taggii/sTz 2 23e 4 45Aq6

 F))$6
;;<#'F))$6
;;<% XXZZ]
 s$% ##Aq)) c**+ 

A!

U"Q&&s^^Aq#stuqy)C/$%!)2DD %
, , , [[QT##[[QT##[[QT##[[QT##	; 	; 	; BBBB$++,$++,Z%!#6 	0RXXd2g../B%


#S[
Q(rB   c                     t          t          dd                    }||                     |j        d                   z  S )NExp1rR   r   )r   r    rM   rY   )r?   rR   r  s      rA   _print_ExpBasezPrettyPrinter._print_ExpBase  s8     +fc2233t{{16!9----rB   c                 <    t          t          dd                    S )Nr  rR   )r   r    rQ   s     rA   _print_Exp1zPrettyPrinter._print_Exp1$  s    +fc22333rB   rl   rm   c                 L    |                      |j        |j        ||||          S )N)r   	func_namer[   rr   )_helper_print_functionr   rY   )r?   rR   r   r  r[   rr   s         rA   r   zPrettyPrinter._print_Function'  s,     **1616PY`dlq*rrrrB   c                 0    |                      |d          S NCr  r   rQ   s     rA   _print_mathieuczPrettyPrinter._print_mathieuc-      ##A#555rB   c                 0    |                      |d          S Nr   r  r  rQ   s     rA   _print_mathieuszPrettyPrinter._print_mathieus0  r  rB   c                 0    |                      |d          S )NzC'r  r  rQ   s     rA   _print_mathieucprimez"PrettyPrinter._print_mathieucprime3      ##A#666rB   c                 0    |                      |d          S )NzS'r  r  rQ   s     rA   _print_mathieusprimez"PrettyPrinter._print_mathieusprime6  r  rB   r  c	                    |rt          |t                    }|st          |d          r|j        }|r#|                     t          |                    }	n.t          |                     |                                           }	|rW| j        rt          d          }
nd}
|                     |
          }
t          t          j        |	|
          dt          j        i}	t          |                     ||                              ||           }t          t          j        |	|          dt          j        i}|	|_        ||_        |S )Nr   r   zModifier Letter Low Ringr	  r   r  r  )r   r   hasattrr   rM   r   r   rZ   rJ   r    r   r   r   rX   r   r  r  )r?   r   rY   r   r  r  elementwiser[   rr   r  r
  r  r]   s                rA   r  z$PrettyPrinter._helper_print_function9  sf     	6$$4555D 	&WT:66 	&I 	AVI%6%677JJ#T[[%6%6%=%=%?%?@J 		  "#=>>;;t$$D#T22" J
  !K!K!R!R6:% "S "I "I J
 &0oj*&M&MOOO O &%rB   c                 V    |j         }|j        }|g}|                     ||dd          S )Nr  T)r  r  )r,  rG   r  )r?   rR   r   r   rY   s        rA   _print_ElementwiseApplyFunctionz-PrettyPrinter._print_ElementwiseApplyFunction^  s5    zfu**4QU*VVVrB   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           rA   _special_function_classesz'PrettyPrinter._special_function_classesd  s    KKKKKKMMMMMMMMCCCCCC??????FFFFFF??????w!7 Ag.8=/<]73W=}V,c2]73W=eU^% 	%rB   c                 2   | j         D ]m}t          ||          r[|j        |j        k    rK| j        r"t	          | j         |         d                   c S t	          | j         |         d                   c S n|j        }t	          t          |                    S )Nr   rh   )r  
issubclassr   rJ   r   r   )r?   rG   clsr  s       rA   _print_FunctionClassz"PrettyPrinter._print_FunctionClasst  s    1 	N 	NC$$$ N#,)F N$ N%d&DS&I!&LMMMMM%d&DS&I!&LMMMMMM	-	22333rB   c                 ,    |                      |          S rD   )rH   rF   s     rA   _print_GeometryEntityz#PrettyPrinter._print_GeometryEntity~  s      &&&rB   c                 \    | j         rt          d         nd}|                     ||          S )Nr  r  r  rJ   r"   r   r?   rR   r  s      rA   _print_lerchphizPrettyPrinter._print_lerchphi  s2    ,0,=MM%((:	##A#;;;rB   c                 \    | j         rt          d         nd}|                     ||          S )Netadirichlet_etar  r  r  s      rA   _print_dirichlet_etaz"PrettyPrinter._print_dirichlet_eta  s2    ,0,=RM%((?	##A#;;;rB   c                 ,   | j         rt          d         nd}|j        d         dk    rWt          |                     |j        d                                                    }t          |                    |           }|S |                     ||          S )Ntheta	Heavisiderh   g      ?r   r  )rJ   r"   rY   r   rM   rZ   r[   r   )r?   rR   r  r]   s       rA   _print_HeavisidezPrettyPrinter._print_Heaviside  s    .2.?PM'**[	6!9c> 	@AF1I 6 6 = = ? ?@E

9 5 56EL''Y'???rB   c                 0    |                      |d          S r  r  rQ   s     rA   _print_fresnelszPrettyPrinter._print_fresnels  r  rB   c                 0    |                      |d          S r  r  rQ   s     rA   _print_fresnelczPrettyPrinter._print_fresnelc  r  rB   c                 0    |                      |d          S )NAir  r  rQ   s     rA   _print_airyaizPrettyPrinter._print_airyai  r  rB   c                 0    |                      |d          S )NBir  r  rQ   s     rA   _print_airybizPrettyPrinter._print_airybi  r  rB   c                 0    |                      |d          S )NzAi'r  r  rQ   s     rA   _print_airyaiprimez PrettyPrinter._print_airyaiprime      ##A#777rB   c                 0    |                      |d          S )NzBi'r  r  rQ   s     rA   _print_airybiprimez PrettyPrinter._print_airybiprime  r3  rB   c                 0    |                      |d          S )NWr  r  rQ   s     rA   _print_LambertWzPrettyPrinter._print_LambertW  r  rB   c                 0    |                      |d          S )NCovr  r  rQ   s     rA   _print_CovariancezPrettyPrinter._print_Covariance  r3  rB   c                 0    |                      |d          S )NVarr  r  rQ   s     rA   _print_VariancezPrettyPrinter._print_Variance  r3  rB   c                 0    |                      |d          S )Nr  r  r  rQ   s     rA   _print_Probabilityz PrettyPrinter._print_Probability  r  rB   c                 4    |                      |ddd          S )Nr}  r  r  )r  r[   rr   r  rQ   s     rA   _print_Expectationz PrettyPrinter._print_Expectation  s    ##A3c#JJJrB   c           	         |j         }|j        }| j        rd}nd}t          |          dk    r|d         j        r|d         }|                     |          }t          t          j        |||                     |                    ddiS )Nu    ↦  -> rh   r   r   rh  )	rG   	signaturerJ   r  	is_symbolrM   r   r   r   )r?   rR   rG   sigarrowvar_forms         rA   _print_LambdazPrettyPrinter._print_Lambda  s    vk 	5EEEs88q= 	SV- 	a&C;;s##:?8UDKK<M<MNNZXYZZZrB   c                     |                      |j                  }|j        rt          d |j        D                       st	          |j                  dk    r~t          |                    d           }t	          |j                  dk    r5t          |                    |                      |j                             }nNt	          |j                  r:t          |                    |                      |j        d                              }| j        rt          |                    d           }nt          |                    d           }t	          |j                  dk    r5t          |                    |                      |j                             }n:t          |                    |                      |j        d                              }t          |	                                 }t          |
                    d           }|S )Nc              3   6   K   | ]}|t           j        k    V  d S rD   )r   Zero)r  r  s     rA   	<genexpr>z-PrettyPrinter._print_Order.<locals>.<genexpr>  s(      ??qqAF{??????rB   rh   ; r   u    → rD  O)rM   rG   pointanyr  r  r   rr   rJ   rZ   r[   r?   rG   r]   s      rA   _print_OrderzPrettyPrinter._print_Order  s   DI&&J 	M3??DJ????? 	Mt~"	MD 1 12E4>""Q& Q"EKKDN0K0K$L$LMT^$$ Q"EKKDN1<M0N0N$O$OP  9"EKK0H$I$IJ"EKK$7$784:" M"EKKDJ0G0G$H$HI"EKKDJqM0J0J$K$KLELLNN+EJJsOO,rB   c                    | j         r|                     |j        d         |j        d         z
            }|                     |j        d                   }t          d          }t          |                    |           }t          |                    d           }||z  }|S |                     |j        d                   }|                     |j        d         |j        d         z
            }|                     |ddd          }||z  S )Nr   rh   r   r]  r^  r   )rJ   rM   rY   r   rr   rX   )r?   rR   shiftr   r  r]   s         rA   _print_SingularityFunctionz(PrettyPrinter._print_SingularityFunction  s     	KKq	!&) 344EAF1I&&Ac??Dtzz%001Dtzz#/D!GELAF1I&&AKKq	!&) 344E??5#sC88D7NrB   c                 \    | j         rt          d         nd}|                     ||          S )Nr  r  r  r  r  s      rA   _print_betazPrettyPrinter._print_beta  s2    -1->GM&))C	##A#;;;rB   c                 4    d}|                      ||          S )NzB'r  r  r  s      rA   _print_betainczPrettyPrinter._print_betainc  s     	##A#;;;rB   c                 4    d}|                      ||          S )Nr  r  r  r  s      rA   _print_betainc_regularizedz(PrettyPrinter._print_betainc_regularized  s     	##A#;;;rB   c                 \    | j         rt          d         nd}|                     ||          S Nr  r  r  r  s      rA   _print_gammazPrettyPrinter._print_gamma  2    .2.?LM'**W	##A#;;;rB   c                 \    | j         rt          d         nd}|                     ||          S r_  r  r  s      rA   _print_uppergammazPrettyPrinter._print_uppergamma  ra  rB   c                 \    | j         rt          d         nd}|                     ||          S )Nr  r  r  r  r  s      rA   _print_lowergammazPrettyPrinter._print_lowergamma  s2    .2.?QM'**\	##A#;;;rB   c                    | j         rKt          |j                  dk    rt          t          d                   }|                     |j        d                   }t          |                                 }|                     |j        d                   }t          |                                 }||z  }t          |                    d           }t          |                    |           }|S |                     |j        d                   }t          |                                 }t          |                    t          d                    }|S | 	                    |          S )Nr   r
  rh   r   r   )
rJ   r  rY   r   r"   rM   rZ   rr   r[   r   )r?   rR   r  r  cr]   s         rA   _print_DiracDeltazPrettyPrinter._print_DiracDelta  s    	+16{{a 	}W566KKq	**

+KKq	**

+1"EKK$4$45"EKKNN3KKq	**E/E

=+A B BCEL''***rB   c                     |j         d         j        rK| j        rD|                      t	          d|j         d         z            |j         d                             S |                     |          S )Nr   zE_%srh   )rY   r   rJ   r   r   rQ   s     rA   _print_expintzPrettyPrinter._print_expint  sk    6!9 	QD$5 	Q''(D!&)1C(D(DQVAY(O(OPPP##A&&&rB   c                     t          d          }t          |                     |j                                                   }t          t	          j        ||          dt           j        i}||_        ||_        |S )Nr	  r   )	r   rX   rY   rZ   r   r   r   r  r  )r?   rR   r  r  r]   s        rA   
_print_ChizPrettyPrinter._print_Chi  sw      &&
!8!8!?!?!A!AB
&0oj*&M&MOOO O &%rB   c                 V   |                      |j        d                   }t          |j                  dk    r|}n6|                      |j        d                   }|                     ||          }t	          |                                 }t	          |                    d           }|S )Nr   rh   r}  )rM   rY   r  r  r   rZ   r[   )r?   rR   pforma0r]   pforma1s        rA   _print_elliptic_ezPrettyPrinter._print_elliptic_e$  s    ++afQi((qv;;! 	>EEkk!&),,G++GW==EELLNN+EJJsOO,rB   c                     |                      |j        d                   }t          |                                 }t          |                    d           }|S )Nr   K)rM   rY   r   rZ   r[   r\   s      rA   _print_elliptic_kzPrettyPrinter._print_elliptic_k/  sD    AF1I&&ELLNN+EJJsOO,rB   c                     |                      |j        d                   }|                      |j        d                   }|                     ||          }t          |                                 }t          |                    d           }|S )Nr   rh   r  )rM   rY   r  r   rZ   r[   )r?   rR   rn  ro  r]   s        rA   _print_elliptic_fzPrettyPrinter._print_elliptic_f5  sp    ++afQi((++afQi((''99ELLNN+EJJsOO,rB   c                 ^   | j         rt          d         nd}|                     |j        d                   }|                     |j        d                   }t	          |j                  dk    r|                     ||          }np|                     |j        d                   }|                     ||d          }t          |                    d           }t          |                    |           }t          |                                 }t          |                    |           }|S )NPir   rh   r   Fr  rO  )	rJ   r"   rM   rY   r  r  r   r[   rZ   )r?   rR   r`   rn  ro  r]   pforma2pformas           rA   _print_elliptic_piz PrettyPrinter._print_elliptic_pi=  s    &*&7A}T""T++afQi((++afQi((qv;;! 	6++GW==EEkk!&),,G,,Wge,TTFT!2!23FG 4 45EELLNN+EJJt,,-rB   c                     | j         rt          t          d                    S |                     t	          d                    S )NphiGoldenRatiorJ   r   r   rM   r   rF   s     rA   _print_GoldenRatioz PrettyPrinter._print_GoldenRatioL  s=     	4mE22333{{6-00111rB   c                     | j         rt          t          d                    S |                     t	          d                    S )Nr  
EulerGammar  rF   s     rA   _print_EulerGammazPrettyPrinter._print_EulerGammaQ  s=     	6mG44555{{6,//000rB   c                 F    |                      t          d                    S )Nr  )rM   r   rF   s     rA   _print_CatalanzPrettyPrinter._print_CatalanV  s    {{6#;;'''rB   c                 t   |                      |j        d                   }|j        t          j        k    rt          |                                 }t          |                    d           }t          |                    |                      |j        d                              }t          j        |_        |S )Nr   z mod rh   )rM   rY   r   r   r   rZ   rr   r   rS  s      rA   
_print_ModzPrettyPrinter._print_ModY  s    DIaL))=:>) 	0/EEKK001EKKDIaL(A(ABBC"rB   c                    |                      ||          }g g }}d }t          |          D ]\  }}|j        r|                                rr|                    d          \  }	}
|	dk    rt          |
ddi}nt          |	 g|
R ddi}|                     |          }|                     |||                     |j        r6|j	        dk    r+|                    d            |                    |           |j
        r=|dk     r7|                     |           }|                     |||                     |j        rC|                    t          |                     |                                                      ^|                    |                     |                     |rd	}|D ]}||                                dk    r nd}|D ]}||         d}}|dk     r| d	}}|rDt          t          |j                            t          t          |j	                            z  }n|                     |          }|r |||          }|||<   t          j        | S )
Nr,   c                 4   |dk    r|                                  dk    rd}nd}nd}| j        t          j        k    s| j        t          j        k    rt          |                                  }n| }t          j        ||          }t          |dt          j        iS )z'Prepend a minus sign to a pretty form. r   rh   z- r>  r.  r   )r/  r   r   NEGADDr   rZ   r   )r]   rh  	pform_negr  s       rA   pretty_negativez1PrettyPrinter._print_Add.<locals>.pretty_negativef  s     z "<<>>A% $ $II #II!	
. =JN2/	1--A q9jn999rB   F)rationalr  r  rh   r   T)_as_ordered_termsr  is_Mulr  as_coeff_mulr   rM   rB  is_Rationalq	is_Numberis_Relationalr   rZ   r/  r;   r  r  )r?   rG   r,   termspformsr  r  r+   r@  r  othernegtermr]   largenegatives                  rA   
_print_AddzPrettyPrinter._print_Addb  s   &&t5&99b	: 	: 	:* !'' 	1 	1GAt{ 1t<<>> 1#00%0@@uB; B!59599GG!5&A5AAA5AAGG,,ooeQ778888! 	1dfqj 	1d###q!!!! 1D1H 1TE**ooeQ778888# 1j$++d*;*;*B*B*D*DEFFFFdkk$//0000 	"E   !); E " "!&q5h!8 1&*UD(D .&s46{{33Js46{{4K4KKEE KK--E 6+OE155E!q		!6**rB   c                    	 ddl m	 |j        }|d         t          j        u s!t          d |dd          D                       ryt          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|                                }nt          |j                  }t!          |	fd	
          }|D ]$}|j        r|j        r|j        j        rw|j        j        rk|j        dk    r1|                    t/          |j        |j         d                     e|                    t/          |j        |j                              |j        rt|t          j        urf|j        dk    r'|                    t7          |j                             |j        dk    r'|                    t7          |j                             |                    |           & fd|D             } fd|D             }t;          |          dk    rt          j
        | S t;          |          dk    r2|                                         t          j                             t          j
        | t          j
        | z  S )Nr   )Quantityc              3   @   K   | ]}t          |t                    V  d S rD   )r9   r	   )r  r   s     rA   rN  z+PrettyPrinter._print_Mul.<locals>.<genexpr>  s,      "O"Os:c6#:#:"O"O"O"O"O"OrB   rh   z-1r  r>  )oldnonec                 x    t          |           p)t          | t                    ot          | j                  S rD   )r9   r   r  )r   r  s    rA   r  z*PrettyPrinter._print_Mul.<locals>.<lambda>  s8    *Q*A*A +K C((IZ-I-I rB   r   r  Fr  c                 :    g | ]}                     |          S rL   rU  )r  air?   s     rA   r  z,PrettyPrinter._print_Mul.<locals>.<listcomp>  #    )))T[[__)))rB   c                 :    g | ]}                     |          S rL   rU  )r  bir?   s     rA   r  z,PrettyPrinter._print_Mul.<locals>.<listcomp>  r  rB   )sympy.physics.unitsr  rY   r   OnerR  r  maprM   r   r  r   r   r   r,   as_ordered_factorsr   is_commutativeis_Powr  r  is_negativerB  r   r  rx  r  r
   r  r  )
r?   ru  rY   strargsnegoneobjr  r  r  r  s
   `        @rA   r  zPrettyPrinter._print_Mul  s   000000 |7ae 	s"O"Od122h"O"O"OOO 	3t{D1122G QZ4'F 3'Q22
$g.C I suclCKHHJ:_, 	&--//DD%%D d !K !K !K !K L L L  	 	D" t{ tx7K PTPXPd 8r> 8HHSTXIFFFGGGGHHSTXI667777! d!*&< 6Q; 1HHhtv..0006Q; 1HHhtv..000 *)))q)))))))q))) q66Q; 	A%q))1vv{ /$++ae,,...%q)**<a*@@@rB   c                   	
 |                      |          }| j        d         rg| j        r`|dk    rZ|                                dk    rB|                                dk    s|j        r#|j        rt          |                    d           S t          dd          	t          dd          	z   }|                      |          }|                                dk    r.|                      |          |                      d|z            z  S |dk    rdn!t          |                              d          }t          |          dk    rdt          |          dz
  z  |z   }t          |d	z   |z             }d
|_        |                                dz
  
t          d	                    	
fdt!          
          D                                 }
dz
  |_        t          |                    |           }t%          d|j                  |_        t          t'          dd|                                z                       }t          |                    |           }t          |                    |           }|S )Nr1   r   rh   u   √rf  re  r  r   rI  r   c              3   @   K   | ]}d |z
  dz
  z  z   d |z  z   V  dS )r   rh   NrL   )r  r+   _zZ
linelengths     rA   rN  z0PrettyPrinter._print_nth_root.<locals>.<genexpr>  sS       (
 (
 a!#$s*SU2(
 (
 (
 (
 (
 (
rB   r   )rM   r:   rJ   r/  r   r   r   r   r[   r   r;   ljustr  r   r   rZ  r  rr   r   r   r   )r?   r  rootbprettyrootsignrprettyr  diagonalr   r  r  s            @@rA   _print_nth_rootzPrettyPrinter._print_nth_root  sx   ++d## N23 	@8I 	@		@%nn..!3	@A%	@ _	@ *.)<	@ w||,=>>?? 3lla==3&++d##>>q  	:;;t$$dkk!D&&9&999AI8bb3w<<#5#5a#8#8s88a< 	5CHHqL)H4HcDj8344^^%%)
dii (
 (
 (
 (
 (
:&&(
 (
 (
 
 
  
 'Nx~~h778  7#344tCW]]__!45566a(()x(()rB   c                    ddl m} |                                \  }}|j        r|t          j        u r%t          d          |                     |          z  S  ||          \  }}|t          j        u r?|j	        r8|j
        s1|j        s|j        r#| j        d         r|                     ||          S |j        r<|dk     r6t          d          |                     t          || d                    z  S |j        rTt          |                     |                                                               |                     |                    S |                     |          |                     |          z  S )Nr   )fractionr  r2   Fr  )sympy.simplify.simplifyr  as_base_expr  r   NegativeOner   rM   r  is_Atomr   r  r   r:   r  r   r  rZ   __pow__)r?   powerr  r  rR   r   r   s          rA   
_print_PowzPrettyPrinter._print_Pow  sq   444444  ""1 	OAM! 6!#t{{1~~558A;;DAqAEz 2ai 2 2!- 2STS^ 272++Aq111} OQ O!#t{{3q1"u3M3M3M'N'NNN? 	Pt{{1~~44667??AOOO{{1~~t{{1~~--rB   c                 B    |                      |j        d                   S rG  )rM   rY   rF   s     rA   _print_UnevaluatedExprz$PrettyPrinter._print_UnevaluatedExpr%  s    {{49Q<(((rB   c                    |dk    rJ|dk     r(t          t          |          t           j                  S t          t          |                    S t          |          dk    rt          |          dk    r|dk     rEt          t          |          t           j                  t          t          |                    z  S t          t          |                    t          t          |                    z  S d S )Nrh   r   )r   
   )r   r;   r  abs)r?   r  r  s      rA   __print_numer_denomz!PrettyPrinter.__print_numer_denom(  s    6 	1u *!#a&&*.AAAA!#a&&)))VVr\ 
	c!ffl 
	1u =!#a&&*.AAA*SQRVVBTBTTT
 "#a&&))*SVV*<*<<<4rB   c                 t    |                      |j        |j                  }||S |                     |          S rD   )!_PrettyPrinter__print_numer_denomr  r  rH   r?   rG   r!  s      rA   _print_RationalzPrettyPrinter._print_Rational:  s<    ))$&$&99 	+M$$T***rB   c                 t    |                      |j        |j                  }||S |                     |          S rD   )r  	numeratordenominatorrH   r  s      rA   _print_FractionzPrettyPrinter._print_FractionB  s=    ))$.$:JKK 	+M$$T***rB   c                 F   t          |j                  dk    r\t          |j                  sH|                     |j        d                   |                     t          |j                            z  S | j        rdnd}|                     |j        d d d|z  d           S )Nrh   r      ×r   r   c                 ,    | j         p| j        p| j        S rD   )is_Unionis_Intersectionis_ProductSetsets    rA   r  z1PrettyPrinter._print_ProductSet.<locals>.<lambda>P  s#    CL =L#&#6=L:=:K rB   r  )r  setsr   rM   rJ   rX   )r?   r  	prod_chars      rA   _print_ProductSetzPrettyPrinter._print_ProductSetJ  s    qv;;! 	MK$7$7 	M;;qvay))T[[QV-E-EEE595FO11CI??164v	7I1L 1L # M M MrB   c                 h    t          |j        t                    }|                     |ddd          S )Nr   r  }r  )r   rY   r   rX   )r?   r   rU  s      rA   _print_FiniteSetzPrettyPrinter._print_FiniteSetS  s/    qv#3444uc3666rB   c                 $   | j         rd}nd}|j        j        r(|j        j        r|j        j        r|ddd|f}n|ddd|f}n|j        j        r||d         |j        z
  |d         f}n|j        j        r/t          |          }t          |          t          |          |f}nXt          |          dk    r6t          |          }t          |          t          |          ||d         f}nt          |          }| 
                    |ddd	          S )
N   …...r  r   rh   r+  r  r  r  )rJ   startis_infinitestopstepis_positiveiterr   r  r  rX   )r?   r   dotsprintsetits        rA   _print_RangezPrettyPrinter._print_RangeW  s    	,DDD7 	 16#5 	 v! 0Q4/Ar4/W  		 QrUQV^QrU2HHV 	 aBBxxb4/HHVVaZ 	 aBBxxb426HHQxxHxc4999rB   c                     |j         |j        k    r$|                     |j        d d         dd          S |j        rd}nd}|j        rd}nd}|                     |j        d d         ||          S )	Nrh   r  r  rl   r  rm   r  r   )r  endrX   rY   	left_open
right_openr?   r+   r[   rr   s       rA   _print_IntervalzPrettyPrinter._print_Intervalp  s    7ae 	<??16"1":sC888 { | ??16"1":tU;;;rB   c                 R    d}d}|                      |j        d d         ||          S )Nr]  r^  r   rX   rY   r  s       rA   _print_AccumulationBoundsz'PrettyPrinter._print_AccumulationBounds  s,    qvbqbz4777rB   c                 h    dt          dd          z  }|                     |j        d d |d           S )Nr   Intersectionr   c                 ,    | j         p| j        p| j        S rD   )r  r  is_Complementr  s    rA   r  z3PrettyPrinter._print_Intersection.<locals>.<lambda>  s#    8I 9A"|9A/2/@ rB   r  r    rX   rY   r?   r#  r  s      rA   _print_Intersectionz!PrettyPrinter._print_Intersection  sJ    [===	qvtT9-A -A  B B 	BrB   c                 h    dt          dd          z  }|                     |j        d d |d           S )Nr   Unionr#   c                 ,    | j         p| j        p| j        S rD   )r  r  r  r  s    rA   r  z,PrettyPrinter._print_Union.<locals>.<lambda>  s$    8I 9H"29H696G rB   r  r  )r?   r#  union_delimiters      rA   _print_UnionzPrettyPrinter._print_Union  sJ     ;w#<#<<qvtT?-H -H  I I 	IrB   c                     | j         st          d          dt          d          z  }|                     |j        d d |          S )Nz?ASCII pretty printing of SymmetricDifference is not implementedr   SymmetricDifference)rJ   rQ  r    rX   rY   )r?   r#  sym_delimeters      rA   _print_SymmetricDifferencez(PrettyPrinter._print_SymmetricDifference  sJ      	i%&ghhh-B!C!CCqvtT=AAArB   c                 F    d}|                      |j        d d |d           S )Nz \ c                 ,    | j         p| j        p| j        S rD   )r  r  r  r  s    rA   r  z1PrettyPrinter._print_Complement.<locals>.<lambda>  s     c&7 '/3;N '/"%, rB   r  r  r  s      rA   _print_ComplementzPrettyPrinter._print_Complement  s6    	qvtT9/ /  0 0 	0rB   c                    | j         rdnd|j        }|j        }|j        }|                     |j                  }t          |          dk    rA|                     |d         |d         fd          }|                     ||ddd	d
          S t          fdt          ||          D                       }|                     |d d         d          }|                     ||ddd	d
          S )N   ∊inrh   r   r   r  r  r  Tr[   rr   r  r  c              3   8   K   | ]\  }}|d d |dfD ]}|V  dS )r   r  NrL   )r  r1  setvr7   inns       rA   rN  z0PrettyPrinter._print_ImageSet.<locals>.<genexpr>  sX       < <	TS#tT:< <a! < < < < < < <rB   r  r  )rJ   r  	base_setsrE  rM   rG   r  rX   r  r  r  )	r?   tsfunr  rE  rG   r   pargsr  s	           @rA   _print_ImageSetzPrettyPrinter._print_ImageSet  s=    	(CCCh|M	{{38$$ y>>Q 	O1sDG <*-   / /A**4033:># + O O O  < < < <SD-A-A < < < < <Ecrc
b99A**4033:># + O O OrB   c                    | j         rd}d}nd}d}|                     t          |j                            }t	          |j        dd           }|-|                     |j                                                  }nQ|                     |j                  }| j         r0|                     |          }t          |	                                 }|j
        t          j        u r|                     ||dddd	
          S |                     |j
                  }|                     |||||fd	          }|                     ||dddd	
          S )Nr  r   r  andas_exprr  r  Tr   r  r  )rJ   rX   r   r   getattr	conditionrM   r  r   rZ   base_setr   UniversalSetr  )	r?   r  r  _andr  r  r  r  r  s	            rA   _print_ConditionSetz!PrettyPrinter._print_ConditionSet  sa    	(C %DDCDOOE"&MM22	",	488 	2;;r|335566DD;;r|,,D  2{{4((!4;;==1;!.( 	:**9d14T58 + : : : {{2;''OOYT4>&)  + +&&y!#S6:c ' K K 	KrB   c                     | j         rd}nd}|                     |j                  }|                     |j                  }|                     |j                  }|                     |||fd          }|                     ||dddd          S )	Nr  r  r   r  r  r  Tr  )rJ   rX   r  rM   rG   r  r  )r?   r  r  r  rG   prodsetsr  s          rA   _print_ComplexRegionz"PrettyPrinter._print_ComplexRegion  s     	(CCCOOBL11	{{27##;;rw''OOYX6&)  + +&&tQS6:c ' K K 	KrB   c           	          |j         \  }}| j        rHd}t          t          j        |                     |          ||                     |                    ddiS t          t          |                    S )Nu    ∈ r   rh  )rY   rJ   r   r   r   rM   r   )r?   rR   r1  r  els        rA   _print_ContainszPrettyPrinter._print_Contains  s    6S 	'#Bzt{{3/?/?/14;;s3C3C E  E QNOQ Q Q d1gg&&&rB   c                 (   |j         j        t          j        u r2|j        j        t          j        u r|                     |j                  S | j        rd}nd}|                     |	                                          |                     |          z   S )Nr  r  )
r  formular   rM  bnrM   a0rJ   r  truncate)r?   r   r  s      rA   _print_FourierSeriesz"PrettyPrinter._print_FourierSeries  s}    4<16! 	%adlaf&< 	%;;qt$$$ 	,DDDqzz||,,t{{4/@/@@@rB   c                 6    |                      |j                  S rD   )r  infiniter?   r   s     rA   _print_FormalPowerSeriesz&PrettyPrinter._print_FormalPowerSeries	  s    qz***rB   c                     t          |                     |j                                                   }|                     t	          d                    }t          |                    |           S )NSetExpr)r   rM   r  rZ   r   rr   )r?   se
pretty_setpretty_names       rA   _print_SetExprzPrettyPrinter._print_SetExpr	  sX    RV!4!4!;!;!=!=>
kk&"3"344;,,Z8899rB   c                 |   | j         rd}nd}t          |j        j                  dk    st          |j        j                  dk    rt          d          |j        t          j        u rd|j        }||                    |dz
            |                    |dz
            |                    |dz
            |                    |          f}n\|j        t          j	        u s|j
        dk    r/|d d         }|                    |           t          |          }nt          |          }|                     |          S )	Nr  r  r   z@Pretty printing of sequences with symbolic bound not implementedr*  r   rh   r+  )rJ   r  r  free_symbolsr  rQ  r   ry  r  rx  lengthrB  r  _print_list)r?   r   r  r  r  s        rA   _print_SeqFormulazPrettyPrinter._print_SeqFormula	  s.    	,DDDqw#$$q( 	jC0C,D,Dq,H 	j%&hiii7a(( 		 6DaggdQh//1B1Bq!!1774==2HHVqz! 	 QX\ 	 !uHOOD!!!XHHQxxH)))rB   c                     dS )NFrL   r  s    rA   r  zPrettyPrinter.<lambda>%	  s    5 rB   c                    	 g }|D ]i}|                      |          }	 ||          rt          |	                                 }	|r|                    |           |                    |	           j|st	          d          }
nt          t	          j        |  }
n# t          $ r d }
|D ]z}|                     |          }	 ||          rt          |	                                 }	|
|	}
Bt          t	          j        |
|           }
t          t	          j        |
|	           }
{|
t	          d          }
Y nw xY wt          |
                    |||           }
|
S )Nr  rx  )rM   r   rZ   rB  r   r   AttributeErrorrO   )r?   seqr[   rr   r  r  r  r  r  r]   r   s              rA   rX   zPrettyPrinter._print_seq$	  s   "	#F % %D))<%% 8&7E -MM),,,e$$$$ :rNN
 89  	# 	# 	#A 	? 	?T**<%% 8&7E ?AA"JOAy$A$ABA"JOAu$=$=>AA #rNN	#  u^LLMs   BB BD54D5c                     d }|D ]?}||}t          |                    |           }t          |                    |           }@|t          d          S |S )Nr  )r   rr   )r?   r  rY   r]   r   s        rA   rZ  zPrettyPrinter.joinM	  sl     	6 	6C 6"EKK	$:$:;"EKK$4$45 	b>>!LrB   c                 0    |                      |dd          S r  rX   )r?   r   s     rA   r:  zPrettyPrinter._print_list\	  s    q#s+++rB   c                     t          |          dk    rTt          t          j        |                     |d                   d           }t          |                    ddd           S |                     |dd          S )Nrh   r   r	  rl   rm   Trx  )r  r   r   r   rM   rZ   rX   )r?   r  ptuples      rA   _print_tuplezPrettyPrinter._print_tuple_	  sm    q66Q; 	0QqT1B1BC!H!HIFv}}S#d}KKLL??1c3///rB   c                 ,    |                      |          S rD   )rE  rF   s     rA   _print_TuplezPrettyPrinter._print_Tuplef	  s      &&&rB   c                 R   t          |                                t                    }g }|D ]d}|                     |          }|                     ||                   }t	          t          j        |d|           }|                    |           e|                     |dd          S )Nr   z: r  r  )	r   keysr   rM   r   r   r   rB  rX   )r?   r   rI  rU  r   rr  Vr   s           rA   _print_dictzPrettyPrinter._print_dicti	  s    affhh$4555 	 	AAAAaD!!AJOAtQ778ALLOOOOuc3///rB   c                 ,    |                      |          S rD   )rK  )r?   r   s     rA   _print_DictzPrettyPrinter._print_Dictv	  s    """rB   c                     |st          d          S t          |t                    }|                     |          }t          |                    ddd           }|S )Nzset()r   r  r  Trx  )r   r   r   rX   rZ   r?   r   rU  prettys       rA   
_print_setzPrettyPrinter._print_sety	  s]     	'g&&&q.///''V]]3D]IIJrB   c                 V   |st          d          S t          |t                    }|                     |          }t          |                    ddd           }t          |                    ddd           }t          t          j        t          |          j        |           }|S )	Nzfrozenset()r   r  r  Trx  rl   rm   )	r   r   r   rX   rZ   r   r   typer   rO  s       rA   _print_frozensetzPrettyPrinter._print_frozenset	  s     	-m,,,q.///''V]]3D]IIJV]]3D]IIJZ_T!WW-=vFFGrB   c                 L    | j         rt          d          S t          d          S )Nu   𝕌r  r  r/  s     rA   _print_UniversalSetz!PrettyPrinter._print_UniversalSet	  s*     	.HIIIn---rB   c                 :    t          t          |                    S rD   r   r   )r?   rings     rA   _print_PolyRingzPrettyPrinter._print_PolyRing	      $t**%%%rB   c                 :    t          t          |                    S rD   rX  )r?   fields     rA   _print_FracFieldzPrettyPrinter._print_FracField	  s    $u++&&&rB   c                 :    t          t          |                    S rD   rE   )r?   elms     rA   _print_FreeGroupElementz%PrettyPrinter._print_FreeGroupElement	  s    #c((###rB   c                 :    t          t          |                    S rD   rX  )r?   polys     rA   _print_PolyElementz PrettyPrinter._print_PolyElement	  r[  rB   c                 :    t          t          |                    S rD   rX  )r?   fracs     rA   _print_FracElementz PrettyPrinter._print_FracElement	  r[  rB   c                     |j         r9|                     |                                                                          S |                     |                                          S rD   )
is_aliasedrM   as_polyr  rF   s     rA   _print_AlgebraicNumberz$PrettyPrinter._print_AlgebraicNumber	  sL    ? 	/;;t||~~5577888;;t||~~...rB   c                     |                      |j        d          |j        g}t          |                     |                                           }t          |                    d           }|S )Nlexr  CRootOf)r  rG   rh  r   rX   rZ   r[   r?   rG   rY   r]   s       rA   _print_ComplexRootOfz"PrettyPrinter._print_ComplexRootOf	  s]    	77DDOOD1188::;EJJy112rB   c                 T   |                      |j        d          g}|j        t          j        ur-|                    |                     |j                             t          |                     |          	                                 }t          |
                    d           }|S )Nrm  r  RootSum)r  rG   r  r   IdentityFunctionrB  rM   r   rX   rZ   r[   ro  s       rA   _print_RootSumzPrettyPrinter._print_RootSum	  s    	77881-- 	/KKDH--...DOOD1188::;EJJy112rB   c                 b    | j         rd}nd}t          t          ||j        z                      S )Nu   ℤ_%dzGF(%d))rJ   r   r   mod)r?   rG   forms      rA   _print_FiniteFieldz PrettyPrinter._print_FiniteField	  s5     	3DDD-tx88999rB   c                 L    | j         rt          d          S t          d          S )Nu   ℤZZr  rF   s     rA   _print_IntegerRingz PrettyPrinter._print_IntegerRing	  *     	$;<<<d###rB   c                 L    | j         rt          d          S t          d          S )Nu   ℚQQr  rF   s     rA   _print_RationalFieldz"PrettyPrinter._print_RationalField	  r|  rB   c                     | j         rd}nd}|j        rt          |          S |                     t	          |dz   t          |j                  z                       S )Nu   ℝRRr   rJ   has_default_precisionr   rM   r   r;   	precisionr?   domainprefixs      rA   _print_RealFieldzPrettyPrinter._print_RealField	  a     	2FFF' 	Tf%%%;;}Vc\C@P<Q<Q-QRRSSSrB   c                     | j         rd}nd}|j        rt          |          S |                     t	          |dz   t          |j                  z                       S )Nu   ℂCCr   r  r  s      rA   _print_ComplexFieldz!PrettyPrinter._print_ComplexField	  r  rB   c                    t          |j                  }|j        j        sVt	          t	          d                              |                     |j                             }|                    |           |                     |dd          }t	          |	                    |                     |j
                             }|S Norder=r  r  r  symbolsr,   
is_defaultr   rr   rM   rB  rX   r[   r  r?   rG   rY   r,   r]   s        rA   _print_PolynomialRingz#PrettyPrinter._print_PolynomialRing	      DL!!z$ 	
8 4 4 : :4;;tz;R;R S STEKKc3//EJJt{{4;'?'?@@ArB   c                    t          |j                  }|j        j        sVt	          t	          d                              |                     |j                             }|                    |           |                     |dd          }t	          |	                    |                     |j
                             }|S )Nr  rl   rm   r  r  s        rA   _print_FractionFieldz"PrettyPrinter._print_FractionField	  r  rB   c                 4   |j         }t          |j                  t          |j                  k    r|dt          |j                  z   fz   }|                     |dd          }t          |                    |                     |j                             }|S r  )	r  r;   r,   default_orderrX   r   r[   rM   r  )r?   rG   gr]   s       rA   _print_PolynomialRingBasez'PrettyPrinter._print_PolynomialRingBase	  s    Ltz??c$"4555 	2XDJ/11A3,,EJJt{{4;'?'?@@ArB   c                      fdj         D             }t                               d|                              dd           } fdj        D             }t          t          d                                                   j                             }t          t          d                                                   j                             }                     d|g|z   ||gz             }t          |                                 }t          |	                    j
        j                   }|S )	Nc                 H    g | ]}                     |j                   S )r  )r  r,   )r  r   basisr?   s     rA   r  z6PrettyPrinter._print_GroebnerBasis.<locals>.<listcomp>
  s;     + + + //#U[/99 + + +rB   r  r  r  r  c                 :    g | ]}                     |          S rL   rU  )r  genr?   s     rA   r  z6PrettyPrinter._print_GroebnerBasis.<locals>.<listcomp>
  s%    999cS!!999rB   zdomain=r  )exprsr   rZ  rZ   gensrr   rM   r  r,   r[   r   r   )r?   r  r  r  r  r,   r]   s   ``     rA   _print_GroebnerBasisz"PrettyPrinter._print_GroebnerBasis
  s3   + + + + +"[+ + +DIIdE2299s#9NNO9999UZ999	""((U\)B)BCCE!!''EK(@(@AAC 		$$&% @AAELLNN+EJJu'?@@ArB   c                 H                          |j                  }t          |                                 }|                                dk    r|                                nd}t          t          d|          |j                  }t          |                    |           }|j        }|                                dz
  |_        t          |                     	                     fdt          |j        |j                  D                                  }||_        |S )Nrh   r   r   r  c           
          g | ][}                                         |d                    t          d                              |d                   fd          \S )r   rS  rh   r  r  )rX   rM   r   )r  r`  r?   s     rA   r  z-PrettyPrinter._print_Subs.<locals>.<listcomp>
  st     9C 9C 9C"# OOT[[1..T

DKK!<M<MN   9C 9C 9CrB   )rM   rG   r   rZ   r/  r   r   r   rr   rX   r  r  rQ  )r?   rR   r]   r5  rvertr  s   `     rA   _print_SubszPrettyPrinter._print_Subs
  s   AF##ELLNN+#llnnq07ELLNNNa4Q<<%.AAAEKK../N!+EKK 9C 9C 9C 9C'*1;'@'@9C 9C 9C )D )D E E F rB   c                 4   t          |          }|                     |j        d                   }t          d|                                z            }t          |                    |           }t          |                    |           }t          |j                  dk    r|S |j        \  }}|}t          |                     |g                                           }	t          t          j
        ||	          dt           j        i}||_        |	|_        |S )Nr   r   rh   r   )r   rM   rY   r   r   rr   r  rX   rZ   r   r   r   r  r  )
r?   rR   r`   r]   r   r   r  r   r  r  s
             rA   _print_number_functionz$PrettyPrinter._print_number_function&
  s     4  kk!&)$$s399;;//		 4 45	EKK	223qv;;! 	Lv1
!!5!5!<!<!>!>?
&0oj*&M&MOOO O%%rB   c                 .    |                      |d          S )Nr}  r  rQ   s     rA   _print_eulerzPrettyPrinter._print_euler:
      **1c222rB   c                 .    |                      |d          S )Nr  r  rQ   s     rA   _print_catalanzPrettyPrinter._print_catalan=
  r  rB   c                 .    |                      |d          S )Nr  r  rQ   s     rA   _print_bernoullizPrettyPrinter._print_bernoulli@
  r  rB   c                 .    |                      |d          S )NLr  rQ   s     rA   _print_lucaszPrettyPrinter._print_lucasE
  r  rB   c                 .    |                      |d          S )Nr  r  rQ   s     rA   _print_fibonaccizPrettyPrinter._print_fibonacciH
  r  rB   c                 .    |                      |d          S )Nr  r  rQ   s     rA   _print_tribonaccizPrettyPrinter._print_tribonacciK
  r  rB   c                 h    | j         r|                     |d          S |                     |d          S )Nu   γ	stieltjes)rJ   r  rQ   s     rA   _print_stieltjeszPrettyPrinter._print_stieltjesN
  s:     	?..q2PQQQ..q+>>>rB   c                    |                      |j        d                   }t          |                    t          d                     }t          |                    |                      |j        d                              }| j        rt          t          d                    }nt          d          }|}t          |                    d|                                z             }t          |                    d|                                z             }t          |	                    |          dt          j
        iS )Nr   r	  rh   r
  r   r   r   )rM   rY   r   rr   rJ   r   r   r[   r   r   POW)r?   rR   r]   r  r  r  r  s          rA   _print_KroneckerDeltaz#PrettyPrinter._print_KroneckerDeltaT
  s    AF1I&&EKK
3889EKKAF1I(>(>??@ 	 =1122AA3A!&&QWWYY//0!''#aggii-001399S>>B*.BBBrB   c                 .   t          |d          rX|                     d          }t          |                    |                     |                                                     }|S t          |d          r|                     d          }t          |                    |                     |j                             }t          |                    |                     d                     }t          |                    |                     |j                             }|S t          |d          rK|                     d          }t          |                    |                     |j                             }|S |                     d           S )N
as_booleanzDomain: r  z in r  z
Domain on )r  rM   r   rr   r  r  r  )r?   r   r]   s      rA   _print_RandomDomainz!PrettyPrinter._print_RandomDomaina
  sD   1l## 	%KK
++EDKK,G,G H HIELQ 	%KK
++EDKK	,B,B C CDEDKK,?,? @ @AEDKK,>,> ? ?@ELQ	"" 	%KK--EDKK	,B,B C CDEL;;t$$$rB   c                     	 |j         -|                     |j                             |                    S n# t          $ r Y nw xY w|                     t	          |                    S rD   )rY  rM   to_sympyr   reprr?   r  s     rA   
_print_DMPzPrettyPrinter._print_DMPs
  sp    	v 7{{16??1#5#56667  	 	 	D	{{477###s   37 
AAc                 ,    |                      |          S rD   )r  r  s     rA   
_print_DMFzPrettyPrinter._print_DMF|
  s    q!!!rB   c                 P    |                      t          |j                            S rD   rM   r   r`   )r?   objects     rA   _print_ObjectzPrettyPrinter._print_Object
  s    {{=55666rB   c                     t          d          }|                     |j                  }|                     |j                  }|                    ||          d         }t          |          S )Nz-->r   )r   rM   r  codomainrr   r   )r?   morphismrH  r  r  tails         rA   _print_MorphismzPrettyPrinter._print_Morphism
  sZ    UX_--;;x011||E8,,Q/$rB   c                     |                      t          |j                            }|                     |          }t	          |                    d|          d                   S )Nr  r   )rM   r   r`   r  r   rr   )r?   r  r5  pretty_morphisms       rA   _print_NamedMorphismz"PrettyPrinter._print_NamedMorphism
  sS    kk-">">??..x88+++CAA!DEEErB   c                 b    ddl m} |                      ||j        |j        d                    S )Nr   )NamedMorphismid)sympy.categoriesr  r  r  r  )r?   r  r  s      rA   _print_IdentityMorphismz%PrettyPrinter._print_IdentityMorphism
  sE    222222((M(/8+<dCCE E 	ErB   c                 >   t          d          }d |j        D             }|                                 |                    |          dz   }|                     |          }|                     |          }t          |                    |          d                   S )Nr	  c                 6    g | ]}t          |j                  S rL   )r   r`   )r  	components     rA   r  z:PrettyPrinter._print_CompositeMorphism.<locals>.<listcomp>
  s8      B  B  B ) !.in = =  B  B  BrB   r  r   )r   rV  reverserZ  rM   r  r   rr   )r?   r  circlecomponent_names_listcomponent_namesr5  r  s          rA   _print_CompositeMorphismz&PrettyPrinter._print_CompositeMorphism
  s    c B  B-5-@ B  B  B$$&&& ++&:;;cAkk/22..x88+++O<<Q?@@@rB   c                 P    |                      t          |j                            S rD   r  )r?   categorys     rA   _print_CategoryzPrettyPrinter._print_Category
  s    {{=77888rB   c                 J   |j         s|                     t          j                  S |                     |j                   }|j        rHdt          d          z  }|                     |j                  d         }|                    ||          }t          |d                   S )Nr   z==>r   )premisesrM   r   EmptySetconclusionsr   rr   r   )r?   diagrampretty_resultresults_arrowpretty_conclusionss        rA   _print_DiagramzPrettyPrinter._print_Diagram
  s     	+;;qz***G$455 	3"T%[[0M!%W-@!A!A!!D)//13 3M -*+++rB   c                     ddl m}  |fdt          j                  D                       }|                     |          S )Nr   )Matrixc                 T    g | ]#fd t          j                  D             $S )c                 V    g | ]%}|f         r
|f         nt          d           &S )r   r   )r  r7   gridr+   s     rA   r  z?PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>.<listcomp>
  sH     6 6 6 )-QT
C$q!t**s 6 6 6rB   )r  r   )r  r+   r  s    @rA   r  z4PrettyPrinter._print_DiagramGrid.<locals>.<listcomp>
  sZ     6 6 66 6 6 6 6#(#4#46 6 6 6 6 6rB   )r  r  r  r/  r  )r?   r  r  matrixs    `  rA   _print_DiagramGridz PrettyPrinter._print_DiagramGrid
  sl    )))))) 6 6 6 6"'"4"46 6 6 7 7 **6222rB   c                 0    |                      |dd          S r  rB  r?   r  s     rA   _print_FreeModuleElementz&PrettyPrinter._print_FreeModuleElement
  s    q#s+++rB   c                 :    |                      |j        dd          S )Nr]  r^  )rX   r  r?   r  s     rA   _print_SubModulezPrettyPrinter._print_SubModule
  s    qvsC000rB   c                 l    |                      |j                  |                      |j                  z  S rD   )rM   rY  rs  r  s     rA   _print_FreeModulezPrettyPrinter._print_FreeModule
  s)    {{16""DKK$7$777rB   c                 X    |                      d |j        j        D             dd          S )Nc                     g | ]\  }|S rL   rL   rL  s     rA   r  z?PrettyPrinter._print_ModuleImplementedIdeal.<locals>.<listcomp>
  s    <<<cq<<<rB   r]  r^  )rX   _moduler  r  s     rA   _print_ModuleImplementedIdealz+PrettyPrinter._print_ModuleImplementedIdeal
  s+    <<QY^<<<c3GGGrB   c                 l    |                      |j                  |                      |j                  z  S rD   )rM   rY  
base_idealr?   Rs     rA   _print_QuotientRingz!PrettyPrinter._print_QuotientRing
  s)    {{16""T[[%>%>>>rB   c                 v    |                      |j                  |                      |j        j                  z   S rD   )rM   datarY  r  r  s     rA   _print_QuotientRingElementz(PrettyPrinter._print_QuotientRingElement
  s,    {{16""T[[1B%C%CCCrB   c                 v    |                      |j                  |                      |j        j                  z   S rD   )rM   r  modulekilled_moduler  s     rA   _print_QuotientModuleElementz*PrettyPrinter._print_QuotientModuleElement
  s,    {{16""T[[1G%H%HHHrB   c                 l    |                      |j                  |                      |j                  z  S rD   )rM   r  r  r  s     rA   _print_QuotientModulez#PrettyPrinter._print_QuotientModule
  s)    {{16""T[[%A%AAArB   c                 L   |                      |                                          }|                                dz  |_        t	          |                    d|                      |j                  dt          dd          z  |                      |j                             }|S )Nr   z : z %s> r>  )	rM   _sympy_matrixr/  r   r   rr   r  r   r  )r?   r5  r  r]   s       rA   _print_MatrixHomomorphismz'PrettyPrinter._print_MatrixHomomorphism
  s    Q__..// --//Q.FLLAH0E0Ed3ll"DKK
$;$;= = >rB   c                 6    |                      |j                  S rD   rM   r`   )r?   manifolds     rA   _print_ManifoldzPrettyPrinter._print_Manifold
  s    {{8=)))rB   c                 6    |                      |j                  S rD   r  )r?   patchs     rA   _print_PatchzPrettyPrinter._print_Patch
  s    {{5:&&&rB   c                 6    |                      |j                  S rD   r  )r?   coordss     rA   _print_CoordSystemz PrettyPrinter._print_CoordSystem
  s    {{6;'''rB   c                 ~    |j         j        |j                 j        }|                     t          |                    S rD   )
_coord_sysr  _indexr`   rM   r   )r?   r]  strings      rA   _print_BaseScalarFieldz$PrettyPrinter._print_BaseScalarField
  s1    !)%,7<{{=00111rB   c                     t          d          dz   |j        j        |j                 j        z   }|                     t          |                    S )Nr   r   )r#   r  r  r  r`   rM   r   )r?   r]  r   s      rA   _print_BaseVectorFieldz$PrettyPrinter._print_BaseVectorField
  sD    $%%+e.>.Fu|.T.YY{{=++,,,rB   c                 h   | j         rd}nd}|j        }t          |d          rD|j        j        |j                 j        }|                     |dz   t          |          z             S |                     |          }t          |
                                 }t          |                    |           S )Nu   ⅆr   r  r   )rJ   _form_fieldr  r  r  r  r`   rM   r   r   rZ   r[   )r?   r  r   r]  r  r]   s         rA   _print_Differentialz!PrettyPrinter._print_Differential
  s     	2AAA 5,'' 	.%-el;@F;;q3wv)>)>>???KK&&E/Euzz!}}--rB   c                     |                      |j        d                   }t          |                    d|j        j        z             }t          |                    d           }|S )Nr   z%s(rm   )rM   rY   r   r[   r   r   rr   )r?   r  r]   s      rA   	_print_TrzPrettyPrinter._print_Tr
  sT    AF1I&&EJJu0D'EFFGEKK,,-rB   c                    |                      |j        d                   }t          |                                 }| j        r(t          |                    t          d                    }nt          |                    d           }|S )Nr   nurM   rY   r   rZ   rJ   r[   r"   r\   s      rA   _print_primenuzPrettyPrinter._print_primenu  sn    AF1I&&ELLNN+ 	2

=+> ? ?@EE

4 0 01ErB   c                    |                      |j        d                   }t          |                                 }| j        r(t          |                    t          d                    }nt          |                    d           }|S )Nr   Omegar*  r\   s      rA   _print_primeomegazPrettyPrinter._print_primeomega  sn    AF1I&&ELLNN+ 	5

=+A B BCEE

7 3 34ErB   c                 z    |j         j         dk    r|                     d          }|S |                     |          S )Ndegree   °)r`   rM   rH   r\   s      rA   _print_QuantityzPrettyPrinter._print_Quantity  s>    6;(" 	(KK 122EL$$Q'''rB   c                     t          dt          |j                  z   dz             }|                     |j                  }|                     |j                  }t          t          j        |||           }|S )Nr   )r   r   r   rM   r   r   r   r   r   s         rA   _print_AssignmentBasez#PrettyPrinter._print_AssignmentBase  sd    d14jj(3.//KKKKJOAr1556rB   c                 6    |                      |j                  S rD   r  r/  s     rA   
_print_StrzPrettyPrinter._print_Str%  s    {{16"""rB   rD   )F)T)r  r  )NNr  F)FNrl   rm   )FNr  Frl   rm   )r   
__module____qualname____doc__printmethod_default_settingsr8   rH   propertyrJ   rO   rS   rU   r^   rc   _print_RandomSymbolrf   rj   rv   r}   r   r   r   r   r   _print_Infinity_print_NegativeInfinity_print_EmptySet_print_Naturals_print_Naturals0_print_Integers_print_Rationals_print_Complexes_print_EmptySequencer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r'  r<  rP  rA  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r'  r*  r8  r>  rC  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  r"  r&  r(  r*  r-  r0  r2  r5  r8  r;  r>  r@  rB  rJ  rT  rW  rY  r[  r]  r`  rc  re  rh  rj  rl  rp  rs  ru  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r&  r,  r0  r6  r;  _print_SeqPer_print_SeqAdd_print_SeqMulrX   rZ  r:  rE  rG  rK  rM  rQ  rT  rV  rZ  r^  ra  rd  rg  rk  rp  rt  rx  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  rL   rB   rA   r'   r'      s       IIK !%# ~ ~ ~ ~% % % ( ( X(: : :      
        (S S S8 8 8
 
 
    
 
 
    ( ( ( "O)!O!O"!O""&7 7 7           + + +"   *6 6 66 6 66 6 66 6 66 6 6+ + + +6 6 6 6E E E  
+ + ++ + +# # #J  &", ", ",JI I IV4 4 4l
( 
( 
(_ _ _B  8C C CJ   
I 
I 
IS S SS S S    *  6    % % %
  ") ) )# # ## # ## # #) ) )  	Y 	Y 	Y, , , H H H  
8 8 8) ) )0 0 0    ""& "& "&H  $  d= d= d=L% % %B @B ! ! ! !F; ; ;
F F F  ) ) )       @6 6 6p3 3 3  4 4 4 4. . .`R R Rh. . .4 4 4 CF!s s s s6 6 66 6 67 7 77 7 7 HLGJ%(# # # #JW W W % % X%4 4 4' ' '< < << < <@ @ @6 6 66 6 67 7 77 7 78 8 88 8 86 6 68 8 88 8 86 6 6K K K[ [ [  *  < < << < << < << < << < << < <+ + +&' ' '
  	 	 	      2 2 2
1 1 1
( ( (  F+ F+ F+ F+P:A :A :Az* * *X. . .$) ) )  $+ + ++ + +M M M7 7 7: : :2< < <"8 8 8B B BI I IB B B0 0 0O O O:K K K>K K K' ' 'A A A+ + +: : :
* * ** &M%M%M#'tt(' ' ' 'R  , , ,0 0 0' ' '0 0 0# # #    . . .& & &' ' '$ $ $& & && & &/ / /  	 	 	: : :$ $ $$ $ $	T 	T 	T	T 	T 	T
 
 

 
 
    &  "  (3 3 33 3 33 3 3 #K3 3 33 3 33 3 3? ? ?C C C% % %$$ $ $" " "7 7 7     F F F
E E E
A A A9 9 9, , ,3 3 3, , ,1 1 18 8 8H H H? ? ?D D DI I IB B B  * * *' ' '( ( (2 2 2- - -. . .      ( ( (  # # # # #rB   r'   c                     t          |          }|j        d         }t          |          }	 |                    |           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!   rO   )rG   r@   r  r.   uflags        rA   rP  rP  )  sf     
x	 	 B ,}-K{++E"zz$5!!!!5!!!!s   A A"c                 :    t          t          | fi |           dS )a  Prints expr in pretty form.

    pprint is just a shortcut for this function.

    Parameters
    ==========

    expr : expression
        The expression to print.

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

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

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

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

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

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

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

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

    imaginary_unit : string, optional (default="i")
        Letter to use for imaginary unit when use_unicode is True.
        Can be "i" (default) or "j".
    N)printrP  )rG   kwargss     rA   pretty_printrP  <  s)    V 
&
 
 
 
 !!!!!rB   c                     ddl m} ddlm} d|vrd|d<    |t	          | fi |                     |                                 dS )a  Prints expr using the pager, in pretty form.

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

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

    r   )pager)getpreferredencodingr0   i  N)pydocrR  localerS  rP  encode)rG   r@   rR  rS  s       rA   pager_printrW  l  s}     ++++++H$ )"(	E&
"
"
"
"
)
)*>*>*@*@
A
ABBBBBrB   );rt  
sympy.corer   sympy.core.addr   sympy.core.containersr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr	   r
   sympy.core.powerr   sympy.core.sortingr   sympy.core.symbolr   sympy.core.sympifyr   sympy.printing.conventionsr   sympy.printing.precedencer   r   r   sympy.printing.printerr   r   sympy.printing.strr   sympy.utilities.iterablesr   sympy.utilities.exceptionsr    sympy.printing.pretty.stringpictr   r   &sympy.printing.pretty.pretty_symbologyr   r   r   r   r   r    r!   r"   r#   r$   r%   pprint_use_unicodepprint_try_use_unicoder'   rP  rP  pprintrW  rL   rB   rA   <module>rm     s                   ' ' ' ' ' ' ( ( ( ( ( (       / / / / / / / /             / / / / / / $ $ $ $ $ $ + + + + + + 7 7 7 7 7 7 T T T T T T T T T T : : : : : : : : # # # # # # 1 1 1 1 1 1 @ @ @ @ @ @ C C C C C C C C' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 ( / H,# H,# H,# H,# H,#G H,# H,# H,#VX " " "$+" +" +"Z 
C C C C CrB   