U
    ZÊ¹j8  ã                   @   sœ   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 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 )é    )Úsqrt)ÚMatrix)Ú	represent)Úqapply©ÚIntQubit)Úapply_groverÚsuperposition_basisÚ
OracleGateÚgrover_iterationÚWGatec                 C   s   | t d| jƒkS )Né   ©r   Únqubits©Zqubits© r   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/quantum/tests/test_grover.pyÚreturn_one_on_two
   s    r   c                 C   s   | t d| jd�kS )Né   ©r   r   r   r   r   r   Úreturn_one_on_one   s    r   c                  C   s.  d} t d| d�d t d| d�d  }t d| ƒd t d| ƒd  }|| t| ƒksTt‚d} dtdƒ t d| d� dtdƒ t d| d�  }dtdƒ t d| ƒ dtdƒ t d| ƒ  }dtdƒ t d| ƒ dtdƒ t d| ƒ  }dtdƒ t d	| ƒ dtdƒ t d
| ƒ  }|| | | t| ƒk�s*t‚d S )Nr   r   r   r   é   é   é   é   é   é   )r   r	   ÚAssertionErrorr   )ÚnbitsZfirst_half_stateZsecond_half_stateZfirstqZsecondqZthirdqZfourthqr   r   r   Útest_superposition_basis   s     0,,,r   c               	   C   sR  t ddd„ ƒ} t| tdƒ ƒtdƒ ks,t‚t| tdƒ ƒtdƒksHt‚d}t dtƒ} t| td|ƒ ƒtd|d�ksxt‚t| td|ƒ ƒtd|d�ksšt‚t| td|ƒ ƒtd|ƒ ks¼t‚t| td|ƒ ƒtd|ƒksÜt‚tt ddd„ ƒdd�td	dgddggƒk�st‚t| dd�tddddgddddgddd	dgddddggƒk�sNt‚d S )
Nr   c                 S   s   | t dƒkS ©Nr   r   r   r   r   r   Ú<lambda>!   ó    z!test_OracleGate.<locals>.<lambda>r   r   r   r   c                 S   s   | t dƒkS r    r   r   r   r   r   r!   ,   r"   éÿÿÿÿ)r
   r   r   r   r   r   r   )Úvr   r   r   r   Útest_OracleGate    s    
""" ÿ
r%   c                  C   sj   d} t | ƒ}tt| ƒ| ƒ|ks$t‚dttd| ƒƒ | td| d� }tt| ƒtd| d� ƒ|ksft‚d S ©Nr   r   r   )r	   r   r   r   r   Úpowr   ©r   Úbasis_statesÚexpectedr   r   r   Ú
test_WGate1   s
    "r+   c                  C   s<   d} t | ƒ}t| tƒ}td| d�}tt||ƒƒ|ks8t‚d S r&   )r	   r
   r   r   r   r   r   )Ú	numqubitsr)   r$   r*   r   r   r   Útest_grover_iteration_1:   s
    
r-   c                  C   s~   d} t | ƒ}t| tƒ}t||ƒ}t|ƒ}t||ƒ}t|ƒ}t||ƒ}t|ƒ}d| d dtd| ƒ d  }t|ƒ|kszt‚d S )Nr   éóÿÿÿé@   é  r   é   )r	   r
   r   r   r   r   r   )r,   r)   r$   Ziteratedr*   r   r   r   Útest_grover_iteration_2B   s    



r2   c                  C   sb   d} t t| ƒtd| d�kst‚d} t| ƒ}d| d dtd| ƒ d  }t tdƒt|ƒks^t‚d S )	Nr   r   r   r   r.   r/   r0   r1   )r   r   r   r   r	   r   r   r(   r   r   r   Útest_groverU   s    r3   N)Z(sympy.functions.elementary.miscellaneousr   Zsympy.matrices.denser   Zsympy.physics.quantum.representr   Zsympy.physics.quantum.qapplyr   Zsympy.physics.quantum.qubitr   Zsympy.physics.quantum.groverr   r	   r
   r   r   r   r   r   r%   r+   r-   r2   r3   r   r   r   r   Ú<module>   s   	