
    QiA                        d dl Z d dlZd dlmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d d
l4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl=m?Z?m@Z@mAZA d dlmBZBmCZC d dlmDZDmEZEmFZF  e7d          ZG eddd          ZH eddd          ZI eddd          ZJ eddd          ZK ed          \  ZLZMZNZOeG>d  ePd dd          D             ZQeGR                    eQeGjS                  ZT e	eQ          ZUd ZVd fdZWd fdZXd  ZYd! ZZd" Z[d# Z\d$ Z]d% Z^d& Z_d' Z`d( Zad) Zbd* Zcd+ Zdd, Zed- ZfdS ).    N)symbols
Derivative)
torch_code)eyeMatrixSymbolMatrix)	NDimArray)ArrayTensorProductArrayAddPermuteDimsArrayDiagonal_CodegenArrayAbstract)lambdify)EqNeGeGtLeLt)Absceilingexpfloorsignsinasincosacostanatanatan2coshacoshsinhasinhtanhatanhreimargerfloggammasqrt)skip)import_module)DeterminantHadamardProductInverseTrace)
randMatrix)Identity
ZeroMatrix	OneMatrix)	conjugateI)	Heavisidegamma	polygammatorchM   NPQzx y z tc           	      N    g | ]"}t          t          ||d z                       #S )r?   )listrange.0is     w/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/printing/tests/test_torch.py
<listcomp>rJ   &   s,    
9
9
9Q4aQ  
9
9
9    	   dtypec                    t          | |d          }d | D             }d |D             } || }|                    t          t          | |                                                              }t          |t                    r|                                }t          |d          rv|j        rot          |t          j
                  rU|                                dk    r=|                                }t          |          }t          ||z
            dk     sJ d S |j        st          |t                     rYt                              |                                t          j                  }t                              ||d          sJ d S t+          d	t-          |           d
t-          |                     )Nr=   c                 Z    g | ](}t          |j        d          |j        d                   )S )r      )r4   shaperF   s     rI   rJ   z)_compare_torch_matrix.<locals>.<listcomp>.   s.    MMMaz!'!*agaj99MMMrK   c                 ~    g | ]:}t                               |                                t           j                   ;S rM   )r=   tensortolistfloat64rF   s     rI   rJ   z)_compare_torch_matrix.<locals>.<listcomp>/   s2    ___!QXXZZu}EE___rK   	is_numberr   ư>rM   atolzCannot compare z with )r   subsdictzipdoit
isinstancer   hasattrrX   r=   Tensordimitemfloatabs	is_Matrixr	   rU   rV   rW   allclose	TypeErrortype)	variablesexprfrandom_matricesrandom_variablesres          rI   _compare_torch_matrixrr   +   s   D'**AMM9MMMO_____	A		$s9o667788==??A!*++ FFHHq+ 1; a&& 	15577a<<AaAq1u::$$$$F{ DjI.. DLL5=L99~~a~.......B$q''BBaBBCCCrK   c                  ,    t          j        dd          S N   randomuniform rK   rI   <lambda>r{   D   s    v~b!7L7L rK   c                 x   t          | |d          }fd| D             }d |D             } || }t          |t          j                  r|                                }|                    t          t          | |                                                              }t          ||z
            dk     sJ d S )Nr=   c                 $    g | ]}             S rz   rz   rG   vrngs     rI   rJ   z)_compare_torch_scalar.<locals>.<listcomp>F       
$
$
$Q3355
$
$
$rK   c                 Z    g | ](}t                               |t           j                   )S rT   r=   rU   rW   rF   s     rI   rJ   z)_compare_torch_scalar.<locals>.<listcomp>G   *    ???aU\\!5=\11???rK   rY   )
r   r`   r=   rb   rd   r\   r]   r^   r_   rf   rk   rl   r   rm   rvst_rvsrp   rq   s     `     rI   _compare_torch_scalarr   D   s    D'**A
$
$
$
$)
$
$
$C??3???E	5	A!U\"" FFHH		$s9c**++,,1133Aq1u::rK   c                  ,    t          j        dd          S )Nr   
   )rx   randintrz   rK   rI   r{   r{   O   s    6>!R;P;P rK   c           
      :   t          | |d          }fd| D             }d |D             } || }t          |                    t          t	          | |                                                                        }|                                |k    sJ d S )Nr=   c                 $    g | ]}             S rz   rz   r~   s     rI   rJ   z-_compare_torch_relational.<locals>.<listcomp>Q   r   rK   c                 Z    g | ](}t                               |t           j                   )S rT   r   rF   s     rI   rJ   z-_compare_torch_relational.<locals>.<listcomp>R   r   rK   )r   boolr\   r]   r^   r_   rd   r   s     `     rI   _compare_torch_relationalr   O   s    D'**A
$
$
$
$)
$
$
$C??3???E	5	ATYYtC	3//0011668899A6688q======rK   c                  d   t           st          d           t          t                    } t	          |           dk    sJ t          t          | d          }t                               g dgt           j                  } ||          }t                               |          }t           	                    ||k              sJ t          t                    } t	          |           dk    sJ t          t          f| d            t          t                    } t	          |           d	k    sJ t          t          f| d
            t          t                    } t	          |           dk    sJ t          t          f| d            t          t                    } t	          |           dk    sJ t          t          f| d            t          t                    } t	          |           dk    sJ t          t          f| d            t          dz  } t	          |           dk    sJ t          t          f| d            t!          t                    } t	          |           dk    sJ t          t          f| d            t#          t                    } t	          |           dk    sJ t          t          f| d            t%          t                    } t	          |           dk    sJ t          t          f| d            t'          t                    } t	          |           dk    sJ t          t          f| d            t)          t                    } t	          |           dk    sJ t          t          f| d            t+          t                    } t	          |           dk    sJ t          t          f| d            t-          t.          t                    } t	          |           d k    sJ t          t.          t          f| d!            t1          t                    } t	          |           d"k    sJ t          t          f| d#            t3          t                    } t	          |           d$k    sJ t          t          f| d%            t5          t                    } t	          |           d&k    sJ t          t          f| d'            t7          t                    } t	          |           d(k    sJ t          t          f| d)            t9          t                    } t	          |           d*k    sJ t          t          f| d+            t;          t                    } t	          |           d,k    sJ t          t          f| d-            t=          t                    } t	          |           d.k    sJ t          t          f| d/            t?          t                    } t	          |           d0k    sJ t          t          f| d1            d S )2NPyTorch not installedztorch.abs(x)r=   )   rM   ztorch.sign(x)c                  ,    t          j        dd          S )Nir   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>f   s    &.b2I2I rK   )r   ztorch.ceil(x)c                  (    t          j                     S Nrx   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>j       &-// rK   ztorch.floor(x)c                  (    t          j                     S r   r   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>n   r   rK   ztorch.exp(x)c                  ,    t          j        dd          S Nr   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>r       &.Q2G2G rK   ztorch.sqrt(x)c                  (    t          j                     S r   r   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>v   r   rK      ztorch.pow(x, 4)c                  (    t          j                     S r   r   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>z   r   rK   ztorch.cos(x)c                  (    t          j                     S r   r   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>~   r   rK   ztorch.acos(x)c                  ,    t          j        dd          S NgGzgGz?rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>       &.2M2M rK   ztorch.sin(x)c                  (    t          j                     S r   r   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.asin(x)c                  ,    t          j        dd          S r   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.tan(x)c                  ,    t          j        dd          S )Ng      g      ?rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>       &.s2K2K rK   ztorch.atan(x)c                  ,    t          j        dd          S rt   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.atan2(y, x)c                  ,    t          j        dd          S rt   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   s    FN2q4I4I rK   ztorch.cosh(x)c                  ,    t          j        dd          S r   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.acosh(x)c                  ,    t          j        dd          S )Ng?rv   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>       &.a2H2H rK   ztorch.sinh(x)c                  ,    t          j        dd          S r   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.asinh(x)c                  ,    t          j        dd          S rt   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.tanh(x)c                  ,    t          j        dd          S r   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.atanh(x)c                  ,    t          j        dd          S )Ngg?rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.erf(x)c                  ,    t          j        dd          S r   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ztorch.lgamma(x)c                  ,    t          j        dd          S )Ng      ?rv   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>   r   rK   ) r=   r.   r   xr   r   rU   rW   rf   allr   r   r   r   r   r-   r   r   r   r   r   r    r!   yr"   r#   r$   r%   r&   r'   r+   r,   )rl   rm   may_abscs        rI   test_torch_mathr   X   s    &$%%%q66Dd~----D'""A	'u}	=	=BAbEEE		"A99UaZ     77Dd....1$*I*IJJJJ1::Dd....1$*A*ABBBB88Dd/////1$*A*ABBBBq66Dd~----1$*G*GHHHH77Dd....1$*A*ABBBB6Dd000001$*A*ABBBBq66Dd~----1$*A*ABBBB77Dd....1$*M*MNNNNq66Dd~----1$*A*ABBBB77Dd....1$*M*MNNNNq66Dd~----1$*K*KLLLL77Dd....1$*G*GHHHHA;;Dd222221a&$,I,IJJJJ77Dd....1$*G*GHHHH88Dd/////1$*H*HIIII77Dd....1$*G*GHHHH88Dd/////1$*G*GHHHH77Dd....1$*G*GHHHH88Dd/////1$*K*KLLLLq66Dd~----1$*G*GHHHHA;;Dd000001$*H*HIIIIIIrK   c                      t          t          t                              dk    sJ t          t          t                              dk    sJ t          t	          t                              dk    sJ d S )Nztorch.real(x)ztorch.imag(x)ztorch.angle(x))r   r(   r   r)   r*   rz   rK   rI   test_torch_complexesr      sf    bee////bee////c!ff!1111111rK   c                     t           st          d           t          t          t                    } t          |           dk    sJ t          t          t          f|            t          t          t                    } t          |           dk    sJ t          t          t          f|            t          t          t                    } t          |           dk    sJ t          t          t          f|            t          t          t                    } t          |           dk    sJ t          t          t          f|            t          t          t                    } t          |           dk    sJ t          t          t          f|            t          t          t                    } t          |           dk    sJ t          t          t          f|            d S )Nr   ztorch.eq(x, y)ztorch.ne(x, y)ztorch.ge(x, y)ztorch.gt(x, y)ztorch.le(x, y)ztorch.lt(x, y))r=   r.   r   r   r   r   r   r   r   r   r   r   rl   s    rI   test_torch_relationalr      s    &$%%%a88Dd/////q!fd+++a88Dd/////q!fd+++a88Dd/////q!fd+++a88Dd/////q!fd+++a88Dd/////q!fd+++a88Dd/////q!fd+++++rK   c                  B   t           t          d           t          } t          |           dk    sJ t	          t          f| d          }t          d          }t                               |                                t           j                  }t           	                     ||          |          sJ t          t          z  } t          |           dk    sJ t          t          t          f|            t          dz  } t          |           dk    sJ t          t          f|            t          t          z  t          z  t          z  } t          |           dk    sJ t          t          t          t          t          f|            t          t                    } t          |           d	k    sJ t          t          f|            t          t                    } t          |           d
k    sJ t          t          f|            t!          t          t                    } t          |           dk    sJ t          t          t          f|            t#          t                    } t          |           dk    sJ t          d          }t                               |                                t           j                  }t	          t          f| d          } ||          }t           j                            |          }t           	                    ||          sJ d S )Nr   r>   r=   r?   rM   ztorch.matmul(M, N)ztorch.mm(torch.mm(M, M), M)z4torch.matmul(torch.matmul(torch.matmul(M, N), P), Q)ztorch.trace(M)ztorch.det(M)ztorch.mul(M, N)ztorch.linalg.inv(M))r=   r.   r>   r   r   r   rU   rV   rW   rh   r@   rr   rA   rB   r3   r0   r1   r2   linalginv)rl   rm   eye_mat
eye_tensorresultexpecteds         rI   test_torch_matrixr      s   }$%%%Dds""""!tW%%A!ffGgnn..emDDJ>>!!J--44444q5Dd333331a&$'''6Dd<<<<<1$%%%q519q=DdUUUUU1aA,---88Dd/////1$%%%q>>Dd~----1$%%%1a  Dd000001a&$'''1::Dd44444 !ffGgnn..emDDJ!tW%%AQz]]F|
++H>>&(+++++++rK   c                     t           st          d           t          ddd          } t          ddd          }t          ddd          }t          ddd          }t                               ddgd	d
ggt           j                  }t                               ddgdd	ggt           j                  }t                               ddgddggt           j                  }t                               ddgd
dggt           j                  }t          | |          }t          |          dk    sJ t          | |f|d          }	 |	||          }
t                               d||          }t           	                    |
|          sJ t          | |          }t          |          dk    sJ t          | |f|d          }	 |	||          }
||z   }t           	                    |
|          sJ t          | ||          }t          |          dk    sJ t          | ||f|d          }	 |	|||          }
||z   |z   }t           	                    |
|          sJ t          | |||          }t          |          dk    sJ t          | |||f|d          }	 |	||||          }
||z   |z   |z   }t           	                    |
|          sJ t          | ddg          }t          |          dk    sJ t          | f|d          }	 |	|          }
|j        }t           	                    |
|          sJ t          t          | |          g d          }t          |          dk    sJ t          | |f|d          }	 |	||          }
t                               d||                              dddd          }t           	                    |
|          sJ t          t          | |          d          }t          |          dk    sJ t          | |f|d          }	 |	||          }
t                               d||          }t           	                    |
|          sJ d S ) Nr   r>   r   r@   rA   rB         ?       @      @      @rM   g                     g      @ztorch.einsum("ab,cd", M, N)r=   zij,klztorch.add(M, N)ztorch.add(torch.add(M, N), P)z+torch.add(torch.add(torch.add(M, N), P), Q)rQ   r   zM.permute(1, 0))rQ   r   r?   r   z/torch.einsum("ab,cd", M, N).permute(1, 2, 3, 0)zab,cdr?   )rQ   r   z torch.einsum("ab,bc->acb", M, N)z
ab,bc->acb)r=   r.   r   rU   rW   r
   r   r   einsumrh   r   r   Tpermuter   )r>   r@   rA   rB   r   mbmcmdcgrm   r   r   s               rI   test_torch_array_operationsr     sd    &$%%%S!QAS!QAS!QAS!QA	Bx"b*%-	@	@B	Cy3),EM	B	BB	Bx"b*%-	@	@B	Cy2r(+5=	A	AB	Aq	!	!Bb>>:::::!QW%%A	"b		AWb"%%A>>!Q	!QBb>>.....!QW%%A	"b		A
RA>>!Q	!Q		Bb>><<<<<!QB((A	"b"A
R"A>>!Q	!Q1		Bb>>JJJJJ!Q1r7++A	"b"bA
R"rA>>!Q	QA		Bb>>.....!r7##A	"A
A>>!Q	'1--|||	<	<Bb>>NNNNN!QW%%A	"b		AWb"%%--aAq99A>>!Q	)!Q//	8	8Bb>>?????!QW%%A	"b		A\2r**A>>!QrK   c                  ~    t          t          t                    t                    } t          |           dk    sJ dS )zTest derivative handling.'torch.autograd.grad(torch.sin(x), x)[0]N)r   r   r   r   r   s    rI   test_torch_derivativer   K  s7    c!ffa  DdHHHHHHHrK   c                     t           st          d           t          t          t	          t
                    gt          t                    t           gg          } dt          |           v sJ dt          | d          v sJ t          | d          }d|v sJ d|v sJ t          | dd	          }d|v sJ d|v sJ d S )
Nr   zdtype=torch.float64zdtype=torch.float32ztorch.float32rM   Trequires_gradzrequires_grad=True)r   rN   )
r=   r.   r   r   r   r   r   ztr   )rl   r   s     rI   test_torch_printing_dtyper   Q  s     &$%%% As1vv;Q!-..D Jt$4$44444 !Jt?$K$K$KKKKK D111F6)))) F**** DHHHF6)))) F******rK   c                     t           st          d           t          t                    t	          t
                    z   } t          t          t
          g| d          }t                               dd          }t                               dd          } |||          }|j        sJ |	                                 t          |j                                        t          t	          d                                                    z
            dk     sJ t          |j                                        t          t          d                                                     z
            dk     sJ d S )Nr   r=   r   Tr   r   rY   )r=   r.   r   r   r   r   r   rU   r   backwardrf   gradrd   re   evalf)rl   rm   x_valy_valr   s        rI   test_requires_gradr   g  s.    &$%%%q66CFF?D!Qw''A LLDL11ELLDL11EQue__F
OO uz  5S)9)9#:#::;;dBBBB uz  5#c((..*:*:):#;#;;<<tCCCCCCrK   c                  6   t           st          d           t          d          \  } }}t          t	          |           |           }t          |          dk    sJ t          t	          |           | df          }t          |          dk    sJ t          t	          | |z            | |          }t          |          }d}|                    dd          }|                    dd          }||k    sJ t          t	          |           | |           }t          |          }d}||k    sJ t          t	          | |z  |z            | |df|          }t          |          }d	}|                    dd          }|                    dd          }||k    sJ d S )
Nr   zx y zr   r   zhtorch.autograd.grad(torch.autograd.grad(torch.sin(x), x, create_graph=True)[0], x, create_graph=True)[0]zjtorch.autograd.grad(torch.autograd.grad(torch.sin(x*y), x, create_graph=True)[0], y, create_graph=True)[0]  ztorch.autograd.grad(torch.autograd.grad(torch.autograd.grad(torch.autograd.grad(torch.sin(x*y*z), x, create_graph=True)[0], y, create_graph=True)[0], y, create_graph=True)[0], z, create_graph=True)[0])r=   r.   r   r   r   r   replace)r   r   r   rl   r   r   normalized_resultnormalized_expecteds           rI   %test_torch_multi_variable_derivativesr   |  s    &$%%%gGAq!c!ffa  DdHHHHHc!ffq!f%%D {| | | | c!a%jj!Q''DF{HsB//"**333 33333c!ffa##DFyHXc!a%!)nna!Q33DF ZHsB//"**333 3333333rK   c                     t           st          d           t          d          } t          d          }t          | dz  |           }t	          | |d          }t                               dd          } ||          }t                               |t                               d	                    sJ t          t          |           | df          }t	          | |d          }t                               d
d          } ||          }t                               |t                               d
          d          sJ t                               t          j	        dz  d          } ||          }t                               |t                               d          d          sJ t          | |dz  z  | |          }t	          | |f|d          }t                               dd          }t                               dd          } |||          }t                               |t                               d                    sJ d S )Nr   r   r   r   r=   r   Tr   r   r   gh㈵>rZ   r   r   g      @)
r=   r.   r   r   r   rU   iscloser   mathpi)r   r   rl   rm   r   r   r   s          rI   test_torch_derivative_lambdifyr     s    &$%%%AAa1fa  DD'""ALLDL11EQuXXF==c!2!233333c!ffq!f%%DD'""ALLDL11EQuXXF==c!2!2=>>>>>LL1DL99EQuXXF==d!3!3$=?????a!q&j!Q''D!Qw''ALLDL11ELLDL11EQue__F==c!2!23333333rK   c                  ,   t           st          d           t          d          } t          |           dk    sJ t	          d          }t          |          } t          |           dk    sJ t          dd          } t          |           dk    sJ t	          d          \  }}t          ||          } t          |           d	k    sJ t          dd          } t          |           d
k    sJ t          ||          } t          |           dk    sJ d S )Nr   r?   ztorch.eye(3)nztorch.eye(n, n)r   ztorch.zeros((2, 3))zm nztorch.zeros((m, n))ztorch.ones((2, 3))ztorch.ones((m, n)))r=   r.   r5   r   r   r6   r7   )rl   r   ms      rI   test_torch_special_matricesr     s"    &$%%%A;;Dd~----AA;;Dd00000aDd444445>>DAqaDd44444Q??Dd33333Q??Dd3333333rK   c                  |   t           st          d           t          d          } t          g | d          } |            }t                               d          }t                               ||          sJ t          dd          } t          g | d          } |            }t                               d          }t                               ||          sJ t          dd          } t          g | d          } |            }t           	                    d          }t                               ||          sJ d S )Nr   r?   r=   r   )r   r?   )
r=   r.   r5   r   r   rh   r6   zerosr7   ones)rl   rm   r   r   s       rI   $test_torch_special_matrices_lambdifyr     s    &$%%%A;;DT7##AQSSFyy||H>>&(+++++aDT7##AQSSF{{6""H>>&(+++++Q??DT7##AQSSFzz&!!H>>&(+++++++rK   c                     t           st          d           t          t                    } t	          |           dk    sJ t          t          t                    t          t          t                    z  z             } t	          |           dk    sJ t          } t	          |           dk    sJ dt          z  t          z   } t	          |           dk    sJ t          t          t          z            } t	          |           dk    sJ d S )Nr   ztorch.conj(x)z6torch.sin(torch.conj(x)) - 1j*torch.cos(torch.conj(y))1jr   zx + 2*1jztorch.exp(1j*x))
r=   r.   r8   r   r   r   r9   r   r   r   r   s    rI   test_torch_complex_operationsr     s     &$%%%Q<<Dd.... SVVa#a&&j())DdWWWWWDdt####q519Ddz))))q1u::Dd0000000rK   c                     t           st          d           t          t                    } t	          |           dk    sJ t          t          d          } t	          |           dk    sJ t          t                    } t	          |           dk    sJ t          dt                    } t	          |           dk    sJ t          t          t                              } t	          |           dk    sJ d S )Nr   ztorch.heaviside(x, 1/2)r   ztorch.heaviside(x, 0)ztorch.special.gamma(x)ztorch.special.digamma(x)z!torch.special.gamma(torch.sin(x)))r=   r.   r:   r   r   r;   r<   r   r   s    rI   test_torch_special_functionsr    s     &$%%%Q<<Dd88888Q??Dd6666688Dd77777Q??Dd99999Q==DdBBBBBBBrK   )grx   r   sympyr   r   sympy.printing.pytorchr   r   r   r   sympy.tensor.arrayr	   0sympy.tensor.array.expressions.array_expressionsr
   r   r   r   r   sympy.utilities.lambdifyr   sympy.core.relationalr   r   r   r   r   r   sympy.functionsr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   sympy.testing.pytestr.   sympy.externalr/   sympy.matrices.expressionsr0   r1   r2   r3   sympy.matricesr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   rB   r   r   r   r   rE   llorU   rW   m3x3	m3x3sympyrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rz   rK   rI   <module>r     s     % % % % % % % % - - - - - - - - - - - - - - - - ( ( ( ( ( (7 7 7 7 7 7 7 7 7 7 7 7 7 7 . - - - - - 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & % % % % % ( ( ( ( ( (1 1 1 1 1 1 1 1 1 1 1 1 % % % % % % : : : : : : : : : :         - - - - - - - - - - 	gLaLaLaLaWY
1a
9
9%%1a..
9
9
9C<<5=<11DsID D D2 0M/L     4Q3P    ^J ^J ^JB2 2 2, , ,:,, ,, ,,^=  =  = @I I I+ + +,D D D*4 4 4B4 4 4@4 4 42, , ,.1 1 1*C C C C CrK   