
    sg<              
          d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZ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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, d dl-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3m4Z4m5Z5m6Z6m7Z7 d d
l8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl>m@Z@  ed      xZAZBeBrd dlCZCdeCj                  d<    e6ddd      ZE e6ddd      ZF e6ddd      ZG e6ddd      ZH ed      \  ZIZJZKZLeAA eMd dd      D  cg c]  }  eN eM| | dz                c} ZOeAj                  eO      ZQ e.eO      ZRd)dZSd)dZTd ZUd fdZVd fdZWd  ZXe@d!        ZYd" ZZd# Z[e@d$        Z\d% Z]d& Z^d' Z_d( Z`yc c} w )*    N)
Derivative)symbols)ArrayTensorProductArrayAddPermuteDimsArrayDiagonal)EqNeGeGtLeLt)import_module)Absceilingexpfloorsignsinasinsqrtcosacostanatanatan2coshacoshsinhasinhtanhatanhreimargerfloggammalog)Matrix
MatrixBaseeye
randMatrix)DeterminantHadamardProductInverseMatrixSymbolTrace)tensorflow_code)convert_matrix_to_array)lambdify)skip)XFAIL
tensorflow2TF_CPP_MIN_LOG_LEVELM   NPQzx y z t	   c           	         t        | |d      }|s.| D cg c]"  }t        |j                  |j                        $ }}n0| D cg c]%  }t        |j                  |j                        dz  ' }}t        j                         }d }|j                         5  |D cg c]  }t        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  }|j!                         }|j"                  r0t%        |t&              s|j)                         }|j+                         }|s||k(  j-                         sJ y |D cg c]  }|D ]  }|  }}}|D cg c]  }|D ]  }|  }}}t-        d t        ||      D              sJ y c c}w c c}w c c}w # 1 sw Y   xY wc c}}w c c}}w )Nr7   g      Y@graphc              3      K   | ];  \  }}t        ||z
        d dt        t        t        |      d             z
   z  k   = yw
      Nabsintr(   .0abs      W/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_tensorflow.py	<genexpr>z-_compare_tensorflow_matrix.<locals>.<genexpr>E   D      L9=AC!HrQs3s1vr?33444L   AA)r4   r,   rowscolstfGraph
as_defaultevalr2   compatv1Sessionrunsubsdictzipdoit	is_Matrix
isinstancer*   as_explicittolistall	variablesexpr	use_floatfvrandom_matricesrB   rirandom_variablessessionerows                rN   _compare_tensorflow_matrixrr   +   s   D,/A?HI!:affaff5IIDMNq:affaff5d:NNHHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	A{{!Z(AHHJQ||~~)3S)Q)Q)))3S)Q)Q)) LADQL L 	L L/ JN
 O. . *)s6   'G*GG"G4A G"	G.!G4G""G+c           	         t        | |d      }|s1| D cg c]%  }t        |j                  |j                        dz  ' }}n0| D cg c]%  }t        |j                  |j                        dz  ' }}t        j                         }d }|j                         5  |D cg c]  }t        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  }|j!                         }|j"                  r0t%        |t&              s|j)                         }|j+                         }|s||k(  j-                         sJ y |D cg c]  }|D ]  }|  }}}|D cg c]  }|D ]  }|  }}}t-        d t        ||      D              sJ y c c}w c c}w c c}w # 1 sw Y   xY wc c}}w c c}}w )Nr7   rF   gQ	@rA   c              3      K   | ];  \  }}t        ||z
        d dt        t        t        |      d             z
   z  k   = ywrD   rG   rJ   s      rN   rO   z5_compare_tensorflow_matrix_inverse.<locals>.<genexpr>e   rP   rQ   )r4   r+   rR   rS   rT   rU   rV   rW   r2   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r*   rb   rc   rd   re   s                rN   "_compare_tensorflow_matrix_inverseru   K   s   D,/A:CDQ3qvvqvv.q0DD=FG3qvvqvv.t3GGHHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	A{{!Z(AHHJQ||~~)3S)Q)Q)))3S)Q)Q)) LADQL L 	L L/ EG
 O. . *)s6   *G*GG%G 7A G%G1$G7 G%%G.c           	      p   t        | |d      }| D cg c]3  }t        |j                  |j                        j	                         dz  5 }}t
        j                         }d }|j                         5  |D cg c]  }t        t        |             }}t
        j                  j                  j                  |      }	|	j                   ||       }d d d        |j                  t        t!        | |                  }
|
j#                         }
t%        ||
z
        dk  sJ y c c}w c c}w # 1 sw Y   [xY w)Nr7   d   rA   ư>)r4   r,   rR   rS   evalfrT   rU   rV   rW   r2   rX   rY   rZ   r[   r\   r]   r^   r_   rH   )rf   rg   ri   rj   rk   rB   rl   rm   rn   ro   rp   s              rN   !_compare_tensorflow_matrix_scalarrz   i   s   D,/A:CE56
166166"((*S0EO E HHJEA				 .>MND!34NN)),,&&U&3KK+,-.
 			$s9o678A	Aqs8fE O. .s$   8D"2D,7D'A D,'D,,D5c                  .    t        j                  dd      S Nr   rE   randomrandint     rN   <lambda>r   {       2!6 r   c           	      4   t        | |d      }| D cg c]	  } |        }}t        j                         }d }|j                         5  |D cg c]  }t	        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  j                         j                         }t        ||z
        dk  sJ y c c}w c c}w # 1 sw Y   gxY w)Nr7   rA   rx   )r4   rT   rU   rV   rW   r2   rX   rY   rZ   r[   r\   r]   r^   ry   r_   rH   rf   rg   rngri   rj   rvsrB   rl   rm   tf_rvsro   rp   s               rN   _compare_tensorflow_scalarr   z   s    D,/A#
$Q35
$C
$HHJEA				 $478q$q)*88)),,&&U&3KK6
#$
 			$s9c*+,22499;Aqs8f %
 9$ $s$   DDD	(A D	DDc                  .    t        j                  dd      S r|   r}   r   r   rN   r   r      r   r   c           	          t        | |d      }| D cg c]	  } |        }}t        j                         }d }|j                         5  |D cg c]  }t	        t        |             }	}t        j                  j                  j                  |      }
|
j                   ||	       }d d d        |j                  t        t        | |                  j                         }||k(  sJ y c c}w c c}w # 1 sw Y   MxY w)Nr7   rA   )r4   rT   rU   rV   rW   r2   rX   rY   rZ   r[   r\   r]   r^   r_   r   s               rN   _compare_tensorflow_relationalr      s    D,/A#
$Q35
$C
$HHJEA				 $478q$q)*88)),,&&U&3KK6
#$
 			$s9c*+,113A6M6 %
 9$ $s$   C*C4C/(A C4/C44C=c                      t        t        d            dk(  sJ t        t        t	        t
              gt        t              t         gg      } t        |       dk(  sJ y )Nr;   z6tensorflow.constant([[1, 0, 0], [0, 1, 0], [0, 0, 1]])zPtensorflow.Variable([[x, tensorflow.math.sin(y)], [tensorflow.math.exp(z), -t]]))	r2   r+   r)   xr   yr   ztrg   s    rN   test_tensorflow_printingr      sb    3q6"@A A A As1v;Q!-.D4 	.. . .r   c                     t         st        d       t        t              } t	        |       dk(  sJ t        t        f|        t        t              } t	        |       dk(  sJ t        t        f|        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        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'        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-        y ).NTensorFlow not installedztensorflow.math.abs(x)ztensorflow.math.sign(x)ztensorflow.math.ceil(x)c                  *    t        j                          S Nr~   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>       v}} r   )r   ztensorflow.math.floor(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.exp(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.sqrt(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   rF   ztensorflow.math.pow(x, 4)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.cos(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.acos(x)c                  .    t        j                  dd      S )Nr   gffffff?r~   uniformr   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   s    v~~a7N r   ztensorflow.math.sin(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.asin(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.tan(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atan(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atan2(y, x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   s     r   ztensorflow.math.cosh(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.acosh(x)c                  .    t        j                  dd      S N      r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>       v~~a7K r   ztensorflow.math.sinh(x)c                  .    t        j                  dd      S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.asinh(x)c                  .    t        j                  dd      S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.tanh(x)c                  .    t        j                  dd      S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   r   r   ztensorflow.math.atanh(x)c                  .    t        j                  dd      S )Ng      g      ?r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>   s    sB 7 r   ztensorflow.math.erf(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>        r   ztensorflow.math.lgamma(x)c                  *    t        j                          S r   r   r   r   rN   r   z&test_tensorflow_math.<locals>.<lambda>  r   r   )rT   r5   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r&   r'   r   s    rN   test_tensorflow_mathr      s   '(q6D4 $<<<<tT*7D4 $====tT*1:D4 $====tT/FG8D4 $>>>>tT/FGq6D4 $<<<<tT/FG7D4 $====tT/FG6D4 $????tT/FGq6D4 $<<<<tT/FG7D4 $====tT/NOq6D4 $<<<<tT/FG7D4 $====tT/FGq6D4 $<<<<tT/FG7D4 $====tT/FGA;D4 $AAAA1vt1HI7D4 $====tT/FG8D4 $>>>>tT/KL7D4 $====tT/KL8D4 $>>>>tT/KL7D4 $====tT/KL8D4 $>>>>	
d79 q6D4 $<<<<	
d/1 A;D4 $????	
d/1r   c                      t        t        t                    dk(  sJ t        t        t                    dk(  sJ t        t	        t                    dk(  sJ y )Nztensorflow.math.real(x)ztensorflow.math.imag(x)ztensorflow.math.angle(x))r2   r#   r   r$   r%   r   r   rN   test_tensorflow_complexesr     sJ    2a5!%>>>>2a5!%>>>>3q6"&@@@@r   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|        y )Nr   ztensorflow.math.equal(x, y)ztensorflow.math.not_equal(x, y)z#tensorflow.math.greater_equal(x, y)ztensorflow.math.greater(x, y)z tensorflow.math.less_equal(x, y)ztensorflow.math.less(x, y))rT   r5   r	   r   r   r2   r   r
   r   r   r   r   r   s    rN   test_tensorflow_relationalr     s   '(a8D4 $AAAA"Aq640a8D4 $EEEE"Aq640a8D4 $IIII"Aq640a8D4 $CCCC"Aq640a8D4 $FFFF"Aq640a8D4 $@@@@"Aq640r   c                  L   t         st        d       t        } t        |       dk(  sJ t	        t        f|        t        t
        z   } t        |       dk(  sJ t	        t        t
        f|        t        t
        z  } t        |       dk(  sJ t	        t        t
        f|        t        t        t
              } t        |       dk(  sJ t	        t        t
        f|        t        t
        z  t        z  t        z  } t        |       dk(  sJ t	        t        t
        t        t        f|        t        dz  } t        |       dk(  sJ 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        |       dk(  sJ t        t        f| d       t        j                  } t        | d      dk(  sJ t        | d      dk(  sJ t	        t        f|        y )Nr   r:   tensorflow.math.add(M, N)ztensorflow.linalg.matmul(M, N)ztensorflow.math.multiply(M, N)zXtensorflow.linalg.matmul(tensorflow.linalg.matmul(tensorflow.linalg.matmul(M, N), P), Q)r;   z;tensorflow.linalg.matmul(tensorflow.linalg.matmul(M, M), M)ztensorflow.linalg.trace(M)ztensorflow.linalg.det(M)ztensorflow.linalg.inv(M)T)rh   z1.14)tensorflow_versionz%tensorflow.linalg.matrix_transpose(M)z1.13ztensorflow.matrix_transpose(M))rT   r5   r:   r2   rr   r<   r.   r=   r>   r1   r-   rz   r/   ru   Tr   s    rN   test_tensorflow_matricesr   -  s   '(D4 C'''tT*q5D4 $????1vt,q5D4 $DDDD1vt,1a D4 $DDDD1vt,Q3q57D4 	99 9 9 1a|T2a4D4 EF F FtT*8D4 $@@@@tT*q>D4 $>>>>%qdD11:D4 $>>>>&tTTB33D4F;/0 0 04F;() ) ) tT*r   c                  l   t         st        d       t         j                         } | j                         5  t         j                  j
                  j                  |       }t        ddd      }t        ddd      }t        ||z        }t        ||f|d      }t         j                  ddgdd	gg      }t         j                  dd
gddgg      }|j                   |||            }|j                  t         j                  ||            }	||	k(  j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   rA   r:   r   r<   r7   r   r;   rF   )rT   r5   rU   rV   rX   rY   rZ   r0   r3   r4   constantr[   matmulrd   )
rB   ro   r:   r<   cgri   mambr   cs
             rN   test_codegen_einsumr   c  s   '(HHJE				 )),,&&U&3a#a#$QU+aVR.[[1a&1a&)*[[1R&2q'*+KK"b	"KK		"b)*Q||~~  s   C*D**D3c            
      	   t         st        d       t         j                         } | j                         5  t         j                  j
                  j                         }t        ddd      }t        ddd      }t        ddd      }t        ddd      }t         j                  ddgdd	gg      }t         j                  dd
gddgg      }t         j                  ddgddgg      }t         j                  ddgd	dgg      }	t        ||      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j                  d||            }||k(  j                         sJ t        ||      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  ||z         }||k(  j                         sJ t        |||      }
t        |
      dk(  sJ t        |||f|
d      }|j                   ||||            }|j                  ||z   |z         }||k(  j                         sJ t        ||||      }
t        |
      dk(  sJ t        ||||f|
d      }|j                   |||||	            }|j                  ||z   |z   |	z         }||k(  j                         sJ t!        |ddg      }
t        |
      dk(  sJ t        |f|
d      }|j                   ||            }|j                  t         j#                  |            }||k(  j                         sJ t!        t        ||      g d      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j#                  t         j                  d||      g d            }||k(  j                         sJ t%        t        ||      d      }
t        |
      dk(  sJ t        ||f|
d      }|j                   |||            }|j                  t         j                  d||            }||k(  j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r:   r   r<   r=   r>   r   r;   rF   r   r   r      z'tensorflow.linalg.einsum("ab,cd", M, N)r7   zij,klr   z1tensorflow.math.add(tensorflow.math.add(M, N), P)zItensorflow.math.add(tensorflow.math.add(tensorflow.math.add(M, N), P), Q)ztensorflow.transpose(M, [1, 0]))r   r   r;   r   zKtensorflow.transpose(tensorflow.linalg.einsum("ab,cd", M, N), [1, 2, 3, 0])zab,cd)r   r   z,tensorflow.linalg.einsum("ab,bc->acb", M, N)z
ab,bc->acb)rT   r5   rU   rV   rX   rY   rZ   r0   r   r   r2   r4   r[   einsumrd   r   r   	transposer   )rB   ro   r:   r<   r=   r>   r   r   mcmdr   ri   r   r   s                 rN   test_codegen_extrar   x  sj   '(HHJE				 B)),,&&(a#a#a#a#[[1a&1a&)*[[1R&2q'*+[[1a&1a&)*[[1R&1a&)*1%r"56 	6 6aVR.KK"b	"KK		'2r23Q||~~a^r"&AAAAaVR.KK"b	"KKR Q||~~aAr"?@ 	@ @aAYL1KK"b"&KKR"%Q||~~aAq!r"HH 	H H aAq\2|4KK"b"b)*KKR"r)*Q||~~QF#r"&GGGGaT2|,KK"KKR()Q||~~+Aq1<@r"II 	I I aVR.KK"b	"KKRYYwB%?NOQ||~~-a3V<r":; 	; ;aVR.KK"b	"KK		,B78Q||~~EB B Bs   QRR
c                      t        ddd      } t        ddd      }t        ddd      }t        | d         dk(  sJ t        d| d   z        dk(  sJ |d   j                  || |z
        }t        |      d	k(  sJ y )
NAr   r;   BC)r   r   zA[0, 0]z	3*A[0, 0]z&(tensorflow.math.add((-1)*B, A))[0, 0])r0   r2   r\   )r   r   r   Fs       rN   test_MatrixElement_printingr     s    S!QAS!QAS!QA1T7#y0001qw;';666	$QAA1!IIIIr   c                  ^    t        t        t              t              } t        |       dk(  sJ y )Nz2tensorflow.gradients(tensorflow.math.sin(x), x)[0])r   r   r   r2   r   s    rN   test_tensorflow_Derivativer     s,    c!fa D4 <= = =r   )F)ar~   sympy.core.functionr   sympy.core.symbolr   0sympy.tensor.array.expressions.array_expressionsr   r   r   r   sympy.core.relationalr	   r
   r   r   r   r   sympy.externalr   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'   r(   sympy.matricesr)   r*   r+   r,   sympy.matrices.expressionsr-   r.   r/   r0   r1   sympy.printing.tensorflowr2   3sympy.tensor.array.expressions.from_matrix_to_arrayr3   sympy.utilities.lambdifyr4   sympy.testing.pytestr5   r6   rT   r7   osenvironr:   r<   r=   r>   r   r   r   r   rangelistllor   m3x3	m3x3sympyrr   ru   rz   r   r   r   r   r   r   r   r   r   r   r   )rm   s   0rN   <module>r      s    * %  8 8 ($ $ $ $ $ $ $ ? >? ? 5 W - % &  - -Z),BJJ%& aaaaY
1a>(-aA
714a1
7C;;sDsIL@L<$ 7" 7 . ]1 ]1@A1> 2+ 2+j*GT	J=Q 8s   E5