Ë
    7^(hÊA  ã            
       ó  — 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�M ePd dd«      D � cg c]  }  eQ eP| | dz   «      «      ‘Œ c} ZReGj§                  eReGj¨                  ¬«      ZU e	eR«      ZVd„ ZWd„ fd„ZXd„ fd„ZYd„ ZZd „ Z[d!„ Z\d"„ Z]d#„ Z^d$„ Z_d%„ Z`d&„ Zad'„ Zbd(„ Zcd)„ Zdd*„ Zed+„ Zfd,„ Zgyc c} w )-é    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 té	   ©Údtypec                 óÆ  — t        | |d«      }| D �cg c](  }t        |j                  d   |j                  d   «      ‘Œ* }}|D �cg c]5  }t        j	                  |j                  «       t        j                  ¬«      ‘Œ7 }} ||Ž }|j                  t        t        | |«      «      «      j                  «       }t        |t        «      r|j                  «       }t        |d«      rh|j                  r\t        |t        j                  «      rB|j!                  «       dk(  r/|j#                  «       }t%        |«      }t'        ||z
  «      dk  sJ ‚y |j(                  st        |t*        «      rNt        j	                  |j                  «       t        j                  ¬«      }t        j-                  ||d¬«      sJ ‚y t/        dt1        |«      › d	t1        |«      › �«      ‚c c}w c c}w )
Nr=   r   é   rD   Ú	is_numberç�íµ ÷Æ°>©ÚatolzCannot compare z with )r   r4   Úshaper=   ÚtensorÚtolistÚfloat64ÚsubsÚdictÚzipÚdoitÚ
isinstancer   ÚhasattrrH   ÚTensorÚdimÚitemÚfloatÚabsÚ	is_Matrixr	   ÚallcloseÚ	TypeErrorÚtype)Ú	variablesÚexprÚfÚiÚrandom_matricesÚrandom_variablesÚrÚes           ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/printing/tests/test_torch.pyÚ_compare_torch_matrixrh   +   sm  € Ü�˜D 'Ó*€AàCLÖM¸a”z !§'¡'¨!¡*¨a¯g©g°a©jÕ9ÐM€OÐMØO^Ö_È!œŸ™ Q§X¡X£Z´u·}±}˜ÕEÐ_ÐÐ_Ù	ÐÐ€AØ�	‰	”$”s˜9 oÓ6Ó7Ó8×=Ñ=Ó?€Aä�!Ô*Ô+Ø�F‰F‹Hˆäˆq�+Ô 1§;¢;Ü�aœŸ™Ô&¨1¯5©5«7°aª<Ø—‘“ˆAÜ�a“ˆAÜ�q˜1‘u“: Ò$Ð$Ð$Øà‡{‚{”j ¤IÔ.Ü�L‰L˜Ÿ™›¬5¯=©=ˆLÓ9ˆÜ�~‰~˜a ¨ˆ~Ô.Ð.Ñ.ä˜/¬$¨q«'¨°&¼¸a»¸	ÐBÓCÐCùò' NùÚ_s   ’-GÁ:Gc                  ó.   — t        j                  dd«      S ©Néûÿÿÿé   ©ÚrandomÚuniform© ó    rg   ú<lambda>rr   D   s   € ´v·~±~ÀbÈ!Ó7L€ rq   c                 ó¦  — t        | |d«      }| D �cg c]	  } |«       ‘Œ }}|D �cg c]'  }t        j                  |t        j                  ¬«      ‘Œ) }} ||Ž }t	        |t        j
                  «      r|j                  «       }|j                  t        t        | |«      «      «      j                  «       }	t        ||	z
  «      dk  sJ ‚y c c}w c c}w )Nr=   rD   rI   )r   r=   rM   rO   rT   rV   rX   rP   rQ   rR   rS   rZ   ©
r_   r`   Úrngra   ÚvÚrvsrb   Út_rvsre   rf   s
             rg   Ú_compare_torch_scalarry   D   s¬   € Ü�˜D 'Ó*€AØ#Ö
$�Q‰3�5Ð
$€CÐ
$Ø;>Ö?°aŒU�\‰\˜!¤5§=¡=ˆ\Õ1Ð?€EÐ?Ù	ˆ5ˆ	€AÜ�!”U—\‘\Ô"Ø�F‰F‹HˆØ�	‰	”$”s˜9 cÓ*Ó+Ó,×1Ñ1Ó3€AÜˆq�1‰u‹:˜ÒÐÑùò %ùÚ?s
   ’C	¦,Cc                  ó.   — t        j                  dd«      S )Nr   é
   )rn   Úrandintrp   rq   rg   rr   rr   O   s   € ¼6¿>¹>È!ÈRÓ;P€ rq   c           
      óh  — t        | |d«      }| D �cg c]	  } |«       ‘Œ }}|D �cg c]'  }t        j                  |t        j                  ¬«      ‘Œ) }} ||Ž }t	        |j                  t        t        | |«      «      «      j                  «       «      }	|j                  «       |	k(  sJ ‚y c c}w c c}w )Nr=   rD   )
r   r=   rM   rO   ÚboolrP   rQ   rR   rS   rX   rt   s
             rg   Ú_compare_torch_relationalr   O   s”   € Ü�˜D 'Ó*€AØ#Ö
$�Q‰3�5Ð
$€CÐ
$Ø;>Ö?°aŒU�\‰\˜!¤5§=¡=ˆ\Õ1Ð?€EÐ?Ù	ˆ5ˆ	€AÜˆT�Y‰Y”tœC 	¨3Ó/Ó0Ó1×6Ñ6Ó8Ó9€AØ�6‰6‹8�qŠ=Ð‰=ùò	 %ùÚ?s
   ’B*¦,B/c                  óª	  — t         st        d«       t        t        «      } t	        | «      dk(  sJ ‚t        t        | d«      }t         j                  g d¢gt         j                  ¬«      } ||«      }t         j                  |«      }t         j                  ||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„ ¬«       y )2NúPyTorch not installedztorch.abs(x)r=   )éÿÿÿÿé   éýÿÿÿéüÿÿÿrD   ztorch.sign(x)c                  ó.   — t        j                  dd«      S )Niöÿÿÿr{   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>f   s   € ´&·.±.ÀÀbÓ2I€ rq   )ru   ztorch.ceil(x)c                  ó*   — t        j                   «       S ©N©rn   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>j   ó   € ´&·-±-³/€ rq   ztorch.floor(x)c                  ó*   — t        j                   «       S rˆ   r‰   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>n   rŠ   rq   ztorch.exp(x)c                  ó.   — t        j                  dd«      S ©Néþÿÿÿrƒ   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>r   ó   € ´&·.±.ÀÀQÓ2G€ rq   ztorch.sqrt(x)c                  ó*   — t        j                   «       S rˆ   r‰   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>v   rŠ   rq   é   ztorch.pow(x, 4)c                  ó*   — t        j                   «       S rˆ   r‰   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>z   rŠ   rq   ztorch.cos(x)c                  ó*   — t        j                   «       S rˆ   r‰   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>~   rŠ   rq   ztorch.acos(x)c                  ó.   — t        j                  dd«      S ©Ng®Gáz®ï¿g®Gáz®ï?rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>‚   ó   € ´&·.±.ÀÈÓ2M€ rq   ztorch.sin(x)c                  ó*   — t        j                   «       S rˆ   r‰   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>†   rŠ   rq   ztorch.asin(x)c                  ó.   — t        j                  dd«      S r•   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>Š   r–   rq   ztorch.tan(x)c                  ó.   — t        j                  dd«      S )Ng      ø¿g      ø?rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>Ž   ó   € ´&·.±.ÀÀsÓ2K€ rq   ztorch.atan(x)c                  ó.   — t        j                  dd«      S rj   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>’   r�   rq   ztorch.atan2(y, x)c                  ó.   — t        j                  dd«      S rj   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>–   s   € ´F·N±NÀ2ÀqÓ4I€ rq   ztorch.cosh(x)c                  ó.   — t        j                  dd«      S r�   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>š   r�   rq   ztorch.acosh(x)c                  ó.   — t        j                  dd«      S )Ngš™™™™™ñ?rl   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>ž   ó   € ´&·.±.ÀÀaÓ2H€ rq   ztorch.sinh(x)c                  ó.   — t        j                  dd«      S r�   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>¢   r�   rq   ztorch.asinh(x)c                  ó.   — t        j                  dd«      S rj   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>¦   r�   rq   ztorch.tanh(x)c                  ó.   — t        j                  dd«      S r�   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>ª   r�   rq   ztorch.atanh(x)c                  ó.   — t        j                  dd«      S )NgÍÌÌÌÌÌì¿gÍÌÌÌÌÌì?rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>®   rš   rq   ztorch.erf(x)c                  ó.   — t        j                  dd«      S r�   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>²   r�   rq   ztorch.lgamma(x)c                  ó.   — t        j                  dd«      S )Ng      à?rl   rm   rp   rq   rg   rr   z!test_torch_math.<locals>.<lambda>¶   rŸ   rq   ) r=   r.   r   Úxr   r   rM   rO   rZ   Úallr   ry   r   r   r   r-   r   r   r   r   r   r    r!   Úyr"   r#   r$   r%   r&   r'   r+   r,   )r`   ra   ÚmaÚy_absÚcs        rg   Útest_torch_mathr¬   X   s  € ÝÜÐ$Ô%äŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Ü”�D˜'Ó"€AÜ	�‰’Ð'¬u¯}©}ˆÓ	=€BÙˆb‹E€EÜ�	‰	�"‹€AÜ�9‰9�U˜a‘ZÔ Ð Ð ä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*IÕJä”1‹:€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*AÕBä”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœ1˜$ Ñ*AÕBäŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ñ*GÕHä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*AÕBä�‰6€DÜ�dÓÐ0Ò0Ð0Ð0Üœ1˜$ Ñ*AÕBäŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ñ*AÕBä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*MÕNäŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ñ*AÕBä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*MÕNäŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ñ*KÕLä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*GÕHä””A‹;€DÜ�dÓÐ2Ò2Ð2Ð2Üœ1œa˜& $Ñ,IÕJä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*GÕHä”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœ1˜$ Ñ*HÕIä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*GÕHä”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœ1˜$ Ñ*GÕHä”‹7€DÜ�dÓ˜Ò.Ð.Ð.Üœ1˜$ Ñ*GÕHä”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœ1˜$ Ñ*KÕLäŒq‹6€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ñ*GÕHä”A‹;€DÜ�dÓÐ0Ò0Ð0Ð0Üœ1˜$ Ñ*HÖIrq   c                  ó²   — t        t        t        «      «      dk(  sJ ‚t        t        t        «      «      dk(  sJ ‚t        t	        t        «      «      dk(  sJ ‚y )Nztorch.real(x)ztorch.imag(x)ztorch.angle(x))r   r(   r¦   r)   r*   rp   rq   rg   Útest_torch_complexesr®   ¹   sH   € Ü”bœ“eÓ Ò/Ð/Ð/Ü”bœ“eÓ Ò/Ð/Ð/Ü”cœ!“fÓÐ!1Ò1Ð1Ñ1rq   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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   ©r`   s    rg   Útest_torch_relationalr±   ¿   s  € ÝÜÐ$Ô%äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÔ+äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÔ+äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÔ+äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÔ+äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÔ+äŒa”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœq¤!˜f dÕ+rq   c                  ó  — t         €t        d«       t        } t        | «      dk(  sJ ‚t	        t        f| d«      }t        d«      }t         j                  |j                  «       t         j                  ¬«      }t         j                   ||«      |«      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         j                  |j                  «       t         j                  ¬«      }t	        t        f| d«      } ||«      }t         j$                  j'                  |«      }t         j                  ||«      sJ ‚y )Nr�   r>   r=   r?   rD   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   rM   rN   rO   r\   r@   rh   rA   rB   r3   r0   r1   r2   ÚlinalgÚinv)r`   ra   Úeye_matÚ
eye_tensorÚresultÚexpecteds         rg   Útest_torch_matrixr¹   Ü   s  € Ü€}ÜÐ$Ô%ä€DÜ�dÓ˜sÒ"Ð"Ð"Ü”!��t˜WÓ%€AÜ�!‹f€GÜ—‘˜gŸn™nÓ.´e·m±m�ÓD€JÜ�>‰>™!˜J›-¨Ô4Ð4Ð4äŒq‰5€DÜ�dÓÐ3Ò3Ð3Ð3Üœ1œa˜& $Ô'ä�‰6€DÜ�dÓÐ<Ò<Ð<Ð<Üœ1˜$ Ô%äŒq‰5”1‰9”q‰=€DÜ�dÓÐUÒUÐUÐUÜœ1œa¤¤A˜,¨Ô-ä”‹8€DÜ�dÓÐ/Ò/Ð/Ð/Üœ1˜$ Ô%ä”q‹>€DÜ�dÓ˜~Ò-Ð-Ð-Üœ1˜$ Ô%äœ1œaÓ €DÜ�dÓÐ0Ò0Ð0Ð0Üœ1œa˜& $Ô'ä”1‹:€DÜ�dÓÐ4Ò4Ð4Ð4ô �!‹f€GÜ—‘˜gŸn™nÓ.´e·m±m�ÓD€JÜ”!��t˜WÓ%€AÙˆz‹]€FÜ�|‰|×Ñ 
Ó+€HÜ�>‰>˜& (Ô+Ð+Ñ+rq   c                  óB  — t         st        d«       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                  ¬«      }t         j                  ddgdd	ggt         j                  ¬«      }t         j                  ddgddggt         j                  ¬«      }t         j                  ddgd
dggt         j                  ¬«      }t        | |«      }t        |«      dk(  sJ ‚t        | |f|d«      }	 |	||«      }
t         j                  d||«      }t         j                  |
|«      sJ ‚t        | |«      }t        |«      dk(  sJ ‚t        | |f|d«      }	 |	||«      }
||z   }t         j                  |
|«      sJ ‚t        | ||«      }t        |«      dk(  sJ ‚t        | ||f|d«      }	 |	|||«      }
||z   |z   }t         j                  |
|«      sJ ‚t        | |||«      }t        |«      dk(  sJ ‚t        | |||f|d«      }	 |	||||«      }
||z   |z   |z   }t         j                  |
|«      sJ ‚t        | ddg«      }t        |«      dk(  sJ ‚t        | f|d«      }	 |	|«      }
|j                  }t         j                  |
|«      sJ ‚t        t        | |«      g d¢«      }t        |«      dk(  sJ ‚t        | |f|d«      }	 |	||«      }
t         j                  d||«      j                  dddd«      }t         j                  |
|«      sJ ‚t        t        | |«      d«      }t        |«      dk(  sJ ‚t        | |f|d«      }	 |	||«      }
t         j                  d||«      }t         j                  |
|«      sJ ‚y ) Nr�   r>   rƒ   r@   rA   rB   ç      ð?ç       @ç      @ç      @rD   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)rG   r   zM.permute(1, 0))rG   rƒ   r?   r   z/torch.einsum("ab,cd", M, N).permute(1, 2, 3, 0)zab,cdr?   )rG   rƒ   z torch.einsum("ab,bc->acb", M, N)z
ab,bc->acb)r=   r.   r   rM   rO   r
   r   r   Úeinsumr\   r   r   ÚTÚpermuter   )r>   r@   rA   rB   r©   ÚmbÚmcÚmdÚcgra   r¨   r«   s               rg   Útest_torch_array_operationsrÈ     sœ  € ÝÜÐ$Ô%ä�S˜!˜QÓ€AÜ�S˜!˜QÓ€AÜ�S˜!˜QÓ€AÜ�S˜!˜QÓ€Aä	�‰˜˜B�x " b Ð*´%·-±-ˆÓ	@€BÜ	�‰˜˜C�y 3¨ )Ð,´E·M±MˆÓ	B€BÜ	�‰˜˜B�x " b Ð*´%·-±-ˆÓ	@€BÜ	�‰˜˜C�y 2 r (Ð+´5·=±=ˆÓ	A€Bä	˜A˜qÓ	!€BÜ�b‹>Ð:Ò:Ð:Ð:Ü�!�Q�˜˜WÓ%€AÙ	ˆ"ˆb‹	€AÜ�‰�W˜b "Ó%€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Ü�!�Q˜˜1�˜r 7Ó+€AÙ	ˆ"ˆb�"�bÓ€AØ
ˆR‰�"‰�rÑ€AÜ�>‰>˜!˜QÔÐÐä	�Q˜˜A˜Ó	€BÜ�b‹>Ð.Ò.Ð.Ð.Ü�!��r˜7Ó#€AÙ	ˆ"‹€AØ
�‰€AÜ�>‰>˜!˜QÔÐÐä	Ô'¨¨1Ó-ª|Ó	<€BÜ�b‹>ÐNÒNÐNÐNÜ�!�Q�˜˜WÓ%€AÙ	ˆ"ˆb‹	€AÜ�‰�W˜b "Ó%×-Ñ-¨a°°A°qÓ9€AÜ�>‰>˜!˜QÔÐÐä	Ô)¨!¨QÓ/°Ó	8€BÜ�b‹>Ð?Ò?Ð?Ð?Ü�!�Q�˜˜WÓ%€AÙ	ˆ"ˆb‹	€AÜ�‰�\ 2 rÓ*€AÜ�>‰>˜!˜QÔÐÑrq   c                  ó^   — t        t        t        «      t        «      } t        | «      dk(  sJ ‚y)zTest derivative handling.ú'torch.autograd.grad(torch.sin(x), x)[0]N)r   r   r¦   r   r°   s    rg   Útest_torch_derivativerË   K  s&   € ä”cœ!“fœaÓ €DÜ�dÓÐHÒHÐHÑHrq   c                  ó4  — 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 ‚y )
Nr�   zdtype=torch.float64zdtype=torch.float32ztorch.float32rD   T©Úrequires_gradzrequires_grad=True)rÎ   rE   )
r=   r.   r   r¦   r   r¨   r   ÚzÚtr   )r`   r·   s     rg   Útest_torch_printing_dtyperÑ   Q  s±   € ÝÜÐ$Ô%ô ”A”sœ1“v�;¤¤Q£¬!¨ Ð-Ó.€DØ ¤J¨tÓ$4Ñ4Ð4Ð4ð !¤J¨t¸?Ô$KÑKÐKÐKô ˜¨DÔ1€FØ 6Ñ)Ð)Ð)Ø  FÑ*Ð*Ð*ô ˜¨D¸ÔH€FØ 6Ñ)Ð)Ð)Ø  FÑ*Ð*Ñ*rq   c                  ój  — t         st        d«       t        t        «      t	        t
        «      z   } t        t        t
        g| d«      }t         j                  dd¬«      }t         j                  dd¬«      } |||«      }|j                  sJ ‚|j                  «        t        |j                  j                  «       t        t	        d«      j                  «       «      z
  «      dk  sJ ‚t        |j                  j                  «       t        t        d«      j                  «        «      z
  «      dk  sJ ‚y )Nr�   r=   r»   TrÍ   r¼   rI   )r=   r.   r   r¦   r   r¨   r   rM   rÎ   ÚbackwardrZ   ÚgradrX   rY   Úevalf)r`   ra   Úx_valÚy_valr·   s        rg   Útest_requires_gradrØ   g  sè   € ÝÜÐ$Ô%äŒq‹6”Cœ“F‰?€DÜ”!”Q�˜˜wÓ'€Aô �L‰L˜¨DˆLÓ1€EÜ�L‰L˜¨DˆLÓ1€EÙˆu�e‹_€FØ×ÒÐÐØ
‡O�OÔô ˆu�z‰z�‰Ó ¤5¬¨S«¯©Ó)9Ó#:Ñ:Ó;¸dÒBÐBÐBô ˆu�z‰z�‰Ó ¤5¬#¨c«(¯.©.Ó*:Ð):Ó#;Ñ;Ó<¸tÒCÐCÑCrq   c                  ó€  — 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}|j                  dd«      }|j                  dd«      }||k(  sJ ‚t        t	        | «      | | «      }t        |«      }d}||k(  sJ ‚t        t	        | |z  |z  «      | |df|«      }t        |«      }d	}|j                  dd«      }|j                  dd«      }||k(  sJ ‚y )
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]ú Ú zÈtorch.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Ï   r`   r·   r¸   Únormalized_resultÚnormalized_expecteds           rg   Ú%test_torch_multi_variable_derivativesrß   |  sd  € ÝÜÐ$Ô%ä�gÓ�G€A€qˆ!ä”c˜!“f˜aÓ €DÜ�dÓÐHÒHÐHÐHä”c˜!“f˜q !˜fÓ%€DÜØóØ{ò|ð |ð |ô ”c˜!˜a™%“j ! QÓ'€DÜ˜Ó€FØ{€HØŸ™ s¨BÓ/ÐØ"×*Ñ*¨3°Ó3ÐØÐ 3Ò3Ð3Ð3ä”c˜!“f˜a Ó#€DÜ˜Ó€FØy€HØ�XÒÐÐä”c˜!˜a™% !™)“n a¨!¨Q¨°Ó3€DÜ˜Ó€Fð Z€HØŸ™ s¨BÓ/ÐØ"×*Ñ*¨3°Ó3ÐØÐ 3Ò3Ð3Ñ3rq   c                  óÀ  — t         st        d«       t        d«      } t        d«      }t        | dz  | «      }t	        | |d«      }t         j                  dd¬«      } ||«      }t         j                  |t         j                  d	«      «      sJ ‚t        t        | «      | df«      }t	        | |d«      }t         j                  d
d¬«      } ||«      }t         j                  |t         j                  d
«      d¬«      sJ ‚t         j                  t        j                  dz  d¬«      } ||«      }t         j                  |t         j                  d«      d¬«      sJ ‚t        | |dz  z  | |«      }t	        | |f|d«      }t         j                  dd¬«      }t         j                  dd¬«      } |||«      }t         j                  |t         j                  d«      «      sJ ‚y )Nr�   r¦   r¨   rƒ   r=   r¼   TrÍ   r¾   rÀ   gñhãˆµøä>rJ   r¿   r½   g      @)
r=   r.   r   r   r   rM   Úiscloser   ÚmathÚpi)r¦   r¨   r`   ra   rÖ   r·   r×   s          rg   Útest_torch_derivative_lambdifyrä   �  sŒ  € ÝÜÐ$Ô%ä�‹€AÜ�‹€Aä�a˜1‘f˜aÓ €DÜ��D˜'Ó"€AÜ�L‰L˜¨DˆLÓ1€EÙˆu‹X€FÜ�=‰=˜¤§¡¨cÓ!2Ô3Ð3Ð3ä”c˜!“f˜q !˜fÓ%€DÜ��D˜'Ó"€Aä�L‰L˜¨DˆLÓ1€EÙˆu‹X€FÜ�=‰=˜¤§¡¨cÓ!2¸ˆ=Ô>Ð>Ð>ä�L‰LœŸ™ 1™°DˆLÓ9€EÙˆu‹X€FÜ�=‰=˜¤§¡¨dÓ!3¸$ˆ=Ô?Ð?Ð?ä�a˜!˜q™&‘j ! QÓ'€DÜ�!�Q�˜˜wÓ'€AÜ�L‰L˜¨DˆLÓ1€EÜ�L‰L˜¨DˆLÓ1€EÙˆu�e‹_€FÜ�=‰=˜¤§¡¨cÓ!2Ô3Ð3Ñ3rq   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 ‚y )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   )r`   ræ   Úms      rg   Útest_torch_special_matricesrè   ½  sÛ   € ÝÜÐ$Ô%ä�A‹;€DÜ�dÓ˜~Ò-Ð-Ð-ä�‹€AÜ�A‹;€DÜ�dÓÐ0Ò0Ð0Ð0ä�a˜Ó€DÜ�dÓÐ4Ò4Ð4Ð4ä�5‹>�D€A€qÜ�a˜Ó€DÜ�dÓÐ4Ò4Ð4Ð4ä�Q˜‹?€DÜ�dÓÐ3Ò3Ð3Ð3ä�Q˜‹?€DÜ�dÓÐ3Ò3Ð3Ñ3rq   c                  óò  — t         st        d«       t        d«      } t        g | d«      } |«       }t         j	                  d«      }t         j                  ||«      sJ ‚t        dd«      } t        g | d«      } |«       }t         j                  d«      }t         j                  ||«      sJ ‚t        dd«      } t        g | d«      } |«       }t         j                  d«      }t         j                  ||«      sJ ‚y )Nr�   r?   r=   rƒ   )rƒ   r?   )
r=   r.   r5   r   r   r\   r6   Úzerosr7   Úones)r`   ra   r·   r¸   s       rg   Ú$test_torch_special_matrices_lambdifyrì   Ö  sÒ   € ÝÜÐ$Ô%ä�A‹;€DÜ��T˜7Ó#€AÙ‹S€FÜ�y‰y˜‹|€HÜ�>‰>˜& (Ô+Ð+Ð+ä�a˜Ó€DÜ��T˜7Ó#€AÙ‹S€FÜ�{‰{˜6Ó"€HÜ�>‰>˜& (Ô+Ð+Ð+ä�Q˜‹?€DÜ��T˜7Ó#€AÙ‹S€FÜ�z‰z˜&Ó!€HÜ�>‰>˜& (Ô+Ð+Ñ+rq   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 ‚y )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    rg   Útest_torch_complex_operationsrï   í  s´   € ÝÜÐ$Ô%ä”Q‹<€DÜ�dÓ˜Ò.Ð.Ð.ô ”Sœ“Vœa¤#¤a£&™jÑ(Ó)€DÜ�dÓÐWÒWÐWÐWä€DÜ�dÓ˜tÒ#Ð#Ð#àŒq‰5”1‰9€DÜ�dÓ˜zÒ)Ð)Ð)äŒq”1‰u‹:€DÜ�dÓÐ0Ò0Ð0Ñ0rq   c                  ór  — 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 ‚y )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    rg   Útest_torch_special_functionsrñ     s§   € ÝÜÐ$Ô%ä”Q‹<€DÜ�dÓÐ8Ò8Ð8Ð8ä”Q˜‹?€DÜ�dÓÐ6Ò6Ð6Ð6ä”‹8€DÜ�dÓÐ7Ò7Ð7Ð7ä�Qœ‹?€DÜ�dÓÐ9Ò9Ð9Ð9ä””Q“‹=€DÜ�dÓÐBÒBÐBÑBrq   )hrn   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Ð   ÚrangeÚlistÚllorM   rO   Úm3x3Ú	m3x3sympyrh   ry   r   r¬   r®   r±   r¹   rÈ   rË   rÑ   rØ   rß   rä   rè   rì   rï   rñ   )rb   s   0rg   ú<module>r     sŠ  ðÛ Û ç %Ý -ß -Ñ -Ý (÷7õ 7õ .ß 8× 8÷%÷ %÷ %÷ %÷ %÷ %ó %õ &Ý (÷1ó 1å %ß :Ñ :ß ß -Ñ -ñ 	�gÓ€á��a˜Ó€Ù��a˜Ó€Ù��a˜Ó€Ù��a˜Ó€á�YÓ�
€€1€aˆàÐÙ*/°°1°a«.Ö
9 Q‰4‘�a˜˜Q™“Õ Ò
9€CØ�<‰<˜ 5§=¡=ˆ<Ó1€DÙ�s“€IòDñ2 0Mó ñ 4Qó ò^JòB2ò,ò:,,ò^= ò@Iò+ò,Dò*4òB4ò@4ò2,ò.1ó*Cùòy :s   ÄE?