B
    ™‘[E  ã               @   s  d Z ddlmZmZ ddlmZ 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 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d-d.„ Zd/S )0z>A module providing information about the necessity of bracketsé    )Úprint_functionÚdivision)Ú_coeff_isnegé   é
   é   é   é#   é(   é2   é<   éF   éd   iè  é$   é&   )ZLambdaÚXorÚOrÚAndÚ
RelationalÚAddÚMulÚPowÚFuncÚNotÚAtomZ	BitwiseOrZ
BitwiseAndr   r   r   r   r   r   r   r   r   )Z
Equivalentr   ZImpliesr   r   r   r   r   ZSubr   ZFunctionZNegativeInfinityZMatAddZMatMulZMatPowZHadamardProductZKroneckerProductZEqualityZ
Unequalityc             C   s   t | ƒrtd S td S )Nr   r   )r   Ú
PRECEDENCE)Úitem© r   ú8lib/python3.7/site-packages/sympy/printing/precedence.pyÚprecedence_Mul9   s    r   c             C   s   | j dk rtd S td S )Nr   r   r   )Úpr   )r   r   r   r   Úprecedence_Rational?   s    
r!   c             C   s   | j dk rtd S td S )Nr   r   r   )r    r   )r   r   r   r   Úprecedence_IntegerE   s    
r"   c             C   s   | dk rt d S t d S )Nr   r   r   )r   )r   r   r   r   Úprecedence_FloatK   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_term)r   r   r   r   Úprecedence_PolyElementQ   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 ƒS )Nr   )r$   Úargs)r   r   r   r   Úprecedence_UnevaluatedExprc   s    r(   )ZIntegerr   ZRationalZFloatZPolyElementZFracElementÚUnevaluatedExprc             C   sv   t | dƒr| jS y| jj}W n tk
r4   td S X x6|D ].}|j}|tkrZt| | ƒS |tkr<t| S q<W td S )z3
    Returns the precedence of a given object.
    r$   r   )	Úhasattrr$   Ú	__class__Ú__mro__ÚAttributeErrorr   Ú__name__ÚPRECEDENCE_FUNCTIONSÚPRECEDENCE_VALUES)r   ÚmroÚiÚnr   r   r   r$   r   s    


r$   c             C   sŽ   ddl m}m}m}m}m} ddlm} ddlm	} t
| ||||||fƒrRtd S | jjdkrjtd d S t
| |ƒr‚t| jd ƒS t| ƒS dS )	z¢
    Returns the precedence of a given object according to the traditional rules
    of mathematics. This is the precedence for the LaTeX and pretty printer.
    r   )ÚIntegralÚSumÚProductÚLimitÚ
Derivative)r)   )ÚTensorProductr   )ZDotZCrossZGradientZ
DivergenceZCurlr   N)Zsympyr4   r5   r6   r7   r8   Zsympy.core.exprr)   Zsympy.tensor.functionsr9   Ú
isinstancer   r+   r.   Úprecedence_traditionalr'   r$   )r   r4   r5   r6   r7   r8   r)   r9   r   r   r   r;   …   s    
r;   N)Ú__doc__Z
__future__r   r   Zsympy.core.functionr   r   r0   r   r!   r"   r#   r%   r&   r(   r/   r$   r;   r   r   r   r   Ú<module>   sd   