U
    L?h:^                  0   @   s  d Z ddlZddlZddlmZmZ ddlZdadd Zddl	m
Z
 ddlmZ dd	lmZ d
dddddddddg
ZdadddZdd Zdd Zdd Zdd ZeeZdeed< d d! eD Zed"d# eD  ed ed< ed$ ed%< d&ed'< d(d Zd)d Zd*d! eD Zed+d# eD  d,d Zd-d ZeeZ de e d< d.d! e D Z!e!d/d# e D  ed e!d< ed$ e!d%< d0e!d'< d1d2d3d4d5d6d7d8d9d:d;
Z"d<d=d>d?d@dAdBdCdDdEdFdGdHZ#dId Z$dJd Z%dKd Z&dLd Z'dMd Z(dNd Z)dOd Z*i Z+i Z,dPD ]Z-e$e-e+e-< qdQD ]Z-e(e-e,e-< q*dRD ]Z.e%e.e+e.< qBdSdT e/dUD D ]Z0e&e0e+e0< e)e0e,e0< qhdVD ]Z1e'e1e+e1< e*e1e,e1< qdWd dXd dYd dZd d[d d\d d]d d^d d_d d`d dad dbd dcd ddd ded dfd dgd dhd did djZ2dkd Z3dld Z4dmd Z5dnd Z6dod Z7dpd Z8dqd Z9drd Z:e6dse3dse7dsfdsfe6dte3dte7dtfdtfe6due4due8dufdufe6dve4dve8dvfdvfe6dwe3dxe7dxe5dxfdxfe6dwe3dye7dye5dyfdyfedzed{ed|ed}ed~edededededzededfdfedzededfdfe6due6due8dufedfe6dve6dve8dvfedfe6due4due6dufedfe6dve4dve6dvfedfe6dededfedGfeddededfedfededededdZ;dddddddddddddddZ<dd Z=dd Z>dd Z?edededdZ@dd ZAeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAddZBddddedfdedfdedÃfddddddded˃fded̓rPed΃rPed̓ed̓ ed΃ ndfdedЃredЃred΃redЃedЃ ed΃ ndfdedуfdҜZCdd ZDedԃedՃedփedփodedփ ed׃ed؃edكedكoedكedڃ edۃed܃ed݃edރed߃ededededededededededуededededdedededededededededededededededededed{ed|d/ZEdddZFdd dZGdd ZHeIJee/eKdeKdee/eKdeKd ZLdd ZMdd	 ZNd
d ZOdd ZPdddZQdddZRdS (  z=Symbolic primitives + unicode/ASCII abstraction for pretty.py    N)ascii_lowercaseascii_uppercase c                 C   s4   zt | W S  tk
r.   td|  7 aY dS X dS )z
    Get a unicode character by name or, None if not found.

    This exists because older versions of Python use older unicode databases.
    zNo '%s' in unicodedata
N)unicodedatalookupKeyErrorunicode_warnings)name r
   X/var/www/html/venv/lib/python3.8/site-packages/sympy/printing/pretty/pretty_symbology.pyU
   s
    r   )split_super_sub)greeks)sympy_deprecation_warninggreek_unicodesubsupxsymvobjhobjpretty_symbol	annotated
center_padcenterFc                 C   s.   | dkrt S | r"tr"tt dat }| a |S )z8Set whether pretty-printer should use unicode by defaultNr   )_use_unicoder   warningswarn)flagZuse_unicode_prevr
   r
   r   pretty_use_unicode)   s    
r   c               	   C   s   t tjdd} | dkrdS g }|t 7 }|t 7 }|D ]:}|dkrL dS z||  W q: tk
rr   Y  dS X q:td dS )z>See if unicode output is available and leverage it if possibleencodingNT)	getattrsysstdoutr   valuesatoms_tableencodeUnicodeEncodeErrorr   )r   symbolssr
   r
   r   pretty_try_use_unicode:   s    r)   c                  G   s   t dddd t|  S )Nzv
        The sympy.printing.pretty.pretty_symbology.xstr() function is
        deprecated. Use str() instead.
        z1.7z$deprecated-pretty-printing-functions)Zdeprecated_since_versionZactive_deprecations_target)r   str)argsr
   r
   r   xstrY   s    r,   c                 C   s   t d|   S )NzGREEK SMALL LETTER %sr   upperlr
   r
   r   <lambda>e       r1   c                 C   s   t d|   S )NzGREEK CAPITAL LETTER %sr-   r/   r
   r
   r   r1   f   r2   Zlamdalambdac                 C   s   i | ]}|t |qS r
   g.0Lr
   r
   r   
<dictcomp>m   s      r9   c                 c   s.   | ]&}|d    |dd  t|fV  qdS r      Nr.   Gr6   r
   r
   r   	<genexpr>n   s     r>   ZLamdaLambdau   ςZvarsigmac                 C   s   t d|   S NzMATHEMATICAL BOLD SMALL %sr-   r/   r
   r
   r   r1   v   r2   c                 C   s   t d|   S )NzMATHEMATICAL BOLD CAPITAL %sr-   r/   r
   r
   r   r1   w   r2   c                 C   s   i | ]}|t |qS r
   )b)r7   r0   r
   r
   r   r9   y   s      c                 c   s   | ]}|t |fV  qd S N)Br6   r
   r
   r   r>   z   s     c                 C   s   t d|   S r@   r-   r/   r
   r
   r   r1   }   r2   c                 C   s   t d|   S )NzMATHEMATICAL BOLD CAPITAL  %sr-   r/   r
   r
   r   r1   ~   r2   c                 C   s   i | ]}|t |qS r
   r4   r6   r
   r
   r   r9      s      c                 c   s.   | ]&}|d    |dd  t|fV  qdS r:   r<   r6   r
   r
   r   r>      s     u   𝛓ZZEROZONEZTWOZTHREEZFOURZFIVEZSIXZSEVENZEIGHTZNINE)
0123456789z	PLUS SIGNMINUSzEQUALS SIGNzLEFT PARENTHESISzRIGHT PARENTHESISzLEFT SQUARE BRACKETzRIGHT SQUARE BRACKETzLEFT CURLY BRACKETzRIGHT CURLY BRACKETzCURLY BRACKETZ	SUMMATIONZINTEGRAL)+-=()[]{}{}sumintc                 C   s   t d|   S )NzLATIN SUBSCRIPT SMALL LETTER %sr-   letterr
   r
   r   r1      r2   c                 C   s   t d|   S )NzGREEK SUBSCRIPT SMALL LETTER %sr-   r[   r
   r
   r   r1      r2   c                 C   s   t dt|   S NzSUBSCRIPT %sr   
digit_2txtdigitr
   r
   r   r1      r2   c                 C   s   t dt|   S r]   r   	symb_2txtsymbr
   r
   r   r1      r2   c                 C   s   t d|   S )Nz!SUPERSCRIPT LATIN SMALL LETTER %sr-   r[   r
   r
   r   r1      r2   c                 C   s   t dt|   S NzSUPERSCRIPT %sr^   r`   r
   r
   r   r1      r2   c                 C   s   t dt|   S rf   rb   rd   r
   r
   r   r1      r2   Zaeioruvxhklmnpstin)betagammarhophichic                 C   s   g | ]}t |qS r
   )r*   )r7   ir
   r
   r   
<listcomp>   s     rn   
   z+-=()c                 C   s
   t | dS )Nu   ̊center_accentr(   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ⃜rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ⃛rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̈rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̇rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̌rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̆rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ́rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )N   ̀rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̃rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̂rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ̅rp   rr   r
   r
   r   r1      r2   c                 C   s
   t | dS )Nu   ⃗rp   rr   r
   r
   r   r1      r2   c                 C   s   | d S Nu   ′r
   rr   r
   r
   r   r1      r2   c                 C   s   | d S rt   r
   rr   r
   r
   r   r1      r2   c                 C   s   d|  d S )Nu   ‖r
   rr   r
   r
   r   r1      r2   c                 C   s   d|  d S )Nu   ⟨u   ⟩r
   rr   r
   r
   r   r1      r2   c                 C   s   d|  d S N|r
   rr   r
   r
   r   r1      r2   c                 C   s   d|  d S ru   r
   rr   r
   r
   r   r1      r2   )ZmathringZddddotZdddotZddotdotcheckZbreveacuteZgravetildeZhatbarZvecprimeZprmZnormavgabsmagc                 C   s   t dt|   S )Nz%s UPPER HOOKrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s UPPER CORNERrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s MIDDLE PIECErb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s EXTENSIONrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s LOWER HOOKrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s LOWER CORNERrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz%s TOPrb   rd   r
   r
   r   r1      r2   c                 C   s   t dt|   S )Nz	%s BOTTOMrb   rd   r
   r
   r   r1      r2   rR   rS   rT   rU   rX   rV   rW   zBOX DRAWINGS LIGHT VERTICALz$BOX DRAWINGS LIGHT UP AND HORIZONTALz&BOX DRAWINGS LIGHT DOWN AND HORIZONTALzLEFT PARENTHESIS EXTENSIONzRIGHT PARENTHESIS EXTENSIONzLEFT PARENTHESIS LOWER HOOKzRIGHT PARENTHESIS LOWER HOOKzLEFT PARENTHESIS UPPER HOOKzRIGHT PARENTHESIS UPPER HOOKz5BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFTz5BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT<>z
LEFT FLOORzRIGHT FLOORzLEFT CEILINGzRIGHT CEILINGrZ   zTOP HALF INTEGRALzBOTTOM HALF INTEGRAL_ZOVERLINEzN-ARY SUMMATIONzBOX DRAWINGS LIGHT HORIZONTALzLOW LINE)rR   rS   rT   rU   rV   rW   rv   ZTeeZUpTackzcorner_up_centre(_extz)_extz(_lower_hookz)_lower_hookz(_upper_hookz)_upper_hookr   r   lfloorrfloorlceilrceilrZ   rY   rP   r   /\)rv   r   r   rR   )rv   r   r   rS   ))rT   rT   rT   rT   ))rU   rU   rU   rU   ))rv   r   r   r   rV   ))rv   r   r   r   rW   rv   )r   r   )r   r   )z | z  /z/  rP   r   r   )rR   rS   rT   rU   rV   rW   rv   r   r   rZ   rP   r   r   r   c                 C   sX  |dkrt dtrt}nt}||  }d } } }}t|tsF|}n^t|d trf|d }	|d }n|}	|	d }z|	d }|	d }|	d }W n tk
r   Y nX |dkr|}|dkr|}|dkr|}|dk	r|d dkr|d7 }n|}|dkr|S g }
|d d }|d |d  }|
|g7 }
|
|g| 7 }
|
|g| 7 }
|
|g| 7 }
|
|g7 }
|
S )zVConstruct spatial object of given length.

    return: [] of equal-length strings
    r   zLength should be greater than 0Nr;         )
ValueErrorr   _xobj_unicode_xobj_ascii
isinstancetuple
IndexError)re   lengthZ_xobjZvinfoc1topZbotmidextZvlongresnextZnmidr
   r
   r   xobjE  sR    




r   c                 C   s   d t| |S )zBConstruct vertical object of a given height

       see: xobj
    
joinr   )re   heightr
   r
   r   r     s    c                 C   s   d t| |S )zCConstruct horizontal object of a given width

       see: xobj
    r   r   )re   widthr
   r
   r   r     s    zSQUARE ROOTz	CUBE ROOTzFOURTH ROOT)r   r      c                 C   s   t d|  S )NzVULGAR FRACTION %s)r   )txtr
   r
   r   r1     r2   zONE HALFz	ONE THIRDz
TWO THIRDSzONE QUARTERzTHREE QUARTERSz	ONE FIFTHz
TWO FIFTHSzTHREE FIFTHSzFOUR FIFTHSz	ONE SIXTHzFIVE SIXTHSz
ONE EIGHTHzTHREE EIGHTHSzFIVE EIGHTHSzSEVEN EIGHTHS))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   )rQ   rQ   )r   r   )r   r   <=zLESS-THAN OR EQUAL TO>=zGREATER-THAN OR EQUAL TO!=zNOT EQUAL TO):=r   )+=r   )-=r   )*=r   )/=r   )%=r   *zDOT OPERATOR-->zEM DASHzBLACK RIGHT-POINTING TRIANGLE==>zBOX DRAWINGS DOUBLE HORIZONTALzRING OPERATOR)z==r   r   r   r   r   r   r   r   r   r   r   r   r   r   .c                 C   s    t |  }tr|d S |d S dS )zget symbology for a 'character'r;   r   N)_xsymr   )symopr
   r
   r   r     s    zSCRIPT SMALL EzGREEK SMALL LETTER PIINFINITYzDOUBLE-STRUCK ITALIC SMALL Iz	EMPTY SETzDOUBLE-STRUCK CAPITAL NzSUBSCRIPT ZEROzDOUBLE-STRUCK CAPITAL ZzDOUBLE-STRUCK CAPITAL QzDOUBLE-STRUCK CAPITAL RzDOUBLE-STRUCK CAPITAL Cz$MATHEMATICAL DOUBLE-STRUCK CAPITAL Uz$MATHEMATICAL DOUBLE-STRUCK CAPITAL Iz%MATHEMATICAL DOUBLE-STRUCK DIGIT ZEROz$MATHEMATICAL DOUBLE-STRUCK DIGIT ONEzDOUBLE-STRUCK ITALIC SMALL DZUNIONz
ELEMENT OFzSMALL ELEMENT OFZ	INCREMENTZINTERSECTIONzMULTIPLICATION SIGNzN-ARY CIRCLED TIMES OPERATORzHORIZONTAL ELLIPSISModifier Letter Low RingEmptySequencezSUPERSCRIPT PLUS SIGNzSUPERSCRIPT MINUSZDAGGERzDEGREE SIGNzLOGICAL ANDz
LOGICAL ORzNOT SIGNZNORZNANDZXORzLEFT RIGHT DOUBLE ARROWz#LEFT RIGHT DOUBLE ARROW WITH STROKEzRIGHTWARDS ARROWzRIGHTWARDS ARROW FROM BARzRIGHTWARDS ARROW WITH STROKE)/ZExp1PiInfinityNegativeInfinityImaginaryUnitZEmptySetZNaturalsZ	Naturals0ZIntegersZ	RationalsZRealsZ	ComplexesZUniverseZIdentityMatrixZ
ZeroMatrixZ	OneMatrixZDifferentialUnionZ	ElementOfZSmallElementOfZSymmetricDifferenceZIntersectionZRingZMultiplicationZTensorProductZDotsr   r   ZSuperscriptPlusZSuperscriptMinusDaggerZDegreeAndOrNotZNorZNandZXorZEquivZNotEquivZImpliesZ
NotImpliesArrowZArrowFromBarZNotArrowZ	TautologyZContradictionc                 C   sL   t r4|dk	r*| dkr*|jd dkr*tdS t|  S n|dk	r@|S tddS )z'return pretty representation of an atomNr   Zimaginary_unitjzDOUBLE-STRUCK ITALIC SMALL Jzonly unicode)r   Z	_settingsr   r$   r   )Z	atom_namedefaultprinterr
   r
   r   pretty_atom  s    
r   c           
         s   t s| S t| \}}}fdd| }dd }||t}|dk	rR||t}nd}|dkr|r|dd fdd|D  7 }|r|d	d	 fd
d|D  7 }|S d|}d|}	d|||	gS )z(return pretty representation of a symbolc                    s   |rt | }n
t| }|d k	r&|S tt dd ddD ]F}|  |r<t| t|kr<t|  | d t|  |  S q<|rd	dd | D S | S )Nc                 S   s   t | S rB   len)kr
   r
   r   r1   9  r2   z2pretty_symbol.<locals>.translate.<locals>.<lambda>T)keyreverser   c                 S   s   g | ]}t | qS r
   )bold_unicoder7   cr
   r
   r   rn   =  s     z4pretty_symbol.<locals>.translate.<locals>.<listcomp>)
greek_bold_unicodegetr   sortedmodifier_dictkeyslowerendswithr   r   )r(   	bold_nameZgGr   )	translater
   r   r   2  s    
&z pretty_symbol.<locals>.translatec              
      sh   g }| D ]Z}  |}|d krXzd fdd|D }W n ttfk
rV   Y  d S X || q|S )Nr   c                    s   g | ]} | qS r
   r
   r   mappingr
   r   rn   J  s     z6pretty_symbol.<locals>.pretty_list.<locals>.<listcomp>)r   r   	TypeErrorr   append)r0   r   resultr(   prettyr
   r   r   pretty_listD  s    

z"pretty_symbol.<locals>.pretty_listNr   c                    s   g | ]}| qS r
   r
   r7   r(   r   r   r
   r   rn   Y  s     z!pretty_symbol.<locals>.<listcomp>__c                    s   g | ]}| qS r
   r
   r   r   r
   r   rn   [  s      r   )r   r   r   r   r   )
Z	symb_namer   r	   Zsupssubsr   Zpretty_supsZpretty_subsZsups_resultZsubs_resultr
   r   r   r   '  s&    

""

c                 C   s,   ddd}ddd}t r ||  S ||  S dS )a  
    Return a stylised drawing of the letter ``letter``, together with
    information on how to put annotations (super- and subscripts to the
    left and to the right) on it.

    See pretty.py functions _print_meijerg, _print_hyper on how to use this
    information.
    )r   r   r   r   u   ┌─
├─
╵)r   r   r   r;   u   ╭─╮
│╶┐
╰─╯)Fr=   )r   r   r   r   z _
|_
|
)r   r   r   r;   z __
/__
\_|N)r   )r\   Z
ucode_picsZ
ascii_picsr
   r
   r   r   d  s    
	rs   u   ͯu   ⃐u   ⃰c                 C   s   t | tkS )z,Check whether symbol is a unicode modifier. )ord_remove_combining)r   r
   r
   r   is_combining  s    r   c                 C   s4   t | d d }| d| }| |d }|| | S )a  
    Returns a string with accent inserted on the middle character. Useful to
    put combining accents on symbol names, including multi-character names.

    Parameters
    ==========

    string : string
        The string to place the accent in.
    accent : string
        The combining accent to insert

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Combining_character
    .. [2] https://en.wikipedia.org/wiki/Combining_Diacritical_Marks

    r   r;   Nr   )stringZaccentZmidpointZ	firstpartZ
secondpartr
   r
   r   rq     s    rq   c                 C   s   t | tS )zxUnicode combining symbols (modifiers) are not ever displayed as
    separate symbols and thus should not be counted
    )r   r   r   )liner
   r
   r   
line_width  s    r   c                 C   s   t dd | D S )av  
    Checks whether a string is subscriptable in unicode or not.

    Parameters
    ==========

    subscript: the string which needs to be checked

    Examples
    ========

    >>> from sympy.printing.pretty.pretty_symbology import is_subscriptable_in_unicode
    >>> is_subscriptable_in_unicode('abc')
    False
    >>> is_subscriptable_in_unicode('123')
    True

    c                 s   s   | ]}|t kV  qd S rB   )r   )r7   	characterr
   r
   r   r>     s     z.is_subscriptable_in_unicode.<locals>.<genexpr>)all)Z	subscriptr
   r
   r   is_subscriptable_in_unicode  s    r   r   c                 C   s@   | |krt d||  }|d }|| }|| }|| }||fS )z
    Return the padding strings necessary to center a string of
    wstring characters wide in a wtarget wide space.

    The line_width wstring should always be less or equal to wtarget
    or else a ValueError will be raised.
    znot enough space for stringr   )r   )ZwstringZwtargetfillcharZwdeltaZwleftZwrightleftrightr
   r
   r   r     s    c                 C   s$   t t| ||\}}d|| |gS )zhReturn a centered string of length determined by `line_width`
    that uses `fillchar` for padding.
    r   )r   r   r   )r   r   r   r   r   r
   r
   r   r     s    )N)NN)F)r   )r   )S__doc__r!   r   r   r   r   r   r   r   Zsympy.printing.conventionsr   Zsympy.core.alphabetsr   Zsympy.utilities.exceptionsr   __all__r   r   r)   r,   r5   r=   listZgreek_lettersindexr   updaterA   rC   r   gbGBZgreek_bold_lettersr   r_   rc   ZLSUBZGSUBZDSUBZSSUBZLSUPZDSUPZSSUPr   r   r0   glrangedr(   r   ZHUPZCUPZMIDZEXTZHLOZCLOZTOPZBOTr   r   r   r   r   rootZVFfracr   r   r$   r   r   r   dictfromkeysr   r   r   rq   r   r   r   r   r
   r
   r
   r   <module>   sF  	  5 D







9=
