U
    ZÊ¹jU  ã                   @   sŠ  d dl mZ d dl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 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 d dlmZ d dl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+ d dl,m-Z- edƒ\Z.Z/Z0G dd„ de"ƒZ1G dd„ de"ƒZ2G dd„ de$ƒZ3G dd„ de$ƒZ4dd„ Z5dd„ Z6dd„ Z7d d!„ Z8d"d#„ Z9d$d%„ Z:d&d'„ Z;d(d)„ Z<d*S )+é    )ÚAdd)Údiff)ÚMul)ÚIÚIntegerÚRationalÚooÚpi)ÚPow)ÚS)ÚSymbolÚsymbols)Úsympify)Ú	conjugate)Úsqrt)Úsin)Úraises)ÚDagger)ÚQExpr)
ÚKetÚBraÚ
TimeDepKetÚ
TimeDepBraÚKetBaseÚBraBaseÚ	StateBaseÚWavefunctionÚOrthogonalKetÚOrthogonalBra)ÚHilbertSpacezx,y,tc                   @   s   e Zd Zedd„ ƒZdS )Ú	CustomKetc                 C   s   dS )N)Útest© ©Úselfr"   r"   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_state.pyÚdefault_args   s    zCustomKet.default_argsN©Ú__name__Ú
__module__Ú__qualname__Úclassmethodr&   r"   r"   r"   r%   r       s   r    c                   @   s   e Zd Zedd„ ƒZdS )ÚCustomKetMultipleLabelsc                 C   s   dS )N)ÚrÚthetaÚphir"   r#   r"   r"   r%   r&   !   s    z$CustomKetMultipleLabels.default_argsNr'   r"   r"   r"   r%   r,       s   r,   c                   @   s   e Zd Zedd„ ƒZdS )ÚCustomTimeDepKetc                 C   s   dS )N)r!   Útr"   r#   r"   r"   r%   r&   '   s    zCustomTimeDepKet.default_argsNr'   r"   r"   r"   r%   r0   &   s   r0   c                   @   s   e Zd Zedd„ ƒZdS )ÚCustomTimeDepKetMultipleLabelsc                 C   s   dS )N)r-   r.   r/   r1   r"   r#   r"   r"   r%   r&   -   s    z+CustomTimeDepKetMultipleLabels.default_argsNr'   r"   r"   r"   r%   r2   ,   s   r2   c                  C   sT  t dƒ} t| t ƒst‚t| tƒs$t‚t| tƒs2t‚t| tƒs@t‚| jtdƒfksTt‚| jt	ƒ ksdt‚| j
dksrt‚t dƒ} | jtdƒfksŽt‚t ttƒ} | jttfksªt‚| jt	ƒ ksºt‚| j
dksÈt‚|  ¡ tksØt‚| jtttƒksìt‚|  tt¡t ttƒk�st‚tƒ } | tdƒk�s t‚tƒ } | tdddƒk�s<t‚t ƒ t dƒk�sPt‚d S )	NÚ0Fr	   r!   r-   r.   r/   Úpsi)r   Ú
isinstanceÚAssertionErrorr   r   r   Úlabelr   Úhilbert_spacer   Úis_commutativeÚxÚyÚ
dual_classr   ÚdualÚsubsr    r,   ©Úkr"   r"   r%   Útest_ket2   s,    
rA   c                  C   s   t dƒ} t| t ƒst‚t| tƒs$t‚t| tƒs2t‚t| tƒs@t‚| jtdƒfksTt‚| jt	ƒ ksdt‚| j
dksrt‚t dƒ} | jtdƒfksŽt‚t ttƒ} | jttfksªt‚| jt	ƒ ksºt‚| j
dksÈt‚|  ¡ tksØt‚| jtttƒksìt‚|  tt¡t ttƒk�st‚t ƒ t dƒk�st‚d S )Nr3   Fr	   r4   )r   r5   r6   r   r   r   r7   r   r8   r   r9   r:   r;   r<   r   r=   r>   )Úbr"   r"   r%   Útest_braT   s$    
rC   c               	   C   sb   t dƒ} t dƒ}dt |  ttdƒ |  }|ttdt| ƒttddƒttdtj	ƒ|ƒƒks^t
‚d S )Nr   é   é   éÿÿÿÿ)r   r   r:   r   r   r   r   r
   r   ZHalfr6   )Zk0Zk1r@   r"   r"   r%   Útest_opsp   s    ÿrG   c                  C   sš  t dtƒ} t| t ƒst‚t| tƒs&t‚t| tƒs4t‚t| tƒsBt‚| jtdƒfksVt‚| j	tdƒtfkslt‚| j
tkszt‚|  ¡ tksŠt‚| jtdtƒksžt‚|  td¡t ddƒks¸t‚t tdƒ} | jtfksÒt‚| j	ttdƒfksèt‚tƒ } | jtdƒfk�st‚| j
tdƒk�st‚| tddƒk�s,t‚tƒ } | jtdƒtdƒtdƒfk�sTt‚| j
tdƒk�sht‚| tddddƒk�s€t‚t ƒ t d	dƒk�s–t‚d S )
Nr   rE   ç      à?r!   r1   r-   r.   r/   r4   )r   r1   r5   r6   r   r   r   r7   r   ÚargsÚtimer<   r   r=   r>   r:   r   r0   r   r2   r?   r"   r"   r%   Útest_time_dep_ketx   s.    

"rK   c                  C   sæ   t dtƒ} t| t ƒst‚t| tƒs&t‚t| tƒs4t‚t| tƒsBt‚| jtdƒfksVt‚| j	tdƒtfkslt‚| j
tkszt‚|  ¡ tksŠt‚| jtdtƒksžt‚t tdƒ}|jtfks¸t‚|j	ttdƒfksÎt‚t ƒ t ddƒksât‚d S )Nr   rH   r4   r1   )r   r1   r5   r6   r   r   r   r7   r   rI   rJ   r<   r   r=   r:   r   )rB   r@   r"   r"   r%   Útest_time_dep_braš   s    

rL   c                  C   s¢   t ddd�} tdƒ}tdƒ}t|ƒtdƒks0t‚t|ƒtdƒksDt‚t|ƒjdksVt‚tdƒ}dt | | |  }t|ƒt| ƒt|ƒ dt t|ƒ  ksžt‚d S )	Nr:   T)Úcomplexr@   rB   FÚk2rE   )r   r   r   r   r6   r9   r   r   )r:   r@   rB   rN   Úer"   r"   r%   Útest_bra_ket_dagger°   s    rP   c                     sÂ  t ddd�\} }t ddd�}t dddd�}t| d | ƒ‰ ˆ  ¡ }ˆ j}ˆ jd	ksTt‚ˆ jtksbt‚ˆ d
ƒdksrt‚|d
ƒdks‚t‚||  t tfks˜t‚tˆ | ƒtd|  | ƒks´t‚t	t
‡ fdd„ƒ tˆ ƒttˆ jƒ| ƒksât‚tˆ ƒtˆ ƒksöt‚t| d | |d |   | ddf|ddfƒ}|j}||  dk�s:t‚|| dk�sLt‚|jd	k�s\t‚|jtdƒd k�stt‚|ddƒdk�sˆt‚|ddƒdk�sœt‚tt|| ƒ|ƒtd|  d|  | ddf|ddfƒk�sÖt‚t|ƒtt|jƒf|jdd … žŽ k�st‚t|ƒt|ƒk�st‚ttdƒ| d  | ddfƒ}|jdk�sDt‚| ¡ |k�sVt‚t|ƒtt|jƒ| ddfƒk�szt‚t|ƒt|ƒk�s�t‚tt|t |  | ƒ| d|fƒ}	|	jt|d ƒk�sÈt‚|	|d ƒdk�sÞt‚|	dƒtd| t | ƒk�s t‚|	dddd�tdt ƒk�s t‚|	 ¡ ttdƒt|ƒ t|t |  | ƒ | d|fƒk�s^t‚t|	ƒtt|	jƒ| d|fƒk�s‚t‚t|	ƒt|	ƒk�s˜t‚t| d dƒ}
t|
jd ƒtk�s¾t‚d S )Nzx yT)ÚrealÚL)ÚpositiveÚn)ÚintegerrS   rE   Fé
   éd   i'  c                      s   ˆ   ¡ S )N)Ú	normalizer"   ©Úfr"   r%   Ú<lambda>Ì   ó    z#test_wavefunction.<locals>.<lambda>r   rD   )r   rD   )r   rE   é*   é   é   é   rH   )rT   rR   r:   )r   r   ZprobZlimitsÚis_normalizedr6   Znormr   r   r   ÚNotImplementedErrorr   Úexprr   r   rI   rX   r   r	   ÚtypeÚ	variablesr   )r:   r;   rR   rT   ÚpZlimsÚgZlims_gÚhZpiabr@   r"   rY   r%   Útest_wavefunction½   sV    ,:,$ " .ÿ
$ri   c                  C   sh   t tƒttƒ } |  ¡ dks t‚t tƒttd ƒ } |  ¡ dksDt‚t tƒttƒ } |  ¡ | ksdt‚d S )NrD   r   )r   r:   r   Zdoitr6   r;   )Zbraketr"   r"   r%   Útest_orthogonal_statesð   s    rj   N)=Zsympy.core.addr   Zsympy.core.functionr   Zsympy.core.mulr   Zsympy.core.numbersr   r   r   r   r	   Zsympy.core.powerr
   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Zsympy.core.sympifyr   Z$sympy.functions.elementary.complexesr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   Zsympy.testing.pytestr   Zsympy.physics.quantum.daggerr   Zsympy.physics.quantum.qexprr   Zsympy.physics.quantum.stater   r   r   r   r   r   r   r   r   r   Zsympy.physics.quantum.hilbertr   r:   r;   r1   r    r,   r0   r2   rA   rC   rG   rK   rL   rP   ri   rj   r"   r"   r"   r%   Ú<module>   s8   0""3