U
    me                     @   s  d Z ddddddddd	d
dddddZ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 ed ed ed dZdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Z	eeeeeee	d(Z
d)d* Ze Zed ed+< ed ed,< ed ed-< ed ed.< ed ed/< ed ed0< ed ed1< ed ed2< ed d ed3< ed d ed4< ed d ed5< ed d ed6< ed d ed7< ed d ed8< ed ed9< ed ed:< ed ed;< ed ed<< ed ed=< d>d? Zd@S )Az>A module providing information about the necessity of brackets   
         #   (   2   <   F   d   i  $   %   &   )LambdaXorOrAnd
RelationalAddMulPowFuncNotAtomZ	BitwiseOrZ
BitwiseXorZ
BitwiseAndr   r   r   r   r   r   r   r   r   )Z
Equivalentr   ZImpliesr   r   r   r   r   ZSubr   ZFunctionNegativeInfinityZMatAddZMatPowZMatrixSolveZModZTensAddZTensMulZHadamardProductZHadamardPowerZKroneckerProductZEqualityZ
Unequalityc                 C   s   |   rtd S td S )Nr   r   )Zcould_extract_minus_sign
PRECEDENCEitem r   =/tmp/pip-unpacked-wheel-rdz2gdd2/sympy/printing/precedence.pyprecedence_Mul=   s    r   c                 C   s   | j dk rtd S td S )N    r   r   pr   r   r   r   r   precedence_RationalC   s    
r#   c                 C   s   | j dk rtd S td S Nr    r   r   r!   r   r   r   r   precedence_IntegerI   s    
r%   c                 C   s   | dk rt d S t d S r$   )r   r   r   r   r   precedence_FloatO   s    r&   c                 C   s<   | j rtd S | jr"t| dS | jr0td S td S d S )Nr   r   r   r   )Zis_generatorr   Z	is_ground
precedenceZcoeffZis_termr   r   r   r   precedence_PolyElementU   s    r(   c                 C   s    | j dkrt| jS td S d S )Nr   r   )Zdenomr(   Znumerr   r   r   r   r   precedence_FracElement`   s    

r)   c                 C   s   t | jd d S )Nr    g      ?)r'   argsr   r   r   r   precedence_UnevaluatedExprg   s    r+   )ZIntegerr   RationalZFloatZPolyElementZFracElementUnevaluatedExprc                 C   s~   t | dr| jS z| jj}W n tk
r8   td  Y S X |D ]6}|j}|tkr`t| |   S |tkr>t|   S q>td S )zZReturns the precedence of a given object.

    This is the precedence for StrPrinter.
    r'   r   )	hasattrr'   	__class____mro__AttributeErrorr   __name__PRECEDENCE_FUNCTIONSPRECEDENCE_VALUES)r   mroinr   r   r   r'   v   s    
r'   IntegralZSumZProductZLimitZ
DerivativeZTensorProductZ	TransposeZAdjointZDotZCrossZGradientZ
DivergenceZCurlZ	LaplacianUnionZIntersectionZ
ComplementZSymmetricDifferenceZ
ProductSetc                 C   sD   ddl m} t| |r$t| jd S | jj}|tkr<t| S t| S )zReturns the precedence of a given object according to the
    traditional rules of mathematics.

    This is the precedence for the LaTeX and pretty printer.
    r    )r-   )	Zsympy.core.exprr-   
isinstanceprecedence_traditionalr*   r/   r2   PRECEDENCE_TRADITIONALr'   )r   r-   r7   r   r   r   r;      s    
r;   N)__doc__r   r4   r   r#   r%   r&   r(   r)   r+   r3   r'   copyr<   r;   r   r   r   r   <module>   s   #