U
    	-e8                     @   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   h/var/www/html/Darija-Ai-Train/env/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stt| td| td| kstt| td| td|kst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   	