§
    ˆÛg$H  ã                   ó´  — d dl mZ d dlmZ d dlmZ d dlmZ d dl	Z
d5dedefd„Zd5dedededefd	„Zi dfd
edededede
j        dededefd„Zi fd
edededede
j        dedefd„Zd
edededede
j        defd„Zd
ededededededefd„Zd6d
ededededededefd„Zd5d
edededededefd„Zd7d
ededededed!edefd"„Zd
edededefd#„Zd8d
edededed%ef
d&„Zd
edededefd'„Zd(ed)ed*e
j        de
j        def
d+„Zi fd
ed(ed*e
j        de
j        dededefd,„Z d
eded-ed*ede
j        ded!efd.„Z!d/ededefd0„Z"d1ededefd2„Z#i fd3ed-efd4„Z$dS )9é    N)ÚAxesFÚlÚschedulec              #   ó†   K  — |r!t          | ¦  «        D ]\  }}|D ]}||fV — Œ	Œnt          | ¦  «        D ]\  }}||fV — ŒdS )uª  
    é��åŽ†é—¨åº�åˆ—

    ä¸¤ç§�æ–¹å¼�è¿›è¡Œé��åŽ†ï¼š
    ä¸€ç§�æ–¹å¼�ç›´æŽ¥é��åŽ†åˆ—åº�åˆ—ï¼Œå�¦å¤–ä¸€ç§�å°±æ˜¯é��åŽ†æ‰€æœ‰çš„é—¨
    å½“scheduleä¸ºTrueæ—¶ï¼Œåˆ™é��åŽ†æ‰€æœ‰çš„é—¨åº�åˆ—ï¼›å�¦åˆ™ä»…é��åŽ†åˆ—åº�åˆ—

    Args:
        l (list): é—¨åº�åˆ—ï¼Œæ•°ç»„ä¸­æ¯�ä¸€ä¸ªå…ƒç´ å­˜æ”¾çš„æ˜¯æ¯�ä¸€åˆ—çš„é—¨åº�åˆ—
        schedule (bool, optional): é»˜è®¤å€¼æ˜¯Falseï¼Œå†³å®šæ˜¯æŒ‰åˆ—é��åŽ†è¿˜æ˜¯é��åŽ†æ‰€æœ‰é—¨

    Yields:
        å½“schedule=Trueï¼Œå¯¹åº”çš„è¿”å›žç±»åž‹æ˜¯ï¼š(int, tuple)ï¼Œåˆ†åˆ«è¡¨ç¤ºé—¨åº�åˆ—å¯¹åº”çš„åˆ—æ•°ä»¥å�Šé—¨ä¿¡æ�¯
        å½“schedule=Falseï¼Œå¯¹åº”çš„è¿”å›žç±»åž‹æ˜¯ï¼š(int, list)ï¼Œåˆ†åˆ«è¡¨ç¤ºé—¨åº�åˆ—å¯¹åº”çš„åˆ—æ•°ä»¥å�Šè¯¥åˆ—æ‰€æœ‰é—¨åº�åˆ—
    N)Ú	enumerate)r   r   ÚiÚgatesÚgates        úV/granary/edev/quantum/lib/python3.11/site-packages/simulator_tgq/draw_circuit_tools.pyÚenumerate_gatesr      s€   è è € ð  ð Ý  ‘|”|ð 	ð 	‰GˆAˆeØð ð �Ø˜�f����ðð	õ   ‘l”lð 	ð 	‰FˆAˆdØ�D�&ˆLˆLˆLˆLØ
€Fó    ÚlabelsÚreturnc                 óÜ   — i }t          | |¬¦  «        D ]W\  }}|dd…         \  }}t          |t          ¦  «        rŒ(d|› �}t          ||¦  «        }|                     d¦  «        r|||<   ŒX|S )u<  
    ç¡®å®šæµ‹é‡�é—¨åœ¨é‚£ä¸ªæ¯”ç‰¹ä½�ä¸Šï¼Œä¸»è¦�æ˜¯ç¡®å®šæµ‹é‡�é—¨å…·ä½“ä½�ç½®ï¼Œæ–¹ä¾¿å�Žé�¢ç»˜åˆ¶æµ‹é‡�é—¨

    Args:
        l (list): é—¨åº�åˆ—ï¼Œæ•°ç»„ä¸­æ¯�ä¸€ä¸ªå…ƒç´ å­˜æ”¾çš„æ˜¯æ¯�ä¸€åˆ—çš„é—¨åº�åˆ—
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾
        schedule (bool, optional): é»˜è®¤å€¼æ˜¯Falseï¼Œä¸»è¦�å†³å®šæ˜¯æŒ‰ç…§æ‰€æœ‰é—¨è¿›è¡Œé��åŽ†è¿˜æ˜¯æŒ‰åˆ—é��åŽ†.

    Returns:
        dict: èŽ·å�–ä¸€ä¸ªæ˜ å°„å…³ç³»ï¼Œkeyæ˜¯æ¯”ç‰¹ç´¢å¼•å€¼ï¼Œvalueæ˜¯å¯¹åº”çš„åˆ—æ•°ï¼Œå�¯ä»¥ç¡®å®šæµ‹é‡�ä½�ç½®åœ¨å“ªé‡Œï¼Œæ–¹ä¾¿ç»˜å›¾
    ©r   Né   Úq_ÚM)r   Ú
isinstanceÚtupleÚget_flipped_indexÚ
startswith)	r   r   r   Úmeasuredr   r
   ÚnameÚtargetÚjs	            r   Úmeasured_wiresr       sŽ   € ð €HÝ! !¨hÐ7Ñ7Ô7ð 	ð 	‰ˆˆ$Ø˜2˜A˜2”h‰ˆˆVÝ�f�eÑ$Ô$ð 	ØØ�f��ˆõ ˜f fÑ-Ô-ˆØ�?Š?˜3ÑÔð 	ØˆH�Q‰KøØ€Or   ÚaxÚgate_grid_indexÚ	wire_gridÚplot_paramsr   c           
      ó:  — t          ||¬¦  «        D �]\  }}	t          |	¦  «        dk    rt          | |	|||||¦  «        }Œ/t          |	d         t          ¦  «        rƒt          ||	d         d                  ||	d         d                  ¦  «        }
t          |	d         ¦  «        t          |	d         ¦  «        }}t          ||dz   ¦  «        D ]}|
|d         z   ||<   Œn&|	d         }||         }
||xx         |d         z  cc<   t          | |
|	|||¦  «         �Œ	dS )u|  
    ç»˜åˆ¶æŽ§åˆ¶é—¨
    å…·ä½“é€»è¾‘å¦‚ä¸‹ï¼š
    é¦–å…ˆåˆ¤æ–­å½“å‰�é—¨çš„ä¿¡æ�¯é•¿åº¦æ˜¯å�¦è¶…è¿‡2ï¼Œè‹¥æ˜¯è¶…è¿‡ä¸¤ä¸ªï¼Œåˆ™å­˜åœ¨æŽ§åˆ¶é—¨ï¼ˆRXXã€�RYYã€�RZZã€�ISWAPç­‰éƒ½æ˜¯ç‰¹æ®Šå¤„ç�†ï¼‰ï¼Œåˆ™å…ˆç»˜åˆ¶ç›®æ ‡é—¨ï¼Œç„¶å�Žå†�ç»˜åˆ¶æŽ§åˆ¶é—¨
    è‹¥æ˜¯é•¿åº¦ä¸�è¶…è¿‡2ï¼Œåˆ™æ˜¯å�•é—¨ï¼Œå�ªéœ€è¦�ç»˜åˆ¶ç›®æ ‡é—¨å�³å�¯

    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        l (list): é—¨åº�åˆ—ï¼Œæ•°ç»„ä¸­æ¯�ä¸€ä¸ªå…ƒç´ å­˜æ”¾çš„æ˜¯æ¯�ä¸€åˆ—çš„é—¨åº�åˆ—
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾
        gate_grid_index (list): æ¯�ä¸€ä¸ªæ¯”ç‰¹ä½�ï¼Œå¯¹åº”çš„èµ·å§‹ç´¢å¼•å€¼ï¼ˆæ¨ªå�‘ï¼‰
        wire_grid (np.array): çºµå�‘ä½�ç½®
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        measured (dict, optional): æµ‹é‡�ä½�ç½®ä¿¡æ�¯
        schedule (bool, optional): é»˜è®¤å€¼æ˜¯Falseï¼Œä¸»è¦�å†³å®šæ˜¯æŒ‰ç…§æ‰€æœ‰é—¨è¿›è¡Œé��åŽ†è¿˜æ˜¯æŒ‰åˆ—é��åŽ†.
    r   r   éÿÿÿÿr   é   ÚscaleN)	r   ÚlenÚdraw_with_controlsr   r   ÚmaxÚminÚrangeÚdraw_target)r   r   r   r   r    r!   r   r   r   r
   ÚxÚ	min_indexÚ	max_indexr   s                 r   Ú
draw_gatesr/   9   sB  € õ" " !¨hÐ7Ñ7Ô7ð Eñ E‰ˆˆ$åˆt‰9Œ9�qŠ=ˆ=Ý0°°T¸6À?ÐT]Ð_jÐltÑuÔuˆOˆOå˜$˜rœ(¥EÑ*Ô*ð @Ý˜¨¨R¬°¬Ô4°oÀdÈ2ÄhÈqÄkÔ6RÑSÔS�Ý'*¨4°¬8¡}¤}µc¸$¸r¼(±m´m˜9�	Ý˜y¨)°a©-Ñ8Ô8ð Bð B�AØ)*¨[¸Ô-AÑ)A�O AÑ&Ð&ðBð ˜bœ�Ø# FÔ+�Ø Ð'Ð'Ô'¨;°wÔ+?Ñ?Ð'Ð'Ñ'Ý˜˜A˜t V¨Y¸ÑDÔDÐDÑDØ
€Fr   r
   c           	      ó¾  — |d         }|dd…         \  }}	d|	› �}
t          |
|¦  «        }|dd…         }d„ |D ¦   «         }t          ||¦  «        }||gz   }t          |¦  «        }t          |¦  «        }d}t	          |¦  «        |	gz   }t          |¦  «        t          |¦  «        }}t          ||dz   ¦  «        D ]}||         |k    r||         }Œt          ||dz   ¦  «        D ]
}||z   ||<   Œt          | ||||         ||         |d¦  «         t          | |||||¦  «         |D ]5}|}||         }|d	v rt          | |||¦  «         Œ#t          | |||¦  «         Œ6|S )
uC  
    ç»˜åˆ¶å¸¦æœ‰æŽ§åˆ¶ä½�çš„é—¨

    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        gate (tuple): é—¨ä¿¡æ�¯ï¼Œå¸¦æœ‰é—¨å��å­—ã€�ç›®æ ‡ä½�ç½®ä»¥å�ŠæŽ§åˆ¶ä½�ç½®
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾
        gate_grid_index (list): æ¯�ä¸€ä¸ªæ¯”ç‰¹ä½�ï¼Œå¯¹åº”çš„èµ·å§‹ç´¢å¼•å€¼ï¼ˆæ¨ªå�‘ï¼‰
        wire_grid (np.array): çºµå�‘ä½�ç½®
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        measured (dict, optional): æµ‹é‡�ä½�ç½®ä¿¡æ�¯

    Returns:
        list: è·Ÿæ–°å�Žçš„æ¯�ä¸€ä¸ªæ¯”ç‰¹ä½�å¯¹åº”çš„èµ·å§‹ç´¢å¼•å€¼ï¼ˆæ¨ªå�‘ï¼‰
    r%   Nr   r   c                 ó   — g | ]}d |› �‘ŒS )r   © )Ú.0Úts     r   ú
<listcomp>z&draw_with_controls.<locals>.<listcomp>p   s   € Ð1Ð1Ð1˜Q��Q��Ð1Ð1Ð1r   r   r$   ú#7A56D0©ÚSWAP)
r   Úget_flipped_indicesr)   r(   Úlistr*   Úliner+   ÚswapxÚcdot)r   r
   r   r   r    r!   r   r%   r   Útargetsr   Útarget_indexÚcontrols_indexÚcontrolsÚcontrol_indicesÚgate_indicesÚmin_wireÚmax_wireÚmax_colÚtarget_contrl_indexr-   r.   ÚpÚcir,   Úys                             r   r'   r'   [   sÂ  € ð  ˜Ô €EØ˜˜˜”8�L€DˆØ�'ˆ^ˆ^€FÝ$ V¨VÑ4Ô4€LØ˜!˜"˜"”X€NØ1Ð1 .Ð1Ñ1Ô1€HÝ)¨(°FÑ;Ô;€OØ" l ^Ñ3€LÝ�<Ñ Ô €HÝ�<Ñ Ô €HØ€GÝ˜~Ñ.Ô.°'°Ñ:ÐÝÐ2Ñ3Ô3µSÐ9LÑ5MÔ5Mˆy€IÝ�9˜i¨!™mÑ,Ô,ð )ð )ˆØ˜1Ô Ò'Ð'Ø% aÔ(ˆGøÝ�9˜i¨!™mÑ,Ô,ð -ð -ˆØ$ u™_ˆ˜ÑÐÝˆˆW�g˜y¨Ô2°I¸hÔ4GÈÐV_Ñ`Ô`Ð`Ý��G˜T 6¨9°kÑBÔBÐBàð %ð %ˆØˆØ�bŒMˆØ�8ÐÐÝ�"�Q�q˜Ñ%Ô%Ð%Ð%å��A�a˜Ñ$Ô$Ð$Ð$ØÐr   r,   c           	      ó¶  — |d         }|dd…         \  }}t          |t          ¦  «        r�dt          |¦  «        k    rŠd|d         › �}	d|d         › �}
t          |	|¦  «        }t          |
|¦  «        }||         }||         }|dv rd|d         ›d	|dd…         ›d
�}n|dk    rd}n|}t	          | ||z
  ||z   ||||¦  «         dS d|› �}t          ||¦  «        }||         }|dv rt          | |||¦  «         n]|dv rt          | |||¦  «         nF|dv rt          | |||¦  «         n/|dv rt          | ||||d¬¦  «         nt          | ||||d¬¦  «         dS )uw  
    ç»˜åˆ¶ç›®æ ‡ä½�ä¿¡æ�¯

    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): æ¨ªå��æ ‡ä½�ç½®ä¿¡æ�¯
        gate (tuple): é—¨ä¿¡æ�¯ï¼Œå¸¦æœ‰é—¨å��å­—ã€�ç›®æ ‡ä½�ç½®ä»¥å�ŠæŽ§åˆ¶ä½�ç½®
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾
        wire_grid (np.array): çºµå�‘ä½�ç½®
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
    Úrectangle_deltaNr   r   r   r$   )ÚRXXÚRYYÚRZZú$z_{z}$ÚISWAPÚiSWAP)ÚCXÚCCX)ÚCZr7   )ÚRXÚRYÚRZT)Úbox)
r   r   r&   r   Ú	rectangleÚoplusr=   r<   Úrotate_axisÚtext)r   r,   r
   r   r    r!   rL   r   r   Útarget1Útarget2Útarget_index1Útarget_index2Úy1Úy2Útextstrr?   rJ   s                     r   r+   r+   ‰   s×  € ð "Ð"3Ô4€OØ�r˜�r”(�K€DˆÝ�&�%Ñ Ô ð à•�F‘”ÒÐØ&˜6 !œ9Ð&Ð&ˆGØ&˜6 !œ9Ð&Ð&ˆGÝ-¨g°vÑ>Ô>ˆMÝ-¨g°vÑ>Ô>ˆMØ˜=Ô)ˆBØ˜=Ô)ˆBØÐ,Ð,Ð,Ð,Ø*.¨q¬'¨'¨'°4¸¸¸´8°8°8Ð<��Ø˜’�Ø!��à�Ý�b˜!˜oÑ-¨q°?Ñ/BÀBÈÈGÐU`ÑaÔaÐaØˆFØ�&ˆ]ˆ]€Få$ V¨VÑ4Ô4€LØ�,Ô€AØˆ|ÐÐÝˆb�!�Q˜Ñ$Ô$Ð$Ð$Ø	�ˆˆÝˆR��A�{Ñ#Ô#Ð#Ð#Ø	�Ð	Ð	Ýˆb�!�Q˜Ñ$Ô$Ð$Ð$Ø	Ð#Ð	#Ð	#Ý�B˜˜1˜d K°TÐ:Ñ:Ô:Ð:Ð:åˆR��A�t˜[¨dÐ3Ñ3Ô3Ð3Ø
€Fr   Úx1Úx2rb   rc   rd   c           
      óš  — |d         }||k    r||}}||k    r||}}|d         }|d         }	||z
  }
||z   }||z
  }||
z
  }t          j        ||
f||dddd|	¬¦  «        }|                      |¦  «         t           j        }|d	         } |||f|ddd
|	d¬¦  «        }|                      |¦  «         |                      ||dz  z   |dddd|¬¦  «          |||f|ddd
|	d¬¦  «        }|                      |¦  «         |                      ||dz  z   |dddd|¬¦  «         d|k    rd}|                      ||z   |
|dz  z   |ddd|¬¦  «         dS )u†  
    ç»˜åˆ¶RXX, RYY, RZZ, ISWAPç­‰ç”¨çŸ©å½¢æ�¥è¡¨ç¤ºçš„é—¨

    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x1 (float): çŸ©å½¢å·¦ä¸‹è§’æ¨ªå��æ ‡
        x2 (float): çŸ©å½¢å�³ä¸Šè§’æ¨ªå��æ ‡
        y1 (float): çŸ©å½¢å·¦ä¸‹è§’çºµå��æ ‡
        y2 (float): çŸ©å½¢å�³ä¸Šè§’çºµå��æ ‡
        textstr (str): åœ¨çŸ©å½¢ä¸­éœ€è¦�å†™å…¥çš„å†…å®¹
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
    rL   ÚfontsizeÚ	linewidthzround,pad=0.09r6   z#E1BEE7r   )ÚboxstyleÚecÚfcÚzorderÚlwÚcontrol_radiusT©rk   rl   Úfillrn   rm   z$1$Úcenter©ÚcolorÚhaÚvaÚsizez$0$rR   g      &@N)ÚpatchesÚFancyBboxPatchÚ	add_patchÚCircler]   )r   re   rf   rb   rc   rd   r!   rL   rh   ri   Úy1_newÚy2_newÚwidthÚheightrZ   r{   ro   Úcs                     r   rZ   rZ   ¸   sà  € ð "Ð"3Ô4€OØ	ˆB‚w€wØ�RˆBˆØ	ˆB‚w€wØ�RˆBˆØ˜:Ô&€HØ˜KÔ(€IØ�/Ñ!€FØ�/Ñ!€FØ�‰G€EØ�f‰_€FåÔ&¨¨F |°U¸FÐM]ÐbkÐpyð  CDð  IRð  Sñ  Sô  S€IØ‡L‚L�ÑÔÐåŒ^€FØ Ð!1Ô2€NØˆ��Bˆx˜¨IØ $¨9¸Qð	@ñ 	@ô 	@€Aà‡L‚L��O„O€OØ‡G‚GˆB� 1Ñ$Ñ$ b¨%°yÀXÐRZÐai€GÑjÔjÐjØˆ��Bˆx˜¨IØ $¨9¸Qð	@ñ 	@ô 	@€Aà‡L‚L��O„O€OØ‡G‚GˆB� 1Ñ$Ñ$ b¨%°yÀXÐRZÐai€GÑjÔjÐjØ�'ÒÐØˆØ‡G‚GˆB�Ñ  &¨6°A©:Ñ"5°wÀiÐT\ÐaiÐpx€GÑyÔyÐyØ
€Fr   ú#50C1E9Ú	linecolorc                 óz   — t           j        } |||f||f||d         ¬¦  «        }|                      |¦  «         dS )u‡  
    ç»˜åˆ¶ç›´çº¿

    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x1 (float): çº¿æ®µç¬¬ä¸€ä¸ªç‚¹çš„æ¨ªå��æ ‡
        x2 (float): çº¿æ®µç¬¬äºŒä¸ªç‚¹çš„æ¨ªå��æ ‡
        y1 (float): çº¿æ®µç¬¬ä¸€ä¸ªç‚¹çš„çºµå��æ ‡
        y2 (float): çº¿æ®µç¬¬äºŒä¸ªç‚¹çš„çºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        linecolor (str, optional): çº¿æ®µçš„é¢œè‰²ï¼Œé»˜è®¤å€¼æ˜¯'#50C1E9'
    ri   )rt   rn   N)ÚlinesÚLine2DÚadd_line)	r   re   rf   rb   rc   r!   r‚   r…   r;   s	            r   r;   r;   ã   sO   € õ Œ\€FØˆ6�2�r�(˜R ˜HØ˜; {Ô3ð5ñ 5ô 5€Dà‡K‚K�ÑÔÐÐÐr   rJ   rY   c                 ól  — |d         }|d         }|d         }|rt          ddd|d¬¦  «        }	nt          dd	¬
¦  «        }	d|d	         ›d|d         ›d�}t          j        ||z
  ||z
  fd|z  d|z  ddd|ddd¬¦
  «
        }
|                      |
¦  «         |                      |||ddd|	|¬¦  «         dS )ut  
    ä¸»è¦�æ˜¯ç»˜åˆ¶RX, RY, RZ
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): boxä¸­å†™å…¥æ–‡å­—çš„æ¨ªå��æ ‡
        y (float): boxä¸­å†™å…¥æ–‡å­—çš„çºµå��æ ‡
        textstr (str): åœ¨boxä¸­éœ€è¦�å†™å…¥çš„å†…å®¹
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        box (bool, optional): ä¸»è¦�æ˜¯å†³å®šæ˜¯å�¦éœ€è¦�é‡�æ–°è®¾ç½®bboxï¼Œé»˜è®¤å€¼æ˜¯False
    ri   rh   Úbox_padr�   Tzround,pad=0.5)rk   rl   rq   rn   rj   Fr   )rq   rn   rP   Ú_r$   r   úround,pad=0.08g      ð?)
Úxyr   r~   rk   rl   rq   rn   rj   rm   ÚalphaÚwrr   )rt   ru   rv   Úbboxrw   N)Údictrx   ry   rz   r]   )r   r,   rJ   rd   r!   rY   ri   rh   rˆ   rŽ   Ú	targetboxs              r   r\   r\   õ   s  € ð ˜KÔ(€IØ˜:Ô&€HØ˜)Ô$€GØ
ð $Ý�y Y°T¸iÐRaÐbÑbÔbˆˆå˜ Ð#Ñ#Ô#ˆøØ# AœJ˜J˜J¨°¬
¨
¨
Ð3€GÝÔ&¨1¨w©;¸¸G¹Ð*DÈQÐQXÉ[Ð`aÐdkÑ`kÐpyð  Hð  OSð  Xað  l|ð  EFð  NQð  Rñ  Rô  R€IØ‡L‚L�ÑÔÐØ‡G‚GˆAˆq�˜s h°(ÀÈ(€GÑSÔSÐSØ
€Fr   r�   Ú	textcolorc                 ó.  — |d         }|d         }|d         }	|                      d¦  «        rd|d         z  }t          j        ||	z
  ||	z
  fd|	z  d|	z  ddd	|d
d¬¦	  «	        }
|                      |
¦  «         |                      ||||dd|¬¦  «         dS )uÌ  
    ç»˜åˆ¶ä¸€èˆ¬çš„å�•é—¨ï¼Œå¦‚H, X, Y, Zç­‰
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): boxä¸­å†™å…¥æ–‡å­—çš„æ¨ªå��æ ‡
        y (float): boxä¸­å†™å…¥æ–‡å­—çš„çºµå��æ ‡
        textstr (str): åœ¨boxä¸­éœ€è¦�å†™å…¥çš„å†…å®¹
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        textcolor (str, optional): é»˜è®¤å€¼æ˜¯wï¼Œå¯¹åº”çš„æ–‡å­—é¢œè‰²
        box (bool, optional): ä¸»è¦�æ˜¯å†³å®šæ˜¯å�¦éœ€è¦�é‡�æ–°è®¾ç½®bboxï¼Œé»˜è®¤å€¼æ˜¯False
    ri   rh   rˆ   ÚDGz$%s^\dagger$r   r   r�   TrŠ   )	r‹   r   r~   rk   rl   rq   rn   rj   rm   rr   rs   N)Úendswithrx   ry   rz   r]   )r   r,   rJ   rd   r!   r‘   rY   ri   rh   rˆ   r�   s              r   r]   r]     sÞ   € ð ˜KÔ(€IØ˜:Ô&€HØ˜)Ô$€Gð
 ×Ò˜ÑÔð /Ø! G¨A¤JÑ.ˆÝÔ&¨1¨w©;¸¸G¹Ð*DÈQÐQXÉ[Ð`aÐdkÑ`kÐpyð  Hð  OSð  Xað  l|ð  EFð  Gñ  Gô  G€IØ‡L‚L�ÑÔÐØ‡G‚GˆAˆq�' ¨x¸HÈ8€GÑTÔTÐTØ
€Fr   c           	      óú   — t           j        }|d         }|d         } |||f|ddd|¬¦  «        }|                      |¦  «         t          | ||||z
  ||z   |d¦  «         t          | ||z
  ||z   |||d¦  «         dS )uù   
    ç»˜åˆ¶CXå’ŒCCXè¿™ä¸¤ä¸ªé—¨ï¼Œä¸»è¦�æ˜¯è§£å†³ç›´å’Œé‚£ä¸ªç¬¦å�·
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): å¯¹åº”çš„åœ†å¿ƒæ¨ªå��æ ‡
        y (float): å¯¹åº”çš„åœ†å¿ƒçºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
    Ú
not_radiusri   r6   F)rk   rl   rq   rn   N)rx   r{   rz   r;   )r   r,   rJ   r!   r{   r–   ri   r€   s           r   r[   r[   '  sž   € õ Œ^€FØ˜\Ô*€JØ˜KÔ(€IØˆ��1ˆv�z iØ %¨Ið	7ñ 	7ô 	7€Aà‡L‚L��O„O€OÝˆˆQ��1�z‘> 1 z¡>°;À	ÑJÔJÐJÝˆˆQ�‰^˜Q ™^¨Q°°;À	ÑJÔJÐJØ
€Fr   r6   Údotcolorc           	      ó¦   — t           j        }|d         }|d         }|d         } |||f||z  ||d|d¬¦  «        }	|                      |	¦  «         dS )u!  
    ç»˜åˆ¶æŽ§åˆ¶ä½�é‚£ä¸ªç‚¹
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): å¯¹åº”çš„åœ†å¿ƒæ¨ªå��æ ‡
        y (float): å¯¹åº”çš„åœ†å¿ƒçºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        dotcolor (str, optional): è®¾ç½®ç‚¹çš„é¢œè‰²ï¼Œé»˜è®¤å€¼æ˜¯'#7A56D0'.
    ro   r%   ri   Tr   rp   N)rx   r{   rz   )
r   r,   rJ   r!   r—   r{   ro   r%   ri   r€   s
             r   r=   r=   :  so   € õ Œ^€FØ Ð!1Ô2€NØ˜Ô €EØ˜KÔ(€IØˆ��1ˆv�~ eÑ+Ø˜ t°	À!ð	Eñ 	Eô 	E€Aà‡L‚L��O„O€OØ
€Fr   c           	      óž   — |d         }t          | ||z
  ||z   ||z
  ||z   |d¬¦  «         t          | ||z
  ||z   ||z   ||z
  |d¬¦  «         dS )uÜ   
    ç»˜åˆ¶äº¤æ�¢é—¨
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        x (float): ç»˜åˆ¶â�Œä¸­å¿ƒä½�ç½®çš„æ¨ªå��æ ‡
        y (float): ç»˜åˆ¶â�Œä¸­å¿ƒä½�ç½®çš„çºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
    Ú
swap_deltar6   )r‚   N)r;   )r   r,   rJ   r!   Úds        r   r<   r<   M  sm   € ð 	�LÔ!€AÝˆˆQˆq‰S�!�A‘#�q˜‘s˜A˜a™C ¸	ÐBÑBÔBÐBÝˆˆQˆq‰S�!�A‘#�q˜‘s˜A˜a™C ¸	ÐBÑBÔBÐBØ
€Fr   ÚnqÚngÚ	gate_gridc                 ó†  — |d         }t          j        ||z  | |z  fdd¬¦  «        }|                     dddd¬¦  «        }|                     ¦   «          d|z  }|                     |d         |z
  |d	         |z   ¦  «         |                     |d         |z
  |d	         |z   ¦  «         |                     d
¦  «         ||fS )u@  
    è®¾ç½®å›¾å½¢çš„åŸºæœ¬ä¿¡æ�¯
    Args:
        nq (int): æ¯”ç‰¹æ•°
        ng (int): é—¨åº�åˆ—åˆ—æ•°ï¼Œä¸»è¦�æ˜¯è®¾ç½®æ•´ä¸ªå›¾çš„å®½åº¦
        gate_grid (np.array): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„æ¨ªå��æ ‡
        wire_grid (np.array): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„çºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
    r%   r�   )ÚfigsizeÚ	facecolorÚ	edgecolorr$   T)Úframeong      à?r   r#   Úequal)ÚpltÚfigureÚadd_subplotÚset_axis_offÚset_xlimÚset_ylimÚ
set_aspect)	rœ   r�   rž   r    r!   r%   Úfigr   Úoffsets	            r   Úsetup_figurer®   [  sÕ   € ð ˜Ô €EÝ
Œ*Ø�e‘˜R %™ZÐ(ØØðñ ô €Cð
 
�Š˜˜A˜q¨ˆÑ	.Ô	.€Bà‡O‚OÑÔÐØ�‰Y€FØ‡K‚K�	˜!”˜vÑ% y°¤}°vÑ'=Ñ>Ô>Ð>Ø‡K‚K�	˜!”˜vÑ% y°¤}°vÑ'=Ñ>Ô>Ð>Ø‡M‚M�'ÑÔÐØˆrˆ6€Mr   c           
      ó    — |d         }t          |¦  «        D ]5}t          | |d         |z
  |d         |z   ||         ||         ||¦  «         Œ6dS )uy  
    ç»˜åˆ¶çº¿è·¯å›¾ä¸­æ¨ªçº¿
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        nq (int): æ¯”ç‰¹æ•°
        gate_grid (np.array): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„æ¨ªå��æ ‡
        wire_grid (np.array): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„çºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        linecolor (str): çº¿æ®µçš„é¢œè‰²
        measured (dict, optional): æµ‹é‡�é—¨ä½�ç½®ä¿¡æ�¯
    r%   r   r#   N)r*   r;   )	r   rœ   rž   r    r!   r‚   r   r%   r   s	            r   Ú
draw_wiresr°   t  sd   € ð ˜Ô €EÝ�2‰YŒYð rð rˆÝˆR�˜1” Ñ% y°¤}°uÑ'<¸iÈ¼lÈIÐVWÌLÐZeÐgpÑqÔqÐqÐqà
€Fr   Úinitsc           
      ó  — |d         }|d         }t          |¦  «        }	t          |	¦  «        D ]R}
t          ||
         |¦  «        }t          | |d         ||z  z
  ||         t	          ||
         |¦  «        ||¦  «         ŒSdS )uÓ  
    æ¯�æ ¹çº¿è°±å‰�å¯¹åº”çš„æ ‡ç­¾
    Args:
        ax (Axes): ç»˜å›¾å¯¹è±¡
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾
        inits (dict): çº¿è·¯å›¾ä¸­æ¯�ä¸€æ�¡çº¿å‰�é�¢çš„æ ‡ç­¾ä¸Žç´¢å¼•çš„å…³ç³»
        gate_grid (list): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„æ¨ªå��æ ‡
        wire_grid (np.array): æ•´ä¸ªå›¾çš„æ‰€æœ‰ç‚¹çš„çºµå��æ ‡
        plot_params (dict): åŸºæœ¬å�‚æ•°ä¿¡æ�¯
        textcolor (str): å¡«å†™å†…å®¹çš„é¢œè‰²
    r%   Úlabel_bufferr   N)r&   r*   r   r]   Úrender_label)r   r   r±   rž   r    r!   r‘   r%   r³   rœ   r   r   s               r   Údraw_labelsrµ   †  s“   € ð ˜Ô €EØ˜~Ô.€LÝ	ˆV‰Œ€BÝ�2‰YŒYð |ð |ˆÝ˜f Qœi¨Ñ0Ô0ˆÝˆR�˜1” ¨uÑ 4Ñ4°iÀ´lÅLÐQWÐXYÔQZÐ\aÑDbÔDbÐdoÐqzÑ{Ô{Ð{Ð{Ø
€Fr   r   c                 óZ   — t          |¦  «        }|                     | ¦  «        }||z
  dz
  S )u  
    èŽ·å�–å½“å‰�é—¨å¯¹åº”çš„æ¯”ç‰¹ä½�ç½®ç´¢å¼•
    Args:
        target (str): é—¨çš„å��ç§°
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾

    Returns:
        int: å¯¹åº”æ•´ä¸ªçº¿è·¯å›¾ä¸­çºµå��æ ‡å¯¹åº”çš„ç´¢å¼•å€¼
    r$   )r&   Úindex)r   r   rœ   r   s       r   r   r   š  s-   € õ 
ˆV‰Œ€BØ�Š�VÑÔ€Aàˆa‰4�‰6€Mr   r>   c                 ó    ‡— ˆfd„| D ¦   «         S )u  
    èŽ·å�–å¤šä¸ªé—¨ä½�ç½®çš„æ¯”ç‰¹ä½�ç´¢å¼•å€¼
    Args:
        targets (list): é—¨åº�åˆ—ï¼Œä¸»è¦�æ˜¯ç”¨äºŽå¤„ç�†å¤šä¸ªæŽ§åˆ¶ä½�
        labels (list): é‡Œé�¢å…ƒç´ éƒ½æ˜¯å­—ç¬¦ä¸²ï¼Œåˆ—ä¸¾å‡ºæ¯�ä¸€ä¸ªæ¯”ç‰¹çš„æ ‡ç­¾

    Returns:
        list: é—¨åº�åˆ—ä¸­å¯¹åº”çš„æ¯”ç‰¹ä½�ç´¢å¼•
    c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r2   )r   )r3   r4   r   s     €r   r5   z'get_flipped_indices.<locals>.<listcomp>³  s$   ø€ Ð:Ð:Ð:¨QÕ˜a Ñ(Ô(Ð:Ð:Ð:r   r2   )r>   r   s    `r   r9   r9   ©  s   ø€ ð ;Ð:Ð:Ð:°'Ð:Ñ:Ô:Ð:r   Úlabelc                 óB   — | |v r||          }|€dS d||          z  S d| z  S )uð   
    ç»˜åˆ¶å‰�é�¢æ ‡ç­¾å†…å®¹
    Args:
        label (str): åœ¨å½“å‰�ä»£ç �ä¸­æ¯”ç‰¹ä½�çš„æ ‡ç­¾
        inits (dict, optional): çº¿è·¯å›¾ä¸­æ¯�ä¸€æ�¡çº¿å‰�é�¢çš„æ ‡ç­¾ä¸Žç´¢å¼•çš„å…³ç³»

    Returns:
        str: Latexå­—ç¬¦ä¸²ä»£ç �
    NÚ z$q_%s|0\rangle$r2   )rº   r±   Úss      r   r´   r´   µ  s:   € ð �€~€~Ø�%ŒLˆØˆ9Ø�2à%¨¨e¬Ñ4Ð4Ø Ñ%Ð%r   )F)r�   )r�   F)r6   )%Úmatplotlib.pyplotÚpyplotr¥   Úmatplotlib.patchesrx   Úmatplotlib.linesr„   Úmatplotlib.axes._axesr   ÚnumpyÚnpr:   Úboolr   r�   r   Úarrayr/   r   r'   Úfloatr+   ÚstrrZ   r;   r\   r]   r[   r=   r<   Úintr®   r°   rµ   r   r9   r´   r2   r   r   ú<module>rÊ      sÝ  ðØ Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð ðð �dð  Tð ð ð ð ð2ð �Tð  $ð °ð ¸dð ð ð ð ð2 xzð  JOð  ð  �$ð  ˜$ð   tð  ¸Tð  ÈRÌXð  Ðcgð  Ðrvð  ð  EIð  ð  ð  ð  ðD DFð ,ð ,˜$ð , Uð ,°4ð ,Èð ,ÐY[ÔYað ,Ðosð ,ð  Cð ,ð ,ð ,ð ,ð\-�4ð -˜5ð - uð -°Tð -ÀRÄXð -Ð[_ð -ð -ð -ð -ð^)�ð )˜%ð ) Eð )¨eð )¸ð )Àsð )ÐX\ð )ð )ð )ð )ðVð ˆDð �Uð ˜uð ¨ð °5ð Àdð ÐVYð ð ð ð ð$ð �4ð ˜5ð  Eð °3ð ÀDð Èdð ð ð ð ð0ð ˆDð �Eð ˜Uð ¨Cð ¸Tð ÈSð ÐZ^ð ð ð ð ð4ˆTð �Uð ˜eð °ð ð ð ð ð&ð ˆDð �Eð ˜Uð °ð ¸sð ð ð ð ð&ˆTð �Uð ˜eð °ð ð ð ð ð�Cð ˜Cð ¨2¬8ð ¸r¼xð ÐUYð ð ð ð ð2 y{ð ð �$ð ˜3ð ¨2¬8ð ¸r¼xð ÐUYð Ðehð Ðswð ð ð ð ð$�4ð  ð ¨Dð ¸Dð ÈBÌHð Ðbfð Ðruð ð ð ð ð(˜Sð ¨ð °ð ð ð ð ð
; ð 
;¨Tð 
;°Dð 
;ð 
;ð 
;ð 
;ð (*ð &ð &�sð & $ð &ð &ð &ð &ð &ð &r   