a
    kh8                     @   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   U/var/www/auris/lib/python3.9/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sTJ 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*J d S )Nr   r   r   r                     )r   r	   r   )nbitsZfirst_half_stateZsecond_half_stateZfirstqZsecondqZthirdqZfourthqr   r   r   test_superposition_basis   s     0,,,r   c                  C   sB  t ddd } t| td td ks,J t| td tdksHJ d}t dt} t| td| td|dksxJ t| td| td|dksJ t| td| td| ksJ t| td| td|ksJ tt ddd ddtd	dgddggksJ t| ddtg d
g dg dg dgks>J 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   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$J dttd|  | td| d }tt| td| d |ksfJ d S Nr   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s8J d S 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szJ d S )Nr   @     r      )r	   r
   r   r   r   r   )r+   r(   r#   Ziteratedr)   r   r   r   test_grover_iteration_2B   s    



r1   c                  C   sb   d} t t| td| dksJ d} t| }d| d dtd|  d  }t tdt|ks^J d S )	Nr   r   r   r   r-   r.   r/   r0   )r   r   r   r	   r   r   r'   r   r   r   test_groverU   s    r2   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,   r1   r2   r   r   r   r   <module>   s   	