
    Pi#                         d dl Z d dlZ G d d          Z G d de          Z G d de          Z G d d	e          Z G d
 de          Zd Z G d de          Z	d Z
dS )    Nc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
Expressionc                     d S N selfs    d/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/expr/solver.py__init__zExpression.__init__   s        c                 $    t          | |g          S r   Sumr	   others     r
   __add__zExpression.__add__	   s    D%=!!!r   c                 $    t          || g          S r   r   r   s     r
   __radd__zExpression.__radd__   s    E4=!!!r   c                 $    t          | |g          S r   Productr   s     r
   __mul__zExpression.__mul__   s    e}%%%r   c                 $    t          || g          S r   r   r   s     r
   __rmul__zExpression.__rmul__   s    t}%%%r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r
   r   r      s_          " " "" " "& & && & & & &r   r   c                   4    e Zd Zd	dZd Zd Zd Zd Zd ZdS )
VariableTc                 d    t                               |            || _        || _        || _        d S r   )r   r   idnameinteger)r	   r!   r"   r#   s       r
   r   zVariable.__init__   s/    D!!!	r   c              #      K   | V  d S r   r   r   s    r
   __iter__zVariable.__iter__         




r   c                 L    t          |t                    o| j        |j        k    S r   
isinstancer   r!   r   s     r
   __eq__zVariable.__eq__    s     %**Btw%(/BBr   c                 *    t          | j                  S r   )hashr!   r   s    r
   __hash__zVariable.__hash__#   s    DG}}r   c                     | j          S r   r"   r   s    r
   __str__zVariable.__str__&   s    )~r   c                 B    t          j        | j        | j                  S )N)r#   )sympySymbolr!   r#   r   s    r
   r2   zVariable.sympy)   s    |DGT\::::r   N)T	r   r   r   r   r%   r*   r-   r0   r2   r   r   r
   r   r      sv             C C C    ; ; ; ; ;r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Constantc                 H    t                               |            || _        d S r   )r   r   value)r	   r8   s     r
   r   zConstant.__init__.   s!    D!!!


r   c              #      K   | V  d S r   r   r   s    r
   r%   zConstant.__iter__2   r&   r   c                 L    t          |t                    o| j        |j        k    S r   )r)   r6   r8   r   s     r
   r*   zConstant.__eq__5   s     %**HtzU[/HHr   c                 *    t          | j                  S r   )r,   r8   r   s    r
   r-   zConstant.__hash__8   s    DJr   c                 *    t          | j                  S r   )strr8   r   s    r
   r0   zConstant.__str__;   s    4:r   c                     | j         S r   r8   r   s    r
   r2   zConstant.sympy>   s
    zr   Nr4   r   r   r
   r6   r6   -   sq            I I I           r   r6   c                   H    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
dS )	r   c                    t          |           dk    rt          d          S t          |           dk    r| d         S t          d | D                       r&t          t          d | D                                 S t	          |           S )Nr      c              3   @   K   | ]}t          |t                    V  d S r   r)   r6   .0cs     r
   	<genexpr>zSum.maybe.<locals>.<genexpr>I   ,      ;;QAx((;;;;;;r   c              3   $   K   | ]}|j         V  d S r   r?   rE   s     r
   rH   zSum.maybe.<locals>.<genexpr>J   s$      ::A::::::r   )lenr6   allsumr   childrens    r
   maybez	Sum.maybeC   s    x==AA;;]]aA;;;(;;;;; 	!C:::::::;;;x== r   c                 \    t                               |            d |D             | _        d S )Nc                 ,    g | ]}t          |          S r   to_termrE   s     r
   
<listcomp>z Sum.__init__.<locals>.<listcomp>P       666666r   r   r   rO   r	   rO   s     r
   r   zSum.__init__N   /    D!!!66X666r   c              #   6   K   | V  | j         D ]
}|E d {V  d S r   rN   r	   childs     r
   r%   zSum.__iter__R   E      


] 	 	E	 	r   c                 L    t          |t                    o| j        |j        k    S r   )r)   r   rO   r   s     r
   r*   z
Sum.__eq__W   s     %%%I$-5>*IIr   c                 D    t          t          | j                            S r   r,   tuplerO   r   s    r
   r-   zSum.__hash__Z       E$-(()))r   c                 J    d                     d | j        D                       S )Nz + c              3   4   K   | ]}t          |          V  d S r   r=   rE   s     r
   rH   zSum.__str__.<locals>.<genexpr>^   (      88Q#a&&888888r   joinrO   r   s    r
   r0   zSum.__str__]   %    zz88$-888888r   c                 >    t          d | j        D                       S )Nc                 6    g | ]}|                                 S r   r2   rE   s     r
   rU   zSum.sympy.<locals>.<listcomp>a   s     555!AGGII555r   )rM   rO   r   s    r
   r2   z	Sum.sympy`   s!    55t}555666r   Nr   r   r   staticmethodrP   r   r%   r*   r-   r0   r2   r   r   r
   r   r   B   s        ! ! \!7 7 7  
J J J* * *9 9 97 7 7 7 7r   r   c                   H    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
dS )	r   c                 "   t          |           dk    rt          d          S t          |           dk    r| d         S t          d | D                       r+t          t          j        d | D                                 S t          |           S )Nr   rB   c              3   @   K   | ]}t          |t                    V  d S r   rD   rE   s     r
   rH   z Product.maybe.<locals>.<genexpr>k   rI   r   c              3   $   K   | ]}|j         V  d S r   r?   rE   s     r
   rH   z Product.maybe.<locals>.<genexpr>l   s$      %@%@!ag%@%@%@%@%@%@r   )rK   r6   rL   mathprodr   rN   s    r
   rP   zProduct.maybee   s    x==AA;;]]aA;;;(;;;;; 	%DI%@%@x%@%@%@@@AAA8$$$r   c                 \    t                               |            d |D             | _        d S )Nc                 ,    g | ]}t          |          S r   rS   rE   s     r
   rU   z$Product.__init__.<locals>.<listcomp>r   rV   r   rW   rX   s     r
   r   zProduct.__init__p   rY   r   c              #   6   K   | V  | j         D ]
}|E d {V  d S r   rN   r[   s     r
   r%   zProduct.__iter__t   r]   r   c                 L    t          |t                    o| j        |j        k    S r   )r)   r   rO   r   s     r
   r*   zProduct.__eq__y   s     %))Mdmu~.MMr   c                 D    t          t          | j                            S r   r`   r   s    r
   r-   zProduct.__hash__|   rb   r   c                 J    d                     d | j        D                       S )Nz * c              3   4   K   | ]}t          |          V  d S r   re   rE   s     r
   rH   z"Product.__str__.<locals>.<genexpr>   rf   r   rg   r   s    r
   r0   zProduct.__str__   ri   r   c                 H    t          j        d | j        D                       S )Nc                 6    g | ]}|                                 S r   rl   rE   s     r
   rU   z!Product.sympy.<locals>.<listcomp>   s     ;;;!''));;;r   )rs   rt   rO   r   s    r
   r2   zProduct.sympy   s#    y;;T];;;<<<r   Nrm   r   r   r
   r   r   d   s        % % \%7 7 7  
N N N* * *9 9 9= = = = =r   r   c                     t          | t                    rt          |           S t          | t                    st	          dt          |                      | S )NzExpected Expression, got )r)   intr6   r   	TypeErrortype)xs    r
   rT   rT      sU    !S {{!Z(( 	CAQAABBBr   c                        e Zd Z fdZ xZS )SolveExceptionc                 J    t                                          |           d S r   )superr   )r	   message	__class__s     r
   r   zSolveException.__init__   s!    !!!!!r   )r   r   r   r   __classcell__)r   s   @r
   r   r      s8        " " " " " " " " "r   r   c                    d | D             } d | D             } t          t          |                     } d | D             i | D ]\  }}t          |t                    r{t          |t                    rf                    |j        |j                  |j        k    r-t          d|j                 |j        h d|j	         d          |j        |j        <   t          |t                    r|t          |t                    rg                    |j        |j                  |j        k    r-t          d|j                 |j        h d|j	         d          |j        |j        <   't          |t                    rEt          |t                    r0|j        |j        k    r t          d|j         d|j         d          d	 D             }| D ]|\  }}t          |t                    rbt          |t                    rM|j        |v r	|j        |v sJ ||j                 }||j                 }|D ]}|||<   |
                    |           }i d
 |                                D                                             D ]}t          fd|D                       rfd|D             }t          |          dk    rffd|D             }	t          |	          dk    r0t          d| dt          t          |	                     d          t          d| d|	           t	          t          t          |                              }
n/t          dt          |           dfd|D                        }
|D ]}|vsJ |
|<   fdg }| D ]\  }} |          } |          }t          |t                    rFt          |t                    r1|j        |j        k    r t          d|j         d|j         d          v||k    r|                    ||f           |} i }t          |           dk    rd | D             }t#          d |D                       ri }nt%          j        |dd          }|g k    ri }nt          |t(                    rt          |          dk    r|\  }t          |          dk    rt          d          t          |          dk    rt          d          t          t          |                    }d t+          |          D             }nt          d          i }                                D ]a\  }}
t          |
t                    r|
j        ||<   %t          |
t                    r|
j        |v r||
j                 ||<   Tt/                      |S )Nc                 P    g | ]#\  }}t          |          t          |          f$S r   rS   rF   t1t2s      r
   rU   zsolve.<locals>.<listcomp>   s-    DDDB'"++wr{{+DDDr   c                 (    g | ]\  }}||k    ||fS r   r   r   s      r
   rU   zsolve.<locals>.<listcomp>   s%    >>>fb"R2XX"bXXXr   c                 \    i | ])}|D ]$}|D ]}t          |t                    |j        | %*S r   r(   )rF   termstermvs       r
   
<dictcomp>zsolve.<locals>.<dictcomp>   se       5 +/$ =>*UVX`JaJa	a    r   zFound contradictory values z for expression ''z != z in input equationc                     i | ]}||hS r   r   )rF   r   s     r
   r   zsolve.<locals>.<dictcomp>   s    )))!q1#)))r   c                 .    i | ]}t          |          |S r   )r!   )rF   ss     r
   r   zsolve.<locals>.<dictcomp>   s     6662a55!666r   c              3       K   | ]}|v V  	d S r   r   rF   n	constantss     r
   rH   zsolve.<locals>.<genexpr>   s'      ..!qI~......r   c                 (    h | ]}|v |         S r   r   r   s     r
   	<setcomp>zsolve.<locals>.<setcomp>   s"    NNNqI~~y|~~~r   rB   c                 *    h | ]}|         j         S r   r/   rF   a	variabless     r
   r   zsolve.<locals>.<setcomp>   s     ;;;q1*;;;r   z for equivalent expressions zClass-zEquivalent expressions c                 *    h | ]}|         j         S r   r/   r   s     r
   r   zsolve.<locals>.<setcomp>   s     +N+N+N!IaL,=+N+N+Nr   c                    t          | t                    r| j        v r| j                 S t          | t                    r| S t          | t                    r+t                              fd| j        D                       S t          | t                    r+t                              fd| j        D                       S t                      )Nc                 &    g | ]} |          S r   r   rF   rG   replaces     r
   rU   z*solve.<locals>.replace.<locals>.<listcomp>   s!    ===Qggajj===r   c                 &    g | ]} |          S r   r   r   s     r
   rU   z*solve.<locals>.replace.<locals>.<listcomp>   s!    !A!A!A''!**!A!A!Ar   )	r)   r   r!   r6   r   rP   rO   r   AssertionError)torigvar_to_solvevarr   s    r
   r   zsolve.<locals>.replace   s    a"" 		#qt/B'B'B&qt,,8$$ 	#H3 	#99====!*===>>>7## 	#==!A!A!A!Aaj!A!A!ABBB """r   z for same equivalence classr   c                     g | ]>\  }}t          j        |                                 |                                           ?S r   )r2   Eqr   s      r
   rU   zsolve.<locals>.<listcomp>   s8    TTTB58BHHJJ

;;TTTr   c              3   B   K   | ]}|j         ot          |          V  d S r   )
is_Booleanbool)rF   eqs     r
   rH   zsolve.<locals>.<genexpr>   s/      DDbr})bDDDDDDr   T)setmanual   zSympy returned no solutionsz*Sympy returned multiple possible solutionsc                 \    i | ])\  }}|j         t          |          t          |          *S r   )	is_numberr=   r   )rF   kr   s      r
   r   zsolve.<locals>.<dictcomp>
  sC     ! ! !+/1aPQP[!AA! ! !r   z Sympy returned unexpected result)listr   r)   r   r6   getr!   r8   r   r"   addvaluesanyrK   nextiterappendrL   r2   solvera   zipitemsr   )	equationsr   r   classesset1set2t_ideclassclass_constantsnamesr   r   
equations2t1ot2o	solutionssympy_equationsorig_solutionsr   r   r   r   r   s                      @@@@r
   r   r      s   DD)DDDI>>	>>>IS^^$$I &  I I  Bb(## 	
2x(@(@ 	}}RUBH--99$.Ibe4Dbh3O . .#%7. . .    "xIbeH%% 	*R*B*B 	}}RUBH--99$.Ibe4Dbh3O . .#%7. . .    "xIbeH%% 	*R*B*B 	x28##$\"(\\\\\  
 *)y)))G  Bb(## 	
2x(@(@ 	5G##(8(8(8825>D25>D   $ 66W^^%5%5666==?? ' '....v..... 	NNNNVNNNO?##q((;;;;F;;;u::??(1o 1 1 e--1 1 1  
 )/o / /',/ /   d?334455AA %F%%Q+N+N+N+Nv+N+N+NQQ A  	' 	'A/////%&""	'

# 
# 
# 
# 
# 
# J 
( 
(SWS\\WS\\b(## 	(
2x(@(@ 	(x28##$1"( 1 1 1 1 1   $
 2XXr2h'''I I
9~~TT)TTTDDODDDDD 	IIIOdKKKIB		Iu-- I#i..A2E2E'0$	9y>>Q&&()FGGG^^a''()UVVV $T)__ 5 5I! !36y)3L3L! ! !II %%GHHH N#))++ # #1a"" 	# !N18$$ 	#ty  $-adOq! """r   )r2   rs   r   r   r6   r   r   rT   	Exceptionr   r   r   r   r
   <module>r      s@    & & & & & & & &"; ; ; ; ;z ; ; ;.    z   *7 7 7 7 7* 7 7 7D= = = = =j = = =D  " " " " "Y " " "
G G G G Gr   