§
    º³Ùgã*  ã                   óî   — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddl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 h d£Zej        j        ej        j        dd„¦   «         ¦   «         ZdS )z8
Visualization function for DAG circuit representation.
é    N)Úgraphviz_draw)Ú	DAGOpNodeÚ	DAGInNodeÚ
DAGOutNode)Ú
DAGCircuit)ÚQubitÚClbitÚClassicalRegister)Úexpr)Údagdependency_to_circuit)Ú	optionals)ÚInvalidFileErroré   )ÚVisualizationError>$   ú	plain-extÚgdÚmpÚpsÚdiaÚdotÚfigÚgd2ÚgifÚjpeÚjpgÚmifÚpclÚpdfÚpicÚpngÚps2ÚsvgÚvmlÚvtxÚcmapÚhpglÚimapÚjpegÚsvgzÚvmlzÚvrmlÚwbmpÚxdorÚxlibÚcanonÚcmapxÚismapÚplainÚimap_npÚcmapx_npçffffffæ?Úcolorc                 óp  ‡ ‡‡‡‡‡‡‡— ddl m} t          t          ‰ ¦  «        ¦  «        Šd„ t	          ‰ j                             ¦   «         ¦  «        t	          ‰ j                             ¦   «         ¦  «        z   D ¦   «         Šd‰v rsddlm	Š d„ t          ‰ j        ¦  «        D ¦   «         Šd„ t          ‰ j        ¦  «        D ¦   «         Šdt          d	|z  ¦  «        i}t          ‰ ¦  «        Šˆˆˆˆˆˆˆfd
„}d}n!dt          d	|z  ¦  «        i}ˆ ˆˆfd„}ˆ ˆfd„}d}|rQd|vrt          d¦  «        ‚|                     d¦  «        d         }|t           vrt#          d|› dt           › �¦  «        ‚t%          ‰ t&          ¦  «        r›‰                      |||¦  «        }	d}
|s`t+          j        |
d|g|	                     d¦  «        dddd¬¦  «        }t1          j        |j        ¦  «        }|                     |¦  «        }|S t+          j        |
d|d|g|	ddd¬¦  «         dS t9          ‰ j        |||||¦  «        S )a  Plot the directed acyclic graph (dag) to represent operation dependencies
    in a quantum circuit.

    This function calls the :func:`~rustworkx.visualization.graphviz_draw` function from the
    ``rustworkx`` package to draw the DAG.

    Args:
        dag (DAGCircuit or DAGDependency): The dag to draw.
        scale (float): scaling factor
        filename (str): file path to save image to (format inferred from name)
        style (str): 'plain': B&W graph
                     'color' (default): color input/output/op nodes

    Returns:
        PIL.Image: if in Jupyter notebook and not saving to file,
            otherwise None.

    Raises:
        VisualizationError: when style is not recognized.
        InvalidFileError: when filename provided is not valid
        ValueError: If the file extension for ``filename`` is not an image
            type supported by Graphviz.

    Example:
        .. plot::
           :include-source:
           :nofigs:

            from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
            from qiskit.dagcircuit import DAGCircuit
            from qiskit.converters import circuit_to_dag
            from qiskit.visualization import dag_drawer

            q = QuantumRegister(3, 'q')
            c = ClassicalRegister(3, 'c')
            circ = QuantumCircuit(q, c)
            circ.h(q[0])
            circ.cx(q[0], q[1])
            circ.measure(q[0], c[0])
            circ.rz(0.5, q[1]).c_if(c, 2)

            dag = circuit_to_dag(circ)
            dag_drawer(dag)
    r   )ÚImagec                 óT   — i | ]%}t          |¦  «        D ]\  }}||j        › d |› d�“ŒŒ&S )ú[ú])Ú	enumerateÚname)Ú.0ÚregÚidxÚbits       ú\/granary/edev/quantum/lib/python3.11/site-packages/qiskit/visualization/dag_visualization.pyú
<dictcomp>zdag_drawer.<locals>.<dictcomp>   s^   € ð ð ð àÝ# C™.œ.ðð ñ ˆS�#ð 	�”Ð!Ð!˜3Ð!Ð!Ð!ðð ð ð ó    ÚDAGDependency)Úget_bit_reg_indexc                 ó   — i | ]\  }}||“Œ	S © rH   ©r>   ÚindexrA   s      rB   rC   zdag_drawer.<locals>.<dictcomp>ˆ   ó   € ÐLÐLÐL©
¨¨s˜˜eÐLÐLÐLrD   c                 ó   — i | ]\  }}||“Œ	S rH   rH   rI   s      rB   rC   zdag_drawer.<locals>.<dictcomp>‰   rK   rD   Údpiéd   c           	      óÆ  •— d‰v rt          | j        ¦  «        }nt          | j        ¦  «        }‰dk    ri S ‰dk    �r’i }g }t          | j        | j        z   ¦  «        D ]—\  }}|dk    r|                     d¦  «          nvt          |t          ¦  «        rd‰|         › �}n)t          |t          ¦  «        rd‰|         › �}n|j
        › }‰                     ||¦  «        }|                     |¦  «         Œ˜d|d<   |d	z   t          | j        ¦  «        z   d
z   t          |¦  «        dd…                              dd¦  «        z   dz   |d<   | j        dk    rd|d<   d|d<   �nmt          | j        dd¦  «        rd|d<   d|d<   �nKt          | j        dd ¦  «        �r| j        j        }t          |t"          j        ¦  «        rd}	nœt          |d         t&          ¦  «        r(d|d         j        › dt)          |d         ¦  «        › d�}	nY ‰‰|d         ¦  «        \  }
}}|
�%d|
j        › d|› d t)          |d         ¦  «        › d�}	nd|› dt)          |d         ¦  «        › d�}	d|d<   d!|d<   |d	z   t          | j        ¦  «        z   |	z   t          |¦  «        dd…                              dd¦  «        z   dz   |d<   n| j        d"k    r
d|d<   d#|d<   |S t+          d$‰› d%�¦  «        ‚)&NÚDAGDependencyV2r2   r6   é   z...Úq_Úc_Úblackz: z (r   éÿÿÿÿú'Ú ú)ÚlabelÚbarrierÚfilledÚstyleÚgreyÚ	fillcolorÚ
_directiveFÚredÚ	conditionz (cond: [Expr]) (r   z (cond: z, z) (r:   z], ÚgreenÚmeasureÚ	lightbluezUnrecognized style z for the dag_drawer.)ÚstrÚ_node_idÚnode_idr<   ÚqargsÚcargsÚappendÚ
isinstancer   r	   rJ   Úgetr=   ÚreplaceÚgetattrÚopra   r   ÚExprr
   Úintr   )ÚnodeÚnid_strÚnÚargsÚcountÚargÚf_strÚarg_strra   Úcond_txtÚregisterÚ	bit_indexÚ	reg_indexÚclbit_indicesÚdag_dep_circrF   Úqubit_indicesÚregister_bit_labelsr\   Útype_strs                €€€€€€€rB   Únode_attr_funcz"dag_drawer.<locals>.node_attr_func�   st  ø€ Ø  HÐ,Ð,Ý˜dœmÑ,Ô,��å˜dœlÑ+Ô+�Ø˜ÒÐØ�	Ø˜ÒÑØ�Ø�Ý"+¨D¬J¸¼Ñ,CÑ"DÔ"Dð )ð )‘J�E˜3Ø˜q’y�yØŸš EÑ*Ô*Ð*Ø˜Ý! #¥uÑ-Ô-ð /Ø 9 ]°3Ô%7Ð 9Ð 9˜˜Ý# C­Ñ/Ô/ð /Ø 9 ]°3Ô%7Ð 9Ð 9˜˜à#&¤9 ˜Ø1×5Ò5°c¸5ÑAÔA�GØ—K’K Ñ(Ô(Ð(Ð(à$��'‘
à˜d‘N¥S¨¬¡^¤^Ñ3°dÑ:½SÀ¹Y¼YÀqÈÀt¼_×=TÒ=TÐUXÐZ\Ñ=]Ô=]Ñ]Ð`cÑcð �'‘
ð ”9 	Ò)Ð)Ø!)�A�g‘JØ%+�A�k‘N‘NÝ˜TœW l°EÑ:Ô:ð 1Ø!)�A�g‘JØ%*�A�k‘N‘NÝ˜TœW k°4Ñ8Ô8ñ 1Ø $¤Ô 1�IÝ! )­T¬YÑ7Ô7ð VØ#6˜˜Ý# I¨a¤LÕ2CÑDÔDð VØ#Y¨i¸¬lÔ.?Ð#YÐ#YÅ3ÀyÐQRÄ|ÑCTÔCTÐ#YÐ#YÐ#Y˜˜à9JÐ9JØ(¨)°A¬,ñ:ô :Ñ6˜ )¨Yð $Ð/à _¨8¬=Ð _Ð _¸9Ð _Ð _ÍÈYÐWXÌ\ÑIZÔIZÐ _Ð _Ð _ð %˜Hð (V°)Ð'UÐ'U½sÀ9ÈQÄ<Ñ?PÔ?PÐ'UÐ'UÐ'U˜HØ!)�A�g‘JØ%,�A�k‘NàØñå˜dœi™.œ.ñ)ð #ñ#õ ˜d™)œ) A b Dœ/×1Ò1°#°rÑ:Ô:ñ	;ð
 ñð �g‘J�Jð ”Y )Ò+Ð+Ø!)�A�g‘JØ%0�A�k‘NØ�å(Ð)Z¸uÐ)ZÐ)ZÐ)ZÑ[Ô[Ð[rD   Nc                 óf  •— ‰dk    ri S ‰dk    �ri }t          | t          ¦  «        r| j        |d<   d|d<   d|d<   d|d<   t          | t          ¦  «        rÙt          | j        t
          ¦  «        r<‰                     | j        d	‰                     | j        ¦  «        j        › �¦  «        }not          | j        t          ¦  «        r<‰                     | j        d
‰                     | j        ¦  «        j        › �¦  «        }nt          | j        j        ¦  «        }||d<   d|d<   d|d<   d|d<   t          | t          ¦  «        rÛt          | j        t
          ¦  «        r=‰                     | j        d‰                     | j        ¦  «        j        › d�¦  «        }npt          | j        t          ¦  «        r=‰                     | j        d‰                     | j        ¦  «        j        › d�¦  «        }nt          | j        j        ¦  «        }||d<   d|d<   d|d<   d|d<   |S t          d‰› �¦  «        ‚)Nr2   r6   rY   Úbluer[   r\   rd   r^   rR   rS   rT   rb   zq[r;   zc[r`   zInvalid style )rk   r   r=   r   Úwirer   rl   Úfind_bitrJ   r	   re   r   r   )rr   rt   rY   Údagr�   r\   s      €€€rB   rƒ   z"dag_drawer.<locals>.node_attr_funcÔ   sC  ø€ Ø˜ÒÐØ�	Ø˜ÒÑØ�Ý˜d¥IÑ.Ô.ð 1Ø!%¤�A�g‘JØ!'�A�g‘JØ!)�A�g‘JØ%0�A�k‘NÝ˜d¥IÑ.Ô.ð -Ý! $¤)­UÑ3Ô3ð 	4Ø 3× 7Ò 7Ø œIÐ'K¨C¯LªL¸¼Ñ,CÔ,CÔ,IÐ'KÐ'Kñ!ô !˜˜õ $ D¤I­uÑ5Ô5ð 4Ø 3× 7Ò 7Ø œIÐ'K¨C¯LªL¸¼Ñ,CÔ,CÔ,IÐ'KÐ'Kñ!ô !˜˜õ !$ D¤I¤NÑ 3Ô 3˜à!&�A�g‘JØ!(�A�g‘JØ!)�A�g‘JØ%,�A�k‘NÝ˜d¥JÑ/Ô/ð +Ý! $¤)­UÑ3Ô3ð 	4Ø 3× 7Ò 7Ø œIÐ'L¨C¯LªL¸¼Ñ,CÔ,CÔ,IÐ'LÐ'LÐ'Lñ!ô !˜˜õ $ D¤I­uÑ5Ô5ð 4Ø 3× 7Ò 7Ø œIÐ'L¨C¯LªL¸¼Ñ,CÔ,CÔ,IÐ'LÐ'LÐ'Lñ!ô !˜˜õ !$ D¤I¤NÑ 3Ô 3˜Ø!&�A�g‘JØ!(�A�g‘JØ!)�A�g‘JØ%*�A�k‘NØ�å(Ð)A¸%Ð)AÐ)AÑBÔBÐBrD   c                 óZ  •— i }t          | t          ¦  «        r2‰                     | d‰                     | ¦  «        j        › �¦  «        }n[t          | t
          ¦  «        r2‰                     | d‰                     | ¦  «        j        › �¦  «        }nt          | j        ¦  «        }||d<   |S )NrR   rS   rY   )rk   r   rl   r‡   rJ   r	   re   r=   )ÚedgeÚerY   rˆ   r�   s      €€rB   Úedge_attr_funcz"dag_drawer.<locals>.edge_attr_func  s¥   ø€ ØˆAÝ˜$¥Ñ&Ô&ð 'Ø+×/Ò/°Ð6U¸3¿<º<ÈÑ;MÔ;MÔ;SÐ6UÐ6UÑVÔV��Ý˜D¥%Ñ(Ô(ð 'Ø+×/Ò/°Ð6U¸3¿<º<ÈÑ;MÔ;MÔ;SÐ6UÐ6UÑVÔV��å˜DœI™œ�ØˆAˆg‰JØˆHrD   r    ú.z7Parameter 'filename' must be in format 'name.extension'rU   z2The specified value for the image_type argument, 'z,' is not a valid choice. It must be one of: r   z-Tzutf-8TF)ÚinputÚcapture_outputÚencodingÚcheckÚtextz-oÚutf8)rŽ   r‘   r�   r’   )ÚPILr8   re   ÚtypeÚlistÚqregsÚvaluesÚcregsÚ#qiskit.visualization.circuit._utilsrF   r<   ÚqubitsÚclbitsr   r   ÚsplitÚIMAGE_TYPESÚ
ValueErrorrk   r   Ú_to_dotÚ
subprocessÚrunÚencodeÚioÚBytesIOÚstdoutÚopenr   Ú_multi_graph)rˆ   ÚscaleÚfilenamer\   r8   Úgraph_attrsrƒ   rŒ   Ú
image_typeÚdot_strÚprogÚ
dot_resultÚdot_bytes_imageÚimager~   r   rF   r€   r�   r‚   s   `  `          @@@@@@rB   Ú
dag_drawerr²   J   s6  øøøøøøøø€ ð^ ÐÐÐÐÐõ
 •4˜‘9”9‰~Œ~€Hðð å˜œ	×(Ò(Ñ*Ô*Ñ+Ô+­d°3´9×3CÒ3CÑ3EÔ3EÑ.FÔ.FÑFðñ ô Ðð
 ˜(Ð"Ð"àIÐIÐIÐIÐIÐIàLÐLµiÀÄ
Ñ6KÔ6KÐLÑLÔLˆØLÐLµiÀÄ
Ñ6KÔ6KÐLÑLÔLˆØ�c #¨¡+Ñ.Ô.Ð/ˆÝ/°Ñ4Ô4ˆð@	\ð @	\ð @	\ð @	\ð @	\ð @	\ð @	\ð @	\ð @	\ð @	\ð @	\ðD ˆˆð �c #¨¡+Ñ.Ô.Ð/ˆð+	Cð +	Cð +	Cð +	Cð +	Cð +	Cð +	CðZ		ð 		ð 		ð 		ð 		ð 		ð €JØð 	Ø�hÐÐÝ"Ð#\Ñ]Ô]Ð]Ø—^’^ CÑ(Ô(¨Ô,ˆ
Ø�[Ð(Ð(Ýð!Øð!ð !åð!ð !ñô ð õ �#•zÑ"Ô"ð %
Ø—+’+ØØØñ
ô 
ˆð ˆØð 	Ý#œØ�t˜ZÐ(Ø—n’n WÑ-Ô-Ø#ØØØðñ ô ˆJõ !œj¨Ô):Ñ;Ô;ˆOØ—J’J˜Ñ/Ô/ˆEØˆLåŒNØ�t˜Z¨¨xÐ8ØØØØðñ ô ð ð �4åØÔØØØØØñ
ô 
ð 	
rD   )r5   Nr6   )Ú__doc__r¤   r¡   Úrustworkx.visualizationr   Úqiskit.dagcircuit.dagnoder   r   r   Úqiskit.dagcircuit.dagcircuitr   Úqiskit.circuitr   r	   r
   Úqiskit.circuit.classicalr   Úqiskit.convertersr   Úqiskit.utilsr   Ú
_optionalsÚqiskit.exceptionsr   Ú
exceptionsr   rž   ÚHAS_GRAPHVIZÚrequire_in_callÚHAS_PILr²   rH   rD   rB   ú<module>rÁ      s:  ððð ð 
€	€	€	Ø Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø )Ð )Ð )Ð )Ð )Ð )Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *ð%ð %ð %€ðP ÔÔ(ØÔÔ#ðq
ð q
ð q
ñ $Ô#ñ )Ô(ðq
ð q
ð q
rD   