§
    ¬³ÙgÚ<  ã                   óþ  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3m4Z4m5Z5m6Z6m7Z7 d d
l8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl>m@Z@  ed¦  «        xZAZBeBrd dlCZCdeCjD        d<    e6ddd¦  «        ZE e6ddd¦  «        ZF e6ddd¦  «        ZG e6ddd¦  «        ZH ed¦  «        \  ZIZJZKZLeA�7d„  eMd dd¦  «        D ¦   «         ZNeA O                    eN¦  «        ZP e.eN¦  «        ZQd+d„ZRd+d„ZSd„ ZTd„ fd„ZUd „ fd!„ZVd"„ ZWe@d#„ ¦   «         ZXd$„ ZYd%„ ZZe@d&„ ¦   «         Z[d'„ Z\d(„ Z]d)„ Z^d*„ Z_dS ),é    N)Ú
Derivative)Úsymbols)ÚArrayTensorProductÚArrayAddÚPermuteDimsÚArrayDiagonal)ÚEqÚNeÚGeÚGtÚLeÚLt)Úimport_module)ÚAbsÚceilingÚexpÚfloorÚsignÚsinÚasinÚsqrtÚcosÚacosÚtanÚatanÚatan2ÚcoshÚacoshÚsinhÚasinhÚtanhÚatanhÚreÚimÚargÚerfÚloggammaÚlog)ÚMatrixÚ
MatrixBaseÚeyeÚ
randMatrix)ÚDeterminantÚHadamardProductÚInverseÚMatrixSymbolÚTrace)Útensorflow_code)Úconvert_matrix_to_array)Úlambdify)Úskip)ÚXFAILÚ
tensorflowÚ2ÚTF_CPP_MIN_LOG_LEVELÚMé   ÚNÚPÚQzx y z tc           	      óN   — g | ]"}t          t          ||d z   ¦  «        ¦  «        ‘Œ#S )r;   )ÚlistÚrange©Ú.0Úis     úZ/granary/edev/quantum/lib/python3.11/site-packages/sympy/printing/tests/test_tensorflow.pyú
<listcomp>rF   &   s,   € Ð
7Ð
7Ð
7 1�4•�a˜˜1™‘”ÑÔÐ
7Ð
7Ð
7ó    é	   Fc                 óL  — t          | |d¦  «        }|sd„ | D ¦   «         }nd„ | D ¦   «         }t                               ¦   «         }d }|                     ¦   «         5  d„ |D ¦   «         }t          j        j                             |¬¦  «        }|                      ||Ž ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     t          t          | |¦  «        ¦  «        ¦  «        }	|	                     ¦   «         }	|	j        r=t          |	t          ¦  «        s|	                     ¦   «         }	|	                     ¦   «         }	|s||	k                         ¦   «         sJ ‚d S d„ |D ¦   «         }d„ |	D ¦   «         }	t#          d„ t          ||	¦  «        D ¦   «         ¦  «        sJ ‚d S )	Nr7   c                 óB   — g | ]}t          |j        |j        ¦  «        ‘ŒS © ©r,   ÚrowsÚcols©rC   Úvs     rE   rF   z._compare_tensorflow_matrix.<locals>.<listcomp>.   s&   € ÐIÐIÐI¸!�: a¤f¨a¬fÑ5Ô5ÐIÐIÐIrG   c                 óH   — g | ]}t          |j        |j        ¦  «        d z  ‘Œ S )g      Y@rL   rO   s     rE   rF   z._compare_tensorflow_matrix.<locals>.<listcomp>0   s+   € ÐNÐNÐN¸q�: a¤f¨a¬fÑ5Ô5°dÑ:ÐNÐNÐNrG   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rK   ©Úevalr2   rB   s     rE   rF   z._compare_tensorflow_matrix.<locals>.<listcomp>5   ó(   € ÐNÐNÐN¸�D¥°Ñ!3Ô!3Ñ4Ô4ÐNÐNÐNrG   ©Úgraphc                 ó   — g | ]	}|D ]}|‘ŒŒ
S rK   rK   ©rC   ÚrowrD   s      rE   rF   z._compare_tensorflow_matrix.<locals>.<listcomp>C   ó%   € Ð)Ð)Ð)�3 SÐ)Ð) ˆQÐ)Ð)Ð)Ð)rG   c                 ó   — g | ]	}|D ]}|‘ŒŒ
S rK   rK   rY   s      rE   rF   z._compare_tensorflow_matrix.<locals>.<listcomp>D   r[   rG   c              3   ó¦   K  — | ]L\  }}t          ||z
  ¦  «        d dt          t          t          |¦  «        d ¦  «        ¦  «        z
   z  k     V — ŒMdS ©é
   é   N©ÚabsÚintr(   ©rC   ÚaÚbs      rE   ú	<genexpr>z-_compare_tensorflow_matrix.<locals>.<genexpr>E   óq   è è € ð Lð LÙ9=¸¸A�C��!‘‰HŒH�r˜Q�s¥3¥s¨1¡v¤v¨r¡?¤?Ñ3Ô3Ñ3Ð4Ñ4Ò4ðLð Lð Lð Lð Lð LrG   ©r4   ÚtfÚGraphÚ
as_defaultÚcompatÚv1ÚSessionÚrunÚsubsÚdictÚzipÚdoitÚ	is_MatrixÚ
isinstancer*   Úas_explicitÚtolistÚall©
Ú	variablesÚexprÚ	use_floatÚfÚrandom_matricesrW   ÚrÚrandom_variablesÚsessionÚes
             rE   Ú_compare_tensorflow_matrixr„   +   s  € Ý�˜D ,Ñ/Ô/€AØð OØIÐI¸yÐIÑIÔIˆˆàNÐNÀIÐNÑNÔNˆå�HŠH‰JŒJ€EØ€AØ	×	Ò	Ñ	Ô	ð .ð .ØNÐN¸oÐNÑNÔNÐÝ”)”,×&Ò&¨UÐ&Ñ3Ô3ˆØ�KŠK˜˜Ð+Ð,Ñ-Ô-ˆð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð
 	�	Š	•$•s˜9 oÑ6Ô6Ñ7Ô7Ñ8Ô8€AØ	�Š‰Œ€AØ„{ð Ý˜!�ZÑ(Ô(ð 	 Ø—’‘”ˆAØ�HŠH‰JŒJˆàð LØ�Q’�|Š|‰~Œ~ÐÐÐÐÐà)Ð)˜!Ð)Ñ)Ô)ˆØ)Ð)˜!Ð)Ñ)Ô)ˆÝð Lð LÝADÀQÈÁÄðLñ Lô Lñ Lô Lð 	Lð 	Lð 	Lð 	Lð 	Ló   ÁA
B2Â2B6Â9B6c                 óL  — t          | |d¦  «        }|sd„ | D ¦   «         }nd„ | D ¦   «         }t                               ¦   «         }d }|                     ¦   «         5  d„ |D ¦   «         }t          j        j                             |¬¦  «        }|                      ||Ž ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     t          t          | |¦  «        ¦  «        ¦  «        }	|	                     ¦   «         }	|	j        r=t          |	t          ¦  «        s|	                     ¦   «         }	|	                     ¦   «         }	|s||	k                         ¦   «         sJ ‚d S d„ |D ¦   «         }d„ |	D ¦   «         }	t#          d„ t          ||	¦  «        D ¦   «         ¦  «        sJ ‚d S )	Nr7   c                 óH   — g | ]}t          |j        |j        ¦  «        d z  ‘Œ S )r`   ©r+   rM   rN   rO   s     rE   rF   z6_compare_tensorflow_matrix_inverse.<locals>.<listcomp>N   s+   € ÐDÐDÐD°Q�3˜qœv q¤vÑ.Ô.¨qÑ0ÐDÐDÐDrG   c                 óH   — g | ]}t          |j        |j        ¦  «        d z  ‘Œ S )g…ëQ¸	@rˆ   rO   s     rE   rF   z6_compare_tensorflow_matrix_inverse.<locals>.<listcomp>P   s+   € ÐGÐGÐG¸�3˜qœv q¤vÑ.Ô.¨tÑ3ÐGÐGÐGrG   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rK   rS   rB   s     rE   rF   z6_compare_tensorflow_matrix_inverse.<locals>.<listcomp>U   rU   rG   rV   c                 ó   — g | ]	}|D ]}|‘ŒŒ
S rK   rK   rY   s      rE   rF   z6_compare_tensorflow_matrix_inverse.<locals>.<listcomp>c   r[   rG   c                 ó   — g | ]	}|D ]}|‘ŒŒ
S rK   rK   rY   s      rE   rF   z6_compare_tensorflow_matrix_inverse.<locals>.<listcomp>d   r[   rG   c              3   ó¦   K  — | ]L\  }}t          ||z
  ¦  «        d dt          t          t          |¦  «        d ¦  «        ¦  «        z
   z  k     V — ŒMdS r^   ra   rd   s      rE   rg   z5_compare_tensorflow_matrix_inverse.<locals>.<genexpr>e   rh   rG   ri   rz   s
             rE   Ú"_compare_tensorflow_matrix_inverserŽ   K   s  € Ý�˜D ,Ñ/Ô/€AØð HØDÐD¸)ÐDÑDÔDˆˆàGÐG¸YÐGÑGÔGˆå�HŠH‰JŒJ€EØ€AØ	×	Ò	Ñ	Ô	ð .ð .ØNÐN¸oÐNÑNÔNÐÝ”)”,×&Ò&¨UÐ&Ñ3Ô3ˆØ�KŠK˜˜Ð+Ð,Ñ-Ô-ˆð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð
 	�	Š	•$•s˜9 oÑ6Ô6Ñ7Ô7Ñ8Ô8€AØ	�Š‰Œ€AØ„{ð Ý˜!�ZÑ(Ô(ð 	 Ø—’‘”ˆAØ�HŠH‰JŒJˆàð LØ�Q’�|Š|‰~Œ~ÐÐÐÐÐà)Ð)˜!Ð)Ñ)Ô)ˆØ)Ð)˜!Ð)Ñ)Ô)ˆÝð Lð LÝADÀQÈÁÄðLñ Lô Lñ Lô Lð 	Lð 	Lð 	Lð 	Lð 	Lr…   c                 ó  — t          | |d¦  «        }d„ | D ¦   «         }t                               ¦   «         }d }|                     ¦   «         5  d„ |D ¦   «         }t          j        j                             |¬¦  «        }|                      ||Ž ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     t          t          | |¦  «        ¦  «        ¦  «        }|                     ¦   «         }t          ||z
  ¦  «        dk     sJ ‚d S )Nr7   c                 ól   — g | ]1}t          |j        |j        ¦  «                             ¦   «         d z  ‘Œ2S )éd   )r,   rM   rN   ÚevalfrO   s     rE   rF   z5_compare_tensorflow_matrix_scalar.<locals>.<listcomp>k   sJ   € ð Eð Eð EØ56�
�1”6˜1œ6Ñ"Ô"×(Ò(Ñ*Ô*¨SÑ0ðEð Eð ErG   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rK   rS   rB   s     rE   rF   z5_compare_tensorflow_matrix_scalar.<locals>.<listcomp>q   rU   rG   rV   ç�íµ ÷Æ°>)r4   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   rb   )	r{   r|   r~   r   rW   r€   r�   r‚   rƒ   s	            rE   Ú!_compare_tensorflow_matrix_scalarr•   i   sK  € Ý�˜D ,Ñ/Ô/€AðEð EØ:CðEñ Eô E€Oõ �HŠH‰JŒJ€EØ€AØ	×	Ò	Ñ	Ô	ð .ð .ØNÐN¸oÐNÑNÔNÐÝ”)”,×&Ò&¨UÐ&Ñ3Ô3ˆØ�KŠK˜˜Ð+Ð,Ñ-Ô-ˆð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð
 	�	Š	•$•s˜9 oÑ6Ô6Ñ7Ô7Ñ8Ô8€AØ	�Š‰Œ€AÝˆq�‰s‰8Œ8�fÒÐÐÐÐÐs   ÁA
B#Â#B'Â*B'c                  ó,   — t          j        dd¦  «        S ©Nr   r_   ©ÚrandomÚrandintrK   rG   rE   ú<lambda>r›   {   ó   € ¥¤°°2Ñ!6Ô!6€ rG   c                 ó>  ‡— t          | |d¦  «        }ˆfd„| D ¦   «         }t                               ¦   «         }d }|                     ¦   «         5  d„ |D ¦   «         }t          j        j                             |¬¦  «        }|                      ||Ž ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     t          t          | |¦  «        ¦  «        ¦  «                             ¦   «                              ¦   «         }	t          ||	z
  ¦  «        dk     sJ ‚d S )Nr7   c                 ó$   •— g | ]} ‰¦   «         ‘ŒS rK   rK   ©rC   rP   Úrngs     €rE   rF   z._compare_tensorflow_scalar.<locals>.<listcomp>}   ó   ø€ Ð
$Ð
$Ð
$�Qˆ3ˆ3‰5Œ5Ð
$Ð
$Ð
$rG   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rK   rS   rB   s     rE   rF   z._compare_tensorflow_scalar.<locals>.<listcomp>‚   ó(   € Ð8Ð8Ð8¨q•$• qÑ)Ô)Ñ*Ô*Ð8Ð8Ð8rG   rV   r”   )r4   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   r’   rt   rb   ©
r{   r|   r    r~   ÚrvsrW   r€   Útf_rvsr‚   rƒ   s
     `       rE   Ú_compare_tensorflow_scalarr§   z   sH  ø€ å�˜D ,Ñ/Ô/€AØ
$Ð
$Ð
$Ð
$˜)Ð
$Ñ
$Ô
$€Cå�HŠH‰JŒJ€EØ€AØ	×	Ò	Ñ	Ô	ð $ð $Ø8Ð8°CÐ8Ñ8Ô8ˆÝ”)”,×&Ò&¨UÐ&Ñ3Ô3ˆØ�KŠK˜˜˜6˜
Ñ#Ô#ˆð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð
 	�	Š	•$•s˜9 cÑ*Ô*Ñ+Ô+Ñ,Ô,×2Ò2Ñ4Ô4×9Ò9Ñ;Ô;€AÝˆq�‰s‰8Œ8�fÒÐÐÐÐÐó   ÁA
B&Â&B*Â-B*c                  ó,   — t          j        dd¦  «        S r—   r˜   rK   rG   rE   r›   r›   ‹   rœ   rG   c                 óú  ‡— t          | |d¦  «        }ˆfd„| D ¦   «         }t                               ¦   «         }d }|                     ¦   «         5  d„ |D ¦   «         }t          j        j                             |¬¦  «        }|                      ||Ž ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     t          t          | |¦  «        ¦  «        ¦  «                             ¦   «         }	||	k    sJ ‚d S )Nr7   c                 ó$   •— g | ]} ‰¦   «         ‘ŒS rK   rK   rŸ   s     €rE   rF   z2_compare_tensorflow_relational.<locals>.<listcomp>�   r¡   rG   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rK   rS   rB   s     rE   rF   z2_compare_tensorflow_relational.<locals>.<listcomp>’   r£   rG   rV   )r4   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r¤   s
     `       rE   Ú_compare_tensorflow_relationalr­   Š   s,  ø€ å�˜D ,Ñ/Ô/€AØ
$Ð
$Ð
$Ð
$˜)Ð
$Ñ
$Ô
$€Cå�HŠH‰JŒJ€EØ€AØ	×	Ò	Ñ	Ô	ð $ð $Ø8Ð8°CÐ8Ñ8Ô8ˆÝ”)”,×&Ò&¨UÐ&Ñ3Ô3ˆØ�KŠK˜˜˜6˜
Ñ#Ô#ˆð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð
 	�	Š	•$•s˜9 cÑ*Ô*Ñ+Ô+Ñ,Ô,×1Ò1Ñ3Ô3€AØ�Š6ˆ6ˆ6ˆ6ˆ6ˆ6r¨   c                  óü   — t          t          d¦  «        ¦  «        dk    sJ ‚t          t          t	          t
          ¦  «        gt          t          ¦  «        t           gg¦  «        } t          | ¦  «        dk    sJ ‚d S )Nr;   z6tensorflow.constant([[1, 0, 0], [0, 1, 0], [0, 0, 1]])zPtensorflow.Variable([[x, tensorflow.math.sin(y)], [tensorflow.math.exp(z), -t]]))	r2   r+   r)   Úxr   Úyr   ÚzÚt©r|   s    rE   Útest_tensorflow_printingr´   š   s†   € Ý�3˜q™6œ6Ñ"Ô"Ø@òAð Að Að Aõ •A•s�1‘v”v�;¥¥Q¡¤­!¨ Ð-Ñ.Ô.€DÝ˜4Ñ Ô ð	.ò.ð .ð .ð .ð .ð .rG   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-„ ¬¦  «         d S ).NúTensorFlow not installedztensorflow.math.abs(x)ztensorflow.math.sign(x)ztensorflow.math.ceil(x)c                  ó(   — t          j         ¦   «         S ©N©r™   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>¶   ó   € µv´}±´€ rG   )r    ztensorflow.math.floor(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>º   rº   rG   ztensorflow.math.exp(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>¾   rº   rG   ztensorflow.math.sqrt(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Â   rº   rG   r`   ztensorflow.math.pow(x, 4)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Æ   rº   rG   ztensorflow.math.cos(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Ê   rº   rG   ztensorflow.math.acos(x)c                  ó,   — t          j        dd¦  «        S )Nr   gffffffî?©r™   ÚuniformrK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Î   s   € µv´~ÀaÈÑ7NÔ7N€ rG   ztensorflow.math.sin(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Ò   rº   rG   ztensorflow.math.asin(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Ö   rº   rG   ztensorflow.math.tan(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Ú   rº   rG   ztensorflow.math.atan(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>Þ   rº   rG   ztensorflow.math.atan2(y, x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>â   s   € ½¼¹¼€ rG   ztensorflow.math.cosh(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>æ   rº   rG   ztensorflow.math.acosh(x)c                  ó,   — t          j        dd¦  «        S ©Né   é   rÁ   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>ê   ó   € µv´~ÀaÈÑ7KÔ7K€ rG   ztensorflow.math.sinh(x)c                  ó,   — t          j        dd¦  «        S rÊ   rÁ   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>î   rÍ   rG   ztensorflow.math.asinh(x)c                  ó,   — t          j        dd¦  «        S rÊ   rÁ   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>ò   rÍ   rG   ztensorflow.math.tanh(x)c                  ó,   — t          j        dd¦  «        S rÊ   rÁ   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>ö   rÍ   rG   ztensorflow.math.atanh(x)c                  ó,   — t          j        dd¦  «        S )Ng      à¿g      à?rÁ   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>û   s   € ¥¤¨s°BÑ 7Ô 7€ rG   ztensorflow.math.erf(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>   ó   € ¥¤¡¤€ rG   ztensorflow.math.lgamma(x)c                  ó(   — t          j         ¦   «         S r¸   r¹   rK   rG   rE   r›   z&test_tensorflow_math.<locals>.<lambda>  rÓ   rG   )rj   r5   r   r¯   r2   r§   r   r   r   r   r   r   r   r   r   r   r   r   r°   r   r   r   r    r!   r"   r&   r'   r³   s    rE   Útest_tensorflow_mathrÕ   §   s²  € åð )ÝÐ'Ñ(Ô(Ð(å�q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<Ý¥˜t TÑ*Ô*Ð*å•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÑ*Ô*Ð*å•1‰:Œ:€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰8Œ8€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå�q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå�‰6€DÝ˜4Ñ Ô Ð$?Ò?Ð?Ð?Ð?Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå�q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/NÐ/NÐOÑOÔOÐOå�q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå�q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå••A‰;Œ;€DÝ˜4Ñ Ô Ð$AÒAÐAÐAÐAÝ¥¥1˜v tÐ1HÐ1HÐIÑIÔIÐIå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/FÐ/FÐGÑGÔGÐGå•‰8Œ8€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>Ý¥˜t TÐ/KÐ/KÐLÑLÔLÐLå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/KÐ/KÐLÑLÔLÐLå•‰8Œ8€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>Ý¥˜t TÐ/KÐ/KÐLÑLÔLÐLå•‰7Œ7€DÝ˜4Ñ Ô Ð$=Ò=Ð=Ð=Ð=Ý¥˜t TÐ/KÐ/KÐLÑLÔLÐLå•‰8Œ8€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>ÝÝ	
ˆˆdÐ7Ð7ð9ñ 9ô 9ð 9õ �q‰6Œ6€DÝ˜4Ñ Ô Ð$<Ò<Ð<Ð<Ð<ÝÝ	
ˆˆdÐ/Ð/ð1ñ 1ô 1ð 1õ •A‰;Œ;€DÝ˜4Ñ Ô Ð$?Ò?Ð?Ð?Ð?ÝÝ	
ˆˆdÐ/Ð/ð1ñ 1ô 1ð 1ð 1ð 1rG   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tensorflow.math.real(x)ztensorflow.math.imag(x)ztensorflow.math.angle(x))r2   r#   r¯   r$   r%   rK   rG   rE   Útest_tensorflow_complexesr×     sh   € Ý�2�a™5œ5Ñ!Ô!Ð%>Ò>Ð>Ð>Ð>Ý�2�a™5œ5Ñ!Ô!Ð%>Ò>Ð>Ð>Ð>Ý�3�q™6œ6Ñ"Ô"Ð&@Ò@Ð@Ð@Ð@Ð@Ð@rG   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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))rj   r5   r	   r¯   r°   r2   r­   r
   r   r   r   r   r³   s    rE   Útest_tensorflow_relationalrÙ     s�  € Ýð )ÝÐ'Ñ(Ô(Ð(å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$AÒAÐAÐAÐAÝ"¥A¥q 6¨4Ñ0Ô0Ð0å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$EÒEÐEÐEÐEÝ"¥A¥q 6¨4Ñ0Ô0Ð0å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$IÒIÐIÐIÐIÝ"¥A¥q 6¨4Ñ0Ô0Ð0å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$CÒCÐCÐCÐCÝ"¥A¥q 6¨4Ñ0Ô0Ð0å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$FÒFÐFÐFÐFÝ"¥A¥q 6¨4Ñ0Ô0Ð0å�a•‰8Œ8€DÝ˜4Ñ Ô Ð$@Ò@Ð@Ð@Ð@Ý"¥A¥q 6¨4Ñ0Ô0Ð0Ð0Ð0rG   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| ¦  «         d S )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)r}   z1.14)Útensorflow_versionz%tensorflow.linalg.matrix_transpose(M)z1.13ztensorflow.matrix_transpose(M))rj   r5   r:   r2   r„   r<   r.   r=   r>   r1   r-   r•   r/   rŽ   ÚTr³   s    rE   Útest_tensorflow_matricesrÞ   -  s�  € åð )ÝÐ'Ñ(Ô(Ð(å€DÝ˜4Ñ Ô  CÒ'Ð'Ð'Ð'Ý¥˜t TÑ*Ô*Ð*å�q‰5€DÝ˜4Ñ Ô Ð$?Ò?Ð?Ð?Ð?Ý¥¥1˜v tÑ,Ô,Ð,å�q‰5€DÝ˜4Ñ Ô Ð$DÒDÐDÐDÐDÝ¥¥1˜v tÑ,Ô,Ð,å�1�aÑ Ô €DÝ˜4Ñ Ô Ð$DÒDÐDÐDÐDÝ¥¥1˜v tÑ,Ô,Ð,å�Q‰3�q‰5•‰7€DÝ˜4Ñ Ô ð	9ò9ð 9ð 9ð 9õ ¥¥1¥a­˜|¨TÑ2Ô2Ð2åˆa‰4€DÝ˜4Ñ Ô ØEòFð Fð Fð Få¥˜t TÑ*Ô*Ð*å•‰8Œ8€DÝ˜4Ñ Ô Ð$@Ò@Ð@Ð@Ð@Ý¥˜t TÑ*Ô*Ð*å•q‰>Œ>€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>Ý%¥q d¨DÑ1Ô1Ð1å•1‰:Œ:€DÝ˜4Ñ Ô Ð$>Ò>Ð>Ð>Ð>Ý&­ t¨T¸TÐBÑBÔBÐBåŒ3€DÝ˜4°FÐ;Ñ;Ô;Ø/ò0ð 0ð 0ð 0å˜4°FÐ;Ñ;Ô;Ø(ò)ð )ð )ð )õ ¥˜t TÑ*Ô*Ð*Ð*Ð*rG   c                  óæ  — t           st          d¦  «         t                                ¦   «         } |                      ¦   «         5  t           j        j                             | ¬¦  «        }t          ddd¦  «        }t          ddd¦  «        }t          ||z  ¦  «        }t          ||f|d¦  «        }t            
                    ddgdd	gg¦  «        }t            
                    dd
gddgg¦  «        }|                      |||¦  «        ¦  «        }|                     t                                ||¦  «        ¦  «        }	||	k                         ¦   «         sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr¶   rV   r:   rÌ   r<   r7   rË   r;   r`   éþÿÿÿéÿÿÿÿ)rj   r5   rk   rl   rm   rn   ro   r0   r3   r4   Úconstantrp   Úmatmulry   )
rW   r‚   r:   r<   Úcgr~   ÚmaÚmbr°   Úcs
             rE   Útest_codegen_einsumrè   c  s�  € Ýð )ÝÐ'Ñ(Ô(Ð(å�HŠH‰JŒJ€EØ	×	Ò	Ñ	Ô	ð ð Ý”)”,×&Ò&¨UÐ&Ñ3Ô3ˆå˜˜a Ñ#Ô#ˆÝ˜˜a Ñ#Ô#ˆå$ Q¨¡UÑ+Ô+ˆÝ�a˜�V˜R Ñ.Ô.ˆå�[Š[˜1˜a˜& 1 a &Ð)Ñ*Ô*ˆÝ�[Š[˜1˜R˜& 2 q 'Ð*Ñ+Ô+ˆØ�KŠK˜˜˜"˜b™	œ	Ñ"Ô"ˆØ�KŠK�Ÿ	š	 " bÑ)Ô)Ñ*Ô*ˆØ�Q’�|Š|‰~Œ~ÐÐÐÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁDE&Å&E*Å-E*c            
      óV  — t           st          d¦  «         t                                ¦   «         } |                      ¦   «         5  t           j        j                             ¦   «         }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                                dd
gddgg¦  «        }t                                ddgddgg¦  «        }t                                ddgd	dgg¦  «        }	t          ||¦  «        }
t          |
¦  «        dk    sJ ‚t          ||f|
d¦  «        }|                      |||¦  «        ¦  «        }|                     t                                d||¦  «        ¦  «        }||k                         ¦   «         sJ ‚t          ||¦  «        }
t          |
¦  «        dk    sJ ‚t          ||f|
d¦  «        }|                      |||¦  «        ¦  «        }|                     ||z   ¦  «        }||k                         ¦   «         sJ ‚t          |||¦  «        }
t          |
¦  «        dk    sJ ‚t          |||f|
d¦  «        }|                      ||||¦  «        ¦  «        }|                     ||z   |z   ¦  «        }||k                         ¦   «         sJ ‚t          ||||¦  «        }
t          |
¦  «        dk    sJ ‚t          ||||f|
d¦  «        }|                      |||||	¦  «        ¦  «        }|                     ||z   |z   |	z   ¦  «        }||k                         ¦   «         sJ ‚t!          |ddg¦  «        }
t          |
¦  «        dk    sJ ‚t          |f|
d¦  «        }|                      ||¦  «        ¦  «        }|                     t                                |¦  «        ¦  «        }||k                         ¦   «         sJ ‚t!          t          ||¦  «        g d¢¦  «        }
t          |
¦  «        dk    sJ ‚t          ||f|
d¦  «        }|                      |||¦  «        ¦  «        }|                     t                                t                                d||¦  «        g d¢¦  «        ¦  «        }||k                         ¦   «         sJ ‚t%          t          ||¦  «        d¦  «        }
t          |
¦  «        dk    sJ ‚t          ||f|
d¦  «        }|                      |||¦  «        ¦  «        }|                     t                                d||¦  «        ¦  «        }||k                         ¦   «         sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr¶   r:   rÌ   r<   r=   r>   rË   r;   r`   rà   rá   r   é   z'tensorflow.linalg.einsum("ab,cd", M, N)r7   zij,klrÛ   z1tensorflow.math.add(tensorflow.math.add(M, N), P)zItensorflow.math.add(tensorflow.math.add(tensorflow.math.add(M, N), P), Q)ztensorflow.transpose(M, [1, 0]))rË   rÌ   r;   r   zKtensorflow.transpose(tensorflow.linalg.einsum("ab,cd", M, N), [1, 2, 3, 0])zab,cd)rË   rÌ   z,tensorflow.linalg.einsum("ab,bc->acb", M, N)z
ab,bc->acb)rj   r5   rk   rl   rm   rn   ro   r0   râ   r   r2   r4   rp   Úeinsumry   r   r   Ú	transposer   )rW   r‚   r:   r<   r=   r>   rå   ræ   ÚmcÚmdrä   r~   r°   rç   s                 rE   Útest_codegen_extrarï   x  sä  € Ýð )ÝÐ'Ñ(Ô(Ð(å�HŠH‰JŒJ€EØ	×	Ò	Ñ	Ô	ð Bð 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ð 6å�a˜�V˜R Ñ.Ô.ˆØ�KŠK˜˜˜"˜b™	œ	Ñ"Ô"ˆØ�KŠK�Ÿ	š	 '¨2¨rÑ2Ô2Ñ3Ô3ˆØ�Q’�|Š|‰~Œ~ÐÐÐå�a˜‰^Œ^ˆÝ˜rÑ"Ô"Ð&AÒAÐAÐAÐAÝ�a˜�V˜R Ñ.Ô.ˆØ�KŠK˜˜˜"˜b™	œ	Ñ"Ô"ˆØ�KŠK˜˜R™Ñ Ô ˆØ�Q’�|Š|‰~Œ~ÐÐÐå�a˜˜AÑÔˆÝ˜rÑ"Ô"Ø?ò@ð @ð @ð @å�a˜˜A�Y  LÑ1Ô1ˆØ�KŠK˜˜˜"˜b "™œÑ&Ô&ˆØ�KŠK˜˜R™ "™Ñ%Ô%ˆØ�Q’�|Š|‰~Œ~ÐÐÐå�a˜˜A˜qÑ!Ô!ˆÝ˜rÑ"Ô"ðHòHð Hð Hð Hõ �a˜˜A˜q�\ 2 |Ñ4Ô4ˆØ�KŠK˜˜˜"˜b " bÑ)Ô)Ñ*Ô*ˆØ�KŠK˜˜R™ "™ rÑ)Ñ*Ô*ˆØ�Q’�|Š|‰~Œ~ÐÐÐå˜˜Q ˜FÑ#Ô#ˆÝ˜rÑ"Ô"Ð&GÒGÐGÐGÐGÝ�a�T˜2˜|Ñ,Ô,ˆØ�KŠK˜˜˜"™œÑÔˆØ�KŠK�Ÿš RÑ(Ô(Ñ)Ô)ˆØ�Q’�|Š|‰~Œ~ÐÐÐåÕ+¨A¨qÑ1Ô1°<°<°<Ñ@Ô@ˆÝ˜rÑ"Ô"ðIòIð Ið Ið Iõ �a˜�V˜R Ñ.Ô.ˆØ�KŠK˜˜˜"˜b™	œ	Ñ"Ô"ˆØ�KŠK�Ÿš¥R§Y¢Y¨w¸¸BÑ%?Ô%?ÀÀÀÑNÔNÑOÔOˆØ�Q’�|Š|‰~Œ~ÐÐÐåÕ-¨a°Ñ3Ô3°VÑ<Ô<ˆÝ˜rÑ"Ô"Ø:ò;ð ;ð ;ð ;å�a˜�V˜R Ñ.Ô.ˆØ�KŠK˜˜˜"˜b™	œ	Ñ"Ô"ˆØ�KŠK�Ÿ	š	 ,°°BÑ7Ô7Ñ8Ô8ˆØ�Q’�|Š|‰~Œ~ÐÐÐÐðEBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bð Bð Bs   ÁUVÖV"Ö%V"c                  óF  — 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                              || |z
  ¦  «        }t          |¦  «        d	k    sJ ‚d S )
NÚArË   r;   ÚBÚC)r   r   zA[0, 0]z	3*A[0, 0]z&(tensorflow.math.add((-1)*B, A))[0, 0])r0   r2   rq   )rñ   rò   ró   ÚFs       rE   Útest_MatrixElement_printingrõ   Â  s®   € Ý�S˜!˜QÑÔ€AÝ�S˜!˜QÑÔ€AÝ�S˜!˜QÑÔ€Aå˜1˜Tœ7Ñ#Ô# yÒ0Ð0Ð0Ð0Ý˜1˜q œw™;Ñ'Ô'¨;Ò6Ð6Ð6Ð6à	ˆ$Œ�Š�Q˜˜A™ÑÔ€AÝ˜1ÑÔÐ!IÒIÐIÐIÐIÐIÐIrG   c                  ó~   — t          t          t          ¦  «        t          ¦  «        } t          | ¦  «        dk    sJ ‚d S )Nz2tensorflow.gradients(tensorflow.math.sin(x), x)[0])r   r   r¯   r2   r³   s    rE   Útest_tensorflow_Derivativer÷   Î  sC   € Ý•c�!‘f”f�aÑ Ô €DÝ˜4Ñ Ô Ø<ò=ð =ð =ð =ð =ð =rG   )F)`r™   Úsympy.core.functionr   Úsympy.core.symbolr   Ú0sympy.tensor.array.expressions.array_expressionsr   r   r   r   Úsympy.core.relationalr	   r
   r   r   r   r   Úsympy.externalr   Úsympy.functionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úsympy.matricesr)   r*   r+   r,   Úsympy.matrices.expressionsr-   r.   r/   r0   r1   Úsympy.printing.tensorflowr2   Ú3sympy.tensor.array.expressions.from_matrix_to_arrayr3   Úsympy.utilities.lambdifyr4   Úsympy.testing.pytestr5   r6   rj   r7   ÚosÚenvironr:   r<   r=   r>   r¯   r°   r±   r²   rA   Úllorâ   Úm3x3Ú	m3x3sympyr„   rŽ   r•   r§   r­   r´   rÕ   r×   rÙ   rÞ   rè   rï   rõ   r÷   rK   rG   rE   ú<module>r	     s�  ðØ €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø (Ð (Ð (Ð (Ð (Ð (ð$ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø WÐ WÐ WÐ WÐ WÐ WØ -Ð -Ð -Ð -Ð -Ð -Ø %Ð %Ð %Ð %Ð %Ð %Ø &Ð &Ð &Ð &Ð &Ð &ð  �- Ñ-Ô-Ð -€€Zàð -à€I€I€IØ),€B„JÐ%Ñ&ð €L��a˜ÑÔ€Ø€L��a˜ÑÔ€Ø€L��a˜ÑÔ€Ø€L��a˜ÑÔ€àˆW�YÑÔ�
€€1€aˆà€>Ø
7Ð
7¨¨¨a°°A©¬Ð
7Ñ
7Ô
7€CØ�;Š;�sÑÔ€DØ��s‘”€IðLð Lð Lð Lð@Lð Lð Lð Lð<ð ð ð$ 7Ð6ðð ð ð ð" 7Ð6ðð ð ð ð .ð .ð .ð ð]1ð ]1ñ „ð]1ð@Að Að Að1ð 1ð 1ð> ð2+ð 2+ñ „ð2+ðjð ð ð*Gð Gð GðT	Jð 	Jð 	Jð=ð =ð =ð =ð =rG   