�
��g�� � �Z � d dl mZ d dlmZ d dlmZmZ d dlmZ d dl m
Z
d dlmZ d dl
mZmZ d dlmZ d d lmZ d d
lmZ ddlmZ dd
lmZmZmZmZmZmZ eefd�Zedfd�Z d� Z!d� Z"d%d�Z#defd�Z$d%d�Z%d%d�Z&d� Z'd� Z(d&d�Z)efd�Z*d� Z+edfd�Z,ed � � � Z-d!� Z.d"� Z/d%d#�Z0d$� Z1dS )'� )�FunctionType)�cacheit)�Float�Integer)�S)�uniquely_named_symbol)�Mul)�PurePoly�cancel)�nC)�DomainMatrix)�DDM� )�NonSquareMatrixError)�_get_intermediate_simp�_get_intermediate_simp_bool�_iszero�_is_zero_after_expand_mul�_dotprodsimp� _simplifyc �4 � g }t | � � } t d� | D � � � � r�t d� | D � � � � rld� | D � � }t |� � } ||� � r%|dk rd� t | � � D � � }ddd|fS |� |� � }|| | d|fS g }t | � � D ]3\ }} || � � }
|
dk r|| d|fc S |� |
� � �4t |� � rddd|fS t | � � D ]R\ }} || �� || � � } ||� � }
|
dv r|� ||f� � |
dk r||d|fc S |
||<