U
    ZÊ¹j  ã                   @   s  d dl mZmZ d dl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 d dlmZ d dlmZmZmZmZ ed	ƒ\ZZZed
eeƒZedeeƒZedeeƒZedeeƒZdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&d S )!é    )ÚMatrixÚeye)Ú
ShapeError)ÚMatAdd)ÚIdentityÚ	OneMatrixÚ
ZeroMatrix)Úsymbols)ÚraisesÚwarns_deprecated_sympy)ÚMatrixSymbol)ÚHadamardProductÚhadamard_productÚHadamardPowerÚhadamard_powerzn,m,kÚZÚAÚBÚCc                  C   sº   t tttƒjtjkst‚ttdd„ ƒ ttdd„ ƒ t tdt t ƒd dtd  td  td  ksjt‚t tt tƒt } | jt	t
fksŽt‚tt tttƒjjƒtjtjtjhks¶t‚d S )Nc                   S   s
   t ttƒS ©N)r   r   Ún© r   r   úm/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/matrices/expressions/tests/test_hadamard.pyÚ<lambda>   ó    z&test_HadamardProduct.<locals>.<lambda>c                   S   s
   t tdƒS )Né   )r   r   r   r   r   r   r      r   é   ©r   r   éþÿÿÿ)r   r   r   ÚshapeÚAssertionErrorr
   Ú	TypeErrorr   r   r   ÚkÚsetÚTÚargs)Zmixr   r   r   Útest_HadamardProduct   s    ÿr&   c                   C   s   t ttƒt ttƒkst‚d S r   )r   r   r   r    r   r   r   r   Ú%test_HadamardProduct_isnt_commutative!   s    r'   c                  C   sn   t dddƒ} t dddƒ}t dddƒ}| t||ƒ d | d |d  |d  | d |d  |d   ksjt‚d S )NÚXr   ÚYr   ©r   r   ©r   r   ©r   r   )r   r   r    )r(   r)   r   r   r   r   Útest_mixed_indexing%   s    .ÿr-   c               	   C   sà   t dddƒ} t dddƒ}tƒ � t| dd�}W 5 Q R X t|tƒsDt‚| ¡ }t|t ƒsZt‚tddƒ}tddƒ}t|| ƒ ¡ |ks„t‚t|| | |ƒ ¡ t| dƒks¤t‚t| ||ƒ ¡ t| |ƒksÂt‚t| |||ƒ ¡ |ksÜt‚d S )Nr(   r   r)   F)Úcheck)	r   r   r   Ú
isinstancer    Údoitr   r   r   )r(   r)   ÚexprZexpr2r   ÚUr   r   r   Útest_canonicalize.   s    

 r3   c            	      C   s  t ddd�\} }}td| |ƒ}td| |ƒ}td| | ƒ}t| ƒ}ttdd„ ƒ t|ƒ|ks\t‚tt||ƒtƒspt‚t||ƒ 	¡ t||ƒksŒt‚t||ƒt||ƒks¤t‚tt||ƒtƒs¸t‚td	t
d
ƒ}ttt
d
ƒtt
d
ƒƒ}t||ƒ}| 	¡ |ksôt‚ttdd„ ƒ d S )Núm, n, pT©Úintegerr   r   r(   c                   S   s   t ƒ S r   )r   r   r   r   r   r   E   r   ztest_hadamard.<locals>.<lambda>Úar   c                   S   s   t ƒ S r   ©r   r   r   r   r   r   Q   r   )r	   r   r   r
   r!   r   r    r/   r   r0   r"   r   r   r   Ú
ValueError)	Úmr   Úpr   r   r(   ÚIr7   r1   r   r   r   Útest_hadamard>   s     
r=   c                  C   sè   t dddƒ ¡ } t dddƒ ¡ }t dddƒ}t| |ƒ}tdd„ t| |ƒD ƒƒ dd¡}||ksbt‚t| ||ƒ}|t||ƒks€t‚ttdƒ| ƒ}|t| d ddgd| d	 dgdd| d
 ggƒksÂt‚ttdƒtdƒƒ}|tdƒksät‚d S )Nr   é   r   r(   c                 S   s   g | ]\}}|| ‘qS r   r   )Ú.0ÚiÚjr   r   r   Ú
<listcomp>Y   s     z;test_hadamard_product_with_explicit_mat.<locals>.<listcomp>r*   r   r   )r   r   )	r   Úas_explicitr   r   ÚzipZreshaper    r   r   )r   r   r(   r1   Úretr   r   r   Ú'test_hadamard_product_with_explicit_matT   s    
 4rF   c                     sª   t ddd�\} }}td| |ƒ‰ tˆ dƒˆ ks0t‚ttˆ dƒtƒsDt‚tˆ |ƒjtˆ j|ƒks`t‚tˆ |ƒd ˆ d | ks~t‚t| |ƒ| | ks”t‚tt‡ fdd	„ƒ d S )
Nr4   Tr5   r   r   r   r*   c                      s
   t ˆ ˆ ƒS r   )r   r   ©r   r   r   r   l   r   z%test_hadamard_power.<locals>.<lambda>)	r	   r   r   r    r/   r   r$   r
   r9   )r:   r   r;   r   rG   r   Útest_hadamard_powerc   s    rH   c                  C   s"  t dddƒ} t dddƒ}tdƒ\}}t||ƒ|| ks:t‚t||ƒ ¡ t||d  ||d  g||d  ||d  ggƒks€t‚t| |ƒ ¡ t| d | | d | g| d | | d | ggƒksÆt‚t| |ƒ ¡ t| d |d  | d |d  g| d |d  | d |d  ggƒk�st‚d S )	Nr   r   r   za br*   r+   r,   r   )r   r	   r   r    rC   r   )r   r   r7   Úbr   r   r   Útest_hadamard_power_explicito   s,    þÿþÿþÿrJ   c                      sx   t dddƒ‰ t dddƒ‰tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ t dddƒ‰ tt‡ ‡fdd„ƒ tt‡ ‡fd	d„ƒ d S )
Nr   r   r>   r   c                      s
   t ˆ ˆƒS r   r8   r   ©r   r   r   r   r   ‰   r   z"test_shape_error.<locals>.<lambda>c                      s
   t ˆ ˆƒS r   ©r   r   rK   r   r   r   Š   r   c                      s
   t ˆ ˆƒS r   r8   r   rK   r   r   r   Œ   r   c                      s
   t ˆ ˆƒS r   rL   r   rK   r   r   r   �   r   )r   r
   r   r   r   rK   r   Útest_shape_error†   s    rM   N)'Zsympy.matrices.denser   r   Zsympy.matrices.exceptionsr   Z!sympy.matrices.expressions.mataddr   Z"sympy.matrices.expressions.specialr   r   r   Z
sympy.corer	   Zsympy.testing.pytestr
   r   Zsympy.matricesr   Zsympy.matrices.expressionsr   r   r   r   r   r:   r"   r   r   r   r   r&   r'   r-   r3   r=   rF   rH   rJ   rM   r   r   r   r   Ú<module>   s*   	