o
    *ήcY                     @   s   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 d dlmZ d dlmZmZ d d	l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 d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dedefddZ(dS )    )KroneckerProduct)Basic)Lambda)Mul)Integer)Pow)S)Dummysymbols)HadamardPowerHadamardProduct)MatAdd)MatMul)MatPow)Trace)	Transpose)
MatrixExpr)ArrayElementwiseApplyFunc_array_tensor_product_array_contraction_array_diagonal
_array_add_permute_dimsReshapeexprreturnc                    s$  t | trZg }g }| jD ]}t |tr|| q|t| qdd tt|d D }|r4t| nt	j
}|dkrEtdd |D  }nt|gdd |D R  }t|g|R  S t | tritdd | jD  S t | trztt| jd ddgS t | trt| j}t|dt|jd fS t | trtdd | jD  S t | trt| j | jdkd	krt fd
dt| jD  S | S t | trt| j | jjd	krtdtd}tt||| j t S | jdkd	krtt fddt| jD S | S t | tr-tdd | jD  }	dd tt| jD dd tt| jD g}
t|	g|
R  S t | t ra| j\ }t |t!rS|dkrStt fddt|D S td}tt|||  S t | t"rdd | jD }dd tt|D dd tt|D  }t#tt| || jS | S )Nc                 S   s$   g | ]}d | d d | d  fqS        .0ir   r   Z/tmp/pip-target-vg8gfxp4/lib/python/sympy/tensor/array/expressions/conv_matrix_to_array.py
<listcomp>   s   $ z+convert_matrix_to_array.<locals>.<listcomp>r   c                 S      g | ]}t |qS r   convert_matrix_to_arrayr!   argr   r   r#   r$   "       c                 S   r%   r   r&   r(   r   r   r#   r$   &   r*   c                 S   r%   r   r&   r(   r   r   r#   r$   -   r*   r   c                 S   r%   r   r&   r    r   r   r#   r$   7   r*   Tc                    s   g | ]} qS r   r   r    baser   r#   r$   ;   s    b)clsc                 3       | ]} V  qd S Nr   r    r+   r   r#   	<genexpr>D       z*convert_matrix_to_array.<locals>.<genexpr>c                 S   r%   r   r&   r(   r   r   r#   r$   H   r*   c                 S      g | ]}d | qS r   r   r    r   r   r#   r$   I   r*   c                 S      g | ]}d | d qS r   r   r    r   r   r#   r$   I       c                 3   r/   r0   r   r    r+   r   r#   r1   N   r2   dc                 S   r%   r   r&   r(   r   r   r#   r$   S   r*   c                 S   r3   r4   r   r    r   r   r#   r$   T   r*   c                 S   r5   r   r   r    r   r   r#   r$   T   r6   )$
isinstancer   argsr   appendr'   rangelenr   r   Oner   r   r   r   r   r   r)   shaper   r   r,   expr   
is_Integerr
   r	   r   r   fromiterr   r   r   r   r   r   )r   args_nonmatr9   r)   contractionsscalartprod
inner_exprr-   tpdiagr?   r7   kp_argspermutationr   r+   r#   r'      s   











"0
 ,r'   N))sympyr   sympy.core.basicr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr	   r
   #sympy.matrices.expressions.hadamardr   r   !sympy.matrices.expressions.mataddr   !sympy.matrices.expressions.matmulr   !sympy.matrices.expressions.matpowr    sympy.matrices.expressions.tracer   $sympy.matrices.expressions.transposer   "sympy.matrices.expressions.matexprr   0sympy.tensor.array.expressions.array_expressionsr   r   r   r   r   r   r   r'   r   r   r   r#   <module>   s"    $