ó
¡¼™\c           @   sn  d  d l  m Z m Z m Z m Z m Z m Z m Z m Z m	 Z	 d  d l
 m Z d  d l m Z 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 m Z 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& d  d l' m( Z( d  d l) m* Z* d  d l+ m, Z, d  d	 l- m. Z. m/ Z/ m0 Z0 m1 Z1 d  d
 l2 m3 Z3 d  d l4 m5 Z5 d  d l6 m7 Z7 d „  Z8 d „  Z9 d „  Z: d „  Z; d „  Z< d „  Z= d „  Z> d „  Z? d „  Z@ d „  ZA d „  ZB d „  ZC d „  ZD d „  ZE d „  ZF d „  ZG d „  ZH d „  ZI d „  ZJ d  „  ZK d! „  ZL d" „  ZM d# „  ZN d$ „  ZO d% „  ZP d& „  ZQ d' S((   iÿÿÿÿ(	   t   expt   symbolst   sqrtt   It   pit   Mult   Integert   Wildt   Rational(   t   range(   t   Matrixt   ImmutableMatrix(   t   XGatet   YGatet   ZGatet   random_circuitt   CNOTt   IdentityGatet   Ht   Xt   Yt   St   Tt   Zt   SwapGatet	   gate_simpt	   gate_sortt   CNotGatet   TGatet   HadamardGatet	   PhaseGatet   UGatet   CGate(   t
   Commutator(   t   AntiCommutator(   t	   represent(   t   qapply(   t   Qubitt   IntQubitt   qubit_to_matrixt   matrix_to_qubit(   t   matrix_to_zero(   t	   sqrt2_inv(   t   Daggerc    	      C   s  t  d ƒ }  |  j d k s! t ‚ |  j d k s6 t ‚ t d ƒ } t d ƒ } t  | ƒ } t  | ƒ } t  | ƒ } | | k s„ t ‚ | | k s– t ‚ | | k s¨ t ‚ t | | ƒ } t | | ƒ } t | | ƒ } | | k sç t ‚ | | k sù t ‚ | | k st ‚ d S(   s   Test a basic gate.i   i   t   i0t   i1N(   R   t
   min_qubitst   AssertionErrort   nqubitsR   R   (	   t   hR,   R-   t   h0_w1t   h0_w2t   h1_w1t
   cnot_10_w1t
   cnot_10_w2t
   cnot_01_w1(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt	   test_gate   s"    c    	      C   sQ  t  d ƒ \ }  } } } t |  | g | | g g ƒ } t d	 | ƒ } t | d d ƒ| k sc t ‚ t | t d ƒ ƒ |  t d ƒ | t d ƒ k s t ‚ t | t d ƒ ƒ | t d ƒ | t d ƒ k s× t ‚ t d
 | ƒ } t | d d ƒ} xR t d ƒ D]D } | t t	 | d ƒ ƒ t t | t	 | d ƒ ƒ ƒ k st ‚ qWd  S(   Ns   a,b,c,di    R0   i   t   0t   1i   i   (   i    (   i   (
   R   R
   R   R#   R/   R$   R%   R	   R'   R&   (	   t   at   bt   ct   dt   uMatt   u1t   u2t   u2Rept   i(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt
   test_UGate,   s    ::c          C   s|  t  d d d d g d d d d g d d d d g d d d d g g ƒ }  t t d t d ƒ ƒ d d ƒ|  k su t ‚ t d t d ƒ ƒ } t | d d ƒt  d d d d d d d d g d d d d d d d d g d d d d d d d d g d d d d d d d d g d d d d d d d d g d d d d d d d d g d d d d d d d d g d d d d d d d d g g ƒ k s†t ‚ t d t d ƒ ƒ } t | t d ƒ ƒ t t | t d ƒ d d ƒƒ k sÙt ‚ t | t d ƒ ƒ t t | t d ƒ d d ƒƒ k st ‚ t d t d ƒ ƒ } t  d d d d d t	 f d d t	 d f f ƒ } t | j
 ƒ  d d ƒ| k st ‚ t d t d ƒ ƒ } t  d d d d f ƒ } t | t d
 ƒ ƒ t d
 ƒ k s×t ‚ t t | t d
 ƒ d d ƒƒ t d
 ƒ k st ‚ t | j
 ƒ  d d ƒ| k s0t ‚ t d t d ƒ ƒ } t | t d
 ƒ ƒ t	 t d
 ƒ k sqt ‚ t t | t d
 ƒ d d ƒƒ t	 t d
 ƒ k s©t ‚ t | ƒ | k sÁt ‚ t | d ƒ t | ƒ k sât ‚ t | ƒ | j ƒ  k s t ‚ t | ƒ | k st ‚ t | ƒ | j ƒ  k s6t ‚ t | ƒ t | d	 ƒ k sWt ‚ t | d	 ƒ | j ƒ  k sxt ‚ d S(   s   Test the general CGate.i   i    R0   i   i   t   1001i   t   0000iÿÿÿÿt   11N(   i   i   (   i   i    (   i   i    i    i    (   i    i   i    i    (   i   i    i    i    (   i    i   i    i    (   i    i    i   i    (   i    i    i    iÿÿÿÿ(   R
   R#   R    R   R/   R$   R%   R(   R   R   t	   decomposeR   R   R+   t   powt   inverse(   t
   CNOTMatrixt   ToffoliGatet   CYGatet   CYGate_matrixt   CZGatet   CZGate_matrixt
   CPhaseGate(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt
   test_cgate>   sL    E-QE'-++.$)$!!c          C   sø  t  d ƒ \ }  } } } t |  | g | | g g ƒ } t d d d d g d d d d g d d |  | g d d | | g g ƒ } t d | ƒ } t d | ƒ } t | d d ƒ| k sº t ‚ t | t d ƒ ƒ |  t d ƒ | t d ƒ k sô t ‚ t | t d ƒ ƒ | t d ƒ | t d ƒ k s.t ‚ t | t d ƒ ƒ t d ƒ k sVt ‚ t | t d	 ƒ ƒ t d	 ƒ k s~t ‚ t d | ƒ } t | d d ƒ}	 xR t d
 ƒ D]D }
 |	 t	 t
 |
 d ƒ ƒ t	 t | t
 |
 d ƒ ƒ ƒ k s¬t ‚ q¬Wd  S(   Ns   a,b,c,di   i    R0   i   t   10RG   t   01t   00i   (   i    (   i   (   R   R
   R   R    R#   R/   R$   R%   R	   R'   R&   (   R;   R<   R=   R>   R?   t   cMatR@   t   cu1RA   RB   RC   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_UGate_CGate_combos   s    H::((c          C   sï  t  d ƒ \ }  } } } t |  | g | | g g ƒ } t |  | d d d g | d | d d g d d |  | d g d d | d | g g ƒ } t d ƒ t d | ƒ } t | d d ƒ| k sÅ t ‚ t d t d ƒ d t d ƒ g t t d ƒ t t d ƒ g g ƒ } t t	 d d ƒ t d t	 d d ƒ t d g t	 d d ƒ t d t	 d d ƒ t d g g ƒ } t d d g d t g g ƒ }	 t d | ƒ }
 t t
 d ƒ |
 d d ƒ| k sÃt ‚ t |
 t
 d ƒ d d ƒ|	 k sët ‚ d  S(   Ns   v w f gi   i    R0   i   (   R   R   R
   R   R   R#   R/   R   R   R   R   (   t   vt   wt   ft   gt   uMat1t   cMat1R@   t   uMat2t   cMat2_1t   cMat2_2RA   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_UGate_OneQubitGate_comboˆ   s    XGb(c          C   sP   t  d ƒ t d ƒ }  t |  d d ƒ} | t t t d d g ƒ k sL t ‚ d S(   s-   Test the representation of the hadamard gate.i    RU   R0   i   N(   R   R%   R#   R
   R*   R/   (   t   circuitt   answer(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_hadamard–   s    c          C   sP   t  d ƒ t d ƒ }  t |  d d ƒ} t d d d d g ƒ | k sL t ‚ d S(   s&   Test the representation of the X gate.i    RU   R0   i   i   N(   R   R%   R#   R
   R/   (   Rc   Rd   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_xgatež   s    c          C   sr   t  d ƒ t d ƒ }  t |  d d ƒ} | d d k rh | d t k rh | d d k rh | d d k sn t ‚ d S(   s&   Test the representation of the Y gate.i    RU   R0   i   i   i   N(   R   R%   R#   R   R/   (   Rc   Rd   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_ygate¥   s     c          C   sP   t  d ƒ t d ƒ }  t |  d d ƒ} t d d d d g ƒ | k sL t ‚ d S(   s&   Test the representation of the Z gate.i    RU   R0   i   i   N(   R   R%   R#   R
   R/   (   Rc   Rd   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_zgate­   s    c          C   sP   t  d ƒ t d ƒ }  t |  d d ƒ} t d t d d g ƒ | k sL t ‚ d S(   s&   Test the representation of the S gate.i    RT   R0   i   N(   R   R%   R#   R
   R   R/   (   Rc   Rd   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_phasegate´   s    c          C   sX   t  d ƒ t d ƒ }  t d t t t d ƒ d d g ƒ t |  d d ƒk sT t ‚ d S(   s&   Test the representation of the T gate.i    RT   i   R0   i   N(   R   R%   R
   R    R   R   R#   R/   (   Rc   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_represent_tgate»   s    c          C   s‚   t  d ƒ t d ƒ t d ƒ t d ƒ t d ƒ }  t |  d d ƒ} t t t d ƒ t t d ƒ d d g ƒ | k s~ t	 ‚ d S(   s$   Test a compound gate representation.i    RU   R0   i   N(
   R   R   R   R   R%   R#   R
   R   R   R/   (   Rc   Rd   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_compound_gatesÁ   s    4c       	   C   s  t  d d ƒ }  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 so t ‚ |  t d ƒ }  t t |  d d ƒƒ t |  ƒ k s© t ‚ t  d d ƒ }  t |  ƒ |  k sÐ t ‚ t t |  ƒ ƒ |  k sî t ‚ |  |  d k st ‚ d S(   s   Test the CNOT gate.i   i    R0   i   t   111i   N(   R   R#   R
   R/   R%   R(   R$   R+   (   Rc   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_cnot_gateÈ   s    Qc          C   s¹  xl t  t t t t t f D]R }  t |  d ƒ |  d ƒ |  d ƒ ƒ |  d ƒ |  d ƒ |  d ƒ k s t ‚ q Wt t  d ƒ t d ƒ d t d d ƒ t  d ƒ t  d ƒ ƒ } | t d ƒ d t d d ƒ t  d ƒ t  d ƒ d k sñ t ‚ t t d ƒ t  d ƒ ƒ t  d ƒ t d ƒ k s*t ‚ t t d ƒ t  d ƒ d ƒ t  d ƒ d t d ƒ k sjt ‚ t t d ƒ t d ƒ ƒ t d ƒ t d ƒ k s£t ‚ t t d ƒ t  d ƒ ƒ t  d ƒ t d ƒ k sÜt ‚ t t d ƒ t d ƒ ƒ t d ƒ t d ƒ k st ‚ t t d ƒ t d ƒ ƒ t d ƒ t d ƒ k sMt ‚ t t d ƒ t d ƒ ƒ t d ƒ t d ƒ k s…t ‚ t t d ƒ t d ƒ ƒ t d ƒ t d ƒ k s½t ‚ t t d ƒ t d d ƒ ƒ t d d ƒ t d ƒ k sût ‚ t t d ƒ t d d ƒ ƒ t d d ƒ t d ƒ k s9t ‚ t t d ƒ t d d ƒ ƒ t d d ƒ t d ƒ k swt ‚ t t  d ƒ t d d ƒ ƒ t d d ƒ t  d ƒ k sµt ‚ d S(   s   Test gate_sort.i   i   i    N(	   R   R   R   R   R   R   R   R/   R   (   R\   t   e(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_gate_sort×   s     PAA9@999888>>>c          C   s  t  d ƒ t d ƒ t  d ƒ d t d d ƒ t d ƒ d t d ƒ t d ƒ d t d ƒ d }  t |  ƒ t  d ƒ t d d ƒ t d ƒ t d ƒ t d ƒ k s® t ‚ t t d ƒ t d ƒ ƒ d k sÖ t ‚ t t d ƒ t d ƒ ƒ d k sþ t ‚ t t d ƒ t d ƒ ƒ d k s&t ‚ t t  d ƒ t  d ƒ ƒ d k sNt ‚ t t d ƒ t d ƒ ƒ t d ƒ k s|t ‚ t t d ƒ t d ƒ ƒ t d ƒ k sªt ‚ t t	 d ƒ ƒ t	 d ƒ k sÎt ‚ t t d ƒ d t d ƒ d ƒ t	 d ƒ k st ‚ d S(   s   Test gate_simp.i    i   i   i   i   N(
   R   R   R   R   R   R   R/   R   R   R   (   Rn   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_gate_simpó   s    eI((((..$c          C   sð   t  d
 d d d f ƒ }  t t d d ƒ j ƒ  d d ƒ|  k sE t ‚ t t d d ƒ t d ƒ ƒ t d ƒ k sv t ‚ d } xm t | ƒ D]_ } xV t | ƒ D]H } t t | | ƒ d | ƒt t | | ƒ j ƒ  d | ƒk sœ t ‚ qœ Wq‰ Wd	 S(   s   Test the SWAP gate.i   i    R0   i   i   t   0010t   1000i   N(   i   i    i    i    (   i    i    i   i    (   i    i   i    i    (   i    i    i    i   (   R
   R#   R   RH   R/   R$   R%   R	   (   t   swap_gate_matrixR0   RC   t   j(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_swap_gate  s    -1c       	   C   sò   xë t  t t t t t t f D]Î }  xÅ t  t t t t t t f D]¨ } t |  d ƒ | d ƒ ƒ } t t	 | d d d d ƒƒ } t t	 | j
 ƒ  d d d d ƒƒ } | | k s³ t ‚ t |  d ƒ | d ƒ ƒ } | j
 ƒ  d k s> t ‚ q> Wq Wd S(   s-   Test single qubit gate commutation relations.i    R0   i   t   formatt   sympyN(   R   R   R   R   R   R   R   R!   R)   R#   t   doitR/   (   t   g1t   g2Rn   R;   R<   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_one_qubit_commutators  s    ""$c       	   C   s"  xt  t t t t f D]}  xû t  t t t t f D]ä } t |  d ƒ | d ƒ ƒ } t t | d d d d ƒƒ } t t | j ƒ  d d d d ƒƒ } | | k s§ t	 ‚ t |  d ƒ | d ƒ ƒ } t t | d d d d ƒƒ } t t | j ƒ  d d d d ƒƒ } | | k s2 t	 ‚ q2 Wq Wd S(   s1   Test single qubit gate anticommutation relations.i    R0   i   Rv   Rw   i   N(
   R   R   R   R   R   R"   R)   R#   Rx   R/   (   Ry   Rz   Rn   R;   R<   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_one_qubit_anticommutators  s    $$c           C   s  t  t d d ƒ t d ƒ ƒ j ƒ  d k s0 t ‚ t  t d d ƒ t d ƒ ƒ j ƒ  d k s` t ‚ t  t d d ƒ t d ƒ ƒ j ƒ  d k s t ‚ t  t d d ƒ t d ƒ ƒ j ƒ  d k sÀ t ‚ t  t d d ƒ t d d ƒ ƒ j ƒ  d k só t ‚ t  t d d ƒ t d d ƒ ƒ j ƒ  d k s&t ‚ t  t d d ƒ t d d ƒ ƒ j ƒ  d k sYt ‚ t  t d d ƒ t d d ƒ ƒ j ƒ  d k sŒt ‚ d S(   s)   Test commutators of involving CNOT gates.i    i   i   N(   R!   R   R   Rx   R/   R   R   R   (    (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_cnot_commutators)  s    0000333c          C   sd   t  d d ƒ }  t |  t ƒ s$ t ‚ t |  d d ƒ} | j d k sK t ‚ t | t ƒ s` t ‚ d  S(   Ni
   i   R0   i   (   i   i   (   R   t
   isinstanceR   R/   R#   t   shapeR
   (   R=   t   m(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_random_circuit5  s
    c          C   s1   t  d d ƒ }  t |  ƒ } |  | k s- t ‚ d  S(   Ni   i   (   R   R+   R/   (   t   xt   x_dagger(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_hermitian_XGate=  s    c          C   s1   t  d d ƒ }  t |  ƒ } |  | k s- t ‚ d  S(   Ni   i   (   R   R+   R/   (   t   yt   y_dagger(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_hermitian_YGateD  s    c          C   s1   t  d d ƒ }  t |  ƒ } |  | k s- t ‚ d  S(   Ni   i   (   R   R+   R/   (   t   zt   z_dagger(    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_hermitian_ZGateK  s    c          C   s5   t  d d ƒ }  t |  ƒ } |  | d k s1 t ‚ d  S(   Ni   i   (   R   R+   R/   (   R‚   Rƒ   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_unitary_XGateR  s    c          C   s5   t  d d ƒ }  t |  ƒ } |  | d k s1 t ‚ d  S(   Ni   i   (   R   R+   R/   (   R…   R†   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_unitary_YGateY  s    c          C   s5   t  d d ƒ }  t |  ƒ } |  | d k s1 t ‚ d  S(   Ni   i   (   R   R+   R/   (   Rˆ   R‰   (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   test_unitary_ZGate`  s    N(R   Rw   R    R   R   R   R   R   R   R   R   t   sympy.core.compatibilityR	   t   sympy.matricesR
   R   t   sympy.physics.quantum.gateR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    t    sympy.physics.quantum.commutatorR!   t$   sympy.physics.quantum.anticommutatorR"   t   sympy.physics.quantum.representR#   t   sympy.physics.quantum.qapplyR$   t   sympy.physics.quantum.qubitR%   R&   R'   R(   t!   sympy.physics.quantum.matrixutilsR)   t!   sympy.physics.quantum.matrixcacheR*   t   sympy.physics.quantumR+   R8   RD   RR   RX   Rb   Re   Rf   Rg   Rh   Ri   Rj   Rk   Rm   Ro   Rp   Ru   R{   R|   R}   R   R„   R‡   RŠ   R‹   RŒ   R   (    (    (    sD   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_gate.pyt   <module>   sJ   @ˆ"			5																						