ó
¡¼™\c           @   s‘  d  d l  Z  d  d l m Z m Z m Z m Z 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 d  d l 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# d  d l$ m% Z% e d ƒ \ Z& Z' d Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d S(   iÿÿÿÿN(   t   Integert   Matrixt   Rationalt   sqrtt   symbols(   t   ranget   long(   t   measure_allt   measure_partialt   matrix_to_qubitt   matrix_to_densityt   qubit_to_matrixt   IntQubitt   IntQubitBrat   QubitBra(   t   HadamardGatet   CNOTt   XGatet   YGatet   ZGatet	   PhaseGate(   t   qapply(   t	   represent(   t   Qubit(   t   raises(   t   Density(   t   Trs   x,ygíµ ÷Æ°>c          C   s  d d d d d g }  t  d ƒ } | j d ƒ t  d ƒ k sB t ‚ | j d ƒ t  d ƒ k sc t ‚ | j d ƒ t  d ƒ k s„ t ‚ | j d
 k s™ t ‚ | j d k s® t ‚ x2 t d ƒ D]$ } | | |  d | k s» t ‚ q» Wt | ƒ d k sû t ‚ t  d	 ƒ } d  S(   Ni    i   t   00110t   00111t   00100i   t   10110i   t   110(   i    i    i   i   i    (   R   t   flipt   AssertionErrort   qubit_valuest	   dimensionR   t   len(   t   arrayt   qbt   i(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt
   test_Qubit   s    !!!"c          C   s  t  d ƒ }  t d ƒ } |  j ƒ  t k s0 t ‚ | j ƒ  t  k sH t ‚ t  d d d ƒ }  t d d d ƒ } t |  d d ƒj t | d d ƒk s™ t ‚ t  d d ƒ }  t d d ƒ } |  j | ƒ t d ƒ k sØ t ‚ t d d ƒ } |  j | ƒ t d ƒ k st ‚ d  S(   Ni    i   t   nqubitsi   (   R   R   t
   dual_classR!   R   t   Ht   _eval_innerproduct_QubitBraR    (   R&   t   qb_bra(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_QubitBra%   s    -!c          C   s©  t  d d d ƒ}  t t d ƒ ƒ t |  ƒ k s6 t ‚ t d ƒ } t t  | ƒ ƒ t | ƒ k sf t ‚ t  d d d ƒ}  t t d ƒ ƒ t |  ƒ k sœ t ‚ t t  d ƒ ƒ t |  ƒ k sÀ t ‚ t  d d d ƒ}  t t d	 ƒ ƒ t |  ƒ k sö t ‚ t t  d d ƒ ƒ t |  ƒ k st ‚ t  d
 ƒ }  |  j ƒ  d
 k sAt ‚ |  j d k sVt ‚ t  d d ƒ }  |  j d k szt ‚ t  d ƒ t  d d ƒ k s›t ‚ t  d ƒ }  t d ƒ } |  j ƒ  t k sËt ‚ | j ƒ  t  k sãt ‚ t  d ƒ }  t d ƒ } |  j | ƒ t	 d ƒ k st ‚ t  d ƒ }  t d ƒ } |  j | ƒ t	 d ƒ k sUt ‚ t
 t d „  ƒ t
 t d „  ƒ t
 t d „  ƒ t
 t d „  ƒ t
 t d „  ƒ d  S(   Ni    R)   i   t   0t   1010t   1i   i   t   0111i   i   i   i   c           S   s   t  d d ƒ S(   Ni   i   (   R   (    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   <lambda>\   t    c           S   s
   t  d ƒ S(   Nt   5(   R   (    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyR3   ^   R4   c           S   s   t  d d ƒ S(   Ni   R5   (   R   (    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyR3   _   R4   c           S   s   t  d d d ƒS(   Ni   R)   R5   (   R   (    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyR3   `   R4   c           S   s   t  d d t ƒS(   Ni   t   bad_arg(   R   t   True(    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyR3   a   R4   (   i   i    i    i    (   i    i   i   i   (   R   R   R   R!   t   as_intR"   R   R*   t   _eval_innerproduct_IntQubitBraR    R   t
   ValueErrort	   TypeError(   t   iqbR&   t   iqb_bra(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_IntQubit7   s>    $$$$$'!!!c          C   sÏ   d t  d ƒ t d ƒ d t  d ƒ t d ƒ }  t d d ƒ t d ƒ |  } t d ƒ d t d ƒ d t d ƒ d t d ƒ d } t | ƒ j ƒ  | k s§ t ‚ t t | d d ƒƒ | k sË t ‚ d  S(	   Ni   i   t   01t   10i    t   00t   11R)   (	   R   R   R   R   R   t   expandR!   R	   R   (   t   statet
   state_gatet   state_expanded(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_superposition_of_statesc   s
    2:c       	   C   s´  t  t d t j ƒ  ƒ ƒ t t d t j ƒ  ƒ ƒ t t d t j ƒ  ƒ ƒ t t d t j ƒ  ƒ ƒ t t d t j ƒ  ƒ ƒ t t d t j ƒ  ƒ ƒ g }  t t t j ƒ  d ƒ t t j ƒ  d ƒ t t j ƒ  d ƒ t t j ƒ  d ƒ t t j ƒ  d ƒ t t j ƒ  d ƒ ƒ } xB t t t j ƒ  d ƒ ƒ D]$ } |  t t j ƒ  d ƒ | } q4Wt	 | d d ƒ} t
 | ƒ } t | ƒ } | j ƒ  } | j ƒ  } | | k s°t ‚ d  S(   Ni   i   i   R)   (   R   t   intt   randomR   R   R   R   R   R   R   R   R	   RC   R!   (   t   gatest   circuitR'   t   matt   statest	   state_rep(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_apply_represent_equalityl   s    22)9#"c          C   s}  t  d d d d ƒ }  t d d d d d d d d d d d d d d d d g ƒ } t | ƒ |  k si t ‚ t |  ƒ | k s t ‚ d t d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ t  d d d ƒ } t d ƒ d t d d d d d d d d g ƒ } t | ƒ | j ƒ  k sat ‚ t | ƒ | k syt ‚ d  S(   Ni    i   i   (   R   R   R	   R!   R   R   RC   (   R&   RL   RD   t   ones(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_matrix_to_qubits€   s    <ƒ2c          C   sß   t  d ƒ \ }  } |  t d ƒ | t d ƒ } t | d d t ƒ|  t d ƒ |  |  j ƒ  f | t d ƒ | | j ƒ  f g k s‹ t ‚ t | d t ƒt d ƒ |  |  j ƒ  f t d ƒ | | j ƒ  f g k sÛ t ‚ d  S(   Ns   a bR   t   111i    t	   normalize(   i    (   R   R   R   t   Falset	   conjugateR!   R   (   t   at   bRD   (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_measure_normalizeŽ   s    Ic          C   s  t  d ƒ t  d ƒ }  t |  d ƒ t  d ƒ t d d ƒ f t  d ƒ t d d ƒ f g k sa t ‚ t |  t d ƒ ƒ t  d ƒ t d d ƒ f t  d ƒ t d d ƒ f g k s² t ‚ t |  d ƒ t |  d ƒ d  d  d … k sã t ‚ t d ƒ t d ƒ t  d ƒ d t d ƒ t  d	 ƒ } t | d ƒ t d ƒ t d ƒ t  d ƒ d t d ƒ t  d	 ƒ d f g k sqt ‚ t | d ƒ t | d ƒ k s•t ‚ t | d ƒ t  d ƒ t d d ƒ f t  d	 ƒ t d d ƒ f g k sàt ‚ t  d ƒ t  d ƒ t  d ƒ t  d ƒ } t | d ƒ t  d ƒ t d d
 ƒ f t  d ƒ t d d
 ƒ f t  d ƒ t d ƒ t  d ƒ t d ƒ t d d ƒ f g k s‹t ‚ t | d ƒ t  d ƒ t d d
 ƒ f t  d ƒ t d ƒ t  d ƒ t d ƒ t  d ƒ t d ƒ t d d
 ƒ f g k st ‚ d  S(   NR?   R@   i    i   i   iÿÿÿÿi   t   00001t   11111i   t   1111t   1101t   1011t   1000(   i    (   i    (   i   (   i    (   i   i   (   i   i   (   i   i   i   (   i    i   i   (   i    (   R   R   R   R!   R   R   (   RD   t   state1t   state2(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_measure_partial—   s*    ??%8J$?*0E'c          C   s8  t  t d ƒ ƒ t d ƒ d f g k s- t ‚ t d ƒ t d ƒ }  t  |  ƒ t d ƒ t d d ƒ f t d ƒ t d d ƒ f g k s‹ t ‚ t d ƒ t d ƒ d t d ƒ t d ƒ } t  | ƒ t d ƒ t d d ƒ f t d ƒ t d d ƒ f g k st ‚ t  t t d ƒ ƒ ƒ t d ƒ d f g k s4t ‚ d  S(	   NRB   i   R@   i   i   RA   i   R/   (   R   R   R!   R   R   R   (   RD   R`   (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_measure_all´   s    -!'.	?c          C   sƒ  t  d ƒ }  t  d ƒ } t |  d g | d g ƒ } t | ƒ } | j ƒ  d k sW t ‚ t | d ƒ } | j ƒ  d t t  d ƒ d g ƒ d t t  d ƒ d g ƒ k s® t ‚ t | d	 ƒ } | j ƒ  d t t  d
 ƒ d g ƒ d t t  d ƒ d g ƒ k st ‚ t | d ƒ } | j ƒ  d t t  d ƒ d g ƒ d t t  d
 ƒ d g ƒ k s\t ‚ t | d d d d d	 g ƒ } | j ƒ  d k s’t ‚ t | d d d g ƒ } | j ƒ  d t t  d ƒ d g ƒ d t t  d ƒ d g ƒ k sòt ‚ d t d ƒ t  d ƒ t  d ƒ } t | d g ƒ } t | d ƒ } | j ƒ  d t t  d ƒ d g ƒ d t t  d ƒ d g ƒ k st ‚ d  S(   NR   t   01010g333333ã?gš™™™™™Ù?i   i    t   0101R]   i   R0   t   0110i   i   RA   R@   RB   g      ð?g      à?R/   R1   (   R   R   R   t   doitR!   R   (   t   q1t   q2t   dt   tt   q(    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_eval_traceÁ   s0    "&"&"&"&$"c          C   s®  t  d d g d d g g ƒ }  t |  ƒ t t d ƒ d g ƒ k sH t ‚ t  d d g d d g g ƒ }  t |  ƒ t t d ƒ d g ƒ k s t ‚ t  d d g d d g g ƒ }  t |  ƒ d k sÆ t ‚ t  d d d d g d d d d g d d d d g d d d d g g ƒ }  t |  ƒ t t d ƒ d g ƒ k s8t ‚ t  d d d d g d d d d g d d d d g d d d d g g ƒ }  t |  ƒ t t d ƒ d g ƒ k sªt ‚ d  S(   Ni    i   R1   R/   R@   RA   (   R   R
   R   R   R!   (   RL   (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   test_matrix_to_densityæ   s     ***(4   RI   t   sympyR    R   R   R   R   t   sympy.core.compatibilityR   R   t   sympy.physics.quantum.qubitR   R   R	   R
   R   R   R   R   t   sympy.physics.quantum.gateR   R   R   R   R   R   t   sympy.physics.quantum.qapplyR   t   sympy.physics.quantum.representR   t   sympy.physics.quantum.shorR   t   sympy.utilities.pytestR   t   sympy.physics.quantum.densityR   t   sympy.core.traceR   t   xt   yt   epsilonR(   R.   R>   RG   RO   RQ   RX   Ra   Rb   Rl   Rm   (    (    (    sE   lib/python2.7/site-packages/sympy/physics/quantum/tests/test_qubit.pyt   <module>   s.   (:.			,									%