§
    OŠtjÊ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�>d„  ePd dd¦  «        D ¦   «         ZQeG R                    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     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/tests/test_torch.pyú
<listcomp>rJ   &   s,   € Ð
9Ð
9Ð
9 Q�4•�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ÐM¸a•z !¤'¨!¤*¨a¬g°a¬jÑ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   € Ð_Ð_Ð_È!�Ÿš Q§X¢X¡Z¤Zµu´}˜Ñ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ÐMÀ9ÐMÑMÔM€OØ_Ð_ÈÐ_Ñ_Ô_ÐØ	ˆÐÐ€AØ�	Š	•$•s˜9 oÑ6Ô6Ñ7Ô7Ñ8Ô8×=Ò=Ñ?Ô?€Aå�!Õ*Ñ+Ô+ð Ø�FŠF‰HŒHˆåˆq�+ÑÔð  1¤;ð Ý�a�œÑ&Ô&ð 	¨1¯5ª5©7¬7°aª<¨<Ø—’‘”ˆAÝ�a‘”ˆAÝ�q˜1‘u‘:”: Ò$Ð$Ð$Ð$ØˆFà„{ð D•j ¥IÑ.Ô.ð DÝ�LŠL˜Ÿš™œ­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È!Ñ7LÔ7L€ 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   ó   ø€ Ð
$Ð
$Ð
$�Qˆ3ˆ3‰5Œ5Ð
$Ð
$Ð
$rK   c                 óZ   — g | ](}t                                |t           j        ¬ ¦  «        ‘Œ)S rT   ©r=   rU   rW   rF   s     rI   rJ   z)_compare_torch_scalar.<locals>.<listcomp>G   ó*   € Ð?Ð?Ð?°a�U�\Š\˜!¥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”\Ñ"Ô"ð Ø�FŠF‰HŒHˆØ�	Š	•$•s˜9 cÑ*Ô*Ñ+Ô+Ñ,Ô,×1Ò1Ñ3Ô3€AÝˆq�1‰u‰:Œ:˜ÒÐÐÐÐÐ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ÝˆT�YŠY•t�C 	¨3Ñ/Ô/Ñ0Ô0Ñ1Ô1×6Ò6Ñ8Ô8Ñ9Ô9€AØ�6Š6‰8Œ8�qŠ=ˆ=ˆ=ˆ=ˆ=ˆ=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 )NiöÿÿÿrŠ   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>f   s   € µ&´.ÀÀbÑ2IÔ2I€ 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 ©Néþÿÿÿr”   rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>r   ó   € µ&´.ÀÀQÑ2GÔ2G€ 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 ©Ng®Gáz®ï¿g®Gáz®ï?rw   rz   rK   rI   r{   z!test_torch_math.<locals>.<lambda>‚   ó   € µ&´.ÀÈÑ2MÔ2M€ 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>Ž   ó   € µ&´.ÀÀsÑ2KÔ2K€ 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   € µF´NÀ2ÀqÑ4IÔ4I€ 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>ž   ó   € µ&´.ÀÀaÑ2HÔ2H€ 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 )NgÍÌÌÌÌÌì¿gÍÌÌÌÌÌì?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Þ  € Ýð &ÝÐ$Ñ%Ô%Ð%å�q‰6Œ6€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý•�D˜'Ñ"Ô"€AÝ	�Š���Ð'­u¬}ˆÑ	=Ô	=€BØˆAˆb‰EŒE€EÝ�	Š	�"‰Œ€AÝ�9Š9�U˜a’ZÑ Ô Ð Ð Ð å•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*IÐ*IÐJÑJÔJÐJå•1‰:Œ:€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå�q‰6Œ6€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå�‰6€DÝ�dÑÔÐ0Ò0Ð0Ð0Ð0Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå�q‰6Œ6€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*MÐ*MÐNÑNÔNÐNå�q‰6Œ6€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý�1˜$ Ð*AÐ*AÐBÑBÔBÐBå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*MÐ*MÐNÑNÔNÐNå�q‰6Œ6€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý�1˜$ Ð*KÐ*KÐLÑLÔLÐLå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå••A‰;Œ;€DÝ�dÑÔÐ2Ò2Ð2Ð2Ð2Ý�1�a˜& $Ð,IÐ,IÐJÑJÔJÐJå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�1˜$ Ð*HÐ*HÐIÑIÔIÐIå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå•‰7Œ7€DÝ�dÑÔ˜Ò.Ð.Ð.Ð.Ý�1˜$ Ð*GÐ*GÐHÑHÔHÐHå•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�1˜$ Ð*KÐ*KÐLÑLÔLÐLå�q‰6Œ6€DÝ�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�‘e”eÑÔ Ò/Ð/Ð/Ð/Ý•b�‘e”eÑÔ Ò/Ð/Ð/Ð/Ý•c�!‘f”fÑÔÐ!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•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+å�a•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+å�a•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+å�a•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+å�a•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+å�a•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�q¥!˜f dÑ+Ô+Ð+Ð+Ð+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Ò"Ð"Ð"Ð"Ý•!��t˜WÑ%Ô%€AÝ�!‰fŒf€GÝ—’˜gŸnšnÑ.Ô.µe´m�ÑDÔD€JÝ�>Š>˜!˜!˜J™-œ-¨Ñ4Ô4Ð4Ð4Ð4å�q‰5€DÝ�dÑÔÐ3Ò3Ð3Ð3Ð3Ý�1�a˜& $Ñ'Ô'Ð'å�‰6€DÝ�dÑÔÐ<Ò<Ð<Ð<Ð<Ý�1˜$ Ñ%Ô%Ð%å�q‰5•1‰9•q‰=€DÝ�dÑÔÐUÒUÐUÐUÐUÝ�1�a¥¥A˜,¨Ñ-Ô-Ð-å•‰8Œ8€DÝ�dÑÔÐ/Ò/Ð/Ð/Ð/Ý�1˜$ Ñ%Ô%Ð%å•q‰>Œ>€DÝ�dÑÔ˜~Ò-Ð-Ð-Ð-Ý�1˜$ Ñ%Ô%Ð%å�1�aÑ Ô €DÝ�dÑÔÐ0Ò0Ð0Ð0Ð0Ý�1�a˜& $Ñ'Ô'Ð'å•1‰:Œ:€DÝ�dÑÔÐ4Ò4Ð4Ð4Ð4õ �!‰fŒf€GÝ—’˜gŸnšnÑ.Ô.µe´m�ÑDÔD€JÝ•!��t˜WÑ%Ô%€AØˆQˆz‰]Œ]€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å	�Š˜˜B�x " b Ð*µ%´-ˆÑ	@Ô	@€BÝ	�Š˜˜C�y 3¨ )Ð,µE´MˆÑ	BÔ	B€BÝ	�Š˜˜B�x " b Ð*µ%´-ˆÑ	@Ô	@€BÝ	�Š˜˜C�y 2 r (Ð+µ5´=ˆÑ	AÔ	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Ð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ÐNÝ�!�Q�˜˜WÑ%Ô%€AØ	ˆˆ"ˆb‰	Œ	€AÝ�Š�W˜b "Ñ%Ô%×-Ò-¨a°°A°qÑ9Ô9€AÝ�>Š>˜!˜QÑÔÐÐÐå	Õ)¨!¨QÑ/Ô/°Ñ	8Ô	8€BÝ�b‰>Œ>Ð?Ò?Ð?Ð?Ð?Ý�!�Q�˜˜WÑ%Ô%€AØ	ˆˆ"ˆb‰	Œ	€AÝ�Š�\ 2 rÑ*Ô*€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�!‘f”f�aÑ Ô €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ð   € Ýð &ÝÐ$Ñ%Ô%Ð%õ •A•s�1‘v”v�;¥¥Q¡¤­!¨ Ð-Ñ.Ô.€DØ ¥J¨tÑ$4Ô$4Ð4Ð4Ð4Ð4ð !¥J¨t¸?Ð$KÑ$KÔ$KÐKÐKÐKÐKõ ˜¨DÐ1Ñ1Ô1€FØ 6Ð)Ð)Ð)Ð)Ø  FÐ*Ð*Ð*Ð*õ ˜¨D¸ÐHÑHÔH€FØ 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.  € Ýð &ÝÐ$Ñ%Ô%Ð%å�q‰6Œ6•C�‘F”F‰?€DÝ•!•Q�˜˜wÑ'Ô'€Aõ �LŠL˜¨DˆLÑ1Ô1€EÝ�LŠL˜¨DˆLÑ1Ô1€EØˆQˆu�e‰_Œ_€FØÔÐÐÐØ
‡O‚OÑÔÐõ ˆuŒz�ŠÑ Ô ¥5­¨S©¬¯ªÑ)9Ô)9Ñ#:Ô#:Ñ:Ñ;Ô;¸dÒBÐBÐBÐBõ ˆuŒz�ŠÑ Ô ¥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]ú Ú 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à   rl   rÈ   rÉ   Únormalized_resultÚnormalized_expecteds           rI   Ú%test_torch_multi_variable_derivativesrð   |  sÀ  € Ýð &ÝÐ$Ñ%Ô%Ð%å�gÑÔ�G€A€qˆ!å•c˜!‘f”f˜aÑ Ô €DÝ�dÑÔÐHÒHÐHÐHÐHå•c˜!‘f”f˜q !˜fÑ%Ô%€DÝØñô Ø{ò|ð |ð |ð |õ •c˜!˜a™%‘j”j ! QÑ'Ô'€DÝ˜ÑÔ€FØ{€HØŸš s¨BÑ/Ô/ÐØ"×*Ò*¨3°Ñ3Ô3ÐØÐ 3Ò3Ð3Ð3Ð3å•c˜!‘f”f˜a Ñ#Ô#€DÝ˜ÑÔ€FØy€HØ�XÒÐÐÐå•c˜!˜a™% !™)‘n”n a¨!¨Q¨°Ñ3Ô3€DÝ˜ÑÔ€Fð Z€HØŸš s¨BÑ/Ô/ÐØ"×*Ò*¨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Ñ   gñhãˆµøä>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å�a˜1‘f˜aÑ Ô €DÝ��D˜'Ñ"Ô"€AÝ�LŠL˜¨DˆLÑ1Ô1€EØˆQˆu‰XŒX€FÝ�=Š=˜¥§¢¨cÑ!2Ô!2Ñ3Ô3Ð3Ð3Ð3å•c˜!‘f”f˜q !˜fÑ%Ô%€DÝ��D˜'Ñ"Ô"€Aå�LŠL˜¨DˆLÑ1Ô1€EØˆQˆu‰XŒX€FÝ�=Š=˜¥§¢¨cÑ!2Ô!2¸ˆ=Ñ>Ô>Ð>Ð>Ð>å�LŠL�œ 1™°DˆLÑ9Ô9€EØˆQˆu‰XŒX€FÝ�=Š=˜¥§¢¨dÑ!3Ô!3¸$ˆ=Ñ?Ô?Ð?Ð?Ð?å�a˜!˜q™&‘j ! QÑ'Ô'€DÝ�!�Q�˜˜wÑ'Ô'€AÝ�LŠL˜¨DˆLÑ1Ô1€EÝ�LŠL˜¨DˆLÑ1Ô1€EØˆQˆu�e‰_Œ_€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‰>Œ>�D€A€qÝ�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Ý��T˜7Ñ#Ô#€AØˆQ‰SŒS€FÝ�yŠy˜‰|Œ|€HÝ�>Š>˜& (Ñ+Ô+Ð+Ð+Ð+å�a˜ÑÔ€DÝ��T˜7Ñ#Ô#€AØˆQ‰SŒS€FÝ�{Š{˜6Ñ"Ô"€HÝ�>Š>˜& (Ñ+Ô+Ð+Ð+Ð+å�Q˜‰?Œ?€DÝ��T˜7Ñ#Ô#€AØˆQ‰SŒS€FÝ�zŠz˜&Ñ!Ô!€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�‘V”V�a¥#¥a¡&¤&™jÑ(Ñ)Ô)€DÝ�dÑÔÐWÒWÐWÐWÐWå€DÝ�dÑÔ˜tÒ#Ð#Ð#Ð#à�q‰5•1‰9€DÝ�dÑÔ˜zÒ)Ð)Ð)Ð)å�q•1‰u‰:Œ:€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å•‰8Œ8€DÝ�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˜ÑÔ€àˆW�YÑÔ�
€€1€aˆàÐØ
9Ð
9¨%¨%°°1°a©.¬.Ð
9Ñ
9Ô
9€CØ�<Š<˜ 5¤=ˆ<Ñ1Ô1€DØ��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ð 4ðB4ð 4ð 4ð@4ð 4ð 4ð2,ð ,ð ,ð.1ð 1ð 1ð*Cð Cð Cð Cð CrK   