§
    º³ÙgH6 ã                   óê  — d Z ddlZddlZddlZddlmZ ddl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 ddlmZ ddlmZ ddlmZmZ ddl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l0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHe/jI        jJ        e/jK        jJ         G d„ d¦  «        ¦   «         ¦   «         ZL G d „ d!¦  «        ZMdS )"z"mpl circuit visualization backend.é    N)ÚStringIO)ÚQuantumCircuitÚQubitÚClbitÚClassicalRegisterÚControlledGateÚMeasureÚControlFlowOpÚWhileLoopOpÚIfElseOpÚ	ForLoopOpÚSwitchCaseOpÚCircuitError)Úcondition_resources)Úexpr)Ú_canonicalize_modifiersÚControlModifier)Ú
Initialize)ÚSwapGateÚRZZGateÚU1GateÚ	PhaseGateÚXGateÚZGate)Úast)Ú_ExprBuilder)ÚBasicPrinter)Úpi_check)Ú	optionalsé   )Ú
load_style)Úget_gate_ctrl_textÚget_param_strÚget_wire_mapÚget_bit_registerÚget_bit_reg_indexÚget_wire_labelÚget_condition_label_valÚ_get_layered_instructionsé   )Úmatplotlib_close_if_inlineçÍÌÌÌÌÌä?é   é   é   é   é   é
   é   é   i€–˜ c                   ó  — e Zd ZdZ ej        d¦  «        Z	 	 	 	 	 	 	 	 	 	 d#d„Zd$d	„Zd
„ Z	d„ Z
	 d%d„Zd&d„Zd„ Zd„ Z	 d'd„Zd„ Zd„ Zd„ Zd„ Zd%d„Zd%d„Zd„ Zd„ Z	 d(d„Zd)d„Zd*d„Zd„ Zd%d„Zd%d„Zd+d „Zddefd!„Z d'd"„Z!dS ),ÚMatplotlibDrawerz2Matplotlib drawer class called from circuit_drawerz(?<!\\)\$(.*)(?<!\\)\$NFTé   é   c                 ó8  — || _         || _        || _        || _        |€dn|| _        || _        || _        || _        |r+| j         j        r| j         j        j	        | _        nd | _        nd | _        |	| _
        | j
        dk     rd| _
        |
| _        || _        | j         j        | _        | j         j        | _        || _        || _        d| _        d| _        d| _        d| _        d| _        i | _        d | _        i | _        i dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd	“d d!“d"d#“d$d%“d&d'“i d(d)“d*d+“d,d“d-d+“d.d“d/d)“d0d+“d1d2“d3d+“d4d5“d6d5“d7d8“d9d“d:d8“d;d<“d=d>“d?d@“¥i dAdB“dCdD“dEdF“dGd'“dHdI“dJdK“dLdM“dNdO“dPdO“dQdR“dSdT“dUdV“dWdM“dXdY“dZd[“d\dY“d]dD“¥i d^d2“d_d`“dadb“dcd@“ddde“dfd@“dgdh“didB“djdk“dld%“dmd“dnd“dodp“dqd“drds“dtd“dudv“¥i dwd2“dxds“dydz“d{d2“d|d2“d}d~“dd~“d€d�“d‚d~“dƒd„“d…d2“d†dh“d‡d“dˆd2“d‰dŠ“d‹dŒ“d�d“¥d2dŽd�dŽdŽd�d+d‘d2d’œ	¥| _        d S )“Nç      ð?r*   éÿÿÿÿç      ø?ç       @ç      @ç      @ú )çØðôJY†¸?g}®¶bÙ­?ú!)ç?W[±¿ì¾?çÓÞà“©²?ú")çÊÃB­iÞÁ?çffffff¶?ú#)g•Ô	h"Ð?ç<NÑ‘\þÃ?ú$)çaTR' ‰È?çŽuqà½?ú%)gNÑ‘\þCÒ?ç—�z6«Æ?ú&)g?ÆÜÍ?çÓÞà“©Â?ú')g¥½Á&Sµ?ç[B>èÙ¬ª?ú()rL   rD   ú)Ú*)ç333333Ã?çˆc]ÜF¸?ú+)ç      Ð?rI   ú,ú-)ç$(~Œ¹»?çÁ¨¤N@±?ú.)rA   ç?W[±¿ì®?ú/)çúíëÀ9#º?g      °?Ú0)g      È?rL   Ú1)ç0*©ÐDÈ?rL   Ú2)rK   çïÉÃB­i¾?Ú3Ú4Ú5Ú6Ú7Ú8)rd   rf   Ú9ú:)ra   r_   ú;ú<)rY   g”‡…ZÓ¼Ã?ú=ú>ú?)glxz¥,CÄ?ç9EGrù¹?ú@)gž^)ËÓ?çÐÕVì/»Ç?ÚA)g¢´7øÂdÊ?ç0*©ÐDÀ?ÚB)gúíëÀ9#Ê?rx   ÚC)gÓÞà“©Ê?gaTR' ‰À?ÚD)çÕçj+ö—Í?gúíëÀ9#Â?ÚEÚF)g?ÆÜÅ?g«ÏÕVì/»?ÚG)r|   g+•Ô	hÂ?ÚH)gÍÌÌÌÌÌÌ?rF   ÚI)rG   gëâ6À«?ÚJÚK)g9EGrùÉ?rC   ÚL)g-!ôlVÅ?ç[B>èÙ¬º?ÚM)gœ¢#¹ü‡Ð?gœ¢#¹ü‡Ä?ÚNÚO)g6<½R–!Î?rP   ÚP)ço�Å�1Ç?çÍÌÌÌÌÌ¼?ÚQÚRÚSÚT)rv   r‹   ÚU)glxz¥,CÌ?gioð…ÉTÁ?ÚVÚW)g	ŠcîÒ?çŸ«­Ø_vÇ?ÚXÚY)r“   r‹   ÚZú[)rL   g333333³?ú\ú]ú^Ú_)çd]ÜFxÃ?rW   ú`Úa)rv   g-!ôlV½?ÚbÚc)gýöuàœÅ?ra   ÚdÚeÚf)r…   r]   ÚgÚhÚi)g?ÆÜµ?rR   ÚjÚk)g6<½R–!Æ?r\   ÚlÚm)g—�z6«Ò?rŠ   ÚnÚoÚpÚqÚr)g      À?g”‡…ZÓ¼³?Ús)rI   rA   Út)rN   glxz¥,C¼?)gŸ«­Ø_vÏ?rœ   )rI   rt   )çš™™™™™¹?r_   )	ÚuÚvÚwÚxÚyÚzÚ{ú|Ú})Ú_circuitÚ_qubitsÚ_clbitsÚ_nodesÚ_scaleÚ_styleÚ_plot_barriersÚ_reverse_bitsÚ_layoutÚinitial_layoutÚ_foldÚ_axÚ_initial_stateÚglobal_phaseÚ_global_phaseÚ_calibrations_propÚ_calibrationsÚ	_expr_lenÚ_cregbundleÚ_lwidth1Ú	_lwidth15Ú_lwidth2Ú_lwidth3Ú_lwidth4Ú_flow_drawersÚ_flow_parentÚ_flow_wire_mapÚ
_char_list)ÚselfÚqubitsÚclbitsÚnodesÚcircuitÚscaleÚstyleÚreverse_bitsÚplot_barriersÚfoldÚaxÚinitial_stateÚ
cregbundleÚwith_layoutÚexpr_lens                  ú]/granary/edev/quantum/lib/python3.11/site-packages/qiskit/visualization/circuit/matplotlib.pyÚ__init__zMatplotlibDrawer.__init___   s  € ð"  ˆŒØˆŒØˆŒØˆŒØ"˜]�c�c°ˆŒàˆŒà+ˆÔØ)ˆÔØð 	 ØŒ}Ô$ð $Ø#œ}Ô4ÔC�”�à#�”�àˆDŒLàˆŒ
ØŒ:˜Š>ˆ>ØˆDŒJàˆŒà+ˆÔØ!œ]Ô7ˆÔØ!œ]Ô=ˆÔØ!ˆŒØ%ˆÔàˆŒØˆŒØˆŒØˆŒØˆŒð  ˆÔð !ˆÔØ ˆÔð_
ØÐ!ð_
àÐ!ð_
ð Ð!ð_
ð Ð!ð	_
ð
 Ð!ð_
ð Ð!ð_
ð Ð!ð_
ð Ð!ð_
ð Ð!ð_
ð Ð!ð_
ð �ð_
ð �ð_
ð Ð!ð_
ð Ð!ð_
ð Ð!ð_
ð  Ð!ð!_
ð" Ð!ð#_
ð _
ð$ Ð!ð%_
ð& Ð!ð'_
ð( Ð!ð)_
ð* Ð!ð+_
ð, Ð!ð-_
ð. Ð!ð/_
ð0 Ð!ð1_
ð2 Ð!ð3_
ð4 Ð!ð5_
ð6 Ð!ð7_
ð8 Ð!ð9_
ð: �ð;_
ð< �ð=_
ð> �ð?_
ð@ Ð!ðA_
ðB Ð!ðC_
ðD Ð!ðE_
ð _
ð _
ðF Ð!ðG_
ðH Ð!ðI_
ðJ Ð!ðK_
ðL Ð!ðM_
ðN Ð!ðO_
ðP Ð!ðQ_
ðR �ðS_
ðT Ð!ðU_
ðV Ð!ðW_
ðX Ð!ðY_
ðZ Ð!ð[_
ð\ Ð!ð]_
ð^ �ð__
ð` Ð!ða_
ðb Ð!ðc_
ðd Ð!ðe_
ðf Ð!ðg_
ð _
ð _
ðh Ð!ði_
ðj Ð!ðk_
ðl Ð!ðm_
ðn Ð!ðo_
ðp Ð!ðq_
ðr Ð!ðs_
ðt Ð!ðu_
ðv Ð!ðw_
ðx �ðy_
ðz Ð"ð{_
ð| Ð!ð}_
ð~ Ð!ð_
ð@ Ð!ðA_
ðB �ðC_
ðD Ð!ðE_
ðF Ð!ðG_
ðH Ð!ðI_
ð _
ð _
ðJ Ð!ðK_
ðL Ð!ðM_
ðN Ð!ðO_
ðP Ð!ðQ_
ðR Ð!ðS_
ðT Ð!ðU_
ðV Ð!ðW_
ðX Ð!ðY_
ðZ Ð!ð[_
ð\ Ð!ð]_
ð^ Ð!ð__
ð` Ð!ða_
ðb Ð!ðc_
ðd Ð!ðe_
ðf �ðg_
ðh Ð!ði_
ðj Ð!ðk_
ð _
ðl "Ø!Ø!Ø!Ø!Ø!Ø!ØØ!ð}_
ð _
ð _
ˆŒˆˆó    c                 ó¨	  — ddl m} ddl m} i }||d<   |}t          | j        ¦  «        \  | _        }| j        d         |z  | j        d         z  |d<   | j        €Wd	}|                     ¦   «         }	|	j                             | j        d
         ¬¦  «         |	 	                    d¦  «        | _        nd}| j         
                    ¦   «         }	| j                             d¦  «         | j                             d¦  «         | j                             d	d	d	d	¬¦  «         t          | j        | j        | j        z   | j        ¦  «        }
i }i }i }|                      |
|||¦  «         |                      ||
| j        |¦  «        }|                      ||
| j        ||||¦  «        }| j        dk    rt/          d|dz
  ¦  «        | j        z  nd}|| j        cxk    rdk    r+n n(| j        |d         z   dz   }|dz   |d         dz   z  dz
  }n$| j        sdnd}|dz   |d         z   |z
  }|d         }| j        d         d          }|| j        d         d         z   }| | j        d         d         z
  dz   }| j        d         d         dz   }| j                             ||¦  «         | j                             ||¦  «         ||z
  dz  }||z
  dz  }| j        }|rQ| j                             ¦   «                              |	j                             ¦   «         ¦  «        }|j         |z  dz  }n‹| j        dk    r'|	 !                    || j        z  || j        z  ¦  «         nY| j        d         dk    r2| j        d         dz  }|	 !                    |||z  |z  ¦  «         ||z  }n|	 !                    ||¦  «         |dk    r\| j        dxx         |z  cc<   | j        dxx         |z  cc<   d|z  | _"        d |z  | _#        d!|z  | _$        d"|z  | _%        d#|z  | _&        | j'        r.| (                    ||d$tS          | j'        d%¬&¦  «        › �¦  «         |  *                    ||||||¦  «         |  +                    | j        ||
| j        |||||¦	  «	         |r6|	 ,                    || j        d'         d(|	 -                    ¦   «         ¬)¦  «         |st]          |	¦  «         |	S dS )*z§Main entry point to 'matplotlib' ('mpl') drawer. Called from
        ``visualization.circuit_drawer`` and from ``QuantumCircuit.draw`` through circuit_drawer.
        r   )Úpatches)ÚpyplotÚpatches_modÚsfsÚfsÚsubfont_factorNFÚbg©Úcoloréo   TÚoffÚequal)ÚlabelbottomÚlabeltopÚ	labelleftÚ
labelrightr    Úx_offsetr²   Ún_linesçš™™™™™Ù?gÍÌÌÌÌÌì?Úmarginr*   ç      à?r-   gŸRÊlÁê?r:   Úfigwidthç        gn/†ô?r<   r=   r>   r?   zGlobal Phase: Úmpl)ÚoutputÚdpiÚtight)r  Úbbox_inchesÚ	facecolor)/Ú
matplotlibrë   rì   r!   rÁ   rÇ   ÚfigureÚpatchÚset_facecolorÚadd_subplotÚ
get_figureÚaxisÚ
set_aspectÚtick_paramsr$   r¼   r½   r¾   rÎ   Ú_set_bit_reg_infoÚ_get_layer_widthsÚ_get_coordsrÆ   Úmaxr¿   Úset_xlimÚset_ylimrÀ   Úget_window_extentÚtransformedÚdpi_scale_transÚinvertedÚwidthÚset_size_inchesrÏ   rÐ   rÑ   rÒ   rÓ   rÊ   Útextr   Ú_draw_regs_wiresÚ	_draw_opsÚsavefigÚget_facecolorr+   )rØ   ÚfilenameÚverboserë   ÚpltÚ	glob_dataÚplt_modÚdef_font_ratioÚ
is_user_axÚ
mpl_figureÚwire_mapÚ	node_dataÚqubits_dictÚclbits_dictÚlayer_widthsÚmax_x_indexÚ	num_foldsÚxmaxÚymaxÚx_incrÚxlÚxrÚybÚytÚ
base_fig_wÚ
base_fig_hrÝ   ÚbboxÚ	adj_fig_ws                                rç   ÚdrawzMatplotlibDrawer.drawý   s�  € ð 	'Ð&Ð&Ð&Ð&Ð&Ø,Ð,Ð,Ð,Ð,Ð,ð ˆ	à#*ˆ	�-Ñ Øˆå&0°´Ñ&=Ô&=Ñ#ˆŒ�^ð '+¤k°%Ô&8¸>Ñ&IÈDÌKÐX\ÔL]Ñ&]ˆ	Ð"Ñ#ð Œ8ÐØˆJØŸš™œˆJØÔ×*Ò*°´¸TÔ1BÐ*ÑCÔCÐCØ!×-Ò-¨cÑ2Ô2ˆDŒHˆHàˆJØœ×,Ò,Ñ.Ô.ˆJØŒ�Š�eÑÔÐØŒ×Ò˜GÑ$Ô$Ð$ØŒ×Ò¨¸È%Ð\aÐÑbÔbÐbõ   ¤¨t¬|¸d¼lÑ/JÈDÔL\Ñ]Ô]ˆð ˆ	ð ˆØˆð 	×Ò˜x¨°kÀ9ÑMÔMÐMð ×-Ò-¨i¸À4Ä=ÐR[Ñ\Ô\ˆð ×&Ò&Ø�x ¤°¸kÈ;ÐXañ
ô 
ˆð >B¼ZÈ!º^¸^•C˜˜;¨™?Ñ+Ô+¨t¬zÑ9Ð9ÐQRˆ	ð ˜œÐ'Ð'Ò'Ð' aÒ'Ð'Ð'Ð'Ð'Ø”: 	¨*Ô 5Ñ5¸Ñ;ˆDØ ‘M i°	Ô&:¸QÑ&>Ñ?À!ÑCˆDˆDà $¤Ð4�S�S°ˆFØ ‘? Y¨zÔ%:Ñ:¸VÑCˆDØ˜YÔ'ˆDàŒk˜(Ô# AÔ&Ð&ˆØ�D”K Ô)¨!Ô,Ñ,ˆØˆU�T”[ Ô*¨1Ô-Ñ-°Ñ3ˆØŒ[˜Ô" 1Ô%¨Ñ+ˆØŒ×Ò˜"˜bÑ!Ô!Ð!ØŒ×Ò˜"˜bÑ!Ô!Ð!ð ˜2‘g Ñ*ˆ
Ø˜2‘g Ñ*ˆ
Ø”ˆð ð 	?à”8×-Ò-Ñ/Ô/×;Ò;¸JÔ<V×<_Ò<_Ñ<aÔ<aÑbÔbˆDØ”J Ñ+¨iÑ7ˆEˆEð Œ[˜CÒÐØ×&Ò& z°D´KÑ'?ÀÈdÌkÑAYÑZÔZÐZÐZð Œ[˜Ô$ sÒ*Ð*àœ JÔ/°(Ñ:ˆIØ×&Ò& y°)¸jÑ2HÈ:Ñ2UÑVÔVÐVØ 
Ñ*ˆEˆEð ×&Ò& z°:Ñ>Ô>Ð>ð �CŠ<ˆ<ØŒK˜ÐÐÔ Ñ&ÐÐÑØŒK˜ÐÐÔ %Ñ'ÐÐÑØ %™KˆDŒMØ  5™[ˆDŒNØ %™KˆDŒMØ %™KˆDŒMØ %™KˆDŒMð Ôð 	`Ø�LŠL˜˜RÐ!^µ(¸4Ô;MÐV[Ð2\Ñ2\Ô2\Ð!^Ð!^Ñ_Ô_Ð_Ø×Ò˜i¨¨{¸KÈÐV_Ñ`Ô`Ð`Ø�ŠØŒKØØØŒMØØØØØñ
	
ô 
	
ð 
	
ð ð 	Ø×ÒØØ”K Ô&Ø#Ø$×2Ò2Ñ4Ô4ð	 ñ ô ð ð ð 	Ý& zÑ2Ô2Ð2ØÐð	ð 	ré   c                 ó&  ‡‡— i }t          | j        ¦  «        D �]ö\  }}t          }t          |¦  «        D �]¸\  }	}
|	dk    rd}d|| j        g||
<   |
j        }t          ¦   «         ||
<   t          ||
         _        t          |dd¦  «        }t          |dd¦  «        r|j        r| j	        rt          |t          ¦  «        r|j        ||
         _        Œ�t          |dd¦  «        }t          |d	| j        | j        ¬
¦  «        \  }}}|||
         _        |||
         _        |||
         _        d||
         _        t)          |
j        ¦  «        |z
  dk    r9t)          |¦  «        dk     r&t)          t          |dg ¦  «        ¦  «        dk    r|€�ŒWt          |t,          ¦  «        st          |t,          ¦  «        r�Œƒ|                      ||| j        d         ¬¦  «        dz
  }t)          t          |dg ¦  «        ¦  «        dk    r´t1          d„ |j        D ¦   «         ¦  «        s–t1          d„ |j        D ¦   «         ¦  «        sxt5          |d	d¬¦  «        }t          |t6          ¦  «        rd|                     dd¦  «        › d�}|||
         _        |                      ||| j        d         d¬¦  «        }|dz   }ndx}}t          |t:          ¦  «        s"t          |t<          t>          t:          f¦  «        rJt          |t>          ¦  «        rd}|                      |dz   || j        d         ¬¦  «        |z   }|dz   dz  }�n`t          |
j        t@          ¦  «        �rýg | j!        |
<   g ||
         _        d||
         _"        d}d}t          |tF          ¦  «        rt          |j$        tJ          j&        ¦  «        s2t          |dd¦  «        �r.t          |j'        tJ          j&        ¦  «        �rˆˆfd„}t          |tF          ¦  «        r|j$        n|j'        }tQ          ¦   «         }tS          |d ¬!¦  «         *                    | +                    tY          |¦  «        ¦  «        ¦  «         | -                    ¦   «         }t)          |¦  «        | j.        k    r|d| j.        …         d"z   }|||
         _/        |                      ||
         j/        || j        d         ¬¦  «        }ta          |¦  «        ||
         _1        te          |
j        j3        ¦  «        }t          |th          ¦  «        r|j        d         ||
         _5        nŸt          |tF          ¦  «        rŠg ||
         _6        te          | 7                    ¦   «         ¦  «        }| 8                    d|d         d          9                    ¦   «         ¦  «         |D ]%\  }}||
         j6         :                    |¦  «         Œ&t          |¦  «        D �]i\  } }!| dk    r|nd}| j        � || j                 j"        dz   ||
         _"        ‰ ;                    ¦   «         }"|" <                    ˆfd#„t{          |
j        |!j>        ¦  «        D ¦   «         ¦  «         t{          |
j?        |!j@        ¦  «        D ]i\  }#}$| jA        r@t…          ‰|$¦  «        x}%�.t…          ‰|#¦  «        }&|" <                    |%‰|&         i¦  «         ŒL|" <                    |$‰|#         i¦  «         Œjt‡          |!|"¬$¦  «        \  }'}(})t‰          |'|(|)|!| j        | j	        | jE        | jA        ¬%¦  «        }*|
|*_        |"|*_F        | j!        |
          :                    |*¦  «         |* G                    ||"‰|¦  «        }+| <                    |+¦  «         |)D ]},|,D ]}-| ||-         _H        ŒŒ|+ I                    ¦   «         D ]\  }.}}/|dk    r|/|*j        k    r||.z  }Œ||| dk    rd&ndz   z  }| dk    r|d'z  }t          |th          ¦  «        s.| dk    r(||
         j         :                    ||dz  z
  ¦  «         �ŒI||
         j         :                    |¦  «         �ŒknH|                      ||| j        d(         ¬¦  «        }|d)z   }t)          |
j        ¦  «        |z
  dk    r|d*z  }t•          |||t          ¦  «        }0|0|k    r|0}t          |
j        t@          ¦  «        st•          ||¦  «        ||
         _        �Œº|D ]}
ta          |¦  «        dz   ||
         d<   Œ�Œø|S )+z'Compute the layer_widths for the layersr   r;   r    Únum_ctrl_qubitsÚ
_directiveFÚ	base_gateNr  )rÞ   ÚcalibrationsÚ r-   Úparamsrî   )Úfontsizeçš™™™™™©?c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S ©N)Ú
isinstanceÚnpÚndarray©Ú.0Úparams     rç   ú	<genexpr>z5MatplotlibDrawer._get_layer_widths.<locals>.<genexpr>Â  s.   è è € ÐUÐUÀ%¥
¨5µ"´*Ñ =Ô =ÐUÐUÐUÐUÐUÐUré   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rG  )rH  r   rK  s     rç   rN  z5MatplotlibDrawer._get_layer_widths.<locals>.<genexpr>Ã  s,   è è € ÐYÐYÀe¥
¨5µ.Ñ AÔ AÐYÐYÐYÐYÐYÐYré   )Úndigitsz$[rJ   z]$T)rD  rM  ç{®Gáz´?r  r‰   z ()gHáz®Gù?Ú	conditionc                 óÖ  •— t          | t          j        ¦  «        rt          j        | j        ¦  «        S t          | t          ¦  «        rt          j        | j        ¦  «        S 	 t          ‰| ¦  «        \  }}}n-# t          $ r  t          j        d‰|          › �¦  «        cY S w xY w|€t          j        d|› �¦  «        S t          j	        |j        t          j
        |¦  «        ¦  «        S )z”Look up a classical-expression variable or register/bit in our
                            internal symbol table, and return an OQ3-like identifier.Úbit)rH  r   ÚVarr   Ú
IdentifierÚnamer   r&   r   ÚSubscriptedIdentifierÚIntegerLiteral)ÚvarÚregisterÚ	bit_indexÚ	reg_indexÚouter_circuitr*  s       €€rç   Ú
lookup_varz6MatplotlibDrawer._get_layer_widths.<locals>.lookup_varè  s  ø€ õ
  *¨#­t¬xÑ8Ô8ð @Ý'*¤~°c´hÑ'?Ô'?Ð ?Ý)¨#Õ/@ÑAÔAð @Ý'*¤~°c´hÑ'?Ô'?Ð ?ðMÝARØ$1°3ñB"ô B"Ñ > ¨)°Y°Yøõ $0ð Mð Mð Mõ (+¤~Ð6K¸HÀS¼MÐ6KÐ6KÑ'LÔ'LÐ LÐ LÐ LðMøøøð  (Ð/Ý'*¤~Ð6G¸IÐ6GÐ6GÑ'HÔ'HÐ HÝ#&Ô#<Ø (¤­sÔ/AÀ)Ñ/LÔ/Lñ$ô $ð s   Á$A9 Á9'B#Â"B#z  )Úindentú...c                 ó(   •— i | ]\  }}|‰|         “ŒS © rc  )rL  ÚouterÚinnerr*  s      €rç   ú
<dictcomp>z6MatplotlibDrawer._get_layer_widths.<locals>.<dictcomp>1  s3   ø€ ð ð ð á$0 E¨5ð !& x°¤ðð ð ré   )r*  )rÞ   rà   rá   rä   r:   g
×£p=
§?rï   r²   çáz®GáÊ?)KÚ	enumerater¿   ÚWIDrÕ   ÚopÚNodeDatar  ÚgetattrÚlabelrÂ   rH  r	   rW  Úraw_gate_textr"   rÁ   rÌ   Ú	gate_textÚ	ctrl_textÚ
param_textÚlenÚqargsr   Ú_get_text_widthÚanyrC  r#   r   Úreplacer   r   r   r
   rÔ   Ú
nest_depthr   Útargetr   ÚExprrR  r   r   ÚvisitÚacceptr   ÚgetvaluerÍ   Ú	expr_textÚintÚ
expr_widthÚlistÚblocksr   ÚindexsetÚjump_valuesÚcases_specifierÚinsertÚcopy_empty_likeÚappendÚcopyÚupdateÚziprÙ   ÚcargsrÚ   rÎ   r%   r)   r6   rÆ   rÖ   r  Úcirc_numÚvaluesr  )1rØ   r+  r*  r^  r%  r.  Ú	layer_numÚlayerÚ
widest_boxr¦   Únoderj  r>  Ú	base_typero  rp  rn  Ú
ctrl_widthrq  Úraw_param_widthÚparam_widthÚraw_gate_widthÚ
gate_widthr  r_  rR  Ústreamr}  Úcircuit_listÚcasesrƒ  r›   rŒ  rÜ   Úflow_wire_maprd  re  Úin_regÚout_regrÙ   rÚ   Ú
flow_nodesÚflow_drawerÚflow_widthsÚ
flow_layerÚ	flow_noder  Úflow_parentÚ	box_widths1     ``                                             rç   r  z"MatplotlibDrawer._get_layer_widthsŽ  s
  øø€ ð ˆÝ )¨$¬+Ñ 6Ô 6ð o	<ñ o	<ÑˆI�uÝˆJÝ$ UÑ+Ô+ð kQñ kQ‘��4ð ˜’6�6Ø "�IØ&'¨°DÔ4EÐ%F�˜TÑ"à”W�Ý"*¡*¤*�	˜$‘Ý(+�	˜$”Ô%Ý")¨"Ð.?ÀÑ"CÔ"C�å˜B ¨eÑ4Ô4ðØ>@¼hðØNRÔNaðå ¥GÑ,Ô,ðð 57´G�I˜d”OÔ1Øå# B¨°TÑ:Ô:�	Ý6HØ˜ T¤[¸tÔ?Qð7ñ 7ô 7Ñ3�	˜9 mð -6�	˜$”Ô)Ø,5�	˜$”Ô)Ø0=�	˜$”Ô-Ø-/�	˜$”Ô*õ ˜œ‘_”_ Ñ6¸1Ò<Ð<Ý˜I™œ¨Ò*Ð*Ý�G B¨°"Ñ5Ô5Ñ6Ô6¸!Ò;Ð;Ø!Ð)áå˜b¥(Ñ+Ô+ð ­z¸)ÅXÑ/NÔ/Nð Ùð
 ×(Ò(¨°IÈÌÐTYÔHZÐ(Ñ[Ô[Ð^bÑbð õ
 �  H¨bÑ1Ô1Ñ2Ô2°QÒ6Ð6ÝÐUÐUÈ2Ì9ÐUÑUÔUÑUÔUð 7åÐYÐYÈrÌyÐYÑYÔYÑYÔYð 7õ "/¨r°5À!Ð!DÑ!DÔ!D�JÝ! "¥jÑ1Ô1ð JØ%I¨*×*<Ò*<¸SÀ"Ñ*EÔ*EÐ%IÐ%IÐ%I˜
Ø1;�I˜d”OÔ.Ø&*×&:Ò&:Ø" I¸¼ÀEÔ8JÐRVð ';ñ 'ô '�Oð #2°DÑ"8�K�Kà47Ð7�K /õ ˜b¥'Ñ*Ô*ð h+­j¸ÅVÍYÕX_ÐD`Ñ.aÔ.að h+Ý! )­YÑ7Ô7ð (Ø$'˜	à×,Ò,Ø%¨Ñ-¨yÀ4Ä;ÈuÔCUð -ñ ô ð *ñ*ð #ð #1°4Ñ"7¸4Ñ!?�J‘Jõ   ¤­Ñ7Ô7ñ \+Ø/1�DÔ& tÑ,Ø,.�I˜d”OÔ)Ø12�I˜d”OÔ.Ø!$�JØ!$�Jå" 2¥|Ñ4Ô4ð /E½ÀBÄIÍtÌyÑ9YÔ9Yð /EÝ  K°Ñ6Ô6ñ/EÝ;EÀbÄlÕTXÔT]Ñ;^Ô;^ñ/Eðð ð ð ð ð õ: 2<¸BÅÑ1MÔ1MÐ$_ B¤I IÐSUÔS_˜	Ý!)¡¤˜Ý$ V°DÐ9Ñ9Ô9×?Ò?Ø%×,Ò,­\¸*Ñ-EÔ-EÑFÔFñô ð ð %+§O¢OÑ$5Ô$5˜	å˜y™>œ>¨D¬NÒ:Ð:Ø(1Ð2B°D´NÐ2BÔ(CÀeÑ(K˜IØ4=˜	 $œÔ1à%)×%9Ò%9Ø% dœOÔ5°yÈ4Ì;ÐW\ÔK]ð &:ñ &ô &˜
õ 69¸±_´_˜	 $œÔ2õ $(¨¬¬Ñ#7Ô#7�Lõ " "¥iÑ0Ô0ð 	LØ35´9¸Q´<˜	 $œÔ0Ð0Ý# B­Ñ5Ô5ð LØ68˜	 $œÔ3Ý $ R×%7Ò%7Ñ%9Ô%9Ñ :Ô :˜ð %×+Ò+¨A¨u°Q¬x¸¬{×/JÒ/JÑ/LÔ/LÑMÔMÐMØ.3ð Lð L™N˜K¨Ø% dœOÔ7×>Ò>¸{ÑKÔKÐKÐKõ .7°|Ñ-DÔ-Dð IIñ IIÑ)˜ 'à7?À1²}°}¨¨È#˜ð  Ô,Ð8Ø9BÀ4ÔCTÔ9UÔ9`ÐcdÑ9d˜I dœOÔ6ð )1¯ª©¬˜Ø%×,Ò,ðð ð ð å47¸¼
ÀGÄNÑ4SÔ4Sðñ ô ñô ð õ -0°´
¸G¼NÑ,KÔ,Kð Oð O™L˜E 5Ø#Ô/ð OÝ+;¸MÈ5Ñ+QÔ+QÐ!Q Ð ^å*:¸=È%Ñ*PÔ*P Ø -× 4Ò 4°f¸hÀwÔ>OÐ5PÑ QÔ QÐ QÐ Qà -× 4Ò 4°e¸XÀe¼_Ð5MÑ NÔ NÐ NÐ Nõ 6OØ#¨mð6ñ 6ô 6Ñ2˜ ¨
õ '7Ø"Ø"Ø&Ø#Ø"&¤+Ø*.Ô*=Ø!%¤Ø'+Ô'7ð	'ñ 	'ô 	'˜ð 48˜Ô0Ø5B˜Ô2ØÔ*¨4Ô0×7Ò7¸ÑDÔDÐDð '2×&CÒ&CØ% }°mÀYñ'ô '˜ð %×+Ò+¨KÑ8Ô8Ð8à*4ð Ið I˜JØ-7ð Ið I 	Ø@H 	¨)Ô 4Ô =Ð =ðIð
 >I×=OÒ=OÑ=QÔ=Qð 8ð 8Ñ9˜E 9¨kØ(¨Bš˜°;À+ÔBZÒ3ZÐ3ZØ .°%Ñ 7 øð # n¸xÈ!º|¸|¸¸ÐQTÑ&UÑU˜
ð $ aš<˜<Ø*¨eÑ3˜Nõ  *¨"­iÑ8Ô8ð I¸XÈº]¸]Ø% dœOÔ1×8Ò8¸È:ÐXYÉ>Ñ9ZÑ[Ô[Ð[Ñ[à% dœOÔ1×8Ò8¸ÑHÔHÐHÑHðSIIðZ &*×%9Ò%9Ø! 9°t´{À4Ô7Hð &:ñ &ô &�Nð "0°$Ñ!6�Jå˜4œ:‘”¨Ñ8¸1Ò<Ð<Ø" dÑ*˜
å 
¨J¸ÅSÑIÔI�	Ø˜zÒ)Ð)Ø!*�JÝ! $¤'­=Ñ9Ô9ð QÝ,/°ÀÑ,PÔ,P�I˜d”OÔ)ùØð <ð <�Ý(+¨J©¬¸!Ñ(;�˜TÔ" 1Ñ%Ð%ñ<ð Ðré   c                 óâ  — d}d|d<   | j         rdnd}| j         rdnd}d}t          | j        ¦  «         dz   x}	}
t          |¦  «        D �]œ\  }}t	          |t
          ¦  «        r|d         | j        vrŒ+|}||         }n1|| j        | j        z   vrŒHt          | j        |¦  «        \  }}}|€|n|}t          d||| j
        | j        ¬	¦  «        }t	          |t          ¦  «        r|n|}t	          |t          ¦  «        s	|�| j        sd
|z   d
z   }||z  }|�t	          |t
          ¦  «        rdn|j        }|dk     rdnd}|                      ||| j        d         |¬¦  «        dz  }||k    r|}t	          |t          ¦  «        r| }	|	|dœ||<   |dxx         dz  cc<   �ŒT| j        r|�| j        r*t	          |t
          ¦  «        r|dxx         dz  cc<   |dz  }|
|z
  }	|	||dœ||<   �Œžd|z   |d<   dS )z6Get all the info for drawing bit/reg names and numbersr   rü   z $|0\rangle$rB  z 0r    Nr  )Úlayouträ   rJ   r*   rï   )Úreg_remove_undergffffffò?)r·   Ú
wire_label)r·   r¨  r[  g333333ó¿rû   )rÈ   rr  r½   rh  rH  r   r¾   r&   r¼   r'   rÄ   rÎ   r   Úsizert  rÁ   )rØ   r*  r,  r-  r%  Úlongest_wire_label_widthÚinitial_qbitÚinitial_cbitÚidxÚposÚy_offÚiiÚwirer[  Úindexr\  r]  r¨  Úinitial_bitÚreg_sizer§  Ú
text_widths                         rç   r  z"MatplotlibDrawer._set_bit_reg_info…  sÍ  € ð $%Ð Ø ˆ	�)ÑØ*.Ô*=ÐE��À2ˆØ#Ô2Ð:�t�t¸ˆàˆÝ˜4œ<Ñ(Ô(Ð(¨1Ñ,Ð,ˆˆeÝ! (Ñ+Ô+ð ?	ñ ?	‰HˆB�å˜$Õ 1Ñ2Ô2ð Eà˜”7 $¤,Ð.Ð.ØØ�Ø  œ��ð ˜tœ|¨d¬lÑ:Ð:Ð:ØÝ1BÀ4Ä=ÐRVÑ1WÔ1WÑ.�˜) YØ%-Ð%5˜	˜	¸9�å'Ø�x ¨t¬|ÈÔHXðñ ô ˆJõ +5°T½5Ñ*AÔ*AÐS˜,˜,À|ˆKõ ˜$¥Ñ&Ô&ð 4¨(Ð*:À$ÔBRÐ*:Ø  :Ñ-°Ñ3�
Ø˜+Ñ%ˆJð Ð%­°DÕ:KÑ)LÔ)LÐ%��ÐRZÔR_ð ð %-¨q¢L L˜q˜q°aÐà×$Ò$Ø 	¨4¬;°tÔ+<ÐO_ð %ñ ô ð ñð ð Ð4Ò4Ð4Ø+5Ð(å˜$¥Ñ&Ô&ð Ø�c�àØ",ð#ð #�˜B‘ð ˜)Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$Ñ$ð Ô(ðàÐ'ØÔ(ð (Ý-7¸Õ>OÑ-PÔ-Pð (ð ˜iÐ(Ð(Ô(¨AÑ-Ð(Ð(Ñ(Ø˜1‘H�Cà˜c‘k�àØ",Ø (ð#ð #�˜B‘‘ð
 !%Ð'?Ñ ?ˆ	�*ÑÐÐré   c	           	      ób  ‡ ‡‡‡‡‡‡‡— d}	‰ j         D �]˜}
|	dz   }g }|
D �]FŠ|�¯d|‰         _        ||         j        |z   dz   |‰         _        |‰         j        dk    rW||         j        d|‰         j        …         D ](}|‰         xj        t          |¦  «        dz   z  c_        Œ)|‰         j        Šn+|‰         j        ||         j        z   Šnd|‰         _        |Šg }‰j        D ]&}|‰ j        v r| 	                    ||         ¦  «         Œ'g }‰j
        D ]w}|‰ j        v rl‰ j        rJt          ||¦  «        }|�| 	                    ||         ¦  «         Œ@| 	                    ||         ¦  «         Œ\| 	                    ||         ¦  «         Œxt          ‰j        t           ¦  «        Šˆˆˆˆˆˆ ˆfd„|D ¦   «         |‰         _        ˆˆˆˆˆˆ ˆfd„|D ¦   «         |‰         _        |€‰d	         }| 	                    ‰‰         d         ¦  «         ‰|‰         _        t          ‰j        t&          ¦  «        r(t)          ‰j        j        d         ¦  «        dk    r|dz  }�ŒHd}‰ j        st/          d
„ |
D ¦   «         ¦  «        rdnd}|rt1          |¦  «        nd}||z   |z   dz
  }	�Œš|	dz   S )zFLoad all the coordinate info needed to place the gates on the drawing.r;   r    NTr   Fc           	      ór   •— g | ]3}‰                      ‰‰|         d          ‰‰         d         ‰‰¦  «        ‘Œ4S ©r·   r   ©Ú_plot_coord)	rL  r°  Úflow_opr%  r.  r‘  r,  rØ   Úx_indexs	     €€€€€€€rç   ú
<listcomp>z0MatplotlibDrawer._get_coords.<locals>.<listcomp>
  ó]   ø€ ð 	(ð 	(ð 	(ð ð ×$Ò$ØØ# Bœ¨Ô,Ø$ TÔ*¨1Ô-Ø!Øñô ð	(ð 	(ð 	(ré   c           	      ór   •— g | ]3}‰                      ‰‰|         d          ‰‰         d         ‰‰¦  «        ‘Œ4S r¸  r¹  )	rL  r°  r-  r»  r%  r.  r‘  rØ   r¼  s	     €€€€€€€rç   r½  z0MatplotlibDrawer._get_coords.<locals>.<listcomp>  r¾  ré   Únext_x_indexc              3   óB   K  — | ]}t          |j        d d¦  «        V — ŒdS ©r?  FN©rl  rj  ©rL  Únds     rç   rN  z/MatplotlibDrawer._get_coords.<locals>.<genexpr>1  ó0   è è € ÐRÐRÀb�g b¤e¨\¸5ÑAÔAÐRÐRÐRÐRÐRÐRré   )r¿   Úinside_flowr¼  rŒ  r  r~  r  rs  r½   r‡  r‹  r¾   rÎ   r%   rH  rj  r
   Úq_xyÚc_xyr   rr  r�  rÂ   Úallr  )rØ   r+  r*  r^  r.  r,  r-  r%  r£  Úprev_x_indexr�  Úcurr_x_indexÚl_widthr  Úq_indxsÚqargÚc_indxsÚcargr[  Úbarrier_offsetÚ
max_lwidthr»  r‘  r¼  s   `   ````             @@@rç   r  zMatplotlibDrawer._get_coordsÑ  s|  øøøøøøøø€ ð ˆØ”[ð U	Jñ U	JˆEØ'¨!Ñ+ˆLØˆGØð H*ñ H*�ð Ð*Ø26�I˜d”OÔ/Ø.7¸Ô.DÔ.LÈ|Ñ.[Ð^_Ñ._�I˜d”OÔ+à  ”Ô/°!Ò3Ð3Ø%.¨{Ô%;Ô%AÐB\ÀIÈdÄOÔD\ÐB\Ô%]ð Fð F˜EØ% dœOÐ3Ô3µs¸5±z´zÀA±~ÑEÐ3Ô3Ð3Ø"+¨D¤/Ô"9˜˜ð #,¨D¤/Ô"9¸IÀkÔ<RÔ<]Ñ"]˜˜à27�I˜d”OÔ/Ø*�Gð �Ø œJð 7ð 7�DØ˜tœ|Ð+Ð+ØŸš x°¤~Ñ6Ô6Ð6øð �Ø œJð 	;ð 	;�DØ˜tœ|Ð+Ð+ØÔ+ð ;Ý'7¸ÀtÑ'LÔ'L˜HØ'Ð3Ø '§¢¨x¸Ô/AÑ BÔ BÐ BÐ Bà '§¢¨x¸¬~Ñ >Ô >Ð >Ð >à#ŸNšN¨8°D¬>Ñ:Ô:Ð:øå$ T¤W­mÑ<Ô<�ð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð &ð	(ñ 	(ô 	(�	˜$”Ô$ð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð &ð	(ñ 	(ô 	(�	˜$”Ô$ð Ð&Ø#,¨^Ô#<�LØ—’˜|¨DÔ1°!Ô4Ñ5Ô5Ð5Ø*1�	˜$”Ô'õ ˜dœg¥|Ñ4Ô4ð *Ý˜4œ7œ>¨"Ô-Ñ.Ô.°!Ò3Ð3Ø$¨Ñ)˜ùð ˆNØÔ&ð õ ÐRÐRÈEÐRÑRÔRÑRÔRÐY�B�BÐXYð ð *1Ð7�˜W™œ˜°aˆJØ'¨*Ñ4°~ÑEÈÑIˆL‰Là˜aÑÐré   c                 óª  — ddl m} |sdS | j                             |¦  «        }d}d}	|r?|                     d¦  «        }
|
                     d¦  «        }|
                     d¦  «        }	 |¦   «                              |                     dd¦  «        ¦  «        }|�|}|r|                     dd|¦  «        }|	r|                     dd|	¦  «        }|r|                     d
d¦  «        }|| j        d         k    rdnd}d}|D ]?}	 || j	        |         |         z  }Œ# t          $ r || j	        d         |         z  }Y Œ<w xY w|dk    r||d         z  }|S )z1Compute the width of a string in the default fontr   )ÚLatexNodes2Textr  r    r›   rš   z$$rB  Nr[   rX   rï   r    rð   )Úpylatexenc.latex2textrÕ  Ú_mathmode_regexÚsearchÚgroupÚcountÚlatex_to_textrv  rÁ   r×   ÚKeyError)rØ   r  r%  rD  rM  r§  rÕ  Úmath_mode_matchÚnum_underscoresÚ
num_caretsÚmath_mode_textr£   Úsum_textr    s                 rç   rt  z MatplotlibDrawer._get_text_width8  s±  € ð 	:Ð9Ð9Ð9Ð9Ð9àð 	Ø�3àÔ.×5Ò5°dÑ;Ô;ˆØˆØˆ
Øð 	3Ø,×2Ò2°1Ñ5Ô5ˆNØ,×2Ò2°3Ñ7Ô7ˆOØ'×-Ò-¨cÑ2Ô2ˆJØˆÑ Ô ×.Ò.¨t¯|ª|¸DÀ"Ñ/EÔ/EÑFÔFˆð Ð'Ø.ˆOØð 	:Ø—<’<  R¨Ñ9Ô9ˆDØð 	5Ø—<’<  R¨Ñ4Ô4ˆDð ð 	*Ø—<’<  SÑ)Ô)ˆDà˜Tœ[¨Ô.Ò.Ð.ˆAˆA°AˆØˆØð 	4ð 	4ˆAð4Ø˜DœO¨AÔ.¨qÔ1Ñ1��øÝð 4ð 4ð 4à˜DœO¨CÔ0°Ô3Ñ3���ð4øøøð �Š6ˆ6Ø˜	Ð"2Ô3Ñ3ˆHØˆs   ÄDÄ D?Ä>D?c                 ó0	  — t          |dz   ¦  «        D �]Æ}|                     ¦   «         D ]’}|d         }	|d         ||d         dz   z  z
  }
| j                             |d         dz
  |
|	ddd	| j        d
         z  | j        d         dt
          ¬¦	  «	         |                      |d         |
g||
gt          ¬¦  «         Œ“i }|                     ¦   «         D ]I}|d         ||d         dz   z  z
  }
|
|vrd|d         |d         dœ||
<   Œ3||
         dxx         dz  cc<   ŒJ|                     ¦   «         D �]S\  }
}| j	        r·|d         �¯| j         
                    |d         dz   |d         dz   g|
dz
  |
dz   g| j        d         t          ¬¦  «         | j                             |d         dz   |
dz   t          |d         j        ¦  «        ddd| j        d
         z  | j        d         dt
          ¬¦	  «	         | j                             |d         dz
  |
|d         ddd	| j        d
         z  | j        d         dt
          ¬¦	  «	         |                      |d         |
g||
g| j        d         | j        d         t          ¬¦  «         �ŒU|dk    o||k    }|dk    }|s|r¶|d         dz
  }| j        |d         z   dz   }| |d         dz   z  }|dz    |d         z  |z
  dz   }|r8| j         
                    ||g||g| j        d         | j        t          ¬¦  «         |r8| j         
                    ||g||g| j        d         | j        t          ¬¦  «         |d                               |d         dz
  | |d         dz   z  d!z   fd"|dz    |d         dz   z  | j        d#         | j        d#         | j        t           ¬$¦  «        }| j                             |¦  «         �ŒÈ| j        d%         r¬t          |¦  «        D ]ž}| j        dk    r1|| j        z  |d         z   d&z   }|| j        z   |d         dz   z  d'z   }n||d         z   d&z   }d'}| j                             ||t          |dz   ¦  «        dd| j        d(         | j        d         dt
          ¬¦	  «	         Œ�dS dS ))zJDraw the register names and numbers, wires, and vertical lines at the endsr    r¨  r·   rü   rû   çš™™™™™É?ÚrightÚcenterg      ô?rï   ÚtcT©ÚhaÚvarD  ró   Úclip_onÚzorder)rë  r[  )Úvalr¨  r[  rì  Nç333333Ó?r²   Úcc)ró   rë  ÚleftÚbottomçš™™™™™é?Úcline)ÚlcÚlsrë  r   g{®Gáz„?ró  ©ró   Ú	linewidthrë  rí   rÿ   g      9Àrñ   ©Úxyr  ÚheightÚfcÚecrö  rë  r²  gö(\�Âõà?r,   rî   )Úranger�  rÇ   r  rÁ   ÚPORDER_TEXTÚ_lineÚPORDER_REGLINEÚitemsrÎ   ÚplotÚstrr©  rÆ   rÐ   Ú	RectangleÚPORDER_MASKÚ	add_patch)rØ   r0  r1  r/  r,  r-  r%  Úfold_numÚqubitÚqubit_labelr·   Úthis_clbit_dictÚclbitÚ
this_clbitÚ
feedline_rÚ
feedline_lÚxpos_lÚxpos_rÚypos1Úypos2ÚboxrŽ  Úx_coordÚy_coords                           rç   r  z!MatplotlibDrawer._draw_regs_wiresf  sÅ  € õ ˜i¨!™mÑ,Ô,ð k	$ñ k	$ˆHà$×+Ò+Ñ-Ô-ð Yð Y�Ø# LÔ1�Ø˜#”J ¨Y°yÔ-AÀAÑ-EÑ!FÑF�Ø”—’Ø˜jÔ)¨CÑ/ØØØØØ! D¤K°Ô$5Ñ5Øœ+ dÔ+Ø Ý&ð ñ 
ô 
ð 
ð —
’
˜I jÔ1°1Ð5¸¸a°yÍ�
ÑXÔXÐXÐXð !ˆOØ$×+Ò+Ñ-Ô-ð 	3ð 	3�Ø˜#”J ¨Y°yÔ-AÀAÑ-EÑ!FÑF�Ø˜OÐ+Ð+à Ø&+¨LÔ&9Ø$)¨*Ô$5ð*ð *�O AÑ&Ð&ð $ AÔ& uÐ-Ð-Ô-°Ñ2Ð-Ð-Ñ-Ð-à!0×!6Ò!6Ñ!8Ô!8ð &ñ &‘��:àÔ#ð ¨
°:Ô(>Ð(JØ”H—M’MØ" :Ô.°Ñ4°iÀ
Ô6KÈcÑ6QÐRØ˜S™ ! c¡'Ð*Ø"œk¨$Ô/Ý-ð	 "ñ ô ð ð ”H—M’MØ! *Ô-°Ñ3Ø˜C™Ý˜J zÔ2Ô7Ñ8Ô8Ø!Ø#Ø!$ t¤{°4Ô'8Ñ!8Ø"œk¨$Ô/Ø $Ý*ð "ñ 
ô 
ð 
ð ”—’Ø˜jÔ)¨CÑ/ØØ˜|Ô,ØØØ! D¤K°Ô$5Ñ5Øœ+ dÔ+Ø Ý&ð ñ 
ô 
ð 
ð —
’
Ø˜zÔ*¨AÐ.Ø˜1�IØ”{ 4Ô(Ø”{ 7Ô+Ý)ð ñ ô ð ñ ð # QšÐ?¨9°xÒ+?ˆJØ! AšˆJØð ˜Zð Ø" :Ô.°Ñ5�Øœ i°
Ô&;Ñ;¸cÑA�Ø!˜	 Y¨yÔ%9¸AÑ%=Ñ>�Ø" Q™,˜¨9°YÔ+?Ñ@À8ÑKÈaÑO�Øð Ø”H—M’MØ Ð(Ø ˜Ø"œk¨$Ô/Ø"&¤.Ý-ð "ñ ô ð ð ð Ø”H—M’MØ Ð(Ø ˜Ø"œk¨$Ô/Ø"&¤.Ý-ð "ñ ô ð ð ˜MÔ*×4Ò4Ø˜jÔ)¨CÑ/°(°¸iÈ	Ô>RÐUVÑ>VÑ1WÐZ]Ñ1]Ð^ØØ! A™�¨)°IÔ*>ÀÑ*BÑCØ”;˜tÔ$Ø”;˜tÔ$Øœ.Ý"ð 5ñ ô ˆCð ŒH×Ò˜sÑ#Ô#Ð#Ñ#ð Œ;�wÔð 	Ý" ;Ñ/Ô/ð ð �	Ø”: ’>�>Ø'¨$¬*Ñ4°yÀÔ7LÑLÈtÑS�GØ )¨T¬ZÑ 7Ð8¸IÀiÔ<PÐSTÑ<TÑUÐX\Ñ\�G�Gà'¨)°JÔ*?Ñ?À$ÑF�GØ"�GØ”—’ØØÝ˜	 A™Ñ&Ô&ØØØ!œ[¨Ô/Øœ+ dÔ+Ø Ý&ð ñ 
ô 
ð 
ð 
ð	ð 	ðð ré   c	                 óâ   — | j                              ¦   «         D ]T}	|	D ]O}
||
j        z  }|
                     ||
j        ||||||
j        ¬¦  «         |
                     ||||||||¦  «         ŒPŒUdS )zKAdd the nodes from ControlFlowOps and their coordinates to the main circuit)r£  N)rÔ   r�  r¿   r  rÖ   rÕ   Ú_add_nodes_and_coords)rØ   rÛ   r+  r*  r^  r.  r,  r-  r%  Úflow_drawersrŸ  s              rç   r  z&MatplotlibDrawer._add_nodes_and_coordsë  s¿   € ð !Ô.×5Ò5Ñ7Ô7ð 	ð 	ˆLØ+ð ð �Ø˜Ô+Ñ+�Ø×'Ò'ØØÔ.Ø!Ø ØØØØ +Ô 8ð (ñ 	ô 	ð 	ð ×1Ò1ØØØØ!Ø ØØØñ	ô 	ð 	ð 	ðð	ð 	ré   c
           
      ó  ‡ ‡‡‡‡‡‡— ‰                       |‰||‰|‰‰¦  «         d}
|D �]W}g }|
dz   }|D �]Š‰j        Š‰                      ‰‰¦  «         |	rt          ‰¦  «         t	          ‰dd¦  «        st          ‰t          ¦  «        r.ˆˆˆˆˆˆˆ fd„‰D ¦   «         }‰                      ‰‰|||‰¦  «         d}t	          ‰dd¦  «        r2t          ‰j	        ¦  «        }|D ]}t          |t          ¦  «        r|} nŒt          ‰t          ¦  «        r‰                      ‰‰|‰¦  «         nát	          ‰dd¦  «        r‰ j        r‰                      ‰‰‰¦  «         n±t          ‰t          ¦  «        r‰                      ‰‰‰¦  «         n„t#          ‰‰         j        ¦  «        dk    r‰j        s‰                      ‰‰‰¦  «         nGt          ‰t*          ¦  «        s|r‰                      ‰‰‰|¦  «         n‰                      ‰‰‰¦  «         ‰‰         j        s!|                     ‰‰         d	         ¦  «         �Œ	d	}‰ j        st5          d
„ |D ¦   «         ¦  «        rdnd	}||rt7          |¦  «        nd	z   |z   dz
  }
�ŒYdS )zDraw the gates in the circuitr;   r    rR  Nc                 ó®   •— g | ]Q}‰                      ‰‰         j        ‰|         d          ‰‰         d         ‰t          ‰t          ¦  «        ¦  «        ‘ŒRS r¸  )rº  r¼  rH  r
   )	rL  r°  r-  r%  r.  r‘  r+  rj  rØ   s	     €€€€€€€rç   r½  z.MatplotlibDrawer._draw_ops.<locals>.<listcomp>9  sn   ø€ ð 	ð 	ð 	ð ð ×(Ò(Ø% dœOÔ3Ø'¨œO¨CÔ0Ø(¨Ô.¨qÔ1Ø%Ý& r­=Ñ9Ô9ñô ð	ð 	ð 	ré   Ú	modifiersr?  Fr   c              3   óB   K  — | ]}t          |j        d d¦  «        V — ŒdS rÂ  rÃ  rÄ  s     rç   rN  z-MatplotlibDrawer._draw_ops.<locals>.<genexpr>p  rÆ  ré   )r  rj  Ú_get_colorsÚprintrl  rH  r   Ú
_conditionr   r  r   r	   Ú_measurerÂ   Ú_barrierr
   Ú_flow_op_gaterr  rÈ  r‹  Ú_gater   Ú_control_gateÚ_multiqubit_gaterÇ  r‡  rÊ  r  )rØ   rÛ   r+  r*  r^  r.  r,  r-  r%  r#  rË  r�  rÍ  rÌ  Úcond_xyÚmod_controlÚcanonical_modifiersÚmodifierrÒ  r‘  rj  s   ` `  ` ``          @@rç   r  zMatplotlibDrawer._draw_ops  s\  øøøøøøø€ ð 	×"Ò"ØØØØØØØØñ		
ô 		
ð 		
ð ˆØð H	`ñ H	`ˆEØˆGØ'¨!Ñ+ˆLð ð ::ñ ::�Ø”W�à× Ò   yÑ1Ô1Ð1àð Ý˜"‘I”I�Iõ ˜2˜{¨DÑ1Ô1ð bµZÀÅLÑ5QÔ5Qð bð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð #.ð	ñ 	ô 	�Gð —O’O D¨)°X¸}ÈgÐW`ÑaÔaÐað #�Ý˜2˜{¨DÑ1Ô1ð "Ý*AÀ"Ä,Ñ*OÔ*OÐ'Ø$7ð "ð "˜Ý% hµÑ@Ô@ð "Ø*2˜KØ!˜Eð"õ
 ˜b¥'Ñ*Ô*ð FØ—M’M $¨	°=À)ÑLÔLÐLÐLõ ˜R ¨uÑ5Ô5ð FØÔ*ð BØŸš d¨I°yÑAÔAÐAøõ   ¥MÑ2Ô2ð FØ×&Ò& t¨Y¸	ÑBÔBÐBÐBõ ˜ 4œÔ-Ñ.Ô.°!Ò3Ð3¸D¼JÐ3Ø—J’J˜t Y°	Ñ:Ô:Ð:Ð:õ   ¥NÑ3Ô3ð F°{ð FØ×&Ò& t¨Y¸	À;ÑOÔOÐOÐOð ×)Ò)¨$°	¸9ÑEÔEÐEð ! ”Ô2ð :Ø—N’N <°Ô#5°aÔ#8Ñ9Ô9Ð9ùð ˆNØÔ&ð õ ÐRÐRÈEÐRÑRÔRÑRÔRÐY�B�BÐXYð ð (¸7Ð+I­3¨w©<¬<¨<ÈÑJÈ^Ñ[Ð^_Ñ_ˆL‰LðQH	`ð H	`ré   c                 ó”  — |j         }t          t          |dd¦  «        dd¦  «        }d}||         j        | j        d         v r| j        d         ||         j                 }n,|j        | j        d         v r| j        d         |j                 }|�6t          |t          ¦  «        r|}| j        d         }n‡|d         }|d         }nv| j        d         dv rM|d	v rI| j        d         |         }t          |t          ¦  «        r|}| j        d         }n+|d         }|d         }n| j        d
         }| j        d         }| j        d         dk    r| j        d         }| j        d         }	n|}|}	|}
|||         _        |||         _        |||         _	        | j        d         ||         _
        |
||         _        |	||         _        dS )z1Get all the colors needed for drawing the circuitr@  NrW  ÚdispcolÚgtr   r    )ÚiqpÚiqxziqp-darkziqx-dark)r¶   ÚdcxÚswapÚgcÚbwrû  ró  ræ  )rj  rl  rn  rÁ   rW  rH  r  rú  rû  r+  ræ  Úscró  )rØ   r‘  r+  rj  Ú	base_nameró   rú  r+  rû  ró  r2  s              rç   r  zMatplotlibDrawer._get_colorst  så  € ð ŒWˆÝ�G B¨°TÑ:Ô:¸FÀDÑIÔIˆ	ØˆØ�TŒ?Ô(¨D¬K¸	Ô,BÐBÐBØ”K 	Ô*¨9°T¬?Ô+HÔIˆEˆEØŒW˜œ IÔ.Ð.Ð.Ø”K 	Ô*¨2¬7Ô3ˆEØÐõ ˜%¥Ñ%Ô%ð Ø�Ø”[ Ô&��à˜1”X�Ø˜1”X��ð Œ[˜Ô Ð$JÐJÐJÈyð ]
ð P
ð P
ð
 ”K 	Ô*¨9Ô5ˆEÝ˜%¥Ñ%Ô%ð Ø�Ø”[ Ô&��à˜1”X�Ø˜1”X��à”˜TÔ"ˆBØ”˜TÔ"ˆBàŒ;�vÔ $Ò&Ð&Ø”˜TÔ"ˆBØ”˜TÔ"ˆBˆBàˆBØˆBàˆØˆ	�$ŒÔØˆ	�$ŒÔØˆ	�$ŒÔØ!œ[¨Ô.ˆ	�$ŒÔØˆ	�$ŒÔØˆ	�$ŒÔÐÐré   c                 ó8
  ‡‡‡— t          |j        t          ¦  «        rƒt          |j        j        t          j        ¦  «        r|j        j        }n^t          |j        j        t          ¦  «        r|j        j        df}n0|j        j        d|j        j        j        z  dz
  f}n|j        j        }d}t          | j
        ¦  «        Šg }	t          |t          j        ¦  «        �r(t          |¦  «        j        }
d}d}t          j        t          ¦  «        }|
D ]+}|t!          ||¦  «                                      |¦  «         Œ,|	                     ˆˆˆfd„|                     dd¦  «        D ¦   «         ¦  «         | j        r$|	                     ˆˆˆfd	„|D ¦   «         ¦  «         nR|	                     ˆˆˆfd
„t*          j                             |                     ¦   «         ¦  «        D ¦   «         ¦  «         dgt          |	¦  «        z  }�nWt3          || j        | j        ¦  «        \  }}|d         }t7          |d         ¦  «        }|dk    o| j        ot          |t8          ¦  «        }| j        sWt          |t8          ¦  «        rBt;          |j        ¦  «        D ],}|	                     ‰‰||                  ‰z
           ¦  «         Œ-nœ| j        rqt          |t          ¦  «        r\t!          ||¦  «        }|�%|	                     ‰‰|         ‰z
           ¦  «         nI|	                     ‰‰|         ‰z
           ¦  «         n$|	                     ‰‰|         ‰z
           ¦  «         g }t=          ||	¦  «        D ]”\  }}|s|dk    r| j        d         n| j        d         }|d                               |tB          dz  || j        d         | j"        tF          ¬¦  «        }| j$         %                    |¦  «         |                     |¦  «         Œ•|sdS tM          ||         j'        d„ ¬¦  «        }tM          |d„ ¬¦  «        }t          |j        tP          tR          t          f¦  «        r|d         |d         dtT          z  dz   z
  f}|\  }}t          |j        tV          ¦  «        r|dz  }| j$         ,                    ||dtT          z  z
  |dd| j        d         | j        d         dtZ          ¬¦	  «	         |  .                    ||| j        d         | j        d         ¬¦  «         dS ) zAdd a conditional to a gater    r*   Fz[expr]Tc              3   ó:   •K  — | ]}‰‰|         ‰z
           V — Œd S rG  rc  ©rL  rT  r%  Úfirst_clbitr*  s     €€€rç   rN  z.MatplotlibDrawer._condition.<locals>.<genexpr>Æ  s1   øè è € ÐdÐdÀS˜G H¨S¤M°KÑ$?Ô@ÐdÐdÐdÐdÐdÐdré   Nrc  c              3   ó:   •K  — | ]}‰‰|         ‰z
           V — Œd S rG  rc  )rL  r[  r%  r7  r*  s     €€€rç   rN  z.MatplotlibDrawer._condition.<locals>.<genexpr>È  s2   øè è € ÐdÐdÈh ¨°Ô(:¸[Ñ(HÔ IÐdÐdÐdÐdÐdÐdré   c              3   ó:   •K  — | ]}‰‰|         ‰z
           V — Œd S rG  rc  r6  s     €€€rç   rN  z.MatplotlibDrawer._condition.<locals>.<genexpr>Ê  sE   øè è € ð  ð  àð ˜H SœM¨KÑ7Ô8ð ð  ð  ð  ð  ð  ré   rc   r   ró  rñ   rí   rV   ©rø  Úradiusrú  rû  rö  rë  c                 ó   — | d         S ©Nr    rc  ©rø  s    rç   ú<lambda>z-MatplotlibDrawer._condition.<locals>.<lambda>ü  s
   € ¸2¸a¼5€ ré   ©Úkeyc                 ó   — | d         S r=  rc  r>  s    rç   r?  z-MatplotlibDrawer._condition.<locals>.<lambda>ý  s
   € ¨b°¬e€ ré   rÿ   gìQ¸…ëÁ?rí  rå  Útoprî   ræ  rç  rî  rò  ©ró  rô  )/rH  rj  r   rx  r   ry  r   r©  rR  rr  r½   r   rÚ   ÚcollectionsÚdefaultdictr€  r%   r‡  ÚextendÚpoprÎ   Ú	itertoolsÚchainÚfrom_iterabler�  r(   r¼   r~  r   rü  rŠ  rÁ   ÚCircleri  rÐ   ÚPORDER_GATErÇ   r  ÚminrÈ  r   r   ÚHIGr	   r  rý  rþ  )rØ   r‘  r+  r*  r^  r%  r%  rR  Úoverride_fcÚcond_posÚcondition_bitsrm  Ú	registersrT  Úval_bitsÚcond_bit_regÚcond_bit_valr­  r[  Úxy_plotÚval_bitrø  rú  r  Úqubit_bÚclbit_bÚxposÚyposr7  s      ` `                      @rç   r  zMatplotlibDrawer._condition¨  sZ  øøø€ õ
 �d”g�|Ñ,Ô,ð 	*Ý˜$œ'œ.­$¬)Ñ4Ô4ð MØ œGœN�	�	Ý˜DœGœN­EÑ2Ô2ð MØ!œWœ^¨QÐ/�	�	à!œWœ^¨Q°4´7´>Ô3FÑ-GÈ!Ñ-KÐL�	�	àœÔ)ˆIàˆÝ˜$œ,Ñ'Ô'ˆØˆå�i¥¤Ñ+Ô+ñ ,	Oõ 1°Ñ;Ô;ÔBˆNØˆEØˆKÝ#Ô/µÑ5Ô5ˆIØ%ð Lð L�ØÕ*¨=¸#Ñ>Ô>Ô?×FÒFÀsÑKÔKÐKÐKà�OŠOÐdÐdÐdÐdÐdÐdÈIÏMÊMÐZ^Ð`bÑLcÔLcÐdÑdÔdÑdÔdÐdØÔð Ø—’ÐdÐdÐdÐdÐdÐdÐZcÐdÑdÔdÑdÔdÐdÐdà—’ð  ð  ð  ð  ð  ð  å(œ×<Ò<¸Y×=MÒ=MÑ=OÔ=OÑPÔPð ñ  ô  ñ ô ð ð �u�s 8™}œ}Ñ,ˆH‰Hå5°iÀÄÐPTÔP`ÑaÔa‰OˆE�8Ø$ Qœ<ˆLÝ˜y¨œ|Ñ,Ô,ˆLà Ò!ð @ØÔ$ð@å˜|Õ->Ñ?Ô?ð ð Ô#ð O­
°<ÕARÑ(SÔ(Sð OÝ  Ô!2Ñ3Ô3ð Xð X�CØ—O’O G¨H°\À#Ô5FÔ,GÈ+Ñ,UÔ$VÑWÔWÐWÐWðXð Ô!ð O¥j°½uÑ&EÔ&Eð OÝ+¨M¸<ÑHÔH�ØÐ'Ø—O’O G¨H°XÔ,>ÀÑ,LÔ$MÑNÔNÐNÐNà—O’O G¨H°\Ô,BÀ[Ñ,PÔ$QÑRÔRÐRÐRà—’ ¨°Ô(>ÀÑ(LÔ MÑNÔNÐNàˆÝ˜x¨Ñ2Ô2ð 	ð 	‰KˆG�RØ&1ÐZ°WÀ²^°^�”˜TÔ"Ð"ÈÌÐUYÔIZˆBØ˜MÔ*×1Ò1ØÝ˜T‘zØØ”;˜tÔ$Øœ.Ý"ð 2ñ ô ˆCð ŒH×Ò˜sÑ#Ô#Ð#Ø�NŠN˜2ÑÔÐÐàð 	ð ˆFå�i ”oÔ*Ð0@Ð0@ÐAÑAÔAˆÝ�gÐ#3Ð#3Ð4Ñ4Ô4ˆõ �d”g¥­+µ|ÐDÑEÔEð 	DØ˜q”z 7¨1¤:°µs±¸TÑ1AÑ#BÐCˆGð ‰
ˆˆdÝ�d”g�wÑ'Ô'ð 	Ø�C‰KˆDØŒ�ŠØØ�3�‘9ÑØØØØ”[ Ô'Ø”+˜dÔ#ØÝð 	ñ 
	
ô 
	
ð 
	
ð 	�
Š
�7˜G¨¬°DÔ(9¸d¼kÈ'Ô>Rˆ
ÑSÔSÐSÐSÐSré   c                 ó®  — ||         j         d         \  }}||         j        d         \  }}t          ||j        d         ¦  «        \  }	}
}|                      |||¦  «         |d                              ||dt          z  z
  ft          dz  t          dz  ddd||         j        | j	        t          ¬¦	  «	        }| j                             |¦  «         | j                             ||dt          z  z   g|dt          z  z
  |d	t          z  z   g||         j        | j	        t          ¬
¦  «         |                      ||         j         d         ||dt          z  z   g| j        d         | j        d         ¬¦  «         |d                              |d	t          z  z
  |dt          z  z   f|d	t          z  z   |dt          z  z   f||dz   ff| j        d         d¬¦  «        }| j                             |¦  «         | j        rX|	�X| j                             |dz   |dz   t)          |¦  «        ddd| j        d         z  | j        d         dt*          ¬¦	  «	         dS dS dS )z1Draw the measure symbol and the line to the clbitr   rí   rV   çffffffæ?é´   F)	rø  r  rù  Útheta1Útheta2Úfillrû  rö  rë  çffffffÖ?rã  rõ  rî  rò  rD  ç{®Gáz¤?N)rú  rû  rY   r²   rï  rð  rñ  rï   ræ  Trç  )rÈ  rÉ  r&   r‹  r"  ÚArcrO  ri  r+  rÑ   rM  rÇ   r  r  rþ  rÁ   ÚPolygonÚ
add_artistrÎ   r  r  rý  )rØ   r‘  r+  r^  r%  ÚqxÚqyÚcxÚcyr[  r›   r]  ÚarcÚ	arrowheads                 rç   r  zMatplotlibDrawer._measure  s„  € à˜4”Ô% aÔ(‰ˆˆBØ˜4”Ô% aÔ(‰ˆˆBÝ!2°=À$Ä*ÈQÄ-Ñ!PÔ!PÑˆ�!�Yð 	�
Š
�4˜ IÑ.Ô.Ð.ð ˜Ô&×*Ò*Ø�B˜¥™‘OÐ$Ý˜‘)Ý˜‘9ØØØØ˜ŒÔ!Ø”mÝð +ñ 

ô 

ˆð 	Œ×Ò˜3ÑÔÐØŒ�ŠØ��d�S‘j‘Ð!Ø�$�‘*‰_˜b 4­#¡:™oÐ.Ø˜D”/Ô$Ø”mÝð 	ñ 	
ô 	
ð 	
ð 	�
Š
Ø�dŒOÔ  Ô#Ø��d�S‘j‘Ð!ØŒ{˜4Ô ØŒ{˜7Ô#ð	 	ñ 	
ô 	
ð 	
ð ˜mÔ,×4Ò4à�d�S‘j‘ " t­c¡z¡/Ð2Ø�d�S‘j‘ " t­c¡z¡/Ð2Ø�R˜$‘Y�ðð
 Œ{˜4Ô Øð 5ñ 
ô 
ˆ	ð 	Œ×Ò˜IÑ&Ô&Ð&àÔð 	 Ð 4ØŒH�MŠMØ�T‘	Ø�S‘Ý�I‘”ØØØ˜tœ{¨4Ô0Ñ0Ø”k $Ô'ØÝ"ð ñ 
ô 
ð 
ð 
ð 
ð	ð 	Ð 4Ð 4ré   c                 ó®  — t          ||         j        ¦  «        D �]8\  }}|\  }}|dk    r|j        j        �d}nd}| j                             ||g|dz   |z   |dz
  g| j        d| j        d         t          ¬¦  «         |d	          	                    |d
t          z  z
  |dz
  fdt          z  d|z   | j        d         dd| j        t          ¬¦  «        }	| j                             |	¦  «         |dk    ra|j        j        �U|dt          z  z   }
| j                             ||
|j        j        dd| j        d         ||         j        dt          ¬¦	  «	         �Œ:dS )zDraw a barrierr   NgffffffÖ¿r  rÿ   Údashedró  )rö  Ú	linestyleró   rë  rí   rí  g333333ã?r:   Úbc)rø  r  rù  rú  rû  Úalpharö  rë  r,   rå  rC  rï   Trç  )rh  rÈ  rj  rm  rÇ   r  rÏ   rÁ   rý  r  ri  rÐ   ÚPORDER_BARRIERr  rO  r  ræ  )rØ   r‘  r+  r%  r¦   rø  r[  r\  Úypos_adjr  Údir_yposs              rç   r   zMatplotlibDrawer._barrierQ  s„  € å˜y¨œÔ3Ñ4Ô4ð (	ñ (	‰EˆAˆrØ‰JˆD�$à�AŠvˆv˜$œ'œ-Ð3Ø ��à�ØŒH�MŠMØ�t�Ø˜‘˜hÑ&¨¨s©
Ð3Øœ-Ø"Ø”k $Ô'Ý"ð ñ ô ð ð ˜MÔ*×4Ò4Ø˜C¥#™IÑ&¨¨s©
Ð3Ø�C‘iØ˜X‘~Ø”;˜tÔ$ØØØœ.Ý%ð 5ñ 	ô 	ˆCð ŒH×Ò˜sÑ#Ô#Ð#ð �AŠvˆv˜$œ'œ-Ð3Ø $­¡*Ñ,�Ø”—’ØØØ”G”MØØØ!œ[¨Ô.Ø# Dœ/Ô,Ø Ý&ð ñ 
ô 
ð 
ùð=(	ð (	ré   c                 óò  — |€||         j         d         }|\  }}t          ||         j        t          ¦  «        }|d                              |d|z  z
  |dt
          z  z
  f|t
          ||         j        ||         j        | j        t          ¬¦  «        }| j
                             |¦  «         ||         j        r»|}	||         j        ra|dt
          z  z   }	| j
                             ||dt
          z  z
  ||         j        dd| j        d	         ||         j        d
t"          ¬¦	  «	         | j
                             ||	||         j        dd| j        d         ||         j        d
t"          ¬¦	  «	         dS dS )zDraw a 1-qubit gateNr   rí   rÿ   r÷  rV   rí  rå  rî   Trç  rï   )rÈ  r  r  ri  r  rO  rú  rû  rÐ   rM  rÇ   r  ro  rq  r  rÁ   r2  rý  r+  )
rØ   r‘  r+  r%  rø  r[  r\  Úwidr  Ú	gate_yposs
             rç   r"  zMatplotlibDrawer._gate}  s”  € àˆ:Ø˜4”Ô% aÔ(ˆBØ‰
ˆˆdÝ�)˜D”/Ô'­Ñ-Ô-ˆà˜Ô&×0Ò0Ø�s˜S‘yÑ  $¨­s©Ñ"2Ð3ØÝØ˜ŒÔ!Ø˜ŒÔ!Ø”nÝð 1ñ 
ô 
ˆð 	Œ×Ò˜3ÑÔÐà�TŒ?Ô$ð 	ØˆIØ˜ŒÔ)ð Ø  4­#¡:Ñ-�	Ø”—’ØØ˜3¥™9Ñ$Ø˜d”OÔ.ØØØ!œ[¨Ô/Ø# Dœ/Ô,Ø Ý&ð ñ 
ô 
ð 
ð ŒH�MŠMØØØ˜$”Ô)ØØØœ TÔ*Ø ”oÔ(ØÝ"ð ñ 
ô 
ð 
ð 
ð 
ð	ð 	ré   c                 ó   — |j         }|€||         j        }t          |t          ¦  «        r%|                      |||||         j        ¦  «         dS t          |t          ¦  «        r|                      ||t          |¦  «         dS ||         j        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }	|rBt          d„ |D ¦   «         ¦  «        }
t          d„ |D ¦   «         ¦  «        }t          ||¦  «        }t          ||         j        dz   t          ¦  «        }t          |¦  «        t          |	¦  «        z
  }t          |z   }|d                              |d	|z  z
  |d	t          z  z
  f||||         j        ||         j        | j        t&          ¬
¦  «        }| j                             |¦  «         t-          d„ |D ¦   «         ¦  «        D ]Y\  }}| j                             |dz   d	|z  z
  |t1          |¦  «        dd| j        d         ||         j        dt6          ¬¦	  «	         ŒZ|rst-          d„ |D ¦   «         ¦  «        D ]Y\  }}| j                             |
dz   d	|z  z
  |t1          |¦  «        dd| j        d         ||         j        dt6          ¬¦	  «	         ŒZ||         j        r½|d	|z  z   }||         j        rZ|d|z  z   }| j                             |dz   |d|z  z   ||         j        dd| j        d         ||         j        dt6          ¬¦	  «	         | j                             |dz   |||         j        dd| j        d         ||         j        dt6          ¬¦	  «	         dS dS )z(Draw a gate covering more than one qubitNc              3   ó&   K  — | ]}|d          V — ŒdS ©r   Nrc  ©rL  r¶   s     rç   rN  z4MatplotlibDrawer._multiqubit_gate.<locals>.<genexpr>»  ó&   è è € Ð$Ð$˜A�1�Q”4Ð$Ð$Ð$Ð$Ð$Ð$ré   c              3   ó&   K  — | ]}|d          V — ŒdS ©r    Nrc  ©rL  r·   s     rç   rN  z4MatplotlibDrawer._multiqubit_gate.<locals>.<genexpr>¼  r}  ré   c              3   ó&   K  — | ]}|d          V — ŒdS r  rc  r€  s     rç   rN  z4MatplotlibDrawer._multiqubit_gate.<locals>.<genexpr>½  ó&   è è € Ð(Ð( �q˜”tÐ(Ð(Ð(Ð(Ð(Ð(ré   c              3   ó&   K  — | ]}|d          V — ŒdS r{  rc  r|  s     rç   rN  z4MatplotlibDrawer._multiqubit_gate.<locals>.<genexpr>¿  ó&   è è € Ð+Ð+ ˜˜!œÐ+Ð+Ð+Ð+Ð+Ð+ré   c              3   ó&   K  — | ]}|d          V — ŒdS r  rc  r€  s     rç   rN  z4MatplotlibDrawer._multiqubit_gate.<locals>.<genexpr>À  r„  ré   rg  rí   rÿ   r÷  c                 ó   — g | ]
}|d          ‘ŒS ©r    rc  r|  s     rç   r½  z5MatplotlibDrawer._multiqubit_gate.<locals>.<listcomp>Ó  s   € Ð 2Ð 2Ð 2¨!  1¤Ð 2Ð 2Ð 2ré   gìQ¸…ë±?rï  rå  rï   Trç  c                 ó   — g | ]
}|d          ‘ŒS r‡  rc  r|  s     rç   r½  z5MatplotlibDrawer._multiqubit_gate.<locals>.<listcomp>á  s   € Ð$8Ð$8Ð$8¨a Q q¤TÐ$8Ð$8Ð$8ré   rý   ç)\�Âõ(¼?rã  rî   )rj  rÈ  rH  r   Ú_swapró  r   Ú_symmetric_gaterÉ  rN  r  r  ri  ÚabsrO  r  rú  rû  rÐ   rM  rÇ   r  rh  r  r  rÁ   r+  rý  ro  rq  r2  )rØ   r‘  r+  r%  rø  rj  rÉ  r[  r\  Úypos_maxÚcxposÚcyposrw  Ú
qubit_spanrù  r  rT  r·   rx  s                      rç   r$  z!MatplotlibDrawer._multiqubit_gateª  sü  € àŒWˆØˆ:Ø˜4”Ô%ˆBõ �b�(Ñ#Ô#ð 	Ø�JŠJ�r˜4 ¨I°d¬OÔ,>Ñ?Ô?Ð?ØˆFõ ˜�GÑ$Ô$ð 	Ø× Ò   yµ'¸9ÑEÔEÐEØˆFà˜ŒÔ#ˆÝÐ$Ð$ Ð$Ñ$Ô$Ñ$Ô$ˆÝÐ$Ð$ Ð$Ñ$Ô$Ñ$Ô$ˆÝÐ(Ð( RÐ(Ñ(Ô(Ñ(Ô(ˆØð 	$ÝÐ+Ð+ dÐ+Ñ+Ô+Ñ+Ô+ˆEÝÐ+Ð+ dÐ+Ñ+Ô+Ñ+Ô+ˆEÝ�t˜UÑ#Ô#ˆDå�)˜D”/Ô'¨$Ñ.µÑ4Ô4ˆÝ˜‘Y”Y¥ X¡¤Ñ.ˆ
Ý�zÑ!ˆà˜Ô&×0Ò0Ø�s˜S‘yÑ  $¨­s©Ñ"2Ð3ØØØ˜ŒÔ!Ø˜ŒÔ!Ø”nÝð 1ñ 
ô 
ˆð 	Œ×Ò˜3ÑÔÐõ  Ð 2Ð 2¨rÐ 2Ñ 2Ô 2Ñ3Ô3ð 	ð 	‰FˆC�ØŒH�MŠMØ�t‘˜c C™iÑ'ØÝ�C‘”ØØØœ TÔ*Ø ”oÔ(ØÝ"ð ñ 
ô 
ð 
ð 
ð ð 	å#Ð$8Ð$8°4Ð$8Ñ$8Ô$8Ñ9Ô9ð ð ‘��QØ”—’Ø˜D‘L 3¨¡9Ñ,ØÝ˜‘H”HØØØ!œ[¨Ô.Ø# Dœ/Ô,Ø Ý&ð ñ 
ô 
ð 
ð 
ð �TŒ?Ô$ð 	Ø˜s ZÑ/Ñ/ˆIØ˜ŒÔ)ð Ø  3¨¡<Ñ/�	Ø”—’Ø˜4‘KØ˜3 ™<Ñ'Ø˜d”OÔ.ØØØ!œ[¨Ô/Ø# Dœ/Ô,Ø Ý&ð ñ 
ô 
ð 
ð ŒH�MŠMØ�t‘ØØ˜$”Ô)ØØØœ TÔ*Ø ”oÔ(ØÝ"ð ñ 
ô 
ð 
ð 
ð 
ð	ð 	ré   c                 ó˜  — ||         j         }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }||         j        d         t          z   }|}	||         j        dd…         D ]}
|
dk    r|	|
t          z   dz   z  }	Œt          |¦  «        t          |¦  «        z
  }t          |z   }| j        d	         d
         d         | j        d	         d         d         | j        d	         d         d         | j        d         g}d}||	z   }|dk    �r™|| j        z  }||d         dz   z  }| j        dk    r||	z   |z
  nd}t          |j
        t          ¦  «        rd}nct          |j
        t          ¦  «        rd}nFt          |j
        t          ¦  «        rd}n)t          |j
        t          ¦  «        rd}n|j
        j        }t          |j
        t          ¦  «        r,d}d}t!          |j
        j        d         ¦  «        dk    rdnd}nd}d}d}|d                              ||z
  |dt          z  z
  |z
  f|	|z   |dd|||         j        dz           | j        t*          ¬¦  «        }| j                             |¦  «         | j                             ||z
  |z
  |dz   |z
  |dd| j        d          ||         j        d!t*          ¬"¦	  «	         | j                             ||z
  |z   |dz   |z
  d#z
  ||         j        dd| j        d$         ||         j        d!t*          ¬"¦	  «	         t          |j
        t          ¦  «        �r t7          ||         j        ¦  «        }d%|v rd&|d'd…         z   d(z   }nkt7          ||         j        ¦  «        dd…                              d)¦  «        dd*…         }t!          |¦  «        dk    rd+|d<   d)                     |¦  «        › }t!          |j        ¦  «        dk    rdnd}| j                             ||z
  dz
  ||z
  |z
  |dd| j        d$         ||         j        d!t*          ¬"¦	  «	         t          |j
        t          ¦  «        rd,nd-}|}tA          ||         j        dd…         ¦  «        D �] \  }}
|
dk    �r| j         !                    ||z   dz   |z
  ||z   dz   |z
  g|dt          z  z
  dz
  |z
  ||z   d.z
  |z
  g|||         j        dz           d/d0t*          ¬1¦  «         | j                             ||z   d#z   |z
  |dz   |z
  |dd| j        d          ||         j        d!t*          ¬"¦	  «	         t          |j
        t          ¦  «        �r:||         j"        |         }t!          t7          |¦  «        ¦  «        dk    rt7          |¦  «        d         }nˆd2t7          |¦  «        v rd2}ntt7          |¦  «        dd…          #                    d3d4¦  «                             d)¦  «        dd*…         }t!          |¦  «        dk    rd+|d<   d5                     |¦  «        › }t!          |j        ¦  «        dk    rdnd}| j                             ||z   d#z   |z
  ||z
  |z
  |dd| j        d$         ||         j        d!t*          ¬"¦	  «	         ||
dz   z  }�Œ"|dz  }|dk    �°—dS dS )6z"Draw the box for a flow op circuitc              3   ó&   K  — | ]}|d          V — ŒdS r{  rc  r|  s     rç   rN  z1MatplotlibDrawer._flow_op_gate.<locals>.<genexpr>  r}  ré   c              3   ó&   K  — | ]}|d          V — ŒdS r  rc  r€  s     rç   rN  z1MatplotlibDrawer._flow_op_gate.<locals>.<genexpr>  r}  ré   c              3   ó&   K  — | ]}|d          V — ŒdS r  rc  r€  s     rç   rN  z1MatplotlibDrawer._flow_op_gate.<locals>.<genexpr>  r‚  ré   r   r    Nr  rí  r*  r¥   r³   r¶   rî  rü   z  Ifz Whilez ForÚSwitchrd  r;   rQ  g{®Gáz”?rí   rÿ   zround, pad=0.1Únoner.   )rø  r  rù  Úboxstylerú  rû  rö  rë  rã  rï  rå  rï   Trç  rý   rî   rü  zr(r/   rT   rZ   é   ra  ÚElseÚCaseg)\�Âõ(Ì?r>   Úsolid©ró   rö  rp  rë  Údefaultr@   rB  z, )$rÈ  rN  r  r  ri  rŒ  rO  rÁ   rÆ   rH  rj  r   r   r   r   rW  rr  r�  ÚFancyBboxPatchrw  rÒ   ÚPORDER_FLOWrÇ   r  r  ræ  r}  r  r‚  ÚsplitÚjoinrs  rh  r  rƒ  rv  )rØ   r‘  r+  r%  rø  r[  r\  r�  Úif_widthr¤  Úewidthr�  rù  ÚcolorsÚ
fold_levelÚend_xÚx_shiftÚy_shiftÚ	flow_textÚ	op_spacerÚexpr_spacerÚempty_default_spacerr  Úidx_setÚy_spacerÚelse_case_textÚewidth_incrrŒ  Újump_valÚ	jump_texts                                 rç   r!  zMatplotlibDrawer._flow_op_gate  s{  € à�tŒ_Ô!ˆÝÐ$Ð$ Ð$Ñ$Ô$Ñ$Ô$ˆÝÐ$Ð$ Ð$Ñ$Ô$Ñ$Ô$ˆÝÐ(Ð( RÐ(Ñ(Ô(Ñ(Ô(ˆà˜T”?Ô(¨Ô+­cÑ1ˆØˆ	à ”oÔ+¨A¨B¨BÔ/ð 	0ð 	0ˆFØ˜Š|ˆ|Ø˜V¥c™\¨CÑ/Ñ/�	øå˜‘Y”Y¥ X¡¤Ñ.ˆ
Ý�zÑ!ˆð
 ŒK˜	Ô" 3Ô'¨Ô*ØŒK˜	Ô" 3Ô'¨Ô*ØŒK˜	Ô" 3Ô'¨Ô*ØŒK˜Ôð	
ˆð ˆ
Ø�yÑ ˆà�cŠk‰kØ  4¤:Ñ-ˆGØ  I¨iÔ$8¸1Ñ$<Ñ=ˆGØ26´*¸q².°.�D˜9Ñ$ wÑ.Ð.ÀcˆEå˜$œ'¥8Ñ,Ô,ð 	)Ø"�	�	Ý˜DœG¥[Ñ1Ô1ð )Ø$�	�	Ý˜DœG¥YÑ/Ô/ð )Ø"�	�	Ý˜DœG¥\Ñ2Ô2ð )Ø$�	�	à œGœL�	õ ˜$œ'¥<Ñ0Ô0ð +Ø �	Ø!�Ý.1°$´'´.ÀÔ2DÑ.EÔ.EÈÒ.JÐ.J s sÐPSÐ$Ð$à �	Ø"�Ø'*Ð$ð ˜MÔ*×9Ò9Ø˜7‘N D¨3µ©9Ñ$4°wÑ$>Ð?ØÐ"6Ñ6ØØ)ØØ˜) Dœ/Ô4°qÑ8Ô9Øœ-Ý"ð :ñ 	ô 	ˆCð ŒH×Ò˜sÑ#Ô#Ð#ð ŒH�MŠMØ�w‘ Ñ*Ø˜3‘ Ñ(ØØØØœ TÔ*Ø ”oÔ(ØÝ"ð ñ 
ô 
ð 
ð ŒH�MŠMØ�w‘ Ñ,Ø˜3‘ Ñ(¨3Ñ.Ø˜$”Ô)ØØØœ UÔ+Ø ”oÔ(ØÝ"ð ñ 
ô 
ð 
õ ˜$œ'¥9Ñ-Ô-ñ Ý˜i¨œoÔ6Ñ7Ô7�ð ˜gÐ%Ð%Ø" W¨Q¨r¨T¤]Ñ2°SÑ8�G�Gõ " )¨D¤/Ô":Ñ;Ô;¸A¸b¸DÔA×GÒGÈÑLÔLÈRÈaÈRÔP�GÝ˜7‘|”| aÒ'Ð'Ø%*˜ ™
Ø!$§¢¨'Ñ!2Ô!2Ð4�GÝ"% d¤j¡/¤/°QÒ"6Ð"6˜3˜3¸C�Ø”—’Ø˜7‘N TÑ)Ø˜xÑ'¨'Ñ1ØØØØ!œ[¨Ô/Ø# Dœ/Ô,Ø Ý&ð ñ 
ô 
ð 
õ (2°$´'½8Ñ'DÔ'DÐP˜V˜VÈ&ˆNØ"ˆKÝ$-¨i¸¬oÔ.CÀAÀBÀBÔ.GÑ$HÔ$Hð .*ñ .*Ñ �˜&Ø˜C’<‘<Ø”H—M’MØ Ñ+¨cÑ1°GÑ;¸TÀKÑ=OÐRUÑ=UÐX_Ñ=_Ð`Ø ¥c¡	Ñ)¨DÑ0°7Ñ:¸DÀ6¹MÈDÑ<PÐSZÑ<ZÐ[Ø$ Y¨t¤_Ô%?À!Ñ%CÔDØ"%Ø")Ý*ð "ñ ô ð ð ”H—M’MØ˜{Ñ*¨SÑ0°7Ñ:Ø  3™¨Ñ0Ø&Ø!Ø#Ø!%¤¨TÔ!2Ø'¨œoÔ0Ø $Ý*ð "ñ 
ô 
ð 
õ " $¤'­<Ñ8Ô8ñ Ø#,¨T¤?Ô#>¸xÔ#H˜å�s 8™}œ}Ñ-Ô-°Ò2Ð2Ý(+¨H©¬°aÔ(8˜I˜IØ&­#¨h©-¬-Ð7Ð7Ø(1˜I˜Iõ ),¨H©¬°a¸°dÔ(;×(CÒ(CÀCÈÑ(LÔ(L×(RÒ(RÐSVÑ(WÔ(WÐXZÐYZÐXZÔ([˜IÝ" 9™~œ~°Ò1Ð1Ø/4 	¨!¡Ø+/¯9ª9°YÑ+?Ô+?Ð(A˜IÝ*-¨d¬j©/¬/¸QÒ*>Ð*> 3 3ÀC˜ØœŸšØ  ;Ñ.°Ñ4°wÑ>Ø$ xÑ/°'Ñ9Ø%Ø%Ø'Ø%)¤[°Ô%7Ø"+¨D¤/Ô"4Ø$(Ý#.ð &ñ 
ô 
ð 
ð ˜v¨™zÑ)�‘à˜!‰OˆJðY �cŠk‰kˆkˆkˆkˆkré   c           
      óˆ  — |j         }||         j        }t          |dd¦  «        }t          |d„ ¬¦  «        }t	          |d„ ¬¦  «        }	|r|j        n|j        }
t          |¦  «        |
z
  }|r|j        n|j        }|                      ||
||||         j	        ||         j
        ||         j        |j        ¬¦  «         |                      ||	||         j        ¬¦  «         t          |t           ¦  «        s(t          |t"          t$          t&          t           f¦  «        r|                      ||||¦  «         dS |dk    rst          |t*          ¦  «        r^| j        d	         d
         }t          |t.          ¦  «        r|n|d         }|                      ||
         |||         j	        |¬¦  «         dS |dk    r(|                      |||||
d…         d         ¦  «         dS t          |t4          ¦  «        r-|                      ||
d…         ||||         j        ¦  «         dS |                      |||||
d…         ¦  «         dS )zDraw a controlled gater@  Nc                 ó   — | d         S r=  rc  r>  s    rç   r?  z0MatplotlibDrawer._control_gate.<locals>.<lambda>¹  ó
   € ¨¨A¬€ ré   r@  c                 ó   — | d         S r=  rc  r>  s    rç   r?  z0MatplotlibDrawer._control_gate.<locals>.<lambda>º  rµ  ré   )rû  ræ  r  rs  ©ró  r    r*  rx  r   )rû  Úac)rj  rÈ  rl  rN  r  r>  rr  Ú
ctrl_stateÚ_set_ctrl_bitsrû  ræ  rp  rs  rþ  ró  rH  r   r   r   r   r‹  r   rÁ   r  Ú_x_tgt_qubitr"  r   rŠ  r$  )rØ   r‘  r+  r%  r&  rj  rø  r’  rY  Úqubit_tr>  Ú	num_qargsr¹  Ú	tgt_colorÚtgts                  rç   r#  zMatplotlibDrawer._control_gate´  sc  € àŒWˆØ�tŒ_Ô!ˆÝ˜B ¨TÑ2Ô2ˆ	Ý�bÐ.Ð.Ð/Ñ/Ô/ˆÝ�bÐ.Ð.Ð/Ñ/Ô/ˆØ9DÐ\˜+Ô5Ð5È"ÔJ\ˆÝ˜‘G”G˜oÑ-ˆ	Ø/:ÐM�[Ô+Ð+ÀÄˆ
Ø×ÒØØØØØ˜ŒÔ!Ø˜ŒÔ!Ø˜4”Ô*Ø”*ð 	ñ 		
ô 		
ð 		
ð 	�
Š
�7˜G¨	°$¬Ô(:ˆ
Ñ;Ô;Ð;å�b�'Ñ"Ô"ð 	T¥j°½VÅYÕPUÕW^Ð<_Ñ&`Ô&`ð 	TØ× Ò   y°)¸YÑGÔGÐGÐGÐGà˜!Š^ˆ^¥
¨9µeÑ <Ô <ˆ^Øœ IÔ.¨xÔ8ˆIÝ)¨)µSÑ9Ô9ÐK�)�)¸yÈ¼|ˆCØ×Ò˜b Ô1°9ÀÈ4ÄÔASÐX[ÐÑ\Ô\Ð\Ð\Ð\à˜!Š^ˆ^Ø�JŠJ�t˜Y¨	°2°oÐ6FÐ6FÔ3GÈÔ3JÑKÔKÐKÐKÐKå˜	¥8Ñ,Ô,ð 	TØ�JŠJ�r˜/Ð*Ð*Ô+¨T°9¸iÈ¼oÔ>PÑQÔQÐQÐQÐQð ×!Ò! $¨	°9¸bÀÐAQÐAQÔ>RÑSÔSÐSÐSÐSré   rB  c	           
      óÜ  ‡ — |rSˆ fd„|D ¦   «         }	|	d|…         }
|	|d…         }t          |
¦  «        }t          |
¦  «        }t          |¦  «        |k    }|d›                     |d¦  «        ddd…         }t          |¦  «        D ]d}||         dk    r|n‰ j        d         }d}|r!|r|	|         |k    rd}n|s|	|         |k    rd	}‰                      ||         ||||||¬
¦  «         ŒedS )zGDetermine which qubits are controls and whether they are open or closedc                 óN   •— g | ]!}‰j                              |¦  «        j        ‘Œ"S rc  )r¼   Úfind_bitr²  )rL  r  rØ   s     €rç   r½  z3MatplotlibDrawer._set_ctrl_bits.<locals>.<listcomp>á  s,   ø€ ÐLÐLÐL¸U�T”]×+Ò+¨EÑ2Ô2Ô8ÐLÐLÐLré   NrŸ   rb   r;   rc   rñ   TF)rú  rû  ræ  r  Útext_top)r  rN  Úrjustrü  rÁ   Ú_ctrl_qubit)rØ   r¹  r>  Úqbitr%  rû  ræ  r  rs  ÚqlistÚctbitsrÙ   Ú	max_ctbitÚ	min_ctbitrC  Úcstater¦   Úfc_open_closerÃ  s   `                  rç   rº  zMatplotlibDrawer._set_ctrl_bitsÛ  sN  ø€ ð
 ð 	*ØLÐLÐLÐLÀeÐLÑLÔLˆEØÐ+˜OÐ+Ô,ˆFØ˜?Ð+Ð+Ô,ˆFÝ˜F™œˆIÝ˜F™œˆIÝ�f‘+”+ 	Ò)ˆCð Ð"Ð"×(Ò(¨¸#Ñ>Ô>¸t¸tÀ¸tÔDˆÝ�Ñ'Ô'ð 
	ð 
	ˆAØ"(¨¤)¨sÒ"2Ð"2˜B˜B¸¼ÀDÔ8IˆMØˆHØð %Øð %˜5 œ8 yÒ0Ð0Ø#�H�HØð %  q¤¨YÒ!6Ð!6Ø$�HØ×ÒØ�Q”˜ }¸ÀÈÐX`ð ñ ô ð ð ð
	ð 
	ré   c                 óÞ  — |\  }}	|d                               ||	ft          dz  ||| j        t          ¬¦  «        }
| j                             |
¦  «         d}|�A|                     d¦  «        }|                     d¦  «        st          |¦  «        D ]}|dz  }Œ|€dS |r|	|t          z  z   n|	dt          z  z
  }| j         
                    |||d	d
| j        d         |dt          ¬¦	  «	         dS )zFDraw a control circle and if top or bottom control, draw control labelrí   rV   r:  r^  Nú
z(cal)
rí  rå  rC  rî   Trç  )rL  ri  rÐ   rM  rÇ   r  rÚ  Úendswithrü  rO  r  rÁ   rý  )rØ   rø  r%  rú  rû  ræ  r  rÃ  r[  r\  r  Úlabel_paddingÚ
text_linesr›   Ú	ctrl_yposs                  rç   rÅ  zMatplotlibDrawer._ctrl_qubitö  s+  € à‰
ˆˆdØ˜Ô&×-Ò-Ø�dˆ|Ý˜‘:ØØØ”nÝð .ñ 
ô 
ˆð 	Œ×Ò˜3ÑÔÐð ˆØÐØŸš DÑ)Ô)ˆJØ—=’= Ñ+Ô+ð )Ý˜zÑ*Ô*ð )ð )�AØ! SÑ(�M�MàÐØˆFð 3;ÐP�D˜=­3Ñ.Ñ.Ð.ÀÀsÍSÁyÑ@Pˆ	ØŒ�ŠØØØØØØ”[ Ô'ØØÝð 	ñ 
	
ô 
	
ð 
	
ð 
	
ð 
	
ré   c                 óª  — | j         }|\  }}|d                              ||ft          dz  |||t          ¬¦  «        }| j                             |¦  «         | j                             ||g|dt          z  z
  |dt          z  z   g||t          ¬¦  «         | j                             |dt          z  z
  |dt          z  z   g||g||t          ¬¦  «         dS )zDraw the cnot target symbolrí   rc  r:  rã  rõ  N)rÑ   rL  rO  rM  rÇ   r  r  ÚPORDER_GATE_PLUS)	rØ   rø  r%  rû  r¸  rö  r[  r\  r  s	            rç   r»  zMatplotlibDrawer._x_tgt_qubit  sÿ   € à”Mˆ	Ø‰
ˆˆdØ˜Ô&×-Ò-Ø�dˆ|Ý˜‘:ØØØÝð .ñ 
ô 
ˆð 	Œ×Ò˜3ÑÔÐð 	Œ�ŠØ�4ˆLØ�C�#‘IÑ˜t c­C¡iÑ/Ð0ØØÝ#ð 	ñ 	
ô 	
ð 	
ð 	Œ�ŠØ�C�#‘IÑ˜t c­C¡iÑ/Ð0Ø�4ˆLØØÝ#ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ré   c           
      ó  — |j         }||         j        }t          |d„ ¬¦  «        }t          |d„ ¬¦  «        }t	          |dd¦  «        }||         j        }	||         j        }
||         j        }t          |t          ¦  «        s\t          |t          ¦  «        rG|j
        }|                      |d         ||	|	|
¬¦  «         |                      |||t          ¬¦  «         dS t          |t          ¦  «        s"t          |t          t           t          f¦  «        ræt          |t          ¦  «        rd	n|j
        }t          |t           ¦  «        rd
n||         j        }|                      ||         ||	|	|
¬¦  «         t          |t          t           f¦  «        s#|                      ||dz            ||	|	|
¬¦  «         |                      ||||
|› d||         j        › d�¬¦  «         |                      |||¬¦  «         dS dS )z-Draw symmetric gates for cz, cu1, cp, and rzzc                 ó   — | d         S r=  rc  r>  s    rç   r?  z2MatplotlibDrawer._symmetric_gate.<locals>.<lambda>>  rµ  ré   r@  c                 ó   — | d         S r=  rc  r>  s    rç   r?  z2MatplotlibDrawer._symmetric_gate.<locals>.<lambda>?  rµ  ré   r@  Nr;   )rú  rû  ræ  )ró  rë  r   r‰   r    z (rT   )ræ  r  r·  )rj  rÈ  rN  r  rl  rû  ræ  ró  rH  r   r>  rÅ  rþ  ÚPORDER_LINE_PLUSr   r   r   ro  Ú	_sidetextrq  )rØ   r‘  r+  r’  r%  rj  rø  rY  r¼  rû  ræ  ró  r>  ro  s                 rç   r‹  z MatplotlibDrawer._symmetric_gate:  s   € àŒWˆØ�tŒ_Ô!ˆÝ�bÐ.Ð.Ð/Ñ/Ô/ˆÝ�bÐ.Ð.Ð/Ñ/Ô/ˆÝ˜B ¨TÑ2Ô2ˆ	Ø�tŒ_ÔˆØ�tŒ_ÔˆØ�tŒ_Ôˆõ ˜"�eÑ$Ô$ð 	0­°I½uÑ)EÔ)Eð 	0Ø Ô0ˆOØ×Ò˜R œV Y°2¸"ÀÐÑDÔDÐDØ�JŠJ�w ¨BÕ7GˆJÑHÔHÐHÐHÐHõ ˜�GÑ$Ô$ð 	0­
°9½vÅyÕRYÐ>ZÑ([Ô([ð 	0Ý#-¨bµ'Ñ#:Ô#:ÐR˜a˜aÀÔ@RˆOÝ)¨)µYÑ?Ô?Ð^˜˜ÀYÈtÄ_ÔE^ˆIà×Ò˜R Ô0°)ÀÀrÈbÐÑQÔQÐQÝ˜i­&µ)Ð)<Ñ=Ô=ð ZØ× Ò   O°aÑ$7Ô!8¸)ÈÈrÐVXÐ ÑYÔYÐYà�NŠNØØØØØ!ÐBÐB Y¨t¤_Ô%?ÐBÐBÐBð ñ ô ð ð �JŠJ�w ¨BˆJÑ/Ô/Ð/Ð/Ð/ð	0ð 	0ré   c                 óâ  — |                       |d         |¬¦  «         |                       |d         |¬¦  «         |                      |d         |d         |¬¦  «         ||         j                             d¦  «        d         }||         j        | j        v rV|d         \  }}| j                             ||dt          z  z   |dd	| j	        d
         | j	        d         dt          ¬¦	  «	         dS dS )zDraw a Swap gater   rò   r    r·  rÎ  r;   r^  rå  rC  rî   ræ  Trç  N)Ú_swap_crossrþ  ro  r   rn  rÌ   rÇ   r  rO  rÁ   rý  )rØ   rø  r‘  r+  ró   ro  r[  r\  s           rç   rŠ  zMatplotlibDrawer._swap]  s   € à×Ò˜˜Aœ eÐÑ,Ô,Ð,Ø×Ò˜˜Aœ eÐÑ,Ô,Ð,Ø�
Š
�2�a”5˜"˜Qœ% Eˆ
Ñ*Ô*Ð*ð ˜d”OÔ-×3Ò3°DÑ9Ô9¸"Ô=ˆ	Ø�TŒ?Ô(¨DÔ,>Ð>Ð>Ø˜Aœ‰JˆD�$ØŒH�MŠMØØ�s�S‘yÑ ØØØØœ UÔ+Ø”k $Ô'ØÝ"ð ñ 
ô 
ð 
ð 
ð 
ð ?Ð>ré   c                 ót  — |\  }}| j                              |dt          z  z
  |dt          z  z   g|dt          z  z
  |dt          z  z   g|| j        t          ¬¦  «         | j                              |dt          z  z
  |dt          z  z   g|dt          z  z   |dt          z  z
  g|| j        t          ¬¦  «         dS )zDraw the Swap cross symbolrã  rõ  N)rÇ   r  ri  rÑ   rØ  )rØ   rø  ró   r[  r\  s        rç   rÛ  zMatplotlibDrawer._swap_crosss  sÏ   € à‰
ˆˆdàŒ�ŠØ�D�3‘JÑ  t­c¡zÑ 1Ð2Ø�D�3‘JÑ  t­c¡zÑ 1Ð2ØØ”mÝ#ð 	ñ 	
ô 	
ð 	
ð 	Œ�ŠØ�D�3‘JÑ  t­c¡zÑ 1Ð2Ø�D�3‘JÑ  t­c¡zÑ 1Ð2ØØ”mÝ#ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ré   c                 ó²   — |\  }}|dz   ||         j         dz  z   }| j                             ||t          z   |dd| j        d         |dt
          ¬¦	  «	         dS )	z%Draw the sidetext for symmetric gatesr‰  r*   rå  rC  rî   Trç  N)r  rÇ   r  rO  rÁ   rý  )	rØ   r‘  r+  rø  ræ  r  r[  r\  Úxps	            rç   rÙ  zMatplotlibDrawer._sidetext†  st   € à‰
ˆˆdð �D‰[˜9 Tœ?Ô0°1Ñ4Ñ4ˆØŒ�ŠØØ•3‰JØØØØ”[ Ô'ØØÝð 	ñ 
	
ô 
	
ð 
	
ð 
	
ð 
	
ré   c                 óx  — |\  }}|\  }}	|€| j         d         n|}
|€dn|}|dk    rét          j        t          j        ||z
  ¦  «        t          j        |	|z
  ¦  «        ¦  «        }dt          z  t          j        |¦  «        z  }dt          z  t          j        |¦  «        z  }| j                             ||z   ||z   g||z   |	|z   g|
| j	        d|¬¦  «         | j                             ||z
  ||z
  g||z
  |	|z
  g|
| j	        d|¬¦  «         dS | j                             ||g||	g|
| j	        ||¬¦  «         dS )zDraw a line from xy0 to xy1Nró  r›  ÚdoubletrE  rœ  )
rÁ   rI  Úarctan2rŒ  ri  ÚcosÚsinrÇ   r  rÑ   )rØ   Úxy0Úxy1ró  rô  rë  Úx0Úy0Úx1Úy1Ú	linecolorrp  ÚthetaÚdxÚdys                  rç   rþ  zMatplotlibDrawer._line˜  s}  € à‰ˆˆBØ‰ˆˆBØ)+¨�D”K Ô%Ð%¸ˆ	Ø!˜z�G�G¨rˆ	à˜	Ò!Ð!Ý”J�rœv b¨2¡g™œµ´°r¸B±w±´Ñ@Ô@ˆEØ�‘�bœf U™mœmÑ+ˆBØ�‘�bœf U™mœmÑ+ˆBØŒH�MŠMØ�b‘˜"˜r™'Ð"Ø�b‘˜"˜r™'Ð"ØØœ-Ø!Øð ñ ô ð ð ŒH�MŠMØ�b‘˜"˜r™'Ð"Ø�b‘˜"˜r™'Ð"ØØœ-Ø!Øð ñ ô ð ð ð ð ŒH�MŠMØ�R�Ø�R�ØØœ-Ø#Øð ñ ô ð ð ð ré   c                 óò   — | j         dk    r| j         nt          }||z  dz   }|s||dz
  z   |k    r|||dz
  z
  z  }||z  |d         z   dz   }|s	|d|z  z  }n|dz  }|||z  |d         dz   z  z
  }	||d<   ||	fS )	z$Get the coord positions for an indexr   r    rû   rd  rÿ   rY   rü   rÀ  )rÆ   ÚINFINITE_FOLD)
rØ   r¼  Úy_indexr—  r%  r»  rá   Úh_posÚx_posÚy_poss
             rç   rº  zMatplotlibDrawer._plot_coord½  sÄ   € ð "œZ¨!š^˜^ˆtŒzˆzµˆØ˜$‘ Ñ"ˆð ð 	*˜5 J°¡NÑ3°dÒ:Ð:Ø�t˜u q™yÑ)Ñ)ˆGØ˜$‘ ¨:Ô!6Ñ6¸Ñ=ˆØð 	Ø�S˜:Ñ%Ñ%ˆEˆEà�T‰MˆEØ˜7 d™?¨y¸Ô/CÀaÑ/GÑHÑHˆð %,ˆ	�.Ñ!Ø�eˆ|Ðré   )
NNFTr7   NFNFr8   )NFrG  )FN)F)NNrB  N)NNNrB  N)NN)NrB  )"Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler×  rè   r<  r  r  r  rt  r  r  r  r  r  r  r   r"  r$  r!  r#  rº  rÅ  r»  r‹  rŠ  rÛ  rÙ  ÚPORDER_LINErþ  rº  rc  ré   rç   r6   r6   X   s}  € € € € € ð =Ð<à �b”jÐ!:Ñ;Ô;€Oð ØØØØØØØØØð\
ð \
ð \
ð \
ð|Oð Oð Oð Oðbuð uð uðnJ@ð J@ð J@ðj ðe ð e ð e ð e ðN,ð ,ð ,ð ,ð\Cð Cð CðJ#ð #ð #ð^ ðb`ð b`ð b`ð b`ðH2 ð 2 ð 2 ðhkTð kTð kTðZ:ð :ð :ðx*ð *ð *ðX+ð +ð +ð +ðZ\ð \ð \ð \ð|jð jð jðX%Tð %Tð %TðP ^bðð ð ð ð6$
ð $
ð $
ð $
ðL
ð 
ð 
ð 
ð<!0ð !0ð !0ðFð ð ð ð,
ð 
ð 
ð 
ð&
ð 
ð 
ð 
ð$ "&¨$°{ð #ð #ð #ð #ðJð ð ð ð ð ré   r6   c                   ó   — e Zd ZdZd„ ZdS )rk  z1Class containing drawing data on a per node basisc                 ó,  — d| _         d| _        g | _        g | _        d| _        d| _        d| _        d| _        dx| _        x| _	        x| _
        x| _        x| _        | _        d| _        d| _        d| _        d| _        d| _        g | _        d| _        d S )Nr  r   rB  Frc  )r  r¼  rÈ  rÉ  ro  rn  rp  rq  rú  rû  ró  r2  r+  ræ  rw  r  r}  rÇ  r‚  rƒ  rŒ  )rØ   s    rç   rè   zNodeData.__init__Ö  s¤   € àˆŒ
ØˆŒØˆŒ	ØˆŒ	ð ˆŒØˆÔØˆŒØˆŒð EFÐEˆŒÐE�$”'ÐE˜DœGÐE d¤gÐE°´¸$¼'ð ˆŒØˆŒØˆŒØ ˆÔØˆŒØˆÔØˆŒˆˆré   N)rô  rõ  rö  r÷  rè   rc  ré   rç   rk  rk  Ó  s)   € € € € € Ø;Ð;ðð ð ð ð ré   rk  )Nr÷  rE  rI  rø  Úior   ÚnumpyrI  Úqiskit.circuitr   r   r   r   r   r	   r
   r   r   r   r   r   Úqiskit.circuit.controlflowr   Úqiskit.circuit.classicalr   Ú"qiskit.circuit.annotated_operationr   r   Úqiskit.circuit.libraryr   Ú%qiskit.circuit.library.standard_gatesr   r   r   r   r   r   Úqiskit.qasm3r   Úqiskit.qasm3.exporterr   Úqiskit.qasm3.printerr   Úqiskit.circuit.tools.pi_checkr   Úqiskit.utilsr   Ú
_optionalsÚqcstyler!   Ú_utilsr"   r#   r$   r%   r&   r'   r(   r)   Úutilsr+   ri  rO  rÿ  rŸ  r  rú  rØ  rs  rM  rÔ  rý  rï  ÚHAS_MATPLOTLIBÚrequire_in_instanceÚHAS_PYLATEXr6   rk  rc  ré   rç   ú<module>r     s'  ðð )Ð (à Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ;Ð :Ð :Ð :Ð :Ð :Ø )Ð )Ð )Ð )Ð )Ð )Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0à Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð /Ð .Ð .Ð .Ð .Ð .ð €Ø
€ð €Ø€Ø€Ø€ØÐ Ø€Ø€ØÐ Ø€à€ð ÔÔ.ØÔÔ+ðvð vð vð vð vñ vô vñ ,Ô+ñ /Ô.ðvðr;ð ð ð ð ñ ô ð ð ð ré   