U
    ;qLeR                     @   sP   d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 dd Zdd	 Zd
S )zS Optimizations of the expression tree representation for better CSE
opportunities.
    )AddBasicMul)S)default_sort_key)preorder_traversalc                 C   s   dd |  tD }i }t }|D ]0}| }|jr>|| q"ttj|g||< q"| 	|} t
| tri }t|  ttdD ]F}||krq~||kr|| ||< q~| r~ttjtj| g||< q~| 	|} | S )zD Replace y - x with -(x - y) if -1 can be extracted from y - x.
    c                 S   s   g | ]}|  r|qS  )could_extract_minus_sign).0ar   r   n/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/sympy/simplify/cse_opts.py
<listcomp>   s      zsub_pre.<locals>.<listcomp>)key)atomsr   setis_Muladdr   
_from_argsr   NegativeOnexreplace
isinstancer   sortedr   r	   One)eZaddsrepsignorer   nanegsr   r   r   sub_pre
   s*    



r   c              	   C   s|   g }t | D ]N}t|tr|jd tjkr|jd tjkr||t|jdd  f q|D ]\}}| 	||i} q`| S )z Replace 1*-1*x with -x.
    r         N)
r   r   r   argsr   r   r   appendr   r   )r   replacementsnodereplacementr   r   r   sub_post)   s    
"r&   N)__doc__
sympy.corer   r   r   Zsympy.core.singletonr   sympy.core.sortingr   sympy.core.traversalr   r   r&   r   r   r   r   <module>   s   