
    z	il                     Z    S r SSKJr  SSKrSSKJr  SSKJrJ	r	J
r
JrJr   " S S\5      rg)zGate equivalence library.    )graphviz_drawN)InvalidFileError)BaseEquivalenceLibraryKeyEquivalenceNodeDataEdgeDatac                   6   ^  \ rS rSrSrSS jrU 4S jrSrU =r$ )EquivalenceLibrary   zfA library providing a one-way mapping of Gates to their equivalent
implementations as QuantumCircuits.c                     SnU(       a%  SU;  a  [        S5      eUR                  S5      S   n[        U R                  5       S S UUS9$ )a  Draws the equivalence relations available in the library.

Args:
    filename (str): An optional path to write the output image to
        if specified this method will return None.

Returns:
    PIL.Image or IPython.display.SVG: Drawn equivalence library as an
        IPython SVG if in a jupyter notebook, or as a PIL.Image otherwise.

Raises:
    InvalidFileError: if filename is not valid.
N.z7Parameter 'filename' must be in format 'name.extension'c                     SU S   0$ )Nlabel )nodes    T/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/circuit/equivalence.py<lambda>)EquivalenceLibrary.draw.<locals>.<lambda>6   s    '4=1    c                     U $ Nr   )edges    r   r   r   7   s    r   )filename
image_type)r   splitr   _build_basis_graph)selfr   r   s      r   drawEquivalenceLibrary.draw!   sX     
("&'`aa!,R0J##%1!
 	
r   c                   > [         R                  " 5       n0 n[        TU ]  5        GHY  nUR                  UR
                  pTU R                  U5      n[        U SU 3/5      nU GH  nUR                  UR                  p[        S U
R                   Vs1 s H/  nUR                  R                  UR                  R
                  4iM1     sn 5       5      nXr;  a*  UR                  U[        [        U5      5      S.5      nXU'   X;  a*  UR                  U[        [        U5      5      S.5      nXU'   [        U	5       SUS::  a  [        U
5      OS 3nUR                  X'   X,   US[        S5      S	.5        GM     GM\     U$ s  snf )
N/c              3   4   #    U  H  u  pU S U 3v   M     g7f)r#   Nr   ).0name
num_qubitss      r   	<genexpr>8EquivalenceLibrary._build_basis_graph.<locals>.<genexpr>G   s)      )-( fAj\*-s   )basisr   
   z...Courier   )r   fontnamefontsize)rx	PyDiGraphsuperkeysr&   r'   _get_equivalences	frozensetparamscircuitdata	operationadd_nodestrsetadd_edge)r   graphnode_mapkeyr&   r'   equivalencesr*   equivalencer7   decompinstructiondecomp_basis
basis_nodedecomp_basis_noder   	__class__s                   r   r   %EquivalenceLibrary._build_basis_graph<   sw   7<>C"xx*11#6L$q567E+!,!3!3[5H5H( ) ,2;;-+6K %..33[5J5J5U5UV+6-)   (!&%#cRWj/0Z![J&0UO/(-".S=N9OP)% .?\*v;-rq#f+e)TUO*#AO'  , "< +-s   6Fr   r   )	__name__
__module____qualname____firstlineno____doc__r    r   __static_attributes____classcell__)rI   s   @r   r   r      s    +
6" "r   r   )rO   rustworkx.visualizationr   	rustworkxr1   qiskit.exceptionsr   qiskit._accelerate.equivalencer   r   r   r   r	   r   r   r   r   <module>rV      s.      1  / A/ Ar   