
    Xh                        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 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  ed          \  ZZd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(dS )    )Product)Sum)
DerivativeFunction)IntegerRationalFloatoo)Rel)symbols)sin)Integral)Order)
precedence
PRECEDENCEzx,yc                      t          t          t          z             t          d         k    sJ t          t          t          z  dz             t          d         k    sJ d S )NAdd   r   xyr        v/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/printing/tests/test_precedence.pytest_Addr      sP    a!e
5 11111acAg*U"3333333r   c                  j    t          t          t                              t          d         k    sJ d S )NFunc)r   r   r   r   r   r   r   test_Functionr      s,    c!ffF!3333333r   c                  v    t          t          t          t                              t          d         k    sJ d S NAtom)r   r   r   r   r   r   r   r   test_Derivativer"      s0    jA&&'':f+=======r   c                  v    t          t          t          t                              t          d         k    sJ d S r    )r   r   r   r   r   r   r   r   test_Integralr$      s.    hq!nn%%F);;;;;;;r   c                      t          t          t          z            t          d         k    sJ t          t           t          z            t          d         k    sJ d S )NMulr   r   r   r   r   test_Mulr'      sL    ac??j/////qbdz%0000000r   c                  p   t          t          d                    t          d         k    sJ t          t          d                    t          d         k    sJ t          t          d                    t          d         k    sJ t          t          d                    t          d         k    sJ t          t          dd                    t          d	         k    sJ t          t          d
d                    t          d         k    sJ t          t	          d                    t          d         k    sJ t          t	          d
                    t          d         k    sJ t          t
                    t          d         k    sJ t          t
                     t          d         k    sJ d S )Nr   r!   r   r   
         r&   )r   r   r   r   r	   r
   r   r   r   test_Numberr.   $   sf   gajj!!Z%77777gajj!!Z%77777gbkk""j&77777gbkk""j&88888hq!nn%%E):::::hr1oo&&*U*;;;;;eAhh:f#55555eBii  Ju$55555b>>Z/////rc??j///////r   c                  j    t          t          t                              t          d         k    sJ d S r    )r   r   r   r   r   r   r   
test_Orderr0   1   s,    eAhh:f#5555555r   c                     t          t          t          z            t          d         k    sJ t          t          t          z             t          d         k    sJ t          t          t           z            t          d         k    sJ d S )NPowr   r   r   r   r   test_Powr3   5   sr    adz%00000q!te
5 11111a!e
5 1111111r   c            	          t          t          t          t          t          t          dz   f                    t          d         k    sJ d S Nr   r!   )r   r   r   r   r   r   r   r   test_Productr6   ;   s:    ga!QA//00Jv4FFFFFFFr   c                      t          t          t          t          z   t          d                    t          d         k    sJ d S )N<
Relational)r   r   r   r   r   r   r   r   test_Relationalr:   ?   s6    c!a%C(())Z-EEEEEEEr   c            	          t          t          t          t          t          t          dz   f                    t          d         k    sJ d S r5   )r   r   r   r   r   r   r   r   test_Sumr<   C   s:    c!aAE]++,,
60BBBBBBBr   c                  P    t          t                    t          d         k    sJ d S r    )r   r   r   r   r   r   test_Symbolr>   G   s$    a==Jv.......r   c                     t          t          t          z            t          t          t          z            k    sJ t          t                     t          t          t          z            k    sJ t          t          t          z             t          t          t          z            k    sJ t          t          t          z             t          t          t          z            k    sJ t          t          t          z            t          t          t          z            k    sJ t          t          t          z            t          t          t          z            k    sJ t          t                     t          t          t          z            k    sJ t          t                     t          t          t          z
            k    sJ t          t          t          z            t          d         k    sJ t          t          t          z            t          d         k    sJ t          t                     t          d         k    sJ d S )NAndOrNotr   r   r   r   test_And_OrrC   K   s   a!ez!a%000000qb>>Jq1u------a!ez!a%000000a!ez!a%000000ac??ZA......ac??ZA......qb>>JqsOO++++qb>>Jq1u------a!e
5 11111a!e
4 00000qb>>Z.......r   c                       G d dt                      G d dt                     fd} fd} |               |             dS )a_  
    Test cases for custom functions with different precedence values,
    specifically handling:
    1. Functions with precedence < PRECEDENCE["Mul"] (50)
    2. Functions with precedence = Func (70)

    Key distinction:
    1. Lower precedence functions (45) need parentheses: -2*(x F y)
    2. Higher precedence functions (70) don't: -2*x F y
    c                   *    e Zd Zed         dz
  Zd ZdS )Btest_custom_function_precedence_comparison.<locals>.LowPrecedenceFr&   r+   c                     |                     | j        d                    d|                     | j        d                    S Nr   z F r   _printargsselfprinters     r   	_sympystrzLtest_custom_function_precedence_comparison.<locals>.LowPrecedenceF._sympystri   ;    nnTYq\22UUw~~diPQl7S7SUUUr   N__name__
__module____qualname__r   r   rO   r   r   r   LowPrecedenceFrF   g   s7        &*
	V 	V 	V 	V 	Vr   rU   c                   $    e Zd Zed         Zd ZdS )Ctest_custom_function_precedence_comparison.<locals>.HighPrecedenceFr   c                     |                     | j        d                    d|                     | j        d                    S rH   rI   rL   s     r   rO   zMtest_custom_function_precedence_comparison.<locals>.HighPrecedenceF._sympystrn   rP   r   NrQ   r   r   r   HighPrecedenceFrW   l   s2        '
	V 	V 	V 	V 	Vr   rY   c                      d t           t                    z  } t          |           dk    sJ d t           t                    z  }t          |          dk    sJ d S )Nr,   z	2*(x F y)z
-2*(x F y)r   r   str)expr1expr2rU   s     r   test_low_precedencezGtest_custom_function_precedence_comparison.<locals>.test_low_precedenceq   sc    NN1a(((5zz[((((^^Aq)))5zz\))))))r   c                      d t           t                    z  } t          |           dk    sJ d t           t                    z  }t          |          dk    sJ d S )Nr,   z2*x F yr[   z-2*x F yr\   )r^   r_   rY   s     r   test_high_precedencezHtest_custom_function_precedence_comparison.<locals>.test_high_precedencex   sc    OOAq)))5zzY&&&&__Q***5zzZ''''''r   N)r   )r`   rb   rY   rU   s     @@r   *test_custom_function_precedence_comparisonrc   \   s    V V V V V V V V
V V V V V( V V V
* * * * *( ( ( ( ( r   N))sympy.concrete.productsr   sympy.concrete.summationsr   sympy.core.functionr   r   sympy.core.numbersr   r   r	   r
   sympy.core.relationalr   sympy.core.symbolr   sympy.functionsr   sympy.integrals.integralsr   sympy.series.orderr   sympy.printing.precedencer   r   r   r   r   r   r"   r$   r'   r.   r0   r3   r6   r:   r<   r>   rC   rc   r   r   r   <module>rn      s   + + + + + + ) ) ) ) ) ) 4 4 4 4 4 4 4 4 ; ; ; ; ; ; ; ; ; ; ; ; % % % % % % % % % % % %       . . . . . . $ $ $ $ $ $ < < < < < < < <wu~~14 4 4
4 4 4> > >< < <1 1 1

0 
0 
06 6 62 2 2G G GF F FC C C/ / // / /"$ $ $ $ $r   