U
    ZÊ¹jO  ã                   @   s   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
 d dlmZ d dlmZmZmZmZmZmZmZ d dl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# d d	l$m%Z% d d
l&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. eddd�\Z/Z0Z1Z2edƒZ3ede/e0ƒZ4ede0e1ƒZ5ede/e/ƒZ6ede/e/ƒZ7ede0e/ƒZ8dd„ Z9dd„ Z:dd„ Z;dd„ Z<dd „ Z=d!d"„ Z>d#d$„ Z?d%d&„ Z@d'd(„ ZAd)d*„ ZBd+d,„ ZCd-d.„ ZDd/d0„ ZEd1d2„ ZFd3d4„ ZGd5d6„ ZHd7d8„ ZId9d:„ ZJd;d<„ ZKe-d=d>„ ƒZLd?d@„ ZMdAdB„ ZNdCdD„ ZOdEdF„ ZPdGdH„ ZQdIdJ„ ZRdKS )Lé    )ÚIÚsymbolsÚBasicÚMulÚS)Úmul)ÚadjointÚ	transpose)Ú
ShapeError)ÚIdentityÚInverseÚMatrixÚMatrixSymbolÚ
ZeroMatrixÚeyeÚImmutableMatrix)ÚAdjointÚ	TransposeÚdetÚMatPow)ÚGenericIdentity)Úfactor_in_frontÚ
remove_idsÚMatMulÚcombine_powersÚ	any_zerosÚunpackÚonly_squares)Ú	null_safe)ÚQ)Úrefine)ÚSymbol)ÚXFAILÚraiseszn m l kT©ÚintegerÚxÚAÚBÚCÚDÚEc                   C   s$   t ttdd�t ttƒ ¡ ks t‚d S )NT©Úevaluate)r   r)   ÚdoitÚAssertionError© r0   r0   úk/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/matrices/expressions/tests/test_matmul.pyÚtest_evaluate   s    r2   c                  C   sè   t tt ƒttƒttƒ ks t‚t dt t ƒdttƒ ttƒ ksHt‚t dt t ƒdt ttƒ kslt‚tddddt ddgƒ} tdddddt dgƒ}t | ƒ|ks¬t‚t d|  ƒd| ksÄt‚t td| ƒƒtd|ƒ 	¡ ksät‚d S )Né   éþÿÿÿé   é   é   )
r   r'   r(   r   r/   r   r)   r   r   r.   )ÚMZMAr0   r0   r1   Útest_adjoint   s     ($r9   c                  C   s   t tt ƒttƒttƒ ks t‚t dt t ƒdttƒ ttƒ ksHt‚t dt t ƒdt ttƒ kslt‚tddddt ddgƒ} tdddddt dgƒ}t | ƒ|ks¬t‚t d|  ƒd| ksÄt‚t t|  ƒt| ksÜt‚t t	d| ƒƒt	d|ƒ 
¡ ksüt‚d S )Nr3   r5   r6   r7   )r	   r'   r(   r   r/   r   r)   r   r&   r   r.   )r8   ZMTr0   r0   r1   Útest_transpose)   s     ($r:   c                   C   s,   t ttdtdd�ƒtdttdd�ks(t‚d S )Nr3   Fr,   )r   r   r'   r(   r/   r0   r0   r0   r1   Útest_factor_in_front6   s    ÿr;   c                   C   sZ   t ttttƒtdd�ƒtttdd�ks*t‚tt ƒtttƒdd�ƒtttƒdd�ksVt‚d S ©NFr,   )	r   r   r'   r   Úmr(   r/   r   Únr0   r0   r0   r1   Útest_remove_ids;   s    ÿÿr?   c                	   C   s¢   t ttttƒtdd�ƒtttƒtdd�ks.t‚t ttjtt	t
 ƒt	t
tdd�ƒttjttƒtdd�ksjt‚t tt
t	tt
t	 ƒtdd�ƒtttƒtdd�ksžt‚d S r<   )r   r   r*   r   r   r>   r/   r(   ÚTr+   r'   r=   r0   r0   r0   r1   Útest_combine_powersB   s    ÿ ÿÿrA   c                   C   s*   t tttttƒdd�ƒtttƒks&t‚d S r<   )r   r   r'   r   r=   Úkr>   r/   r0   r0   r0   r1   Útest_any_zerosK   s    ÿrC   c                  C   s6   t ttdd�ƒtkst‚tttƒ} t | ƒ| ks2t‚d S r<   )r   r   r'   r/   r(   )r&   r0   r0   r1   Útest_unpackP   s    
rD   c                   C   sP   t tƒtgkst‚t ttƒttgks(t‚t tttjtƒtttj tgksLt‚d S ©N)r   r)   r/   r*   r'   r@   r0   r0   r0   r1   Útest_only_squaresV   s    rF   c                   C   s”   t dt ƒdt t tƒ ks t‚t dt t ƒdt t tƒ t tƒ ksLt‚t dt t tj t ƒdt t tƒ t ttj ƒ t tƒ ks�t‚d S )Nr3   r6   )r   r)   r>   r/   r*   r'   r@   r0   r0   r0   r1   Útest_determinant\   s     ,rG   c                   C   s–   t tdtƒjtdtfkst‚t tdtƒ ¡ jdttfks<t‚t tttt ƒƒjtttt ƒfksdt‚t tttt ƒƒjdd�jttjtjfks’t‚d S )Nr3   T©Údeep)r   r)   r*   Úargsr/   r.   r   r@   r0   r0   r0   r1   Ú	test_doitb   s     (rK   c                  C   sz   t ddgddggƒ} t ddgddggƒ}t| t|dƒƒ ¡ | |d  ksLt‚ttttt ƒƒ ¡ jttj	tj	fksvt‚d S )Nr5   r3   r6   r7   é   )
r   r   r   r.   r/   r)   r   r*   rJ   r@   )ÚXÚYr0   r0   r1   Útest_doit_drills_downi   s    $rO   c                   C   s8   t tttt ƒdƒjdd�jdtttt ƒfks4t‚d S )Nr3   FrH   )r   r)   r   r*   r.   rJ   r/   r0   r0   r0   r1   Ú$test_doit_deep_false_still_canonicalp   s    ÿrP   c                  C   s2   t ddgddggƒ} td| ƒ ¡ d|  ks.t‚d S )Nr5   r3   r6   r7   )r   r   r.   r/   )rM   r0   r0   r1   Útest_matmul_scalar_Matrix_doitu   s    rQ   c                   C   s&   t ttdƒtdƒƒjd tƒs"t‚d S )Nr5   r   )Ú
isinstancer   r   rJ   r   r/   r0   r0   r0   r1   Útest_matmul_sympify{   s    rS   c                  C   sR   t ddgddggƒ} t ddgddggƒ}t| |ƒ ¡ tddgddggƒksNt‚d S )Nr5   r3   r6   r7   é   )r   r   r.   r   r/   ©r'   r(   r0   r0   r1   Útest_collapse_MatrixBase   s    rV   c                  C   sŠ   t ttj t t t¡ƒ ¡ tks&t‚tt } t | tj t t¡ƒ ¡ tt	t
ƒ ksXt‚t | | j t t¡ƒ ¡ td t	t
ƒ ks†t‚d S )Nr3   )r    r)   r@   r*   r   Z
orthogonalr.   r/   rB   r   r>   )ZkCr0   r0   r1   Útest_refine…   s    &*rW   c                   C   s>   t dƒdkst‚t ttƒtt ks&t‚tt ttƒt ƒr:t‚d S )Nr5   )r   r/   r>   r=   rR   r0   r0   r0   r1   Útest_matmul_no_matricesŒ   s    rX   c                   C   sL   t tttjƒ ¡ tgttjggks&t‚t ttjƒ ¡ g ttjggksHt‚d S rE   )r   r>   r'   r@   Úargs_cncr/   r0   r0   r0   r1   Útest_matmul_args_cnc‘   s    &rZ   c                  C   sp   t ddd�\} }tt| |ttjƒ ¡ tg| |ttjggks>t‚tt| t|tjƒ ¡ tg| t|tjggkslt‚d S )Nza bF)Zcommutative)r   r   r>   r'   r@   rY   r/   )ÚaÚbr0   r0   r1   Útest_matmul_args_cnc_symbols•   s    .r]   c                  C   sL   t tdƒggƒtdddƒ } tdddƒ ¡ d tdƒ |  ¡ d ksHt‚d S )Nr&   r'   r5   r   )r   r!   r   Zas_explicitr/   )r8   r0   r0   r1   Útest_issue_12950œ   s    r^   c                   C   s4   t ttƒtttƒkst‚t ttƒtttƒks0t‚d S rE   )r   r)   r*   r   r/   r0   r0   r0   r1   Útest_construction_with_Mul    s    r_   c                   C   sL   t ttƒtttƒkst‚t ttƒtttƒks0t‚t ttƒtttƒksHt‚d S rE   )r   r)   r*   r   r/   r0   r0   r0   r1   Útest_construction_with_mul¤   s    r`   c                   C   s$   t jtƒ kst‚t jtjks t‚d S rE   )r   Úidentityr   r/   r   ZOner0   r0   r0   r1   Útest_generic_identity©   s    rb   c                  C   sf   t ddd�} td| | ƒ}td| | ƒ}t| ƒ}|d||  |  | }| |¡d| d|  ksbt‚d S )NÚNTr$   ÚM1ÚM2r3   )r!   r   r   Zcoeffr/   )rc   rd   re   r   Úzr0   r0   r1   Útest_issue_23519®   s    rg   c                      s0   t dddƒ‰ t dddƒ‰tt‡ ‡fdd„ƒ d S )Nr'   r3   r(   r6   c                      s
   t ˆ ˆƒS rE   )r   r0   rU   r0   r1   Ú<lambda>º   ó    z"test_shape_error.<locals>.<lambda>)r   r#   r
   r0   r0   rU   r1   Útest_shape_error·   s    rj   N)SZ
sympy.corer   r   r   r   r   Zsympy.core.mulr   Zsympy.functionsr   r	   Zsympy.matrices.exceptionsr
   Zsympy.matricesr   r   r   r   r   r   r   Zsympy.matrices.expressionsr   r   r   r   Z"sympy.matrices.expressions.specialr   Z!sympy.matrices.expressions.matmulr   r   r   r   r   r   r   Zsympy.strategiesr   Zsympy.assumptions.askr   Zsympy.assumptions.refiner    Zsympy.core.symbolr!   Zsympy.testing.pytestr"   r#   r>   r=   ÚlrB   r&   r'   r(   r)   r*   r+   r2   r9   r:   r;   r?   rA   rC   rD   rF   rG   rK   rO   rP   rQ   rS   rV   rW   rX   rZ   r]   r^   r_   r`   rb   rg   rj   r0   r0   r0   r1   Ú<module>   s\   $$	
	