U
    ZÊ¹jð	  ã                   @   sò   d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZ dd„ Zdd„ Zdd„ ZG dd„ deƒZdd„ ZedƒZdd„ Zedddgid�Zdd„ Zdd„ Z d d!„ Z!d"S )#é    )ÚExpr)ÚMul)ÚIÚInteger)Úsymbols)Ú	conjugate)ÚMatrix)ÚadjointÚDagger)Úimport_module)Úskip)ÚOperatorÚIdentityOperatorc                  C   s®   t ddd�} t| ƒt| ƒks t‚tt|  ƒt t| ƒ ks>t‚t ddd�}t|ƒ|ksZt‚t dƒ}tt|ƒtƒstt‚tdƒ}t|ƒ|ksŒt‚t dd	d
�}t|ƒjd	ksªt‚d S )NÚxT)ÚcomplexÚi©ÚrealÚpé   ÚAF)Zcommutative)	r   r
   r   ÚAssertionErrorr   Ú
isinstancer	   r   Zis_commutative)r   r   r   r   © r   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_dagger.pyÚtest_scalars   s    r   c                  C   s6   t dƒ} tt| t gddggƒ}t|ƒ|jks2t‚d S )Nr   é   é   )r   r   r   r
   ÚHr   )r   Úmr   r   r   Útest_matrix    s    r    c                  C   s�   t dƒ} tƒ }t| ƒ|  t| ƒ|  ks*t‚t| ƒ|  | tt| ƒ| ƒ| ksPt‚t| ƒt| ƒ t| ƒd kspt‚t| ƒt|ƒ t| ƒksŒt‚d S )NÚOr   )r   r   r
   r   r   )r!   r   r   r   r   Útest_dagger_mul&   s    & r"   c                   @   s   e Zd Zdd„ ZdS )ÚFooc                 C   s   t S ©N)r   )Úselfr   r   r   Ú_eval_adjoint1   s    zFoo._eval_adjointN)Ú__name__Ú
__module__Ú__qualname__r&   r   r   r   r   r#   /   s   r#   c                  C   s   t ƒ } t| ƒ}|tkst‚d S r$   )r#   r
   r   r   )ÚfÚdr   r   r   Útest_eval_adjoint5   s    r,   Únumpyc                  C   sJ   t stdƒ t  ddgddgg¡} |  ¡  ¡  ¡ }t| ƒ|k ¡ sFt‚d S )Núnumpy not installed.g      ð?ù               @ù       €      ð¿g       @)	Únpr   ÚarrayÚcopyÚ	transposer   r
   Úallr   )ÚaÚadagr   r   r   Útest_numpy_dagger=   s
    r8   ÚscipyÚfromlistÚsparse)Zimport_kwargsc                  C   sj   t stdƒ tstdƒ ntj} |  ddgddgg¡}| ¡  ¡  ¡ }t j 	t
|ƒ|  ¡ ¡dksft‚d S )Nr.   zscipy not installed.y      ð?        r/   r0   y       @        g        )r1   r   r9   r;   Z
csr_matrixr3   r4   r   ZlinalgZnormr
   Ztodenser   )r;   r6   r7   r   r   r   Útest_scipy_sparse_daggerI   s    
r<   c                  C   s.   t dƒ} t| ƒ}|j| fkr&t|tƒs*t‚dS )zŒCheck treatment of unknown objects.
    Objects without adjoint or conjugate/transpose methods
    are sympified and wrapped in dagger.
    r   N)r   r
   Úargsr   r	   r   ©r   Úresultr   r   r   Útest_unknownV   s    r@   c                  C   sF   t ddd�} t| ƒ| kst‚t| dd�}|j| fkr>t|tƒsBt‚dS )z:Check that evaluate=False returns unevaluated Dagger.
    r   Tr   F)ÚevaluateN)r   r
   r   r=   r   r	   r>   r   r   r   Útest_unevaluated`   s    rB   N)"Zsympy.core.exprr   Zsympy.core.mulr   Zsympy.core.numbersr   r   Zsympy.core.symbolr   Z$sympy.functions.elementary.complexesr   Zsympy.matrices.denser   Zsympy.physics.quantum.daggerr	   r
   Zsympy.externalr   Zsympy.testing.pytestr   Zsympy.physics.quantum.operatorr   r   r   r    r"   r#   r,   r1   r8   r9   r<   r@   rB   r   r   r   r   Ú<module>   s(   		
