§
    ˆÛgÂ3  ã                   óž   — d Z ddlmZmZmZ ddlmZ ddlZddlZ	ddl
ZddlmZ  G d„ d¦  «        Z G d„ de¦  «        Z G d	„ d
¦  «        ZdS )zp
@author: Yuchen He
@contact: heyuchen@tgqs.net
@version: 1.0.1
@file: QuantumCircuit.py
@time: 2024/1/16 17:16
é    )Ú
SingleGateÚ
DoubleGateÚ
TripleGate)ÚUnionNc                   ó   — e Zd Zdd„Zd„ ZdS )ÚQubitNc                 ój   — |sdn|| _         |sd|dz   › �n|› d|› �| _        ||z   | _        || _        d S )NÚpÚp_éd   Ú_)ÚlabelÚnameÚposÚidx)Úselfr   r   r   s       úR/granary/edev/quantum/lib/python3.11/site-packages/simulator_tgq/QuantumCircuit.pyÚ__init__zQubit.__init__   sL   € Ø $Ð.�S�S¨$ˆŒ
Ø*.ÐC�N˜˜S™�N�N�N°t°O°O¸c°O°OˆŒ	Ø˜‘9ˆŒØˆŒˆˆó    c                 ó*   — t          | j        ¦  «        S ©N)Ústrr   )r   s    r   Ú__str__zQubit.__str__!   s   € Ý�4”9‰~Œ~Ðr   )NNN)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s7   € € € € € ðð ð ð ðð ð ð ð r   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚSimulationErrorc                 ób   •— || _         t          ¦   «                              | j         ¦  «         d S r   )ÚmessageÚsuperr   )r   r!   Ú	__class__s     €r   r   zSimulationError.__init__&   s*   ø€ ØˆŒÝ‰Œ×Ò˜œÑ&Ô&Ð&Ð&Ð&r   )r   r   r   r   Ú__classcell__)r#   s   @r   r   r   %   s8   ø€ € € € € ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r   c                   ó¬  — e Zd Zd-d„Zd.dedefd„Zdeeef         fd„Zd	„ Z	d
„ Z
d„ Zdeeef         fd„Zdeeef         fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdeeef         fd„Zd„ Zdeeef         fd„Zdeeef         fd„Zdeeef         fd„Zdeeef         fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Z d"„ Z!d#ed$efd%„Z"d/d'„Z#d0d)eeef         d*ed+e$fd,„Z%dS )1ÚQuantumCircuitNc                 óÎ   — |sg n|                       |¬¦  «        | _        g | _        g | _        i | _        g d¢| _        g d¢| _        ddg| _        d| _        g | _	        g | _
        d S )N)Únumber)ÚhÚxÚyÚzÚrxÚryÚrzÚu3ÚsÚsdgÚtÚtdg)ÚcxÚswapÚiswapÚczÚcpÚrxxÚryyÚrzzÚccxÚcswapr   )Ú
add_qubitsÚ	qbit_listÚ	cbit_listÚ	gate_listÚqbit_registerÚbase_single_gateÚbase_double_gateÚbase_triple_gateÚwidthÚstateÚcircuit_diag)r   Úqbit_numbers     r   r   zQuantumCircuit.__init__,   s{   € Ø#.ÐW˜˜°D·O²OÈ;°OÑ4WÔ4WˆŒØˆŒØˆŒØˆÔØ dÐ dÐ dˆÔØ XÐ XÐ XˆÔØ!&¨Ð 0ˆÔØˆŒ
ØˆŒ
ØˆÔÐÐr   r
   r(   r   c                 óv  ‡ ‡‡— ‰ xj         |z  c_         ‰‰ j        vr9‰ j                             ‰|i¦  «         ˆˆ fd„t          |¦  «        D ¦   «         }nI‰ j        ‰         Š‰ j                             ‰|‰z   i¦  «         ˆˆˆ fd„t          |¦  «        D ¦   «         }‰ j                             |¦  «         dS )u{   
        æ·»åŠ é‡�å­�æ¯”ç‰¹
        :param number: æ¯”ç‰¹æ•°é‡�
        :param name: æ¯”ç‰¹å��ç§°
        :return:
        c                 óD   •— g | ]}t          ‰||‰j        z   ¬ ¦  «        ‘ŒS ©)r   r   r   ©r   rG   )Ú.0Úir   r   s     €€r   ú
<listcomp>z-QuantumCircuit.add_qubits.<locals>.<listcomp>B   s.   ø€ ÐYÐYÐYÀa� 4¨Q°A°d´j±LÐAÑAÔAÐYÐYÐYr   c                 óJ   •— g | ]}t          ‰|‰z   |‰j        z   ¬ ¦  «        ‘Œ S rM   rN   )rO   rP   Úformer_numberr   r   s     €€€r   rQ   z-QuantumCircuit.add_qubits.<locals>.<listcomp>F   s3   ø€ ÐgÐgÐgÐTU� 4¨Q¨}©_À!ÀDÄJÁ,ÐOÑOÔOÐgÐgÐgr   N)rG   rC   ÚupdateÚranger@   Úappend)r   r(   r   Úsub_listrS   s   ` ` @r   r?   zQuantumCircuit.add_qubits8   sØ   øøø€ ð 	ˆ
Œ
�fÑˆ
Œ
Ø�tÔ)Ð)Ð)ØÔ×%Ò% t¨V nÑ5Ô5Ð5ØYÐYÐYÐYÐYÍ5ÐQWÉ=Ì=ÐYÑYÔYˆHˆHà Ô.¨tÔ4ˆMØÔ×%Ò% t¨V°MÑ-AÐ&BÑCÔCÐCØgÐgÐgÐgÐgÐgÕY^Ð_eÑYfÔYfÐgÑgÔgˆHØŒ×Ò˜hÑ'Ô'Ð'Ð'Ð'r   Úgate_posc                 ó(  — t          |t          ¦  «        r8|d                              ¦   «         }| j                             ||fg¦  «         n*| j                             |t          |¦  «        fg¦  «         | j                             ||f¦  «        S )u„   
        æ·»åŠ å�•æ¯”ç‰¹é—¨åº�åˆ—
        :param gate_pos:
        :param gate_info: é—¨ç±»åž‹ï¼Œé—¨å�‚æ•°
        :return:
        r   )Ú
isinstanceÚintÚupperrI   rV   rB   )r   rX   Ú	gate_infoÚgatenames       r   Úadd_single_gatezQuantumCircuit.add_single_gateI   sŽ   € õ �h¥Ñ$Ô$ð 	BØ  ”|×)Ò)Ñ+Ô+ˆHØÔ×$Ò$ x°Ð&:Ð%;Ñ<Ô<Ð<Ð<àÔ×$Ò$ xµ°X±´Ð&?Ð%@ÑAÔAÐAØŒ~×$Ò$ h°	Ð%:Ñ;Ô;Ð;r   c                 ó.  — |d         dv r8| j                              |d                              ¦   «         ||ffg¦  «         n6| j                              |d                              ¦   «         ||fg¦  «         | j                             ||g|f¦  «        S )uµ   
        æ·»åŠ ä¸¤æ¯”ç‰¹é—¨åº�åˆ—
        :param gate_pos_0: æŽ§åˆ¶ä½�
        :param gate_pos_1: ç›®æ ‡ä½�
        :param gate_info: é—¨ç±»åž‹ï¼Œé—¨å�‚æ•°
        :return:
        r   )r:   r;   r<   r7   Úsyc©rI   rV   r\   rB   )r   Ú
gate_pos_0Ú
gate_pos_1r]   s       r   Úadd_double_gatezQuantumCircuit.add_double_gateZ   sœ   € ð �QŒ<Ð@Ð@Ð@ØÔ×$Ò$ y°¤|×'9Ò'9Ñ';Ô';¸jÈ*Ð=UÐ&VÐ%WÑXÔXÐXÐXàÔ×$Ò$ y°¤|×'9Ò'9Ñ';Ô';¸ZÈÐ&TÐ%UÑVÔVÐVØŒ~×$Ò$ z°:Ð&>À	Ð%JÑKÔKÐKr   c                 óÌ   — | j                              |d                              ¦   «         |d         |d         |d         fg¦  «         | j                             ||f¦  «        S )un   
        æ·»åŠ ä¸‰æ¯”ç‰¹é—¨åº�åˆ—
        :param gate_pos:
        :param gate_info:
        :return:
        r   é   é   rb   )r   rX   r]   s      r   Úadd_triple_gatezQuantumCircuit.add_triple_gateh   sa   € ð 	Ô× Ò  9¨Q¤<×#5Ò#5Ñ#7Ô#7¸À!¼ÀhÈqÄkÐS[Ð\]ÔS^Ð"_Ð!`ÑaÔaÐaØŒ~×$Ò$ h°	Ð%:Ñ;Ô;Ð;r   c           
      ó6  — d„ t          d| j        z  ¦  «        D ¦   «         | _        | j        D �]i\  }}|d         }t	          |dd…         ¦  «        }|| j        v r%t          j        | j        | j        ||g|¢R Ž | _        ŒS|| j        v rut          |¦  «        }t          |¦  «        t          |¦  «        k    r!t          d|d         › d|d         › �¦  «        ‚t          j        | j        | j        ||g|¢R Ž | _        ŒÑ|| j        v rt          |¦  «        }t          |¦  «        t          |¦  «        k    r*t          d|d         › d|d         › d|d         › �¦  «        ‚t          j        | j        | j        ||g|¢R Ž | _        �ŒYt          d	|› �¦  «        ‚dS )
uS   
        æ ¹æ�®çº¿è·¯çš„é—¨åº�åˆ—è®¡ç®—æœ«æ€�çš„é‡�å­�æ€�
        :return:
        c                 ó"   — g | ]}|d k    rdnd ‘ŒS )r   rh   r   )rO   Úas     r   rQ   z2QuantumCircuit.run_statevector.<locals>.<listcomp>w   s$   € ÐGÐGÐG¨Q˜1 š6˜6�a�a qÐGÐGÐGr   rg   r   rh   Nz"Gate position cannot be the same: z, z and zUnkown gate type: )rU   rG   rH   rB   ÚtuplerD   r   ÚActOn_StaterE   ÚsetÚlenr   r   rF   r   )r   rX   r]   Ú	gate_typeÚangleÚset_gate_poss         r   Úrun_statevectorzQuantumCircuit.run_statevectorr   së  € ð
 HÐGµ%¸¸4¼:¹Ñ2FÔ2FÐGÑGÔGˆŒ
Ø%)¤^ð 	Hñ 	HÑ!ˆX�yØ! !œˆIÝ˜) A B Bœ-Ñ(Ô(ˆEØ˜DÔ1Ð1Ð1Ý'Ô3°D´JÀÄ
ÈIÐW_ÐhÐbgÐhÐhÐh�”
�
à˜dÔ3Ð3Ð3Ý" 8™}œ}�Ý�|Ñ$Ô$­¨H©¬Ò5Ð5Ý)Ð*kÈxÐXYÌ{Ð*kÐ*kÐ^fÐghÔ^iÐ*kÐ*kÑlÔlÐlÝ'Ô3°D´JÀÄ
ÈIÐW_ÐhÐbgÐhÐhÐh�”
�
Ø˜dÔ3Ð3Ð3Ý" 8™}œ}�Ý�|Ñ$Ô$­¨H©¬Ò5Ð5Ý)ð +\Ø-5°a¬[ð+\ð +\Ø<DÀQ¼Kð+\ð +\ØNVÐWXÌkð+\ð +\ñ ]ô ]ð ]å'Ô3°D´JÀÄ
ÈIÐW_ÐhÐbgÐhÐhÐh�”
‘
å%Ð&F¸9Ð&FÐ&FÑGÔGÐGð%	Hð 	Hr   Ú	num_gatesc                 ó  — || _         t          |t          ¦  «        �rŠ| j        | j        z   | j        z   }t          |¦  «        D �]`}t          j         	                    |¦  «        }t          j         
                    dt          j        z  dt          j        z  d¬¦  «        }|| j        v rGt          j         	                    t          j        t          |¦  «        ¦  «        d¬¦  «        d         }nx|| j        v r2t          j        t          |¦  «        d¦  «        }t          |¦  «        }n=|| j        v r2t          j        t          |¦  «        d¦  «        }t          |¦  «        }nd}| j                             |t#          |g¦  «        t#          |¦  «        z   g¦  «         �ŒbdS t          |t          ¦  «        �rK|d         }|d         }	t          |¦  «        D ]â}t          j         	                    | j        ¦  «        }t          j         
                    dt          j        z  dt          j        z  d¬¦  «        }t          j         	                    t          j        t          |¦  «        ¦  «        d¬¦  «        d         }| j                             |t#          |g¦  «        t#          |¦  «        z   g¦  «         Œãt          |	¦  «        D �]:}| j        | j        z   }t          j         	                    |¦  «        }t          j         
                    dt          j        z  dt          j        z  d¬¦  «        }|| j        v r2t          j        t          |¦  «        d¦  «        }t          |¦  «        }n=|| j        v r2t          j        t          |¦  «        d¦  «        }t          |¦  «        }nd}| j                             |t#          |g¦  «        t#          |¦  «        z   g¦  «         t          j        | j        ¦  «         �Œ:dS dS )u¡   
        ç”Ÿæˆ�éš�æœºçº¿è·¯
        :param num_qubits:
        :param num_gates: é—¨æ•°é‡�ï¼Œåˆ—è¡¨è¡¨ç¤ºå�•æ¯”ç‰¹ï¼Œå¤šæ¯”ç‰¹é—¨æ•°é‡�
        :return:
        éþÿÿÿrg   é   ©Úsizerh   r   N)rG   rZ   r[   rD   rE   rF   rU   ÚnpÚrandomÚchoiceÚuniformÚpiÚarrayÚsampleÚlistrB   rV   rm   Úshuffle)
r   Ú
num_qubitsru   Úbase_gate_listr   rq   rr   rX   Úsingle_gate_numÚmultiple_gate_nums
             r   Úrandom_circuitzQuantumCircuit.random_circuitŒ   sŠ  € ð  ˆŒ
Ý�i¥Ñ%Ô%ñ %	/Ø!Ô2°TÔ5JÑJÈTÔMbÑbˆNÝ˜9Ñ%Ô%ð Uñ U�ÝœI×,Ò,¨^Ñ<Ô<�	Ýœ	×)Ò)¨"­R¬U©(°Aµb´e±GÀ!Ð)ÑDÔD�Ø Ô 5Ð5Ð5Ý!œy×/Ò/µ´½¸zÑ9JÔ9JÑ0KÔ0KÐRSÐ/ÑTÔTÐUVÔW�H�HØ $Ô"7Ð7Ð7Ý%œ}­U°:Ñ->Ô->ÀÑBÔB�HÝ# H™~œ~�H�HØ $Ô"7Ð7Ð7Ý%œ}­U°:Ñ->Ô->ÀÑBÔB�HÝ# H™~œ~�H�Hà#�HØ”×%Ò% xµ¸	°{Ñ1CÔ1CÅeÈEÁlÄlÑ1RÐ&SÑTÔTÐTÑTðUð Uõ ˜	¥4Ñ(Ô(ñ 	/Ø'¨œlˆOØ )¨!¤ÐÝ˜?Ñ+Ô+ð Uð U�ÝœI×,Ò,¨TÔ-BÑCÔC�	Ýœ	×)Ò)¨"­R¬U©(°Aµb´e±GÀ!Ð)ÑDÔD�Ýœ9×+Ò+­B¬HµU¸:Ñ5FÔ5FÑ,GÔ,GÈaÐ+ÑPÔPÐQRÔS�Ø”×%Ò% xµ¸	°{Ñ1CÔ1CÅeÈEÁlÄlÑ1RÐ&SÑTÔTÐTÐTÝÐ,Ñ-Ô-ð /ñ /�Ø!%Ô!6°tÔ7LÑ!L�ÝœI×,Ò,¨^Ñ<Ô<�	Ýœ	×)Ò)¨"­r¬u©*°a½"¼%±iÀaÐ)ÑHÔH�Ø Ô 5Ð5Ð5Ý%œ}­U°:Ñ->Ô->ÀÑBÔB�HÝ# H™~œ~�H�HØ $Ô"7Ð7Ð7Ý%œ}­U°:Ñ->Ô->ÀÑBÔB�HÝ# H™~œ~�H�Hà#�HØ”×%Ò% xµ¸	°{Ñ1CÔ1CÅeÈEÁlÄlÑ1RÐ&SÑTÔTÐTÝ”˜tœ~Ñ.Ô.Ð.Ñ.ð+	/ð 	/ð/ð /r   Úqbitc                 ó.   — |                       |d¦  «        S )Nr)   ©r_   ©r   r‰   s     r   r)   zQuantumCircuit.h»   ó   € Ø×#Ò# D¨#Ñ.Ô.Ð.r   c                 ó.   — |                       |d¦  «        S )Nr*   r‹   rŒ   s     r   r*   zQuantumCircuit.x¾   r�   r   c                 ó.   — |                       |d¦  «        S )Nr+   r‹   rŒ   s     r   r+   zQuantumCircuit.yÁ   r�   r   c                 ó.   — |                       |d¦  «        S )Nr,   r‹   rŒ   s     r   r,   zQuantumCircuit.zÄ   r�   r   c                 ó0   — |                       |d|¦  «        S )Nr-   r‹   ©r   r‰   Úthetas      r   r-   zQuantumCircuit.rxÇ   ó   € Ø×#Ò# D¨$°Ñ6Ô6Ð6r   c                 ó0   — |                       |d|¦  «        S )Nr.   r‹   r’   s      r   r.   zQuantumCircuit.ryÊ   r”   r   c                 ó0   — |                       |d|¦  «        S )Nr/   r‹   r’   s      r   r/   zQuantumCircuit.rzÍ   r”   r   c                 ó    —  | j         |dg|¢R Ž S )Nr0   r‹   r’   s      r   r0   zQuantumCircuit.u3Ð   s   € Ø#ˆtÔ# D¨$Ð7°Ð7Ð7Ð7Ð7r   c                 ó.   — |                       |d¦  «        S )Nr1   r‹   rŒ   s     r   r1   zQuantumCircuit.sÓ   r�   r   c                 ó.   — |                       |d¦  «        S )Nr2   r‹   rŒ   s     r   r2   zQuantumCircuit.sdgÖ   ó   € Ø×#Ò# D¨%Ñ0Ô0Ð0r   c                 ó.   — |                       |d¦  «        S )Nr3   r‹   rŒ   s     r   r3   zQuantumCircuit.tÙ   r�   r   c                 ó.   — |                       |d¦  «        S )Nr4   r‹   rŒ   s     r   r4   zQuantumCircuit.tdgÜ   rš   r   c                 ó0   — |                       ||d¦  «        S )Nr5   ©re   ©r   Úcontrol_qubitÚtarget_qubits      r   r5   zQuantumCircuit.cxß   ó   € Ø×#Ò# M°<ÀÑFÔFÐFr   c                 ó0   — |                       ||d¦  «        S )Nr6   rž   ©r   Úqubit_1Úqubit_2s      r   r6   zQuantumCircuit.swapâ   s   € Ø×#Ò# G¨W°fÑ=Ô=Ð=r   c                 ó0   — |                       ||d¦  «        S )Nr7   rž   r¤   s      r   r7   zQuantumCircuit.iswapå   s   € Ø×#Ò# G¨W°gÑ>Ô>Ð>r   c                 ó0   — |                       ||d¦  «        S )Nr8   rž   rŸ   s      r   r8   zQuantumCircuit.czè   r¢   r   c                 ó2   — |                       ||d|¦  «        S )Nr9   rž   )r   r    r¡   r“   s       r   r9   zQuantumCircuit.cpë   s   € Ø×#Ò# M°<ÀÀuÑMÔMÐMr   c                 ó2   — |                       ||d|¦  «        S )Nr:   rž   ©r   r¥   r¦   r“   s       r   r:   zQuantumCircuit.rxxî   ó   € Ø×#Ò# G¨W°e¸UÑCÔCÐCr   c                 ó2   — |                       ||d|¦  «        S )Nr;   rž   r«   s       r   r;   zQuantumCircuit.ryyñ   r¬   r   c                 ó2   — |                       ||d|¦  «        S )Nr<   rž   r«   s       r   r<   zQuantumCircuit.rzzô   r¬   r   Úcontrol_qubitsÚtarget_qubitsc                 ó6   — |                       ||gz   d¦  «        S )Nr=   )ri   )r   r¯   r°   s      r   r=   zQuantumCircuit.ccx÷   s   € Ø×#Ò# N°M°?Ñ$BÀEÑJÔJÐJr   Tc                 ó¶  — g }i }t          | j        ¦  «        D ]"}|                     d|› �¦  «         ||d|› �<   Œ#t          dddddddd	d
¬¦	  «	        }|                     |¦  «         |d         }|sIg }t          j        | j        d¬¦  «        D ]+\  }}|dd…         D ]}	|	|vr|                     |	¦  «         ŒŒ,t          |¦  «        }
t          | j        ¦  «        }t          j
        d|
|z  |t          ¬¦  «        }t          j
        d||z  |t          ¬¦  «        }d„ t          |
¦  «        D ¦   «         }t          j        |
||||¦  «        \  }}t          j        | j        |d¬¦  «        }t          j        ||
|||d|¦  «         |rt          j        ||||||d¦  «         t          j        || j        |||||d¬¦  «         t#          j        ¦   «          dS )zaUse Matplotlib to plot a quantum circuit.
        kwargs    Can override plot_parameters
        Úq_g      ð?g      -@g       @gš™™™™™©?g333333Ã?g{®Gáz´?gš™™™™™é?g333333Ó?gš™™™™™É?)	ÚscaleÚfontsizeÚ	linewidthÚcontrol_radiusÚ
not_radiusÚ
swap_deltaÚlabel_bufferÚrectangle_deltaÚbox_padr´   T)Úschedulerh   Nç        )Údtypec                 ó   — g | ]}d ‘ŒS )r¾   r   )rO   r   s     r   rQ   z7QuantumCircuit.show_quantum_circuit.<locals>.<listcomp>  s   € Ð2Ð2Ð2 1˜3Ð2Ð2Ð2r   Úk)rU   rG   rV   ÚdictrT   ÚtoolsÚenumerate_gatesrI   rp   r{   ÚarangeÚfloatÚsetup_figureÚmeasured_wiresÚ
draw_wiresÚdraw_labelsÚ
draw_gatesÚpltÚshow)r   Úplot_labelsÚkwargsÚlabelsÚinitsrP   Úplot_paramsr´   Úgater   ÚnqÚntÚ	wire_gridÚ	gate_gridÚgate_grid_indexÚfigÚaxÚmeasureds                     r   Úshow_quantum_circuitz#QuantumCircuit.show_quantum_circuitú   s,  € ð ˆØˆÝ�t”zÑ"Ô"ð 	 ð 	 ˆAØ�MŠM˜(˜q˜(˜(Ñ#Ô#Ð#ØˆE�(�q�(�(‰OˆOÝ 3°4ÀSØ-1ÀØ)-¸cØ.1¸3ð@ñ @ô @ˆð 	×Ò˜6Ñ"Ô"Ð"Ø˜GÔ$ˆð ð 	-ØˆFÝÔ/°Ô0AÈDÐQÑQÔQð -ð -‘��$Ø! ! " "œXð -ð -�EØ FÐ*Ð*ØŸš eÑ,Ô,Ð,øð-õ �‰[Œ[ˆÝ�Ô"Ñ#Ô#ˆÝ”I˜c 2 e¡8¨U½%Ð@Ñ@Ô@ˆ	Ý”I˜c 2 e¡8¨U½%Ð@Ñ@Ô@ˆ	Ø2Ð2­¨b©	¬	Ð2Ñ2Ô2ˆõ Ô# B r¨)°I¸kÑJÔJ‰ˆˆBåÔ'¨Ô(9¸6ÈDÐQÑQÔQˆÝÔ˜˜R ¨I°{ÀCÈÑRÔRÐRàð 	YÝÔ˜b &¨%°¸IÀ{ÐTWÑXÔXÐXåÔ˜˜TÔ.°¸ÈÐT_ÐaiÐtxÐyÑyÔyÐyÝŒ‰
Œ
ˆ
ˆ
ˆ
r   éè  Úmeasure_bits_listÚshotsÚreturnc                 óê  ‡ ‡‡— ‰                       ¦   «          t          j        ‰ j        ¦  «        }t          j        |                     ¦   «         |z  ¦  «        Šˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         }i }t          |t          ¦  «        r|g}|€|}| 
                    ¦   «         D ]VŠd                     ˆfd„|D ¦   «         ¦  «        }|‰         dk    rŒ0||vr|‰         ||<   Œ@||xx         |‰         z  cc<   ŒWi }d}t          j                             dd|¬¦  «        }	| 
                    ¦   «         D ],}|||         z   }
t          ||	k    |	|
k     z  ¦  «        ||<   |
}Œ-|S )uÏ   
        æµ‹é‡�ä»¬
        Args:
            measure_bits_list: æµ‹é‡�æ¯”ç‰¹åˆ—è¡¨ï¼Œä¼ å…¥æ¯”ç‰¹ä½�ç½®æˆ–åˆ—è¡¨ä½�ç½®
            shots: æµ‹é‡�æ¬¡æ•°
        Returns:
            è¿”å›žæµ‹é‡�ç»“æžœ
        c                 óP   •— i | ]"}t          |d ‰j        › d�¦  «        ‰|         “Œ#S )Ú0Úb)ÚformatrG   )rO   rP   Úprobr   s     €€r   ú
<dictcomp>z*QuantumCircuit.measure.<locals>.<dictcomp>3  s7   ø€ ÐQÐQÐQ¸1•˜Ð,˜tœzÐ,Ð,Ð,Ñ-Ô-¨t°A¬wÐQÐQÐQr   NÚ c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   )rO   r   r
   s     €r   ú	<genexpr>z)QuantumCircuit.measure.<locals>.<genexpr>>  s'   øè è € Ð>Ð> S˜!˜Cœ&Ð>Ð>Ð>Ð>Ð>Ð>r   r   rh   ry   )rt   r{   r€   rH   ÚrealÚ	conjugaterU   rp   rZ   r[   ÚkeysÚjoinr|   r~   Úsum)r   rÞ   rß   rH   ÚcountÚdistributionÚkeyÚresultÚcumulater�   Únew_cumulater
   ræ   s   `          @@r   ÚmeasurezQuantumCircuit.measure&  s©  øøø€ ð 	×ÒÑÔÐÝ”˜œÑ$Ô$ˆÝŒw�u—’Ñ(Ô(¨5Ñ0Ñ1Ô1ˆØQÐQÐQÐQÐQÅÅcÈ$ÁiÄiÑ@PÔ@PÐQÑQÔQˆØˆåÐ'­Ñ-Ô-ð 	4Ø!2Ð 3ÐØÐ$Ø ˆLð —’‘”ð 	.ð 	.ˆAà—'’'Ð>Ð>Ð>Ð>Ð,=Ð>Ñ>Ô>Ñ>Ô>ˆCØ�QŒx˜1Š}ˆ}ØØ˜,Ð&Ð&Ø$)¨!¤H�˜SÑ!Ð!à˜SÐ!Ð!Ô! U¨1¤XÑ-Ð!Ð!Ñ!Ð!àˆØˆÝ”×"Ò" 1 Q¨UÐ"Ñ3Ô3ˆØ×$Ò$Ñ&Ô&ð 	$ð 	$ˆCØ# l°3Ô&7Ñ7ˆLÝ˜x¨Ò/°F¸<Ò4GÑHÑIÔIˆF�3‰KØ#ˆHˆHØˆr   r   )r
   )T)NrÝ   )&r   r   r   r   r[   r   r?   r   r_   re   ri   rt   r‚   rˆ   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rÜ   rÂ   rö   r   r   r   r&   r&   +   sõ  € € € € € ð
ð 
ð 
ð 
ð(ð ( ð (¨Cð (ð (ð (ð (ð"<¨¨c°3¨h¬ð <ð <ð <ð <ð"Lð Lð Lð<ð <ð <ðHð Hð Hð4-/°E¸#¸t¸)Ô4Dð -/ð -/ð -/ð -/ð^/�e˜C ˜H”oð /ð /ð /ð /ð/ð /ð /ð/ð /ð /ð/ð /ð /ð7ð 7ð 7ð7ð 7ð 7ð7�u˜S #˜X”ð 7ð 7ð 7ð 7ð8ð 8ð 8ð/�U˜3 ˜8”_ð /ð /ð /ð /ð1�u˜S #˜X”ð 1ð 1ð 1ð 1ð/�U˜3 ˜8”_ð /ð /ð /ð /ð1�u˜S #˜X”ð 1ð 1ð 1ð 1ðGð Gð Gð>ð >ð >ð?ð ?ð ?ðGð Gð GðNð Nð NðDð Dð DðDð Dð DðDð Dð DðK $ð K°sð Kð Kð Kð Kð)ð )ð )ð )ðX'ð '¨¨t°S¨yÔ)9ð 'Àsð 'ÐRVð 'ð 'ð 'ð 'ð 'ð 'r   r&   )Ú__doc__ÚGateSimulationr   r   r   Útypingr   r|   Únumpyr{   Údraw_circuit_toolsrÃ   Úmatplotlib.pyplotÚpyplotrÌ   r   Ú	Exceptionr   r&   r   r   r   ú<module>rÿ      s  ððð ð >Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð ðð ð ð ð ñ ô ð ð"'ð 'ð 'ð 'ð '�iñ 'ô 'ð 'ðbð bð bð bð bñ bô bð bð bð br   