o
    GZh8                     @   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   V/var/www/auris/lib/python3.10/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s*J 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sJ 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   s>  t ddd } t| td td ksJ t| td tdks$J d}t dt} t| td| td|dks<J t| td| td|dksMJ t| td| td| ks^J t| td| td|ksnJ tt ddd ddtd	dgddggksJ t| ddtg d
g dg dg dgksJ d S )Nr   c                 S      | t dkS Nr   r   r   r   r   r   <lambda>!       z!test_OracleGate.<locals>.<lambda>r   r   r   r   c                 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   r   )vr   r   r   r   test_OracleGate    s   
""" 4r%   c                  C   sj   d} t | }tt| | |ksJ dttd|  | td| d }tt| td| d |ks3J 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sJ 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s=J d S )Nr   @     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J d} t| }d| d dtd|  d  }t tdt|ks/J d S )	Nr   r   r   r   r.   r/   r0   r1   )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    	