Ë
    7^(hÌB  ã            
       ó  — d dl 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 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/m0Z0m1Z1 d d
l2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlCmEZE  ed«      xZFZGeGrd dlHZHdeHj’                  d<    e;ddd«      ZJ e;ddd«      ZK e;ddd«      ZL e;ddd«      ZM ed«      \  ZNZOZPZQeF�A eRd dd«      D � cg c]  }  eS eR| | dz   «      «      ‘Œ c} ZTeFj«                  eT«      ZV e3eT«      ZWd,d„ZXd,d„ZYd„ ZZd„ fd„Z[d „ fd!„Z\d"„ Z]eEd#„ «       Z^d$„ Z_d%„ Z`eEd&„ «       Zad'„ Zbd(„ Zcd)„ Zdd*„ Zed+„ Zfyc c} w )-é    N)Ú
Derivative)Úsymbols)Ú	Piecewise)Ú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)ÚisnanÚisinf)Ú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 )Nr:   g      Y@©Úgraphc              3   óŠ   K  — | ];  \  }}t        ||z
  «      d dt        t        t        |«      d «      «      z
   z  k  –— Œ= y­w©é
   é   N©ÚabsÚintr)   ©Ú.0ÚaÚbs      úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/printing/tests/test_tensorflow.pyú	<genexpr>z-_compare_tensorflow_matrix.<locals>.<genexpr>G   óD   è ø€ ò LÙ9=¸¸AŒC��!‘‹H�r˜Qœs¤3¤s¨1£v¨r£?Ó3Ñ3Ð4Ñ4Õ4ñLùó   ‚AA)r7   r/   ÚrowsÚcolsÚtfÚGraphÚ
as_defaultÚevalr5   ÚcompatÚv1ÚSessionÚrunÚsubsÚdictÚzipÚdoitÚ	is_MatrixÚ
isinstancer-   Úas_explicitÚtolistÚall©Ú	variablesÚexprÚ	use_floatÚfÚvÚrandom_matricesrE   ÚrÚiÚrandom_variablesÚsessionÚeÚrows                rQ   Ú_compare_tensorflow_matrixru   -   s»  € Ü�˜D ,Ó/€AÙØ?HÖI¸!œ: a§f¡f¨a¯f©fÕ5ÐIˆÑIàDMÖN¸qœ: a§f¡f¨a¯f©fÓ5°dÓ:ÐNˆÐNä�H‰H‹J€EØ€AØ	×	Ñ	Ó	ñ .Ø>MÖN¸œD¤°Ó!3Õ4ÐNÐÐNÜ—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆØ�K‰K™Ð+Ð,Ó-ˆ÷.ð
 	�	‰	”$”s˜9 oÓ6Ó7Ó8€AØ	�‰‹€AØ‡{‚{Ü˜!œZÔ(Ø—‘“ˆAØ�H‰H‹JˆáØ�Q‘�|‰|Œ~Ð‰~à×)�3 SÒ) ŠQÐ)ˆQÐ)ˆÑ)Ø×)�3 SÒ) ŠQÐ)ˆQÐ)ˆÑ)Üñ LÜADÀQÈÃô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 )Nr:   rI   g…ëQ¸	@rD   c              3   óŠ   K  — | ];  \  }}t        ||z
  «      d dt        t        t        |«      d «      «      z
   z  k  –— Œ= y­wrG   rJ   rM   s      rQ   rR   z5_compare_tensorflow_matrix_inverse.<locals>.<genexpr>g   rS   rT   )r7   r.   rU   rV   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   r-   re   rf   rg   rh   s                rQ   Ú"_compare_tensorflow_matrix_inverserx   M   sÀ  € Ü�˜D ,Ó/€AÙØ:CÖD°Qœ3˜qŸv™v q§v¡vÓ.¨qÓ0ÐDˆÑDà=FÖG¸œ3˜qŸv™v q§v¡vÓ.¨tÓ3ÐGˆÐGä�H‰H‹J€EØ€AØ	×	Ñ	Ó	ñ .Ø>MÖN¸œD¤°Ó!3Õ4ÐNÐÐNÜ—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆØ�K‰K™Ð+Ð,Ó-ˆ÷.ð
 	�	‰	”$”s˜9 oÓ6Ó7Ó8€AØ	�‰‹€AØ‡{‚{Ü˜!œZÔ(Ø—‘“ˆAØ�H‰H‹JˆáØ�Q‘�|‰|Œ~Ð‰~à×)�3 SÒ) ŠQÐ)ˆQÐ)ˆÑ)Ø×)�3 SÒ) ŠQÐ)ˆQÐ)ˆÑ)Üñ LÜADÀQÈÃô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)Nr:   éd   rD   ç�íµ ÷Æ°>)r7   r/   rU   rV   ÚevalfrW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   rK   )ri   rj   rl   rm   rn   rE   ro   rp   rq   rr   rs   s              rQ   Ú!_compare_tensorflow_matrix_scalarr}   k   s  € Ü�˜D ,Ó/€Aà:CöEØ56Œ
�1—6‘6˜1Ÿ6™6Ó"×(Ñ(Ó*¨SÓ0ðE€Oð Eô �H‰H‹J€EØ€AØ	×	Ñ	Ó	ñ .Ø>MÖN¸œD¤°Ó!3Õ4ÐNÐÐNÜ—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆØ�K‰K™Ð+Ð,Ó-ˆ÷.ð
 	�	‰	”$”s˜9 oÓ6Ó7Ó8€AØ	�‰‹€AÜˆq�‰s‹8�fÒÐÑùòEùò O÷.ð .ús$   ’8D"Á2D,Á7D'ÂA D,Ä'D,Ä,D5c                  ó.   — t        j                  dd«      S ©Nr   rH   ©ÚrandomÚrandint© ó    rQ   ú<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)Nr:   rD   r{   )r7   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   r|   rb   rK   ©ri   rj   Úrngrl   rm   ÚrvsrE   ro   rp   Útf_rvsrr   rs   s               rQ   Ú_compare_tensorflow_scalarrŒ   |   sî   € ä�˜D ,Ó/€AØ#Ö
$�Q‰3�5Ð
$€CÐ
$ä�H‰H‹J€EØ€AØ	×	Ñ	Ó	ñ $Ø47Ö8¨q”$” qÓ)Õ*Ð8ˆÐ8Ü—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆØ�K‰K™˜6˜
Ó#ˆ÷$ð
 	�	‰	”$”s˜9 cÓ*Ó+Ó,×2Ñ2Ó4×9Ñ9Ó;€AÜˆq�‰s‹8�fÒÐÑùò %ùò
 9÷$ð $ús$   ’DÁDÁD	Á(A DÄ	DÄDc                  ó.   — t        j                  dd«      S r   r€   rƒ   r„   rQ   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)Nr:   rD   )r7   rW   rX   rY   rZ   r5   r[   r\   r]   r^   r_   r`   ra   rb   rˆ   s               rQ   Ú_compare_tensorflow_relationalr�   Œ   sÚ   € ä�˜D ,Ó/€AØ#Ö
$�Q‰3�5Ð
$€CÐ
$ä�H‰H‹J€EØ€AØ	×	Ñ	Ó	ñ $Ø47Ö8¨q”$” qÓ)Õ*Ð8ˆÐ8Ü—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆØ�K‰K™˜6˜
Ó#ˆ÷$ð
 	�	‰	”$”s˜9 cÓ*Ó+Ó,×1Ñ1Ó3€AØ�Š6€M‰6ùò %ùò
 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]]))	r5   r.   r,   Úxr   Úyr   ÚzÚt©rj   s    rQ   Útest_tensorflow_printingr–   œ   sb   € Üœ3˜q›6Ó"Ø@òAð Að Aô ”A”sœ1“v�;¤¤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„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>¸   ó   € ´v·}±}³€ r„   )r‰   ztensorflow.math.floor(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>¼   rœ   r„   ztensorflow.math.exp(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>À   rœ   r„   ztensorflow.math.sqrt(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>Ä   rœ   r„   rI   ztensorflow.math.pow(x, 4)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>È   rœ   r„   ztensorflow.math.cos(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   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„   rQ   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„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>Ô   rœ   r„   ztensorflow.math.asin(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>Ø   rœ   r„   ztensorflow.math.tan(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>Ü   rœ   r„   ztensorflow.math.atan(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>à   rœ   r„   ztensorflow.math.atan2(y, x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>ä   s   € ¼¿¹»€ r„   ztensorflow.math.cosh(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>è   rœ   r„   ztensorflow.math.acosh(x)c                  ó.   — t        j                  dd«      S ©Né   é   r£   rƒ   r„   rQ   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„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>ð   r¯   r„   ztensorflow.math.asinh(x)c                  ó.   — t        j                  dd«      S r¬   r£   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>ô   r¯   r„   ztensorflow.math.tanh(x)c                  ó.   — t        j                  dd«      S r¬   r£   rƒ   r„   rQ   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„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>ý   s   € ¤§¡¨s°BÓ 7€ r„   ztensorflow.math.erf(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>  ó   € ¤§¡£€ r„   ztensorflow.math.lgamma(x)c                  ó*   — t        j                   «       S rš   r›   rƒ   r„   rQ   r…   z&test_tensorflow_math.<locals>.<lambda>  rµ   r„   )rW   r8   r   r‘   r5   rŒ   r   r   r   r   r   r   r   r   r   r   r   r   r’   r   r   r    r!   r"   r#   r'   r(   r•   s    rQ   Útest_tensorflow_mathr·   ©   sá  € åÜÐ'Ô(äŒq‹6€DÜ˜4Ó Ð$<Ò<Ð<Ð<Ü¤˜t TÔ*ä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÔ*ä”1‹:€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/FÕGä”‹8€DÜ˜4Ó Ð$>Ò>Ð>Ð>Ü¤˜t TÑ/FÕGäŒq‹6€DÜ˜4Ó Ð$<Ò<Ð<Ð<Ü¤˜t TÑ/FÕGä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/FÕGä�‰6€DÜ˜4Ó Ð$?Ò?Ð?Ð?Ü¤˜t TÑ/FÕGäŒq‹6€DÜ˜4Ó Ð$<Ò<Ð<Ð<Ü¤˜t TÑ/FÕGä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/NÕOäŒq‹6€DÜ˜4Ó Ð$<Ò<Ð<Ð<Ü¤˜t TÑ/FÕGä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/FÕGäŒq‹6€DÜ˜4Ó Ð$<Ò<Ð<Ð<Ü¤˜t TÑ/FÕGä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/FÕGä””A‹;€DÜ˜4Ó Ð$AÒAÐAÐAÜ¤¤1˜v tÑ1HÕIä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/FÕGä”‹8€DÜ˜4Ó Ð$>Ò>Ð>Ð>Ü¤˜t TÑ/KÕLä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/KÕLä”‹8€DÜ˜4Ó Ð$>Ò>Ð>Ð>Ü¤˜t TÑ/KÕLä”‹7€DÜ˜4Ó Ð$=Ò=Ð=Ð=Ü¤˜t TÑ/KÕLä”‹8€DÜ˜4Ó Ð$>Ò>Ð>Ð>ÜÜ	
ˆˆdÑ7õ9ô Œq‹6€DÜ˜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))r5   r$   r‘   r%   r&   rƒ   r„   rQ   Útest_tensorflow_complexesr¹   
  sJ   € Üœ2œa›5Ó!Ð%>Ò>Ð>Ð>Üœ2œa›5Ó!Ð%>Ò>Ð>Ð>Üœ3œq›6Ó"Ð&@Ò@Ð@Ñ@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))rW   r8   r
   r‘   r’   r5   r�   r   r   r   r   r   r•   s    rQ   Útest_tensorflow_relationalr»     s  € ÝÜÐ'Ô(äŒa”‹8€DÜ˜4Ó Ð$AÒAÐAÐAÜ"¤A¤q 6¨4Ô0äŒa”‹8€DÜ˜4Ó Ð$EÒEÐEÐEÜ"¤A¤q 6¨4Ô0äŒa”‹8€DÜ˜4Ó Ð$IÒIÐIÐIÜ"¤A¤q 6¨4Ô0äŒa”‹8€DÜ˜4Ó Ð$CÒCÐCÐCÜ"¤A¤q 6¨4Ô0äŒa”‹8€DÜ˜4Ó Ð$FÒFÐFÐFÜ"¤A¤q 6¨4Ô0äŒa”‹8€DÜ˜4Ó Ð$@Ò@Ð@Ð@Ü"¤A¤q 6¨4Õ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)rk   z1.14)Útensorflow_versionz%tensorflow.linalg.matrix_transpose(M)z1.13ztensorflow.matrix_transpose(M))rW   r8   r=   r5   ru   r?   r1   r@   rA   r4   r0   r}   r2   rx   ÚTr•   s    rQ   Útest_tensorflow_matricesrÀ   /  sõ  € åÜÐ'Ô(ä€DÜ˜4Ó  CÒ'Ð'Ð'Ü¤˜t TÔ*äŒq‰5€DÜ˜4Ó Ð$?Ò?Ð?Ð?Ü¤¤1˜v tÔ,äŒq‰5€DÜ˜4Ó Ð$DÒDÐDÐDÜ¤¤1˜v tÔ,äœ1œaÓ €DÜ˜4Ó Ð$DÒDÐDÐDÜ¤¤1˜v tÔ,äŒQ‰3Œq‰5”‰7€DÜ˜4Ó ð	9ò9ð 9ð 9ô ¤¤1¤a¬˜|¨TÔ2äˆa‰4€DÜ˜4Ó ØEòFð Fð Fä¤˜t TÔ*ä”‹8€DÜ˜4Ó Ð$@Ò@Ð@Ð@Ü¤˜t TÔ*ä”q‹>€DÜ˜4Ó Ð$>Ò>Ð>Ð>Ü%¤q d¨DÔ1ä”1‹:€DÜ˜4Ó Ð$>Ò>Ð>Ð>Ü&¬ t¨T¸TÕBä�3‰3€DÜ˜4°FÔ;Ø/ò0ð 0ð 0ä˜4°FÔ;Ø(ò)ð )ð )ô ¤˜t TÕ*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˜   rD   r=   r®   r?   r:   r­   r>   rI   éþÿÿÿéÿÿÿÿ)rW   r8   rX   rY   r[   r\   r]   r3   r6   r7   Úconstantr^   Úmatmulrg   )
rE   rr   r=   r?   Úcgrl   ÚmaÚmbr’   Úcs
             rQ   Útest_codegen_einsumrÊ   e  s  € ÝÜÐ'Ô(ä�H‰H‹J€EØ	×	Ñ	Ó	ñ Ü—)‘)—,‘,×&Ñ&¨UÐ&Ó3ˆä˜˜a Ó#ˆÜ˜˜a Ó#ˆä$ Q¨¡UÓ+ˆÜ�a˜�V˜R Ó.ˆä�[‰[˜1˜a˜& 1 a &Ð)Ó*ˆÜ�[‰[˜1˜R˜& 2 q 'Ð*Ó+ˆØ�K‰K™˜"˜b›	Ó"ˆØ�K‰KœŸ	™	 " 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@   rA   r­   r>   rI   rÂ   rÃ   r   é   z'tensorflow.linalg.einsum("ab,cd", M, N)r:   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)rW   r8   rX   rY   r[   r\   r]   r3   rÄ   r   r5   r7   r^   Úeinsumrg   r   r   Ú	transposer	   )rE   rr   r=   r?   r@   rA   rÇ   rÈ   ÚmcÚmdrÆ   rl   r’   rÉ   s                 rQ   Útest_codegen_extrarÑ   z  sj  € ÝÜÐ'Ô(ä�H‰H‹J€EØ	×	Ñ	Ó	ñ BÜ—)‘)—,‘,×&Ñ&Ó(ˆä˜˜a Ó#ˆÜ˜˜a Ó#ˆÜ˜˜a Ó#ˆÜ˜˜a Ó#ˆÜ�[‰[˜1˜a˜& 1 a &Ð)Ó*ˆÜ�[‰[˜1˜R˜& 2 q 'Ð*Ó+ˆÜ�[‰[˜1˜a˜& 1 a &Ð)Ó*ˆÜ�[‰[˜1˜R˜& 1 a &Ð)Ó*ˆä  1Ó%ˆÜ˜rÓ"Ø5ò6ð 	6ð 6ä�a˜�V˜R Ó.ˆØ�K‰K™˜"˜b›	Ó"ˆØ�K‰KœŸ	™	 '¨2¨rÓ2Ó3ˆØ�Q‘�|‰|Œ~Ðˆ~ä�a˜‹^ˆÜ˜rÓ"Ð&AÒAÐAÐAÜ�a˜�V˜R Ó.ˆØ�K‰K™˜"˜b›	Ó"ˆØ�K‰K˜˜R™Ó ˆØ�Q‘�|‰|Œ~Ðˆ~ä�a˜˜AÓˆÜ˜rÓ"Ø?ò@ð 	@ð @ä�a˜˜A�Y  LÓ1ˆØ�K‰K™˜"˜b "›Ó&ˆØ�K‰K˜˜R™ "™Ó%ˆØ�Q‘�|‰|Œ~Ðˆ~ä�a˜˜A˜qÓ!ˆÜ˜rÓ"ðHòHð 	Hð Hô �a˜˜A˜q�\ 2 |Ó4ˆØ�K‰K™˜"˜b " bÓ)Ó*ˆØ�K‰K˜˜R™ "™ rÑ)Ó*ˆØ�Q‘�|‰|Œ~Ðˆ~ä˜˜Q ˜FÓ#ˆÜ˜rÓ"Ð&GÒGÐGÐGÜ�a�T˜2˜|Ó,ˆØ�K‰K™˜"›ÓˆØ�K‰KœŸ™ RÓ(Ó)ˆØ�Q‘�|‰|Œ~Ðˆ~äÔ+¨A¨qÓ1²<Ó@ˆÜ˜rÓ"ðIòIð 	Ið Iô �a˜�V˜R Ó.ˆØ�K‰K™˜"˜b›	Ó"ˆØ�K‰KœŸ™¤R§Y¡Y¨w¸¸BÓ%?ÂÓNÓOˆØ�Q‘�|‰|Œ~Ðˆ~äÔ-¨a°Ó3°VÓ<ˆÜ˜rÓ"Ø:ò;ð 	;ð ;ä�a˜�V˜R Ó.ˆØ�K‰K™˜"˜b›	Ó"ˆØ�K‰KœŸ	™	 ,°°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])r3   r5   r_   )rÓ   rÔ   rÕ   ÚFs       rQ   Útest_MatrixElement_printingr×   Ä  sŠ   € Ü�S˜!˜QÓ€AÜ�S˜!˜QÓ€AÜ�S˜!˜QÓ€Aä˜1˜T™7Ó# yÒ0Ð0Ð0Ü˜1˜q ™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‘   r5   r•   s    rQ   Útest_tensorflow_DerivativerÙ   Ð  s,   € Ü”cœ!“fœaÓ €DÜ˜4Ó Ø<ò=ð =ñ =r„   c                  ó:  — t         st        d«       t        d«      } t        dt	        | «      fd«      }t        |«      }d}t        |«      |k(  sJ d|› d|› �«       ‚t        d«      dft        d	«      d
ft        d«      d
fdfD ]Q  \  }} t        | |d¬«      t         j                  |g«      ¬«      }||k(  j                  «       j                  «       rŒQJ ‚ t        d«      } t        dt        | «      fd«      }t        |«      }d}t        |«      |k(  sJ d|› d|› �«       ‚t        d	«      dft        d«      dft        d«      d
fdfD ]Q  \  }} t        | |d¬«      t         j                  |g«      ¬«      }||k(  j                  «       j                  «       rŒQJ ‚ y )Nr˜   r‘   g        )ç      ð?Tz5tensorflow.where(tensorflow.math.is_nan(x), 0.0, 1.0)zIncorrect printed result z, expected ÚnanÚinfrÛ   z-inf)rÛ   rÛ   r:   )Úmodules)r‘   z5tensorflow.where(tensorflow.math.is_inf(x), 0.0, 1.0))rW   r8   r   r   r*   r5   Úfloatr7   rÄ   Únumpyrg   r+   )r‘   Ú
expressionÚprinted_codeÚexpected_printed_codeÚ_inputÚ	_expectedÚ_outputs          rQ   Útest_tensorflow_isnan_isinfrç   Õ  sá  € ÝÜÐ'Ô(ô 	�‹€Aä˜C¤ q£˜?¨KÓ8€JÜ" :Ó.€LØSÐÜ˜:Ó&Ð*?Ò?ð  NÐC\Ð]iÐ\jÐjuð  wLð  vMð  BNó  NÐ?Ü$ U›|¨SÐ1´E¸%³LÀ#Ð3FÌÈvËÐX[ÐH\Ð^hÐiò 4Ñˆ�	ØA”(˜A 
°LÔAÄBÇKÁKÐQWÐPXÓDYÔZˆØ˜9Ñ$×+Ñ+Ó-×1Ñ1Õ3Ð3Ð3ð4ô
 	�‹€Aä˜C¤ q£˜?¨KÓ8€JÜ" :Ó.€LØSÐÜ˜:Ó&Ð*?Ò?ð  NÐC\Ð]iÐ\jÐjuð  wLð  vMð  BNó  NÐ?Ü$ U›|¨SÐ1´E¸&³MÀ3Ð3GÌ%ÐPUË,ÐX[ÐI\Ð^hÐiò 4Ñˆ�	ØA”(˜A 
°LÔAÄBÇKÁKÐQWÐPXÓDYÔZˆØ˜9Ñ$×+Ñ+Ó-×1Ñ1Õ3Ð3Ð3ñ4r„   )F)gr�   Úsympy.core.functionr   Úsympy.core.symbolr   Úsympyr   Ú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.codegen.cfunctionsr*   r+   Úsympy.matricesr,   r-   r.   r/   Úsympy.matrices.expressionsr0   r1   r2   r3   r4   Úsympy.printing.tensorflowr5   Ú3sympy.tensor.array.expressions.from_matrix_to_arrayr6   Úsympy.utilities.lambdifyr7   Úsympy.testing.pytestr8   r9   rW   r:   ÚosÚenvironr=   r?   r@   rA   r‘   r’   r“   r”   ÚrangeÚlistÚllorÄ   Úm3x3Ú	m3x3sympyru   rx   r}   rŒ   r�   r–   r·   r¹   r»   rÀ   rÊ   rÑ   r×   rÙ   rç   )rp   s   0rQ   ú<module>rý      s¤  ðÛ Ý *Ý %Ý ÷ó ç 8× 8Ý (÷$÷ $÷ $÷ $÷ $÷ $õ $÷ 2ß >Ó >÷?õ ?å 5Ý WÝ -Ý %Ý &ñ   Ó-Ð -€€ZáãØ),€B‡J�JÐ%Ñ&ñ ��a˜Ó€Ù��a˜Ó€Ù��a˜Ó€Ù��a˜Ó€á�YÓ�
€€1€aˆà€>Ù(-¨a°°A«Ö
7 1‰4‘�a˜˜1™“ÕÒ
7€CØ�;‰;�sÓ€DÙ�s“€IóLó@Lò<ñ$ 7óñ" 7óò .ð ñ]1ó ð]1ò@Aò1ð> ñ2+ó ð2+òjò*GòT	Jò=ó
4ùò[ 8s   ÄF