§
    ²Ûg•¥  ã                   ó–  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z
ddlZddlmZmZmZmZ ddlmZmZmZmZmZmZmZ dd	lmZmZ dd
lmZ ddlm Z  ddlm!Z! ddl"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/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZA ddlBmCZCmDZDmEZE  G d„ d¦  «        ZFdad„ZGi deHejI        f“deJ“deJ“deJ“deHejI        f“deHejI        f“d eKejL        f“d!e	“d"eMejN        f“d#eHejI        f“d$eHejI        f“d%eHejI        f“d&eHejI        f“d'eHejI        f“d(eKejL        f“d)eKejL        f“d*eHejI        f“i d+eHejI        f“d,eKejL        f“d-eKejL        f“d.e1“d/eHejI        f“d0eHejI        f“d1eHejI        f“d2eKejL        f“d3eHejI        f“d4eKejL        f“d5eHejI        f“d6eKejL        f“d7eKejL        f“d8eHejI        f“d9eHejI        f“d:eHejI        f“d;eHejI        f“¥i d<eJ“d=eHejI        f“d>eMejN        f“d?eHejI        f“d@eHejI        f“dAeHejI        f“dBeHejI        f“dCeMejN        f“dDeHejI        f“dEeJ“dFeKejL        f“dGeJ“dHeMejN        f“dIeHejI        f“dJeHejI        f“dKeKejL        f“dLeHejI        f“¥eKejL        feOeHejI        feOeKejL        fdMœ¥ZPdN„ ZQdOee         dPe dQe>fdR„ZRdadSefdT„ZSdU„ ZTdV„ ZUdW„ ZVdX„ ZWdY„ ZXejY        jZ        e6j[        ejY        j\        e6j]        ejY        j^        e6j_        ejY        j`        e6ja        ejY        jb        e6jc        ejY        jd        e6je        ejY        jf        e6jg        ejY        jh        e6ji        ejY        jj        e6jk        ejY        jl        e6jm        ejY        jn        e6jo        iZpdZ„ Zq G d[„ d\e¦  «        Zrd]„ Zsd^„ ZtdadOee         d_eOdQee=         fd`„ZudS )bz8
Compier to convert Qiskit control-flow to Aer backend.
é    N)Úcopy)ÚList)Úwarn)ÚExecutor)ÚQuantumCircuitÚClbitÚClassicalRegisterÚParameterExpression)ÚExprÚUnaryÚBinaryÚVarÚValueÚExprVisitorÚ	iter_vars)ÚBoolÚUint)Ú
Initialize)ÚOptions)ÚStore)ÚWhileLoopOpÚ	ForLoopOpÚIfElseOpÚBreakLoopOpÚContinueLoopOpÚSwitchCaseOpÚCASE_DEFAULT)ÚPassManager)Ú	Decompose©ÚAerError)Ú
NoiseModel)ÚAerUnaryExprÚ
AerUnaryOpÚAerBinaryExprÚAerBinaryOpÚAerUintValueÚAerBoolValueÚAerUintÚAerBoolÚAerCastÚAerVarÚ
AerCircuitÚ	AerConfigé   )Úcircuit_optypesÚCircuitHeaderé   )ÚAerMarkÚAerJumpÚAerStorec                   ój   — e Zd ZdZd„ Zdd„Zd„ Zedd„¦   «         Zdd„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚAerCompilerzRAer Compiler to convert instructions of control-flow to mark and jump instructionsc                 ó   — d| _         d S )Néÿÿÿÿ)Ú_last_flow_id)Úselfs    úV/granary/edev/quantum/lib/python3.11/site-packages/qiskit_aer/backends/aer_compiler.pyÚ__init__zAerCompiler.__init__E   s   € ØˆÔÐÐó    Nc                 óp  — t          |t          ¦  «        r|g}|€t          |¦  «        dgz  }nt          |¦  «        }t          |t          ¦  «        rÝg }t	          |¦  «        D ]Ã\  }}|                      |||         ¦  «        }|                      |||         ¦  «        rqt          t          ddg¦  «        g¦  «        }| 	                    |  
                    |dd¦  «        ¦  «        }|                     |¦  «         t          |¦  «        ||<   Œ®|                     |¦  «         ŒÄ|€|S ||fS |€|S ||fS )a@  compile a circuit that have control-flow instructions.

        Args:
            circuits (QuantumCircuit or list): The QuantumCircuits to be compiled
            optypes (list): list of instruction type sets for each circuit
                            (default: None).

        Returns:
            list: A list QuantumCircuit without control-flow
                  if optypes is None.
            tuple: A tuple of a list of quantum circuits and list of
                   compiled circuit optypes for each circuit if
                   optypes kwarg is not None.
        NÚmarkÚjump)Ú
isinstancer   ÚlenÚlistÚ	enumerateÚ_inline_initializeÚ_is_dynamicr   r   ÚrunÚ_inline_circuitÚappendr0   )	r;   ÚcircuitsÚoptypesÚcompiled_optypesÚcompiled_circuitsÚidxÚcircuitÚpmÚcompiled_circs	            r<   ÚcompilezAerCompiler.compileH   sa  € õ �h¥Ñ/Ô/ð 	"Ø �zˆHØˆ?Ý" 8™}œ}°¨vÑ5ÐÐõ  $ G™}œ}ÐÝ�h¥Ñ%Ô%ð 	7Ø "ÐÝ )¨(Ñ 3Ô 3ð 6ð 6‘��Wà×1Ò1°'Ð;KÈCÔ;PÑQÔQ�Ø×#Ò# GÐ-=¸cÔ-BÑCÔCð 
6Ý$¥i°¸Ð0@Ñ&AÔ&AÐ%BÑCÔC�BØ$&§F¢F¨4×+?Ò+?ÀÈÈtÑ+TÔ+TÑ$UÔ$U�Mð &×,Ò,¨]Ñ;Ô;Ð;å,;¸MÑ,JÔ,JÐ$ SÑ)Ð)à%×,Ò,¨WÑ5Ô5Ð5Ð5ØˆØ(Ð(Ø$Ð&6Ð6Ð6àˆ?ØˆOØ˜Ð Ð r>   c                 ó¨  — t          |t          ¦  «        rt          |vr|S |j        D ]X}|j        }t          |t          ¦  «        r:t          |j        d         t          ¦  «        rt          |j        ¦  «        dk    r nŒY|S |                     ¦   «         }g |_        |j        D ]¬}|j        |j	        |j
        }}}t          |t          ¦  «        rit          |j        d         t          ¦  «        rt          |j        ¦  «        dk    r1|                     |j                             ¦   «         ||d¬¦  «         Œ•|                     |||¦  «         Œ­|S )z=inline initialize.definition gates if statevector is not usedr   r/   T)Úinplace)rB   Úsetr   ÚdataÚ	operationÚparamsÚcomplexrC   r   ÚqubitsÚclbitsÚcomposeÚ
definitionÚ	decomposeÚ_append)r;   ÚcircÚoptypeÚdatumÚinstÚnew_circÚqargsÚcargss           r<   rF   zAerCompiler._inline_initializev   sO  € å�f�cÑ"Ô"ð 	¥z¸Ð'?Ð'?ØˆKà”Yð 	ð 	ˆEØ”?ˆDÝ˜$¥
Ñ+Ô+ð Ý ¤¨A¤µÑ8Ô8ðÝ>AÀ$Ä+Ñ>NÔ>NÐRSÒ>SÐ>Sà�øàˆKà—9’9‘;”;ˆØˆŒØ”Yð 	5ð 	5ˆEØ!&¤°%´,ÀÄ˜�%ˆDÝ˜$¥
Ñ+Ô+ð 5Ý ¤¨A¤µÑ8Ô8ð5Ý>AÀ$Ä+Ñ>NÔ>NÐRSÒ>SÐ>Sð × Ò  ¤×!:Ò!:Ñ!<Ô!<¸eÀUÐTXÐ ÑYÔYÐYÐYà× Ò   u¨eÑ4Ô4Ð4Ð4àˆr>   c                 ó2  — t          | t          ¦  «        sdS t          t          t          t
          t          t          f}t          |t          ¦  «        r"t          | 
                    |¦  «        ¦  «        S | j        D ]}t          |j        |¦  «        r dS ŒdS )z:check whether a circuit contains control-flow instructionsFT)rB   r   r   r   r   r   r   r   rV   ÚboolÚintersectionrW   rX   )rP   rb   Úcontrolflow_typesÚinstructions       r<   rG   zAerCompiler._is_dynamic’   s¥   € õ ˜'¥>Ñ2Ô2ð 	Ø�5õ ÝÝÝÝÝð
Ðõ �f�cÑ"Ô"ð 	@Ý˜×+Ò+Ð,=Ñ>Ô>Ñ?Ô?Ð?ð #œ<ð 	ð 	ˆKÝ˜+Ô/Ð1BÑCÔCð Ø�t�tðð ˆur>   c                 ó¬  — |                      ¦   «         }d„ t          j        |j        |j        ¦  «        D ¦   «         }|j        D �]�}t          |j        t          ¦  «        r@| 	                    ¦   «          |  
                    |||¦  «         | 	                    ¦   «          Œ]t          |j        t          ¦  «        r@| 	                    ¦   «          |                      |||¦  «         | 	                    ¦   «          Œ·t          |j        t          ¦  «        rC| 	                    ¦   «          |                      |||||¦  «         | 	                    ¦   «          �Œt          |j        t          ¦  «        rC| 	                    ¦   «          |                      |||||¦  «         | 	                    ¦   «          �Œqt          |j        t"          ¦  «        r<|                     t'          ||j        |j        ¦  «        |j        |j        ¦  «         �ŒÇt          |j        t,          ¦  «        r<|                     t'          ||j        |j        ¦  «        |j        |j        ¦  «         �Œt          |j        t.          ¦  «        rA|                     t1          |j        |j        |j        ¦  «        |j        |j        ¦  «         �Œx|                     |¦  «         �Œ�|S )a  convert control-flow instructions to mark and jump instructions

        Args:
            circ (QuantumCircuit): The QuantumCircuit to be compiled
            continue_label (str): label name for continue.
            break_label (str): label name for break.
            bit_map (dict[Bit, Bit]): mapping of virtual bits in the current circuit to the bit they
                represent in the outermost circuit.

        Returns:
            QuantumCircuit: QuantumCircuit without control-flow instructions
        c                 ó   — i | ]}||“ŒS © ro   )Ú.0Úbits     r<   ú
<dictcomp>z/AerCompiler._inline_circuit.<locals>.<dictcomp>º   s   € ÐOÐOÐO �3˜ÐOÐOÐOr>   )Úcopy_empty_likeÚ	itertoolsÚchainr[   r\   rW   rB   rX   r   ÚbarrierÚ_inline_for_loop_opr   Ú_inline_while_loop_opr   Ú_inline_if_else_opr   Ú_inline_switch_case_opr   r`   r4   Ú
num_qubitsÚ
num_clbitsr   r   r5   )r;   ra   Úcontinue_labelÚbreak_labelÚbit_mapÚretrl   s          r<   rI   zAerCompiler._inline_circuit¬   s…  € ð ×"Ò"Ñ$Ô$ˆØOÐO¥y¤°s´zÀ3Ä:Ñ'NÔ'NÐOÑOÔOˆàœ9ð #	)ñ #	)ˆKõ ˜+Ô/µÑ;Ô;ð )Ø—’‘”�Ø×(Ò(¨°c¸7ÑCÔCÐCØ—’‘”��Ý˜KÔ1µ;Ñ?Ô?ð )Ø—’‘”�Ø×*Ò*¨;¸¸WÑEÔEÐEØ—’‘”��Ý˜KÔ1µ8Ñ<Ô<ð )Ø—’‘”�Ø×'Ò'¨°^À[ÐRUÐW^Ñ_Ô_Ð_Ø—’‘”�‘Ý˜KÔ1µ<Ñ@Ô@ð )Ø—’‘”�Ø×+Ò+¨K¸ÈÐVYÐ[bÑcÔcÐcØ—’‘”�‘Ý˜KÔ1µ;Ñ?Ô?ð )Ø—’Ý˜K¨¬¸¼ÑHÔHÈ#Ì*ÐVYÔV`ñô ð ñ õ ˜KÔ1µ>ÑBÔBð )Ø—’Ý˜N¨C¬N¸C¼NÑKÔKÈSÌZÐY\ÔYcñô ð ñ õ ˜KÔ1µ5Ñ9Ô9ð )Ø—’Ý˜Sœ^¨S¬^¸[Ô=RÑSÔSØ”JØ”Jñô ð ñ ð —’˜KÑ(Ô(Ð(Ñ(Øˆ
r>   c                 óÆ  ‡— t          |t          ¦  «        r|S t          |d         t          ¦  «        r‰|d                  |d         fS t          |d         t          ¦  «        r|S t          |d         t          ¦  «        rÃt          |d         j        t          ¦  «        r-t	          ‰|d         j                 |d         j        ¦  «        }nlt          |d         j        t          ¦  «        r3t	          ˆfd„|d         j        D ¦   «         |d         j        ¦  «        }nt          d|d         › d�¦  «        ‚||d         fS t          d|d         j        › d�¦  «        ‚)z4Convert a condition tuple according to the wire map.r   r/   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   )rp   Úclbitr   s     €r<   ú
<listcomp>z9AerCompiler._convert_jump_conditional.<locals>.<listcomp>ï   s   ø€ ÐJÐJÐJ¨u˜G EœNÐJÐJÐJr>   z2jump condition does not support this tyep of Var: ú.z jump condition does not support )	rB   r   r   r	   r   ÚvarÚtyper!   Ú	__class__)r;   Ú
cond_tupler   Úexprs     ` r<   Ú_convert_jump_conditionalz%AerCompiler._convert_jump_conditionalâ   s_  ø€ å�j¥$Ñ'Ô'ð 	)ØÐÝ˜
 1œ¥uÑ-Ô-ð 	)Ø˜J qœMÔ*¨J°q¬MÐ:Ð:Ý˜
 1œÕ'8Ñ9Ô9ð 	)àÐÝ˜
 1œ¥sÑ+Ô+ð 		)Ý˜* Qœ-Ô+­UÑ3Ô3ð Ý˜7 :¨a¤=Ô#4Ô5°zÀ!´}Ô7IÑJÔJ��Ý˜J qœMÔ-Õ/@ÑAÔAð ÝÐJÐJÐJÐJ¸
À1¼Ô8IÐJÑJÔJÈJÐWXÌMÔL^Ñ_Ô_��åØYÈÐTUÌÐYÐYÐYñô ð ð ˜* Qœ-Ð(Ð(åÐT¸*ÀQ¼-Ô:QÐTÐTÐTÑUÔUÐUr>   c                 ó>  ‡— t          ¦   «         }t          |¦  «        D ]}}t          |j        t          ¦  «        r!|                     ‰|j                 ¦  «         Œ=t          |j        t          ¦  «        r&|                     ˆfd„|j        D ¦   «         ¦  «         Œ~|S )Nc              3   ó(   •K  — | ]}‰|         V — Œd S ©Nro   )rp   rq   r   s     €r<   ú	<genexpr>z4AerCompiler._list_clbit_from_expr.<locals>.<genexpr>þ   s'   øè è € Ð;Ð;¨C˜7 3œ<Ð;Ð;Ð;Ð;Ð;Ð;r>   )rV   r   rB   r†   r   Úaddr	   Úupdate)r;   r   rŠ   r€   r†   s    `   r<   Ú_list_clbit_from_exprz!AerCompiler._list_clbit_from_exprø   s•   ø€ Ý‰eŒeˆÝ˜T‘?”?ð 	<ð 	<ˆCÝ˜#œ'¥5Ñ)Ô)ð <Ø—’˜ ¤Ô(Ñ)Ô)Ð)Ð)Ý˜CœGÕ%6Ñ7Ô7ð <Ø—
’
Ð;Ð;Ð;Ð;°3´7Ð;Ñ;Ô;Ñ;Ô;Ð;øØˆ
r>   c           
      óº  ‡‡— ˆfd„|j         D ¦   «         }ˆfd„|j        D ¦   «         }t          |¦  «        dk    r|j         }|j        j        \  }}}ˆfd„t          j        t          |j         |j         ¦  «        t          |j        |j        ¦  «        ¦  «        D ¦   «         Š| xj        dz  c_        | j        }	d|	› �}
d}|
› d�}|D ]Í}|
› d	|› �}|  	                    |||‰¦  «        }|�| 
                    ||i¦  «        }|D ]P}|                     |                     ˆfd
„|j         D ¦   «         ˆfd„|j        D ¦   «         ¬¦  «        ||¦  «         ŒQ|                     t          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         ŒÎ|�B|                     t          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         dS dS )z1inline for_loop body while iterating its indexsetc                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   Úqr   s     €r<   r„   z3AerCompiler._inline_for_loop_op.<locals>.<listcomp>  ó   ø€ Ð8Ð8Ð8 �˜”Ð8Ð8Ð8r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   Úcr   s     €r<   r„   z3AerCompiler._inline_for_loop_op.<locals>.<listcomp>  r—   r>   r   c                 ó(   •— i | ]\  }}|‰|         “ŒS ro   ro   ©rp   ÚinnerÚouterr   s      €r<   rr   z3AerCompiler._inline_for_loop_op.<locals>.<dictcomp>	  s3   ø€ ð 
ð 
ð 
á��uð �7˜5”>ð
ð 
ð 
r>   r/   Úloop_NÚ_endÚ_c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   rq   Úinner_bit_maps     €r<   r„   z3AerCompiler._inline_for_loop_op.<locals>.<listcomp>  ó   ø€ ÐJÐJÐJ°s ¨cÔ 2ÐJÐJÐJr>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r£   s     €r<   r„   z3AerCompiler._inline_for_loop_op.<locals>.<listcomp>   r¥   r>   ©r[   r\   )r[   r\   rC   rX   rY   rt   ru   Úzipr:   rI   Úassign_parametersrJ   Úreplacer3   )r;   rl   Úparentr   rf   rg   ÚindexsetÚloop_parameterÚbodyÚloop_idÚ	loop_nameÚinlined_bodyr~   Úindexr}   rd   r¤   s      `            @r<   rw   zAerCompiler._inline_for_loop_op  sF  øø€ à8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆØ8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆåˆu‰:Œ:˜Š?ˆ?Ø”MˆEØ)4Ô)>Ô)EÑ&ˆ�. $ð
ð 
ð 
ð 
å )¤Ý�D”K Ô!3Ñ4Ô4Ý�D”K Ô!3Ñ4Ô4ñ!ô !ð
ñ 
ô 
ˆð 	ÐÔ˜aÑÐÔØÔ$ˆØ%˜GÐ%Ð%ˆ	àˆØ"Ð(Ð(Ð(ˆØð 	Yð 	YˆEØ )Ð3Ð3¨EÐ3Ð3ˆNØ×/Ò/°°nÀkÐS`ÑaÔaˆLØÐ)Ø+×=Ò=¸~ÈuÐ>UÑVÔV�Ø$ð ð �Ø—’Ø—L’LØJÐJÐJÐJ¸d¼kÐJÑJÔJØJÐJÐJÐJ¸d¼kÐJÑJÔJð !ñ ô ð Øñô ð ð ð �MŠM�' .µ#°e±*´*½cÀ%¹j¼jÑIÔIÈ5ÐRWÑXÔXÐXÐXàÐ#Ø�MŠM�' +­s°5©z¬z½3¸u¹:¼:ÑFÔFÈÈuÑUÔUÐUÐUÐUð $Ð#r>   c           	      óJ  ‡‡— |                       |j        j        ‰¦  «        }|j        j        \  }| xj        dz  c_        | j        }d|› �}|› d�}|› d�}	|› d�}
ˆfd„t          j        t          |j        |j        ¦  «        t          |j	        |j	        ¦  «        ¦  «        D ¦   «         Š|  
                    |||
‰¦  «        }ˆfd„|j        D ¦   «         }ˆfd„|j	        D ¦   «         }t          |¦  «        d	k    r|j        }t          |t          ¦  «        r|                      ‰|¦  «        }n?t          |d	         t          ¦  «        r‰|d	                  h}nˆfd
„|d	         D ¦   «         }t!          |¦  «                             |¦  «        t!          |j	        ¦  «        z
  }|                       |‰¦  «        }|                     t'          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                     t)          |	t          |¦  «        t          |¦  «        ¦  «                             |¦  «        ||¦  «         |                     t)          |
t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                     t'          |	t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |D ]P}|                     |                     ˆfd„|j        D ¦   «         ˆfd„|j	        D ¦   «         ¬¦  «        ||¦  «         ŒQ|                     t)          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                     t'          |
t          |¦  «        t          |¦  «        ¦  «        ||¦  «         dS )z6inline while_loop body with jump and mark instructionsr/   Úwhile_Ú	_continueÚ_startr    c                 ó(   •— i | ]\  }}|‰|         “ŒS ro   ro   rœ   s      €r<   rr   z5AerCompiler._inline_while_loop_op.<locals>.<dictcomp>6  s3   ø€ ð 
ð 
ð 
á��uð �7˜5”>ð
ð 
ð 
r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r•   s     €r<   r„   z5AerCompiler._inline_while_loop_op.<locals>.<listcomp>C  r—   r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r™   s     €r<   r„   z5AerCompiler._inline_while_loop_op.<locals>.<listcomp>D  r—   r>   r   c                 ó    •— h | ]
}‰|         ’ŒS ro   ro   r™   s     €r<   ú	<setcomp>z4AerCompiler._inline_while_loop_op.<locals>.<setcomp>N  ó   ø€ ÐAÐAÐA¨˜' !œ*ÐAÐAÐAr>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   rq   Úinline_bit_maps     €r<   r„   z5AerCompiler._inline_while_loop_op.<locals>.<listcomp>^  ó   ø€ ÐGÐGÐG°C˜N¨3Ô/ÐGÐGÐGr>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r¾   s     €r<   r„   z5AerCompiler._inline_while_loop_op.<locals>.<listcomp>_  rÀ   r>   r§   N)r‹   rX   Ú	conditionrY   r:   rt   ru   r¨   r[   r\   rI   rC   rB   r   r’   r   rV   ÚunionrJ   r3   r4   Úset_conditionalrª   )r;   rl   r«   r   Úcondition_tupler®   r¯   r°   r}   Úloop_start_labelr~   r±   rf   rg   Ú
mark_cargsÚ	c_if_argsrd   r¿   s      `             @r<   rx   z!AerCompiler._inline_while_loop_op*  sµ  øø€ à×8Ò8¸Ô9NÔ9XÐZaÑbÔbˆØÔ'Ô.‰ˆàÐÔ˜aÑÐÔØÔ$ˆØ&˜WÐ&Ð&ˆ	à%Ð0Ð0Ð0ˆØ'Ð/Ð/Ð/ÐØ"Ð(Ð(Ð(ˆð
ð 
ð 
ð 
å )¤Ý�D”K Ô!3Ñ4Ô4Ý�D”K Ô!3Ñ4Ô4ñ!ô !ð
ñ 
ô 
ˆð ×+Ò+ØØØØñ	
ô 
ˆð 9Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆØ8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆåˆu‰:Œ:˜Š?ˆ?Ø”MˆEå�o¥tÑ,Ô,ð 	BØ×3Ò3°G¸_ÑMÔMˆJˆJÝ˜¨Ô*­EÑ2Ô2ð 	BØ! /°!Ô"4Ô5Ð6ˆJˆJàAÐAÐAÐA¨o¸aÔ.@ÐAÑAÔAˆJÝ˜‘Z”Z×%Ò% jÑ1Ô1µC¸Ô8JÑ4KÔ4KÑKˆ
à×2Ò2°?ÀGÑLÔLˆ	à�Š•g˜n­c°%©j¬j½#¸j¹/¼/ÑJÔJÈEÐS]Ñ^Ô^Ð^Ø�ŠÝÐ$¥c¨%¡j¤jµ#°j±/´/ÑBÔB×RÒRÐS\Ñ]Ô]ØØñ	
ô 	
ð 	
ð
 	�Š•g˜k­3¨u©:¬:µs¸:±´ÑGÔGÈÐPZÑ[Ô[Ð[Ø�Š•gÐ.µ°E±
´
½CÀ
¹O¼OÑLÔLÈeÐU_Ñ`Ô`Ð`Ø ð 	ð 	ˆDØ�MŠMØ—’ØGÐGÐGÐG¸4¼;ÐGÑGÔGØGÐGÐGÐG¸4¼;ÐGÑGÔGð ñ ô ð Øñô ð ð ð 	�Š•g˜n­c°%©j¬j½#¸j¹/¼/ÑJÔJÈEÐS]Ñ^Ô^Ð^Ø�Š•g˜k­3¨u©:¬:µs¸:±´ÑGÔGÈÐPZÑ[Ô[Ð[Ð[Ð[r>   c           	      óö  ‡‡‡— |j         j        }|j         j        \  }}| xj        dz  c_        | j        }	d|	› �}
|
› d�}|
› d�}|r|
› d�}n|}|                      |‰¦  «        }ˆfd„|j        D ¦   «         }ˆfd„|j        D ¦   «         }t          |¦  «        dk    r|j        }t          |¦  «        dk    r|j        }t          |t          ¦  «        r|  
                    ‰|¦  «        }n?t          |d         t          ¦  «        r‰|d                  h}nˆfd	„|d         D ¦   «         }t          |¦  «                             |¦  «        t          |j        ¦  «        z
  }ˆfd
„t          j        t!          |j        |j        ¦  «        t!          |j        |j        ¦  «        ¦  «        D ¦   «         Š|                     t%          |t          |¦  «        t          |¦  «        ¦  «                             |¦  «        ||¦  «         |                     t%          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                     t)          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                      |||‰¦  «        }|j        D ]P}|                     |                     ˆfd„|j        D ¦   «         ˆfd„|j        D ¦   «         ¬¦  «        ||¦  «         ŒQ|�rAˆfd„t          j        t!          |j        |j        ¦  «        t!          |j        |j        ¦  «        ¦  «        D ¦   «         Š|                     t%          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                     t)          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         |                      |||‰¦  «        }|j        D ]P}|                     |                     ˆfd„|j        D ¦   «         ˆfd„|j        D ¦   «         ¬¦  «        ||¦  «         ŒQ|                     t)          |t          |¦  «        t          |¦  «        ¦  «        ||¦  «         dS )zGinline true and false bodies of if_else with jump and mark instructionsr/   Úif_Ú_truer    Ú_elsec                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r•   s     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>y  r—   r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r™   s     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>z  r—   r>   r   c                 ó    •— h | ]
}‰|         ’ŒS ro   ro   r™   s     €r<   r»   z1AerCompiler._inline_if_else_op.<locals>.<setcomp>ˆ  r¼   r>   c                 ó(   •— i | ]\  }}|‰|         “ŒS ro   ro   rœ   s      €r<   rr   z2AerCompiler._inline_if_else_op.<locals>.<dictcomp>‹  s3   ø€ ð 
ð 
ð 
á��uð �7˜5”>ð
ð 
ð 
r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   rq   Útrue_bit_maps     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>ž  ó   ø€ ÐEÐEÐE°#˜L¨Ô-ÐEÐEÐEr>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   rÒ   s     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>Ÿ  rÔ   r>   r§   c                 ó(   •— i | ]\  }}|‰|         “ŒS ro   ro   rœ   s      €r<   rr   z2AerCompiler._inline_if_else_op.<locals>.<dictcomp>¦  s3   ø€ ð ð ð á �E˜5ð �w˜u”~ðð ð r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   ©rp   rq   Úfalse_bit_maps     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>³  r¥   r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   rØ   s     €r<   r„   z2AerCompiler._inline_if_else_op.<locals>.<listcomp>´  r¥   r>   N)rX   rÂ   rY   r:   r‹   r[   r\   rC   rB   r   r’   r   rV   rÃ   rt   ru   r¨   rJ   r4   rÄ   r3   rI   rW   rª   )r;   rl   r}   r~   r«   r   rÅ   Ú	true_bodyÚ
false_bodyÚif_idÚif_nameÚif_true_labelÚif_end_labelÚif_else_labelrÈ   rf   rg   rÇ   Úchildrd   rÙ   rÓ   s        `              @@r<   ry   zAerCompiler._inline_if_else_opg  sÀ  øøø€ à%Ô/Ô9ˆØ +Ô 5Ô <Ñˆ	�:àÐÔ˜aÑÐÔØÔ"ˆØ˜�-�-ˆà"Ð)Ð)Ð)ˆØ!Ð'Ð'Ð'ˆØð 	)Ø&Ð-Ð-Ð-ˆMˆMà(ˆMà×2Ò2°?ÀGÑLÔLˆ	à8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆØ8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆåˆu‰:Œ:˜Š?ˆ?Ø”MˆEõ ˆu‰:Œ:˜Š?ˆ?Ø”MˆEå�o¥tÑ,Ô,ð 	BØ×3Ò3°G¸_ÑMÔMˆJˆJÝ˜¨Ô*­EÑ2Ô2ð 	BØ! /°!Ô"4Ô5Ð6ˆJˆJàAÐAÐAÐA¨o¸aÔ.@ÐAÑAÔAˆJÝ˜‘Z”Z×%Ò% jÑ1Ô1µC¸Ô8JÑ4KÔ4KÑKˆ
ð
ð 
ð 
ð 
å )¤Ý�IÔ$ kÔ&8Ñ9Ô9Ý�IÔ$ kÔ&8Ñ9Ô9ñ!ô !ð
ñ 
ô 
ˆð 	�ŠÝ�M¥3 u¡:¤:­s°:©¬Ñ?Ô?×OÒOÐPYÑZÔZØØñ	
ô 	
ð 	
ð
 	�Š•g˜m­S°©Z¬Z½¸Z¹¼ÑIÔIÈ5ÐR\Ñ]Ô]Ð]Ø�Š•g˜m­S°©Z¬Z½¸Z¹¼ÑIÔIÈ5ÐR\Ñ]Ô]Ð]Ø×$Ò$ Y°ÀÈ\ÑZÔZˆØ”Jð 	ð 	ˆDØ�MŠMØ—’ØEÐEÐEÐE¸¼ÐEÑEÔEØEÐEÐEÐE¸¼ÐEÑEÔEð ñ ô ð Øñô ð ð ð ñ 	ðð ð ð å$-¤OÝ˜
Ô)¨;Ô+=Ñ>Ô>Ý˜
Ô)¨;Ô+=Ñ>Ô>ñ%ô %ðñ ô ˆMð �MŠM�' ,µ°E±
´
½CÀ
¹O¼OÑLÔLÈeÐU_Ñ`Ô`Ð`Ø�MŠM�' -µ°U±´½SÀ¹_¼_ÑMÔMÈuÐV`ÑaÔaÐaØ×(Ò(¨°^À[ÐR_Ñ`Ô`ˆEØœ
ð ð �Ø—’Ø—L’LØJÐJÐJÐJ¸d¼kÐJÑJÔJØJÐJÐJÐJ¸d¼kÐJÑJÔJð !ñ ô ð Øñô ð ð ð 	�Š•g˜l­C°©J¬J½¸J¹¼ÑHÔHÈ%ÐQ[Ñ\Ô\Ð\Ð\Ð\r>   c                 óR	  ‡ ‡‡‡— ‰j                              ¦   «         }‰ xj        dz  c_        ‰ j        }d|› �}ˆfd„‰j        D ¦   «         }	ˆfd„‰j        D ¦   «         }
t          |	¦  «        dk    r|j        }	t          ‰j         j        t          ¦  «        r‰‰j         j                 h}nXt          ‰j         j        t          ¦  «        r!‰  
                    ‰‰j         j        ¦  «        }nˆfd„‰j         j        D ¦   «         }t          |
¦  «                             |¦  «        t          ‰j        ¦  «        z
  }|› d�}d}t          j        d	g d
¢¦  «        }g }t          |¦  «        D ]Ê\  }}|�t!          d¦  «        ‚ ||› d|› �ˆˆˆ fd„|d         D ¦   «         ˆfd„t#          j        t'          |d         j        ‰j        ¦  «        t'          |d         j        ‰j        ¦  «        ¦  «        D ¦   «         |d         ¬
¦  «        Š|                     ‰¦  «         t*          |d         v r‰j        }ŒË|€|}|D ]äŠ‰j        D ]Ú}t          |¦  «        dk    rÅt          |d         t          ¦  «        rRt1          t0          j        j        |d         t7          |d         |d         j        ¦  «        t;          ¦   «         ¦  «        }|                     t=          ‰j        t          |	¦  «        t          |¦  «        ¦  «                             |¦  «        |	|¦  «         ŒÛŒå|                     t=          |t          |	¦  «        t          |¦  «        ¦  «        |	|¦  «         |D �]Š|                     tA          ‰j        t          |	¦  «        t          |¦  «        ¦  «        |	|¦  «         ‰  !                    ‰j"        ||‰j#        ¦  «        }|j$        D ]P}|                     | %                    ˆfd„|j        D ¦   «         ˆfd„|j        D ¦   «         ¬¦  «        |	|
¦  «         ŒQ|                     t=          |t          |	¦  «        t          |¦  «        ¦  «        |	|¦  «         �Œ|                     tA          |t          |	¦  «        t          |¦  «        ¦  «        |	|¦  «         dS )z3inline switch cases with jump and mark instructionsr/   Úswitch_c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r•   s     €r<   r„   z6AerCompiler._inline_switch_case_op.<locals>.<listcomp>Ä  r—   r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   r™   s     €r<   r„   z6AerCompiler._inline_switch_case_op.<locals>.<listcomp>Å  r—   r>   r   c                 ó    •— h | ]
}‰|         ’ŒS ro   ro   r™   s     €r<   r»   z5AerCompiler._inline_switch_case_op.<locals>.<setcomp>Ï  s   ø€ ÐNÐNÐN¨A˜W QœZÐNÐNÐNr>   r    NÚCaseData)ÚlabelÚ	args_listr   r®   z'cases after the default are unreachabler¡   c                 ón   •— g | ]1}|t           k    r"‰                     ‰j        j        |f‰¦  «        ng ‘Œ2S ro   )r   r‹   rX   Útarget)rp   Ú
switch_valr   rl   r;   s     €€€r<   r„   z6AerCompiler._inline_switch_case_op.<locals>.<listcomp>Ü  sb   ø€ ð 	ð 	ð 	ð #ð &­Ò5Ð5ð ×6Ò6Ø(Ô2Ô9¸:ÐFÈñô ð ð  ð	ð 	ð 	r>   c                 ó(   •— i | ]\  }}|‰|         “ŒS ro   ro   rœ   s      €r<   rr   z6AerCompiler._inline_switch_case_op.<locals>.<dictcomp>æ  s3   ø€ ð ð ð á$˜˜uð ˜7 5œ>ðð ð r>   c                 ó*   •— g | ]}‰j         |         ‘ŒS ro   ©r   ©rp   rq   Ú	case_datas     €r<   r„   z6AerCompiler._inline_switch_case_op.<locals>.<listcomp>  ó!   ø€ ÐNÐNÐN¸3 	Ô 1°#Ô 6ÐNÐNÐNr>   c                 ó*   •— g | ]}‰j         |         ‘ŒS ro   rð   rñ   s     €r<   r„   z6AerCompiler._inline_switch_case_op.<locals>.<listcomp>  ró   r>   r§   )&rX   Úcases_specifierr:   r[   r\   rC   rB   rì   r   r   r’   rV   rÃ   ÚcollectionsÚ
namedtuplerE   r!   rt   ru   r¨   rJ   r   ré   rê   r   ÚOpÚEQUALr   r‡   r   r4   rÄ   r3   rI   r®   r   rW   rª   )r;   rl   r}   r~   r«   r   ÚcasesÚ	switch_idÚswitch_namerf   rg   Útarget_clbitsrÇ   Úswitch_end_labelÚcase_default_labelrè   Úcase_data_listÚiÚcaseÚ	case_argsrâ   rd   rò   s   ``   `                @r<   rz   z"AerCompiler._inline_switch_case_op¼  sû  øøøø€ àÔ%×5Ò5Ñ7Ô7ˆàÐÔ˜aÑÐÔØÔ&ˆ	Ø+ 	Ð+Ð+ˆà8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆØ8Ð8Ð8Ð8 [Ô%7Ð8Ñ8Ô8ˆåˆu‰:Œ:˜Š?ˆ?Ø”MˆEå�kÔ+Ô2µEÑ:Ô:ð 	OØ$ [Ô%:Ô%AÔBÐCˆMˆMÝ˜Ô-Ô4µdÑ;Ô;ð 	OØ ×6Ò6°wÀÔ@UÔ@\Ñ]Ô]ˆMˆMàNÐNÐNÐN°Ô1FÔ1MÐNÑNÔNˆMÝ˜‘Z”Z×%Ò% mÑ4Ô4µs¸;Ô;MÑ7NÔ7NÑNˆ
à)Ð/Ð/Ð/ÐØ!ÐÝÔ)¨*Ð6_Ð6_Ð6_Ñ`Ô`ˆØˆÝ  Ñ'Ô'ð 	5ð 	5‰GˆAˆtØ!Ð-ÝÐHÑIÔIÐIà ˜Ø$Ð*Ð* qÐ*Ð*ð	ð 	ð 	ð 	ð 	ð 	ð '+¨1¤gð	ñ 	ô 	ðð ð ð å(1¬Ý˜D œGœN¨KÔ,>Ñ?Ô?Ý˜D œGœN¨KÔ,>Ñ?Ô?ñ)ô )ðñ ô ð ˜!”Wð'ñ ô ˆIð* ×!Ò! )Ñ,Ô,Ð,Ý˜t AœwÐ&Ð&Ø%.¤_Ð"øàÐ%Ø!1Ðà'ð 	ð 	ˆIØ&Ô0ð ð �	Ý�y‘>”> AÒ%Ð%Ý! )¨A¤,µÑ5Ô5ð Ý$*Ý"œIœOØ% aœLÝ! )¨A¤,°	¸!´Ô0AÑBÔBÝ ™FœFñ	%ô %˜	ð —M’MÝ 	¤µ°U±´½SÀ¹_¼_ÑMÔM×]Ò]Ø%ñô ð Ø"ñô ð øðð" 	�Š•gÐ0µ#°e±*´*½cÀ*¹o¼oÑNÔNÐPUÐWaÑbÔbÐbà'ð 	eñ 	eˆIØ�MŠM�' )¤/µ3°u±:´:½sÀ:¹¼ÑOÔOÐQVÐXbÑcÔcÐcØ×(Ò(Ø” °¸YÔ=Nñô ˆEð œ
ð ð �Ø—’Ø—L’LØNÐNÐNÐNÀ$Ä+ÐNÑNÔNØNÐNÐNÐNÀ$Ä+ÐNÑNÔNð !ñ ô ð Øñô ð ð ð �MŠM�'Ð"2µC¸±J´JÅÀJÁÄÑPÔPÐRWÐYcÑdÔdÐdÑdà�Š•gÐ.µ°E±
´
½CÀ
¹O¼OÑLÔLÈeÐU_Ñ`Ô`Ð`Ð`Ð`r>   rŽ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   rS   rF   ÚstaticmethodrG   rI   r‹   r’   rw   rx   ry   rz   ro   r>   r<   r7   r7   B   sø   € € € € € Ø\Ð\ð ð  ð  ð,!ð ,!ð ,!ð ,!ð\ð ð ð8 ðð ð ñ „\ðð24ð 4ð 4ð 4ðlVð Vð Vð,ð ð ð'Vð 'Vð 'VðR;\ð ;\ð ;\ðzS]ð S]ð S]ðj^að ^að ^að ^að ^ar>   r7   c                 óF   — t          ¦   «                              | |¦  «        S )z?
    compile a circuit that have control-flow instructions
    )r7   rS   )rK   rL   s     r<   Úcompile_circuitr
    s   € õ ‰=Œ=× Ò  ¨7Ñ3Ô3Ð3r>   ÚshotsÚmethodÚdeviceÚ	precisionÚmax_job_sizeÚmax_shot_sizeÚenable_truncationÚexecutorÚzero_thresholdÚvalidation_thresholdÚmax_parallel_threadsÚmax_parallel_experimentsÚmax_parallel_shotsÚmax_memory_mbÚfusion_enableÚfusion_verboseÚfusion_max_qubitÚfusion_thresholdÚaccept_distributed_resultsÚmemoryÚnoise_modelÚseed_simulatorÚcuStateVec_enableÚblocking_qubitsÚblocking_enableÚchunk_swap_buffer_qubitsÚbatched_shots_gpuÚbatched_shots_gpu_max_qubitsÚshot_branching_enableÚshot_branching_sampling_enableÚnum_threads_per_deviceÚstatevector_parallel_thresholdÚstatevector_sample_measure_optÚ%stabilizer_max_snapshot_probabilitiesÚ#extended_stabilizer_sampling_methodÚ*extended_stabilizer_metropolis_mixing_timeÚ'extended_stabilizer_approximation_errorÚ+extended_stabilizer_norm_estimation_samplesÚ/extended_stabilizer_norm_estimation_repetitionsÚ&extended_stabilizer_parallel_thresholdÚ2extended_stabilizer_probabilities_snapshot_samplesÚ)matrix_product_state_truncation_thresholdÚ'matrix_product_state_max_bond_dimensionÚmps_sample_measure_algorithmÚmps_log_dataÚmps_swap_directionÚchop_thresholdÚmps_parallel_thresholdÚmps_omp_threadsÚ
mps_lapackÚ"tensor_network_num_sampling_qubits)Úuse_cuTensorNet_autotuningÚparameterizationsÚ fusion_parallelization_thresholdÚtarget_gpusÚruntime_parameter_bind_enablec           	      ó   — |€|S | t           vrt          d| › �¦  «        ‚t          |t           |          ¦  «        r|S t           |          d         }|t          t          t
          t          fv r\	  ||¦  «        }t          |t           |          ¦  «        s#t          d| › d|j        › d�t          d¬¦  «         |S # t          $ r Y nw xY wt          d	| › d
|j        j        › dt           |          d         j        › �¦  «        ‚)zvalidate backend.run argumentsNzinvalid argument: name=r   zA type of an option "z" should be zt but {v.__class__.__name__} was specified.Implicit cast for an argument has been deprecated as of qiskit-aer 0.12.1.é   )Ú
stacklevelzinvalid option type: name=z, type=z, expected=)ÚBACKEND_RUN_ARG_TYPESr!   rB   ÚintÚfloatri   Ústrr   r  ÚDeprecationWarningÚ	ExceptionÚ	TypeErrorrˆ   )ÚkÚvÚexpected_typer€   s       r<   Ú_validate_optionrP  `  sd  € à€yØˆØÕ%Ð%Ð%ÝÐ4°Ð4Ð4Ñ5Ô5Ð5Ý�!Õ*¨1Ô-Ñ.Ô.ð Øˆå)¨!Ô,¨QÔ/€Mà��e¥T­3Ð/Ð/Ð/ð	Ø�- Ñ"Ô"ˆCÝ˜aÕ!6°qÔ!9Ñ:Ô:ð Ýða¨Að að a¸=Ô;Qð að að aõ 'Ø ðñ ô ð ð ˆJøÝð 	ð 	ð 	ØˆDð	øøøõ ð	X Qð 	Xð 	XØ”Ô$ð	Xð 	XÝ1FÀqÔ1IÈ!Ô1LÔ1Uð	Xð 	Xñô ð s   Á-A
B8 Â8
CÃCrK   Úbackend_optionsÚreturnc                 óà  — t          d„ | D ¦   «         ¦  «        }t          d„ | D ¦   «         ¦  «        }t          ¦   «         }||_        ||_        |j                             ¦   «         D ]8\  }}t          ||¦  «        r#|�!t          ||¦  «        }t          |||¦  «         Œ9|                     ¦   «         D ]8\  }}t          ||¦  «        r#|�!t          ||¦  «        }t          |||¦  «         Œ9|S )zÞgenerates a configuration to run simulation.

    Args:
        circuits: circuit(s) to be converted
        backend_options: backend options
        run_options: run options

    Returns:
        AerConfig to run Aer
    c              3   ó$   K  — | ]}|j         V — Œd S rŽ   )r{   ©rp   rP   s     r<   r�   z&generate_aer_config.<locals>.<genexpr>�  s%   è è € Ð@Ð@¨G�WÔ'Ð@Ð@Ð@Ð@Ð@Ð@r>   c              3   ó$   K  — | ]}|j         V — Œd S rŽ   )r|   rU  s     r<   r�   z&generate_aer_config.<locals>.<genexpr>Ž  s%   è è € ÐBÐB¨g�wÔ)ÐBÐBÐBÐBÐBÐBr>   )	Úmaxr.   Úmemory_slotsÚn_qubitsÚ__dict__ÚitemsÚhasattrrP  Úsetattr)rK   rQ  Úrun_optionsr{   rX  ÚconfigÚkeyÚvalues           r<   Úgenerate_aer_configrb  €  s  € õ Ð@Ð@°xÐ@Ñ@Ô@Ñ@Ô@€JÝÐBÐB¸ÐBÑBÔBÑBÔB€Lå‰[Œ[€FØ&€FÔØ €F„OØ%Ô.×4Ò4Ñ6Ô6ð (ð (‰
ˆˆUÝ�6˜3ÑÔð 	( EÐ$5Ý$ S¨%Ñ0Ô0ˆEÝ�F˜C Ñ'Ô'Ð'øØ!×'Ò'Ñ)Ô)ð (ð (‰
ˆˆUÝ�6˜3ÑÔð 	( EÐ$5Ý$ S¨%Ñ0Ô0ˆEÝ�F˜C Ñ'Ô'Ð'øØ€Mr>   rP   c                 ó  — | j         }| j        }d}g }g }t          | j        t          ¦  «        r t          | j        j        ¦  «        dk    rd}nt          | j        ¦  «        }| j        D ]#}| 	                    |j
        |j        g¦  «         Œ$| j        D ]#}	| 	                    |	j
        |	j        g¦  «         Œ$t          d„ | j        D ¦   «         ¦  «        }
t          ||||| j
        |¬¦  «        }d„ t!          | j        ¦  «        D ¦   «         }d„ t!          | j        ¦  «        D ¦   «         }t'          ¦   «         }|                     |¦  «         ||_         ||_        ||_        i }t/          | ¦  «        D ],}||z   }||j        j        f||j
        <   ||j        j        z  }Œ-d}g }| j        D �]M}d}d}t5          |j        d	¦  «        rÒ|j        j        rÆ|j        j        \  }}d}d}t          |t:          ¦  «        rd
||         z  }|d
z  ||         z  }nT|                     ¦   «         D ]?\  }}||v r6|d
|z  z  }||t?          |¦  «                              |¦  «        z	  d
z  |z  z  }Œ@||z   }| !                    d|d›�d|d›�d|¦  «         |d
z  }|d
z  }n-t5          |j        d¦  «        r|j        j"        r|j        j"        }|tG          | |||||
|||¦	  «	        z  }| 	                    |d
z
  ¦  «         �ŒO||fS )z.assemble circuit object mapped to AER::Circuitr   ç        c              3   ón   K  — | ]0}t          |j        d d¦  «        pt          |j        dd¦  «        V — Œ1dS )Úcondition_exprNrÂ   )ÚgetattrrX   )rp   rd   s     r<   r�   z#assemble_circuit.<locals>.<genexpr>´  s]   è è € ð ð ð õ 	�”Ð 0°$Ñ7Ô7ð 	6Ý�4”> ;°Ñ5Ô5ðð ð ð ð ð r>   )rY  Ú
qreg_sizesrX  Ú
creg_sizesÚnameÚglobal_phasec                 ó   — i | ]\  }}||“Œ	S ro   ro   )rp   rO   Úqubits      r<   rr   z$assemble_circuit.<locals>.<dictcomp>Ã  ó   € ÐLÐLÐL¡J C¨�U˜CÐLÐLÐLr>   c                 ó   — i | ]\  }}||“Œ	S ro   ro   )rp   rO   rƒ   s      r<   rr   z$assemble_circuit.<locals>.<dictcomp>Ä  rn  r>   r9   NrÂ   r/   Ú0xÚXz==rf  )$r{   r|   rB   rk  r
   rC   Ú
parametersrH  ÚqregsrJ   rj  ÚsizeÚcregsÚanyrW   r1   rE   r[   r\   r-   Ú
set_headerÚ
num_memoryÚglobal_phase_angleÚ_iter_var_recursiver‡   Úwidthr\  rX   rÂ   r   r[  rD   r²   Úbfuncrf  Ú_assemble_op)rP   Úbasis_gatesr{   rx  Úextra_creg_idxrh  ri  rk  ÚqregÚcregÚis_conditionalÚheaderÚqubit_indicesÚclbit_indicesÚaer_circÚvar_heap_mapr†   Ú
memory_posÚnum_of_aer_opsÚ	index_maprd   Úconditional_regÚconditional_exprÚctrl_regÚctrl_valÚmaskÚvalrƒ   rO   s                                r<   Úassemble_circuitr‘  ž  s°  € ð Ô#€JØÔ#€JØ€Nà€JØ€Jå�7Ô'Õ)<Ñ=Ô=ð3å�Ô$Ô/Ñ0Ô0°1Ò4Ð4àˆˆå˜WÔ1Ñ2Ô2ˆà”ð 2ð 2ˆØ×Ò˜4œ9 d¤iÐ0Ñ1Ô1Ð1Ð1Ø”ð 2ð 2ˆØ×Ò˜4œ9 d¤iÐ0Ñ1Ô1Ð1Ð1åð ð ð ”Lðñ ô ñ ô €Nõ ØØØØØŒ\Ø!ðñ ô €Fð MÐLµ)¸G¼NÑ2KÔ2KÐLÑLÔL€MØLÐLµ)¸G¼NÑ2KÔ2KÐLÑLÔL€Må‰|Œ|€HØ×Ò˜ÑÔÐØ$€HÔØ$€HÔØ".€HÔà€LÝ" 7Ñ+Ô+ð )ð )ˆØ .Ñ0ˆ
Ø",¨c¬h¬nÐ!=ˆ�S”XÑØ˜#œ(œ.Ñ(ˆˆà€NØ€IØ”ð $-ñ $-ˆð ˆØÐÝ�4”> ;Ñ/Ô/ð 	=°D´NÔ4Lð 	=Ø!%¤Ô!9ÑˆH�hØˆDØˆCÝ˜(¥EÑ*Ô*ð VØ˜M¨(Ô3Ñ3�Ø !‘|¨°hÔ(?Ñ?��à"/×"5Ò"5Ñ"7Ô"7ð Vð V‘J�E˜3Ø Ð(Ð(Ø  S¡Ñ(˜Ø ­T°(©^¬^×-AÒ-AÀ%Ñ-HÔ-HÑ!HÈAÑ MÐRUÑUÑU˜øØ(¨>Ñ9ˆOØ�NŠN˜= ˜=˜=˜=¨,¨s¨,¨,¨,¸¸oÑNÔNÐNØ˜aÑˆNØ˜aÑˆNˆNÝ�T”^Ð%5Ñ6Ô6ð 	=¸4¼>Ô;Xð 	=Ø#œ~Ô<Ðà�,ØØØØØØØØØñ

ô 

ñ 
	
ˆð 	×Ò˜¨!Ñ+Ñ,Ô,Ð,Ñ,à�YÐÐr>   c                 óÈ   — t          | t          ¦  «        rt          | j        ¦  «        S t          | t          ¦  «        rt          ¦   «         S t          d| j        › �¦  «        ‚)Nzunknown type: )rB   r   r)   r{  r   r*   r!   rˆ   )Ú	expr_types    r<   Ú_assemble_typer”  ý  sZ   € Ý�)�TÑ"Ô"ð ?Ý�y”Ñ'Ô'Ð'Ý	�I�tÑ	$Ô	$ð ?Ý‰yŒyÐåÐ=¨	Ô(;Ð=Ð=Ñ>Ô>Ð>r>   c              #   óÄ   K  — |                       ¦   «         E d {V —† | j        D ];}|j        j        D ],}t	          |t
          ¦  «        rt          |¦  «        E d {V —† Œ-Œ<d S rŽ   )r   rW   rX   rY   rB   r   rz  )rP   rl   Úparams      r<   rz  rz    s’   è è € Ø× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø”|ð 6ð 6ˆØ Ô*Ô1ð 	6ð 	6ˆEÝ˜%¥Ñ0Ô0ð 6Ý.¨uÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øð	6ð6ð 6r>   c                 óä   — | j         }t          | ¦  «        D ]H}|j        |k    r,t          t	          |||j        j        z   ¦  «        ¦  «        c S ||j        j        z  }ŒIt          d|› �¦  «        ‚)Nz*Var is not registed in this circuit: uuid=)r|   rz  r†   rD   Úranger‡   r{  r!   )rP   Úvar_uuidÚclbit_indexr†   s       r<   Ú_find_var_clbitsr›    s|   € ØÔ$€KÝ" 7Ñ+Ô+ð &ð &ˆØŒ7�hÒÐÝ�˜k¨;¸¼¼Ñ+GÑHÔHÑIÔIÐIÐIÐIØ�s”x”~Ñ%ˆˆÝ
ÐJÀÐJÐJÑ
KÔ
KÐKr>   c                 ó:  ‡ — t          |t          t          f¦  «        rˆ fd„|D ¦   «         S t          |t          ¦  «        r‰                      |¦  «        j        gS t          |t          j        ¦  «        rt          ‰ |¦  «        S t          d|j
        › �¦  «        ‚)Nc                 óD   •— g | ]}‰                      |¦  «        j        ‘ŒS ro   )Úfind_bitr²   )rp   Úcbitra   s     €r<   r„   z+_assemble_clbit_indices.<locals>.<listcomp>  s(   ø€ Ð8Ð8Ð8¨d�—’˜dÑ#Ô#Ô)Ð8Ð8Ð8r>   zunknown clibt list: )rB   r	   rD   r   rž  r²   ÚuuidÚUUIDr›  r!   rˆ   )ra   rš   s   ` r<   Ú_assemble_clbit_indicesr¢    sœ   ø€ Ý�!Õ'­Ð.Ñ/Ô/ð =Ø8Ð8Ð8Ð8°aÐ8Ñ8Ô8Ð8Ý	�A•uÑ	Ô	ð =Ø—’˜aÑ Ô Ô&Ð'Ð'Ý	�A•t”yÑ	!Ô	!ð =Ý  aÑ(Ô(Ð(åÐ;¨a¬kÐ;Ð;Ñ<Ô<Ð<r>   c                 ó¢   — | t           j        j        u rt          j        S | t           j        j        u rt          j        S t          d| › �¦  «        ‚©Nzunknown op: )r   rø   ÚBIT_NOTr$   ÚBitNotÚ	LOGIC_NOTÚLogicNotr!   ©Úops    r<   Ú_assemble_unary_operatorr«  "  sK   € Ø	�UŒXÔÐÐÝÔ Ð Ø	�uŒxÔ!Ð	!Ð	!ÝÔ"Ð"åÐ* bÐ*Ð*Ñ+Ô+Ð+r>   c                 óR   — | t           v rt           |          S t          d| › �¦  «        ‚r¤  )Ú_BINARY_OP_MAPPINGr!   r©  s    r<   Ú_assemble_binary_operatorr®  :  s0   € Ø	ÕÐÐÝ! "Ô%Ð%åÐ* bÐ*Ð*Ñ+Ô+Ð+r>   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
Ú_AssembleExprImplz3Convert from Expr objects to corresponding objects.c                 ó   — || _         d S rŽ   )rP   )r;   rP   s     r<   r=   z_AssembleExprImpl.__init__D  s   € ØˆŒˆˆr>   c                ó  — t          |j        t          ¦  «        rt          |j        j        |j        ¦  «        S t          |j        t          ¦  «        rt          |j        ¦  «        S t          d|j        j	        › �¦  «        ‚)zreturn Aer's value types.z!invalid value type is specified: )
rB   r‡   r   r'   r{  ra  r   r(   r!   rˆ   ©r;   Únodes     r<   Úvisit_valuez_AssembleExprImpl.visit_valueG  sp   € õ �d”i¥Ñ&Ô&ð 	VÝ ¤	¤°´Ñ<Ô<Ð<Ý˜œ	¥4Ñ(Ô(ð 	VÝ ¤
Ñ+Ô+Ð+åÐT¸t¼yÔ?RÐTÐTÑUÔUÐUr>   c                óv   — t          t          |j        ¦  «        t          | j        |j        ¦  «        ¦  «        S rŽ   )r,   r”  r‡   r¢  rP   r†   r³  s     r<   Ú	visit_varz_AssembleExprImpl.visit_varQ  s-   € Ý•n T¤YÑ/Ô/Õ1HÈÌÐW[ÔW_Ñ1`Ô1`ÑaÔaÐar>   c                óv   — t          t          |j        ¦  «        |j                             | ¦  «        ¦  «        S rŽ   )r+   r”  r‡   ÚoperandÚacceptr³  s     r<   Ú
visit_castz_AssembleExprImpl.visit_castT  s,   € Ý•~ d¤iÑ0Ô0°$´,×2EÒ2EÀdÑ2KÔ2KÑLÔLÐLr>   c                óv   — t          t          |j        ¦  «        |j                             | ¦  «        ¦  «        S rŽ   )r#   r«  rª  r¹  rº  r³  s     r<   Úvisit_unaryz_AssembleExprImpl.visit_unaryW  s.   € ÝÕ4°T´WÑ=Ô=¸t¼|×?RÒ?RÐSWÑ?XÔ?XÑYÔYÐYr>   c                ó¨   — t          t          |j        ¦  «        |j                             | ¦  «        |j                             | ¦  «        ¦  «        S rŽ   )r%   r®  rª  Úleftrº  Úrightr³  s     r<   Úvisit_binaryz_AssembleExprImpl.visit_binaryZ  sG   € ÝÝ% d¤gÑ.Ô.ØŒI×Ò˜TÑ"Ô"ØŒJ×Ò˜dÑ#Ô#ñ
ô 
ð 	
r>   c                ó0   — t          d|j        › �¦  «        ‚)Nz unsupported expression is used: )r!   rˆ   r³  s     r<   Úvisit_genericz_AssembleExprImpl.visit_generica  s   € ÝÐJ¸$¼.ÐJÐJÑKÔKÐKr>   N)r  r  r  r  r=   rµ  r·  r»  r½  rÁ  rÃ  ro   r>   r<   r°  r°  A  s”   € € € € € Ø=Ð=ðð ð ðVð Vð Vðbð bð bðMð Mð MðZð Zð Zð
ð 
ð 
ðLð Lð Lð Lð Lr>   r°  c                 ó8   — |dk    rt          d| › d�¦  «        ‚d S )Nr   zinstruction z does not support conditionalr    )Ú	inst_namer‹  s     r<   Ú_check_no_conditionalrÆ  e  s/   € Ø˜!ÒÐÝÐN iÐNÐNÐNÑOÔOÐOð Ðr>   c	           
      ó¨  ‡‡— |j         }	ˆfd„|j        D ¦   «         }
ˆfd„|j        D ¦   «         }|	j        }|	j        }t          |	d¦  «        r|	j        nd }d}t          |¦  «        D ]J\  }}t          |t          ¦  «        r0t          |j        ¦  «        dk    r|st          |¦  «        }d}d||<   ŒK|r"|                     t          | ¦  «        ¦  «        nd }|                     d¦  «        }|dk    r|d|…         }n|}d	}|d
v �r,|�||v �r%|dk    rþt!          ||dz   t          |¦  «        …         ¦  «        }t#          t          |
¦  «        d	z
  ¦  «        D ];}||z	  d	z  dk    r-|
|         g}|                     d||g |||r|nd¦  «         |d	z  }Œ<|                     ||
|g |||r|n|¦  «         t#          t          |
¦  «        d	z
  ¦  «        D ];}||z	  d	z  dk    r-|
|         g}|                     d||g |||r|nd¦  «         |d	z  }Œ<�n¿|                     ||
|g |||r|n|¦  «         �nž|dk    r4|r|                     |
||¦  «         �n}|                     |
|g ¦  «         �nd|dk    r|                     |
|¦  «         �nF|dk    r|                     |
|||r|nd¦  «         �n"|dk    r%|                     |
|d         |||r|nd¦  «         �n÷|dk    r!|                     ||
g ||||r|n|¦  «         �nÐ|dk    r(t/          ||¦  «         |                     |
|¦  «         �n¢|dk    r(t/          ||¦  «         |                     |
|¦  «         �nt|dk    r|                     |
||||r|n|¦  «         �nO|dk    r|                     |
|||¦  «         �n/|dv r3t/          ||¦  «         |                     |
||	j        |r|n|¦  «         �nø|dv r4t/          ||¦  «         |                     |
|||	j        |r|n|¦  «         �nÀ|dv r”t/          ||¦  «         g }g }g }|	j        D ]P\  }}|                     |¦  «         |                     |d         ¦  «         |                     |d	         ¦  «         ŒQ|                      |
|||||	j        |r|n|¦  «         �n(|dk    r(t/          ||¦  «         | !                    |
|¦  «         �nú|dk    r(t/          ||¦  «         | "                    |
|¦  «         �nÌ|dk    r(t/          ||¦  «         | #                    |
|¦  «         �nž|dk    r(t/          ||¦  «         | $                    |
|¦  «         �np|dk    r(t/          ||¦  «         | %                    |
|¦  «         �nB|dk    r(t/          ||¦  «         | &                    |
|¦  «         �n|dk    r | '                    |
|d         ||¦  «         �nî|d k    rt/          ||¦  «         d}�nÔ|d!k    r| (                    |
|||¦  «         �n´|d"k    r(t/          ||¦  «         | )                    |
|¦  «         �n†|d#k    r| *                    |
|r|n|||¦  «         �nb|d$v rtW          d%|› �¦  «        ‚|d&k    r¡t          |	j,        j-        t\          ¦  «        s!tW          d'|	j,        j-        j/        › �¦  «        ‚| ,                    |
ta          | |	j,        j-        j1        ¦  «        |	j,        j2                             t          | ¦  «        ¦  «        ¦  «         d	}n¥|d(k    r�t          |	j-        t\          ¦  «        stW          d'|	j-        j/        › �¦  «        ‚| ,                    |
ta          | |	j-        j1        ¦  «        |	j2                             t          | ¦  «        ¦  «        ¦  «         d	}ntW          d)|› �¦  «        ‚|S )*Nc                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   )rp   rm  r„  s     €r<   r„   z _assemble_op.<locals>.<listcomp>v  ó   ø€ Ð<Ð<Ð< uˆm˜EÔ"Ð<Ð<Ð<r>   c                 ó    •— g | ]
}‰|         ‘ŒS ro   ro   )rp   rƒ   r…  s     €r<   r„   z _assemble_op.<locals>.<listcomp>w  rÉ  r>   rY   Fr   Trd  Ú_or/   >:   ÚhÚpÚrÚsÚtÚuÚxÚyÚzÚcpÚcuÚcxÚcyÚczÚidÚrxÚryÚrzÚsxÚu1Úu2Úu3ÚccxÚcczÚcrxÚcryÚcrzÚcsxÚcu1Úcu2Úcu3ÚecrÚmcpÚmcrÚmcuÚmcxÚmcyÚmczÚrxxÚryyÚrzxÚrzzÚsdgÚtdgÚmcrxÚmcryÚmcrzÚmcsxÚmcu1Úmcu2Úmcu3ÚswapÚsxdgÚcswapÚdelayÚmcswapÚmcphaseÚmcx_grayr2   rÒ  ÚmeasureÚresetÚdiagonalÚunitaryÚpauliÚ
initializeÚroerrorÚmultiplexerÚkraus>   Ú
save_stateÚsave_superopÚsave_unitaryÚsave_cliffordÚsave_stabilizerÚsave_statevectorÚsave_probabilitiesÚsave_density_matrixÚsave_statevector_dictÚsave_probabilities_dictÚsave_matrix_product_state>   Úsave_amplitudesÚsave_amplitudes_sq)Úsave_expvalÚsave_expval_varÚset_statevectorÚset_unitaryÚset_density_matrixÚset_stabilizerÚset_superopÚset_matrix_product_stateÚsuperoprv   rA   r@   Ú
qerror_loc)Úfor_loopÚ
while_loopÚif_elsezKcontrol-flow instructions must be converted to jump and mark instructions: Ú	aer_storezunsupported lvalue : Ústorezunknown instruction: )3rX   r[   r\   rj  ré   r\  rY   rE   rB   r
   rC   rr  r   rº  r°  ÚfindrG  r˜  Úgater  r  r  r	  rÆ  r  r  r  r  r  Ú_subtyper  rJ   r  r  r  r   Úset_cliffordr"  r#  r$  rA   r@   Úset_qerror_locr!   r*  Úlvaluer   rˆ   r¢  r†   Úrvalue)ra   r†  rd   r„  r…  r‚  r‹  rŒ  r~  rX   r[   r\   rj  ré   rY   Úcopiedr  r–  Úaer_cond_exprÚctrl_state_posÚ	gate_namer‰  Ú
ctrl_stateÚqubits_iÚpaulisÚcoeff_realsÚcoeff_imagsr
  Úcoeffs      ``                        r<   r}  r}  j  s”	  øø€ ð ”€IØ<Ð<Ð<Ð<°´Ð<Ñ<Ô<€FØ<Ð<Ð<Ð<°´Ð<Ñ<Ô<€FØŒ>€DØŒO€EÝ!(¨°HÑ!=Ô!=ÐGˆYÔÐÀ4€FØ€Få˜fÑ%Ô%ð ð ‰ˆˆ5Ý�eÕ0Ñ1Ô1ð 	µc¸%Ô:JÑ6KÔ6KÈaÒ6OÐ6OØð Ý˜f™œ�Ø�ØˆF�1‰IøàHXÐbÐ$×+Ò+Õ,=¸dÑ,CÔ,CÑDÔDÐDÐ^b€Mð —Y’Y˜t‘_”_€NØ˜ÒÐØ˜˜>Ð)Ô*ˆ	ˆ	àˆ	à€Nàð ð 	ñ 	ð Ð 9°Ð#;Ñ#;Ø˜AÒÐå˜T .°Ñ"2µ3°t±9´9Ð"<Ô=Ñ>Ô>ˆJÝ�3˜v™;œ; q™=Ñ)Ô)ð (ð (�Ø !‘O qÑ(¨AÒ-Ð-Ø & q¤	˜{�HØ—M’M # x°¸¸_ÈmØ+0Ð"9 % %°cñ;ô ;ð ;à" aÑ'�NøØ�MŠM˜) V¨V°R¸È-Ø#(Ð7˜%˜%¨iñ9ô 9ð 9å�3˜v™;œ; q™=Ñ)Ô)ð (ð (�Ø !‘O qÑ(¨AÒ-Ð-Ø & q¤	˜{�HØ—M’M # x°¸¸_ÈmØ+0Ð"9 % %°cñ;ô ;ð ;à" aÑ'�Nøñ(ð �MŠM˜$ ¨°°OÀ]Ø#(Ð2˜%˜%¨dñ4ô 4ð 4ñ 4à	�Ò	Ð	Øð 	1Ø×Ò˜V V¨VÑ4Ô4Ð4Ñ4à×Ò˜V V¨RÑ0Ô0Ð0Ñ0Ø	�ŠˆØ�Š�v˜Ñ/Ô/Ð/Ñ/Ø	�Ò	Ð	Ø×Ò˜& &¨/ÀEÐ;Y¸5¸5ÈzÑZÔZÐZÑZØ	�Ò	Ð	Ø×Ò˜ ¨¤¨O¸]Ø"'Ð6˜˜¨Yñ	8ô 	8ð 	8ñ 	8à	�ŠˆØ�Š�d˜F B¨°ÀØ$Ð.�e�e¨$ñ	0ô 	0ð 	0ñ 	0à	�Ò	Ð	Ý˜d OÑ4Ô4Ð4Ø×Ò˜F FÑ+Ô+Ð+Ñ+Ø	�Ò	Ð	Ý˜d OÑ4Ô4Ð4Ø×Ò˜ Ñ(Ô(Ð(Ñ(Ø	�Ò	Ð	Ø×Ò˜V V¨_¸mÐV[ÐMeÈUÈUÐaeÑfÔfÐfÑfØ	�ŠˆØ�Š�v˜v ¸ÑFÔFÐFÑFØ	ð ð 
ð 
õ 	˜d OÑ4Ô4Ð4Ø×Ò˜F D¨)Ô*<ÀuÐ>V¸e¸eÐRVÑWÔWÐWÑWØ	Ð:Ð	:Ð	:Ý˜d OÑ4Ô4Ð4Ø× Ò  ¨¨v°yÔ7IÐTYÐKcÈ5È5Ð_cÑdÔdÐdÑdØ	Ð3Ð	3Ð	3Ý˜d OÑ4Ô4Ð4ØˆØˆØˆØ%Ô,ð 	)ð 	)‰LˆE�5Ø�MŠM˜%Ñ Ô Ð Ø×Ò˜u QœxÑ(Ô(Ð(Ø×Ò˜u QœxÑ(Ô(Ð(Ð(Ø×ÒØØØØØØÔØÐ$ˆEˆE ñ	
ô 	
ð 	
ñ 	
ð 
Ð"Ò	"Ð	"Ý˜d OÑ4Ô4Ð4Ø× Ò  ¨Ñ0Ô0Ð0Ñ0Ø	�Ò	Ð	Ý˜d OÑ4Ô4Ð4Ø×Ò˜V VÑ,Ô,Ð,Ñ,Ø	Ð%Ò	%Ð	%Ý˜d OÑ4Ô4Ð4Ø×#Ò# F¨FÑ3Ô3Ð3Ñ3Ø	Ð!Ò	!Ð	!Ý˜d OÑ4Ô4Ð4Ø×Ò˜f fÑ-Ô-Ð-Ñ-Ø	�Ò	Ð	Ý˜d OÑ4Ô4Ð4Ø×Ò˜V VÑ,Ô,Ð,Ñ,Ø	Ð+Ò	+Ð	+Ý˜d OÑ4Ô4Ð4Ø×)Ò)¨&°&Ñ9Ô9Ð9Ñ9Ø	�Ò	Ð	Ø×Ò˜ ¨¤¨O¸]ÑKÔKÐKÑKØ	�Ò	Ð	Ý˜d OÑ4Ô4Ð4Øˆ‰Ø	�ŠˆØ�Š�f˜f o°}ÑEÔEÐEÑEØ	�ŠˆÝ˜d OÑ4Ô4Ð4Ø�Š�f˜fÑ%Ô%Ð%Ñ%Ø	�Ò	Ð	Ø×Ò °Ð(@¨¨¸DÀ/ÐS`ÑaÔaÐaÑaØ	Ð6Ð	6Ð	6ÝØcÐ]aÐcÐcñ
ô 
ð 	
ð 
�Ò	Ð	Ý˜)œ/Ô0µ#Ñ6Ô6ð 	WÝÐU°9´?Ô3IÔ3SÐUÐUÑVÔVÐVØ�Š�vÕ6°t¸Y¼_Ô=SÔ=WÑXÔXØ ”Ô-×4Ò4Õ5FÀtÑ5LÔ5LÑMÔMñ	Oô 	Oð 	OàˆˆØ	�ŠˆÝ˜)Ô*­CÑ0Ô0ð 	QÝÐO°9Ô3CÔ3MÐOÐOÑPÔPÐPØ�Š�vÕ6°t¸YÔ=MÔ=QÑRÔRØ Ô'×.Ò.Õ/@ÀÑ/FÔ/FÑGÔGñ	Iô 	Ið 	IàˆˆåÐ5¨tÐ5Ð5Ñ6Ô6Ð6àÐr>   r~  c                 óÀ   ‡— |�(t          |¦  «        Št          ˆfd„| D ¦   «         Ž \  }}nt          d„ | D ¦   «         Ž \  }}t          |¦  «        t          |¦  «        fS )a0  converts a list of Qiskit circuits into circuits mapped AER::Circuit

    Args:
        circuits: circuit(s) to be converted
        basis_gates (list): supported gates to be converted

    Returns:
        a list of circuits to be run on the Aer backends and
        a list of index mapping from Qiskit instructions to Aer operations of the circuits

    Examples:

        .. code-block:: python

            from qiskit.circuit import QuantumCircuit
            from qiskit_aer.backends.aer_compiler import assemble_circuits
            # Create a circuit to be simulated
            qc = QuantumCircuit(2, 2)
            qc.h(0)
            qc.cx(0, 1)
            qc.measure_all()
            # Generate AerCircuit from the input circuit
            aer_qc_list, idx_maps = assemble_circuits(circuits=[qc])
    Nc                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS ro   ©r‘  )rp   rP   Úbasis_gates_sets     €r<   r„   z%assemble_circuits.<locals>.<listcomp>8  s$   ø€ ÐQÐQÐQ¸WÕ˜w¨Ñ8Ô8ÐQÐQÐQr>   c                 ó,   — g | ]}t          |¦  «        ‘ŒS ro   r>  rU  s     r<   r„   z%assemble_circuits.<locals>.<listcomp>;  s!   € Ð&YÐ&YÐ&YÀWÕ'7¸Ñ'@Ô'@Ð&YÐ&YÐ&Yr>   )rV   r¨   rD   )rK   r~  Úaer_circuitsÚidx_mapsr?  s       @r<   Úassemble_circuitsrC    sz   ø€ ð2 ÐÝ˜kÑ*Ô*ˆÝ!$ØQÐQÐQÐQÈÐQÑQÔQð"
Ñˆ�h�hõ "%Ð&YÐ&YÐPXÐ&YÑ&YÔ&YÐ!ZÑˆ�hÝ�ÑÔ�t H™~œ~Ð-Ð-r>   rŽ   )vr  rö   rt   r   Útypingr   Úwarningsr   Úconcurrent.futuresr   r   ÚnumpyÚnpÚqiskit.circuitr   r   r	   r
   Úqiskit.circuit.classical.exprr   r   r   r   r   r   r   Úqiskit.circuit.classical.typesr   r   Úqiskit.circuit.libraryr   Úqiskit.providers.optionsr   r   Úqiskit.circuit.controlflowr   r   r   r   r   r   r   Úqiskit.transpilerr   Úqiskit.transpiler.passesr   Úqiskit_aer.aererrorr!   Úqiskit_aer.noiser"   Ú'qiskit_aer.backends.controller_wrappersr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Úbackend_utilsr0   r1   Ú!library.control_flow_instructionsr3   r4   r5   r7   r
  rG  ÚintegerrI  ri   Úbool_rH  ÚfloatingrD   rF  rP  rb  r‘  r”  rz  r›  r¢  r«  rø   ÚBIT_ANDÚBitAndÚBIT_ORÚBitOrÚBIT_XORÚBitXorÚ	LOGIC_ANDÚLogicAndÚLOGIC_ORÚLogicOrrù   ÚEqualÚ	NOT_EQUALÚNotEqualÚLESSÚLessÚ
LESS_EQUALÚ	LessEqualÚGREATERÚGreaterÚGREATER_EQUALÚGreaterEqualr­  r®  r°  rÆ  r}  rC  ro   r>   r<   ú<module>rn     sä  ððð ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø €€€Ø Ð Ð Ð à XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ø .Ð .Ð .Ð .Ð .Ð .à (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JðXað Xað Xað Xað Xañ Xaô Xað Xaðv4ð 4ð 4ð 4ð9Øˆc�2”:Ðð9àˆsð9ð ˆsð9ð �#ð	9ð
 �S˜"œ*Ð%ð9ð �c˜2œ:Ð&ð9ð ˜$ ¤Ð)ð9ð �ð9ð �u˜bœkÐ*ð9ð ˜S "¤*Ð-ð9ð ˜S "¤*Ð-ð9ð   b¤jÐ 1ð9ð ˜3 ¤
Ð+ð9ð �c˜2œ:Ð&ð9ð �d˜BœHÐ%ð9ð  �t˜RœXÐ&ð!9ð" ˜˜bœjÐ)ð#9ð 9ð$ ˜˜bœjÐ)ð%9ð& ! 4¨¬Ð"2ð'9ð( ˆt�R”XÐð)9ð* �Jð+9ð, �s˜BœJÐ'ð-9ð. ˜#˜rœzÐ*ð/9ð0 ˜˜RœZÐ(ð19ð2 ˜˜bœhÐ'ð39ð4   b¤jÐ 1ð59ð6 ˜$ ¤Ð)ð79ð8 # S¨"¬*Ð$5ð99ð: ˜d B¤HÐ-ð;9ð< % t¨R¬XÐ&6ð=9ð> ˜s B¤JÐ/ð?9ð@ % s¨B¬JÐ&7ðA9ðB % s¨B¬JÐ&7ðC9ðD ,¨c°2´:Ð->ðE9ð 9ð 9ðF *¨CðG9ðH 1°3¸¼
Ð2CðI9ðJ .°°r´{Ð/CðK9ðL 2°C¸¼Ð3DðM9ðN 6¸¸R¼ZÐ7HðO9ðP -¨s°B´JÐ.?ðQ9ðR 9¸3ÀÄ
Ð:KðS9ðT 0°%¸¼Ð1EðU9ðV .°°R´ZÐ/@ðW9ðX # SðY9ðZ �T˜2œ8Ð$ð[9ð\ ˜3ð]9ð^ �u˜bœkÐ*ð_9ð` ˜s B¤JÐ/ða9ðb ˜˜RœZÐ(ðc9ðd �4˜œÐ"ðe9ðf )¨3°´
Ð*;ðg9ð 9ðh $(¨¬Ð"2ØØ),¨b¬jÐ(9ØØ&*¨B¬HÐ%5ðq9ð 9ð 9Ð ðxð ð ð@Ø�>Ô"ðØ5<ðàðð ð ð ð<\ð \˜nð \ð \ð \ð \ð~?ð ?ð ?ð6ð 6ð 6ðLð Lð Lð=ð =ð =ð,ð ,ð ,ð „IÔ�{Ô)Ø
„IÔ�kÔ'Ø
„IÔ�{Ô)Ø
„IÔ˜Ô-Ø
„IÔ˜Ô+Ø
„I„O�[Ô&Ø
„IÔ˜Ô-Ø
„I„N�KÔ$Ø
„IÔ˜+Ô/Ø
„IÔ�{Ô*Ø
„IÔ˜[Ô5ðÐ ð,ð ,ð ,ð!Lð !Lð !Lð !Lð !L˜ñ !Lô !Lð !LðHPð Pð Pð
oð oð oðd .ð  .  ^Ô 4ð  .À4ð  .ÐSWÐXbÔScð  .ð  .ð  .ð  .ð  .ð  .r>   