§
    ¹³Ùg¥  ã                  óZ  — d Z ddlmZ ddlZddlZddlZddlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ej        rddlmZ ej        j        j        Zej        j        j        Zej        j        j        Zej        j        j        Zdd	„Zdd„Zd„ Zd„ Zd„ Zd„ Z e
eeeeeee iZ! e"h d£¦  «        Z#dS )zAObjects to represent the information at a node in the DAGCircuit.é    )ÚannotationsN)ÚClbitÚClassicalRegisterÚIfElseOpÚWhileLoopOpÚSwitchCaseOpÚ	ForLoopOpÚ	ParameterÚQuantumCircuit)Úexpr)Ú
DAGCircuitÚreturnÚboolc                ó–  ‡‡— | |cxu r€n ndS d | |fv rdS | \  }}|\  }}||k    rdS t          |t          ¦  «        r't          |t          ¦  «        r‰|         ‰|         k    S t          |t          ¦  «        rOt          |t          ¦  «        r:|j        |j        k    o)t	          ˆˆfd„t          ||¦  «        D ¦   «         ¦  «        S dS )NTFc              3  óB   •K  — | ]\  }}‰|         ‰|         k    V — Œd S ©N© )Ú.0Út1Út2Úbit_indices1Úbit_indices2s      €€úO/granary/edev/quantum/lib/python3.11/site-packages/qiskit/dagcircuit/dagnode.pyú	<genexpr>z'_legacy_condition_eq.<locals>.<genexpr>7   sG   øè è € ð 4
ð 4
Ù5;°R¸ˆL˜Ô ¨RÔ 0Ò0ð4
ð 4
ð 4
ð 4
ð 4
ð 4
ó    )Ú
isinstancer   r   ÚsizeÚallÚzip)Úcond1Úcond2r   r   Útarget1Úval1Útarget2Úval2s     ``    r   Ú_legacy_condition_eqr&   +   s  øø€ Ø�ÐÐÐÐÐÐÐÐØˆtØ	�%˜�Ð	Ð	ØˆuØ�M€GˆTØ�M€GˆTØˆt‚|€|ØˆuÝ�'�5Ñ!Ô!ð >¥j°½%Ñ&@Ô&@ð >Ø˜GÔ$¨°WÔ(=Ò=Ð=Ý�'Õ,Ñ-Ô-ð 
µ*¸WÕFWÑ2XÔ2Xð 
ØŒ|˜wœ|Ò+ð 
µð 4
ð 4
ð 4
ð 4
ð 4
Ý?BÀ7ÈGÑ?TÔ?Tð4
ñ 4
ô 4
ñ 1
ô 1
ð 	
ð ˆ5r   Úcircuitr   r   c                óè   ‡— ddl m} ˆfd„} || dd„ t          t          || j        ¦  «        |¬¦  «        D ¦   «         d„ t          t          || j        ¦  «        |¬¦  «        D ¦   «         ¬¦  «        S )	zÿGet a :class:`.DAGCircuit` of the given :class:`.QuantumCircuit`.  The bits in the output
    will be ordered in a canonical order based on their indices in the outer DAG, as defined by the
    ``bit_indices`` mapping and the ``node_{q,c}args`` arguments.r   )Úcircuit_to_dagc                ó   •— | \  }}‰|         S r   r   )ÚbitsÚouterÚ_innerÚbit_indicess      €r   Úsort_keyz!_circuit_to_dag.<locals>.sort_keyC   s   ø€ Ø‰ˆˆvØ˜5Ô!Ð!r   Fc                ó   — g | ]\  }}|‘ŒS r   r   ©r   Ú_outerÚinners      r   ú
<listcomp>z#_circuit_to_dag.<locals>.<listcomp>J   ó)   € ð 
ð 
ð 
Ù#�f˜eˆEð
ð 
ð 
r   )Úkeyc                ó   — g | ]\  }}|‘ŒS r   r   r1   s      r   r4   z#_circuit_to_dag.<locals>.<listcomp>M   r5   r   )Úcopy_operationsÚqubit_orderÚclbit_order)Úqiskit.convertersr)   Úsortedr   ÚqubitsÚclbits)r'   Ú
node_qargsÚ
node_cargsr.   r)   r/   s      `  r   Ú_circuit_to_dagrA   =   s½   ø€ ð 1Ð0Ð0Ð0Ð0Ð0ð"ð "ð "ð "ð "ð ˆ>ØØð
ð 
Ý'-­c°*¸g¼nÑ.MÔ.MÐS[Ð'\Ñ'\Ô'\ð
ñ 
ô 
ð
ð 
Ý'-­c°*¸g¼nÑ.MÔ.MÐS[Ð'\Ñ'\Ô'\ð
ñ 
ô 
ð	ñ 	ô 	ð 	r   c                ó   ‡ — ˆ fd„}|S )Nc                ó¢   •— t          | t          ¦  «        r‰                     | ¦  «        S t          | t          ¦  «        rˆfd„| D ¦   «         S d S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Úget)r   Úbitr.   s     €r   r4   z/_make_expr_key.<locals>.key.<locals>.<listcomp>X   s%   ø€ Ð8Ð8Ð8¨S�K—O’O CÑ(Ô(Ð8Ð8Ð8r   )r   r   rE   r   )Úvarr.   s    €r   r6   z_make_expr_key.<locals>.keyT   sY   ø€ Ý�c�5Ñ!Ô!ð 	(Ø—?’? 3Ñ'Ô'Ð'Ý�cÕ,Ñ-Ô-ð 	9Ø8Ð8Ð8Ð8°CÐ8Ñ8Ô8Ð8Øˆtr   r   )r.   r6   s   ` r   Ú_make_expr_keyrH   S   s#   ø€ ðð ð ð ð ð €Jr   c                ór  ‡ ‡‡‡— ‰ j         }‰j         }t          |t          j        ¦  «        rNt          |t          j        ¦  «        r4t          j        ||t          ‰¦  «        t          ‰¦  «        ¦  «        sdS nJt          |t          j        ¦  «        st          |t          j        ¦  «        rdS t          ||‰‰¦  «        sdS t          ‰ j        j	        ¦  «        t          ‰j        j	        ¦  «        k    o?t          ˆˆˆ ˆfd„t          ‰ j        j	        ‰j        j	        ¦  «        D ¦   «         ¦  «        S )NFc              3  ó’   •K  — | ]A\  }}t          |‰j        ‰j        ‰¦  «        t          |‰j        ‰j        ‰¦  «        k    V — ŒBd S r   ©rA   ÚqargsÚcargs©r   Úblock1Úblock2r   r   Únode1Únode2s      €€€€r   r   z#_condition_op_eq.<locals>.<genexpr>j   sr   øè è € ð @ð @ñ ˆF�Fõ 	˜ ¤¨U¬[¸,ÑGÔGÝ˜6 5¤;°´¸\ÑJÔJò	Kð@ð @ð @ð @ð @ð @r   )Ú	conditionr   r   ÚExprÚstructurally_equivalentrH   r&   ÚlenÚopÚblocksr   r   )rQ   rR   r   r   r    r!   s   ````  r   Ú_condition_op_eqrY   ^   sG  øøøø€ ØŒO€EØŒO€EÝ�%�œÑ#Ô#ð ­
°5½$¼)Ñ(DÔ(Dð ÝÔ+Ø�5�.¨Ñ6Ô6½À|Ñ8TÔ8Tñ
ô 
ð 	ð �5ð	õ 
�E�4œ9Ñ	%Ô	%ð ­°E½4¼9Ñ)EÔ)Eð ØˆuÝ! %¨°¸lÑKÔKð ØˆuÝˆuŒxŒÑÔ¥3 u¤x¤Ñ#7Ô#7Ò7ð ½Cð @ð @ð @ð @ð @ð @ð @õ " %¤(¤/°5´8´?ÑCÔCð@ñ @ô @ñ =ô =ð r   c                ó\  ‡ ‡‡‡— ‰ j         j        }‰j         j        }t          |t          j        ¦  «        rNt          |t          j        ¦  «        r4t          j        ||t          ‰¦  «        t          ‰¦  «        ¦  «        sdS n¨t          |t          ¦  «        r*t          |t          ¦  «        r‰|         ‰|         k    rdS nit          |t          ¦  «        rRt          |t          ¦  «        r=|j	        |j	        k    s*t          ˆˆfd„t          ||¦  «        D ¦   «         ¦  «        rdS ndS d„ ‰ j                              ¦   «         D ¦   «         }d„ ‰j                              ¦   «         D ¦   «         }t          |¦  «        t          |¦  «        k    ošt          d„ t          ||¦  «        D ¦   «         ¦  «        ost          ‰ j         j        ¦  «        t          ‰j         j        ¦  «        k    o?t          ˆˆˆ ˆfd„t          ‰ j         j        ‰j         j        ¦  «        D ¦   «         ¦  «        S )NFc              3  óB   •K  — | ]\  }}‰|         ‰|         k    V — Œd S r   r   )r   Úb1Úb2r   r   s      €€r   r   z"_switch_case_eq.<locals>.<genexpr>}   sG   øè è € ð /
ð /
Ù5;°R¸ˆL˜Ô ¨RÔ 0Ò0ð/
ð /
ð /
ð /
ð /
ð /
r   c                ó   — g | ]\  }}|‘ŒS r   r   ©r   ÚcaseÚ_s      r   r4   z#_switch_case_eq.<locals>.<listcomp>ƒ   ó   € Ð=Ð=Ð=‘w�t˜QˆdÐ=Ð=Ð=r   c                ó   — g | ]\  }}|‘ŒS r   r   r_   s      r   r4   z#_switch_case_eq.<locals>.<listcomp>„   rb   r   c              3  ó\   K  — | ]'\  }}t          |¦  «        t          |¦  «        k    V — Œ(d S r   )Úset)r   Úlabels1Úlabels2s      r   r   z"_switch_case_eq.<locals>.<genexpr>‡   s8   è è € ÐYÐYÑ1A°¸'•�G‘”¥ G¡¤Ò,ÐYÐYÐYÐYÐYÐYr   c              3  ó’   •K  — | ]A\  }}t          |‰j        ‰j        ‰¦  «        t          |‰j        ‰j        ‰¦  «        k    V — ŒBd S r   rK   rN   s      €€€€r   r   z"_switch_case_eq.<locals>.<genexpr>‰   sj   øè è € ð 
ð 
ñ �˜õ ˜F E¤K°´¸lÑKÔKÝ˜v u¤{°E´KÀÑNÔNòOð
ð 
ð 
ð 
ð 
ð 
r   )rW   Útargetr   r   rT   rU   rH   r   r   r   Úanyr   Úcases_specifierrV   r   rX   )rQ   rR   r   r   r"   r$   Úcases1Úcases2s   ````    r   Ú_switch_case_eqrn   q   sO  øøøø€ ØŒhŒo€GØŒhŒo€GÝ�'�4œ9Ñ%Ô%ð ­*°W½d¼iÑ*HÔ*Hð ÝÔ+Ø�W�n¨\Ñ:Ô:½NÈ<Ñ<XÔ<Xñ
ô 
ð 	ð �5ð	õ 
�G�UÑ	#Ô	#ð 	­
°7½EÑ(BÔ(Bð 	Ø˜Ô  L°Ô$9Ò9Ð9Ø�5ð :å	�GÕ.Ñ	/Ô	/ð µJ¸wÕHYÑ4ZÔ4Zð ØŒ<˜7œ<Ò'Ð'­3ð /
ð /
ð /
ð /
ð /
Ý?BÀ7ÈGÑ?TÔ?Tð/
ñ /
ô /
ñ ,
ô ,
Ð'ð �5ð (ð
 ˆuØ=Ð= %¤(×":Ò":Ñ"<Ô"<Ð=Ñ=Ô=€FØ=Ð= %¤(×":Ò":Ñ"<Ô"<Ð=Ñ=Ô=€FåˆF‰Œ•s˜6‘{”{Ò"ð 	
ÝÐYÐYÅSÈÐQWÑEXÔEXÐYÑYÔYÑYÔYð	
å�””Ñ Ô ¥C¨¬¬Ñ$8Ô$8Ò8ð	
õ ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ #& e¤h¤o°u´x´Ñ"GÔ"Gð
ñ 
ô 
ñ 
ô 
ð		r   c                óÌ  — | j         j        \  }}}|j         j        \  }}}	||k    rdS |€|€|�|€dS |�w|�ut          t          t	          j        ¦   «         ¦  «        ¦  «        }
||j        v r|                     ||
id¬¦  «        n|}||	j        v r|	                     ||
id¬¦  «        n|	}	t          || j	        | j
        |¦  «        t          |	|j	        |j
        |¦  «        k    S )NF)Úinplace)rW   Úparamsr
   ÚstrÚuuidÚuuid4Ú
parametersÚassign_parametersrA   rL   rM   )rQ   rR   r   r   Ú	indexset1Úparam1Úbody1Ú	indexset2Úparam2Úbody2Úsentinels              r   Ú_for_loop_eqr~   ‘   s  € Ø$œxœÑ€Iˆv�uØ$œxœÑ€Iˆv�uØ�IÒÐØˆuØˆ˜6Ð-°6Ð3EÈ&È.ØˆuØÐ˜fÐ0Ý�S¥¤¡¤Ñ.Ô.Ñ/Ô/ˆð ˜Ô)Ð)Ð)ð ×#Ò# V¨XÐ$6ÀÐ#ÑFÔFÐFàð 	ð ˜Ô)Ð)Ð)ð ×#Ò# V¨XÐ$6ÀÐ#ÑFÔFÐFàð 	õ
 ˜5 %¤+¨u¬{¸LÑIÔIÍ_ØˆuŒ{˜EœK¨ñNô Nò ð r   >   ÚswapÚbarrierÚ
break_loopÚcontinue_loop)r   r   )r'   r   r   r   )$Ú__doc__Ú
__future__r   Útypingrs   Úqiskit._accelerate.circuitÚqiskitÚqiskit.circuitr   r   r   r   r   r	   r
   r   Úqiskit.circuit.classicalr   ÚTYPE_CHECKINGÚqiskit.dagcircuitr   Ú_accelerater'   ÚDAGNodeÚ	DAGOpNodeÚ	DAGInNodeÚ
DAGOutNoder&   rA   rH   rY   rn   r~   Ú_SEMANTIC_EQ_CONTROL_FLOWÚ	frozensetÚ_SEMANTIC_EQ_SYMMETRICr   r   r   ú<module>r”      s±  ðð HÐ GØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€à !Ð !Ð !Ð !ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð *Ð )Ð )Ð )Ð )Ð )à	Ôð -Ø,Ð,Ð,Ð,Ð,Ð,ð Ô
Ô
$Ô
,€ØÔÔ&Ô0€	ØÔÔ&Ô0€	ØÔÔ'Ô2€
ðð ð ð ð$ð ð ð ð,ð ð ðð ð ð&ð ð ð@ð ð ð2 ÐØÐ!Ø�/Øˆ|ð	Ð ð #˜Ð#UÐ#UÐ#UÑVÔVÐ Ð Ð r   