o
    Ei                      @   sZ   d dl mZmZmZ ddlZddlZdd Zdd ZG dd	 d	Z	d
d Z
	dddZdS )   )stage1stage2stage3    Nc                 C   sL   t | tjr|  fS t | tjtjfrt| fS t | tjr$t	| j
S d S N)
isinstancer   
Expression	expansionr   r   lennpndarraytupleshape)expr r   K/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einx/expr/util.py_get_expansion   s   


r   c              
   C   s   | d u st | ttjtjtjfr| S t | tjrn.| g ks!| dkr*t| 	d} nzt| } W n t
yF } z	td|  d|d }~ww t| jtjsWtd|  dddd |  D } | S )	Nr   int32zInvalid expression ''z', must be integers c                 S   s   g | ]}t |qS r   str.0ir   r   r   
<listcomp>"   s    z_input_expr.<locals>.<listcomp>)r   r   r   r   r   r   r   r   asarrayastype	Exception
ValueError
issubdtypedtypeintegerjoinflatten)r   er   r   r   _input_expr   s$   
r&   c                   @   s   e Zd ZdddZdd ZdS )EquationNr   c                 C   sJ   t || _t || _t|| _t|| _|| _|d u r d | _d S || _d S r   )r&   expr1expr2r   
expansion1
expansion2depth1depth2)selfr(   r)   r,   r-   r   r   r   __init__'   s   



zEquation.__init__c                 C   s    | j  d| j  d| j dS )N =  (expansion=z at )r   valuetolistr	   depth)r.   r   r   r   __repr__/   s    zEquation.__repr__)Nr   r   )__name__
__module____qualname__r/   r5   r   r   r   r   r'   &   s    
r'   c                 C   sF   | d u rdS t | tjrtt|  S t | trtt| S t| S )NNone)r   r   r   r   r   r3   list)lr   r   r   _to_str4   s   
r<   TFc                 C   s0  t dd | D rtddd | D }dd | D }dd | D }dd | D }	d	d | D }
d
d | D }|rntd t||||	|
|D ]'\}}}}}}tdt| dt| d| dt| dt| d| d qFdd |D }dd |D }dd t||D }dd t|	|D }	|rtd t||||	|
|D ]'\}}}}}}tdt| dt| d| dt| dt| d| d qt||||	|
|\}}|rtd t||D ]\}}tdt| dt|  q|r/tj|| ||d}|d t| |t|d  }}|r/td t||D ]\}}tdt| dt|  q|d urCt| ||| |||d |dS t	||\}}|rtd t||D ]>\}}|d u sn|d u sn|j
|j
ksnJ |d urv|j
n|j
}ddd |D }tdt| dt| d|  qW|S )Nc                 s   s    | ]	}t |t V  qd S r   )r   r'   )r   cr   r   r   	<genexpr>B   s    zsolve.<locals>.<genexpr>z&All arguments must be of type Equationc                 S      g | ]}|j qS r   )r(   r   tr   r   r   r   E       zsolve.<locals>.<listcomp>c                 S   r?   r   )r)   r@   r   r   r   r   F   rB   c                 S   r?   r   )r*   r@   r   r   r   r   G   rB   c                 S   r?   r   )r+   r@   r   r   r   r   H   rB   c                 S   r?   r   )r,   r@   r   r   r   r   I   rB   c                 S   r?   r   )r-   r@   r   r   r   r   J   rB   zStage0:z    r1   z
 at depth=z) = )c                 S   $   g | ]}t |trt|n|qS r   r   r   r   	parse_argr   r   r   r   r   r   V      $ c                 S   rD   r   rE   rG   r   r   r   r   W   rH   c                 S   $   g | ]\}}|d ur|nt |qS r   r   r   r	   r   r   r   r   r   Y       c                 S   rI   r   rJ   rK   r   r   r   r   ]   rL   zStage1:zStage2:r0   )
cse_concatcse_in_markerszStage2.CSE:)cserM   rN   after_stage2verbosezStage3:r   c                 s   s    | ]}t |V  qd S r   r   r   r   r   r   r>      s    )anyr   printzipr<   r   solverO   r
   r   r   r#   )	equationsrO   rM   rN   rP   rQ   exprs1exprs2expansions1expansions2depths1depths2r(   r)   r*   r+   r,   r-   exprsr   r   r   r   rU   ?   s   " 
	&&rU   )TTFNF) r   r   r   numpyr   einxr   r&   r'   r<   rU   r   r   r   r   <module>   s    