�
��g�g � � � d dl mZ d dlmZ d dlmZ d dlmZmZm Z d dl
mZmZm
Z
mZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d d lmZ d d
lmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d d
l*m+Z+ dddefd�Z,dd�Z- e
d� � Z.d� Z/dS )� )�defaultdict)�reduce)�prod)�
expand_log� count_ops�_coeff_isneg) �sympify�Basic�Dummy�S�Add�Mul�Pow�
expand_mul�factor_terms)�ordered�default_sort_key)�Integer�Rational)�_keep_coeff)� Transform)� exp_polar�exp�log�root�polarify�
unpolarify)�MatrixSymbol)�lcm�gcd)�multiplicityF�allc � �����4�5�6�7�8�9� ����fd��9t | � � } t | t � � r<t | t � � s'| j s | t d� � t d� � fv r| S �s| j s| j r)t | j vr | j
�9fd�| j D � � � } | j r �9| t z d�� � t z S | j s| S �dv �rit t � � }g }g }t j }| j D �]$} | j r|| z }�| j rt# | � � } | j ru| � � � \ }
}�r�9fd�|
|fD � � \ }
}|
j st |
t( � � r|
|z t j }}
||
� |� � ��|rk|d � � � \ }}
| � � � \ }}||k r1|
j r*|j r#t- |t/ |
|� � � � |d <