§
    ¹³ÙgV1  ã            	       óÚ  — d Z ddlmZmZmZmZmZm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mZ dd	lmZ dd
lmZ ddlmZ  edeee         eeef         eeef         f         ¦  «        Z edeeej                 eeef         eeef         f         ¦  «        Z eddd¬¦  «        deeef         fd„¦   «         Zdefd„Zd„ Z d„ Z!defd„Z"deej                 fd„Z#dS )zFDisassemble function for a qobj into a list of circuits and its configé    )ÚAnyÚDictÚListÚNewTypeÚTupleÚUnionN)Úpulse©ÚClassicalRegister)ÚInstruction)ÚQuantumCircuit©ÚQuantumRegister)ÚPulseQobjInstruction)ÚQobjToInstructionConverter)Údeprecate_funcÚCircuitModuleÚPulseModulez1.2zin the 2.0 releasezÿThe `Qobj` class and related functionality are part of the deprecated `BackendV1` workflow,  and no longer necessary for `BackendV2`. If a user workflow requires `Qobj` it likely relies on deprecated functionality and should be updated to use `BackendV2`.)ÚsinceÚremoval_timelineÚadditional_msgÚreturnc                 óT   — | j         dk    rt          | ¦  «        S t          | ¦  «        S )aT  Disassemble a qobj and return the circuits or pulse schedules, run_config, and user header.

    .. note::

        ``disassemble(assemble(qc))`` is not guaranteed to produce an exactly equal circuit to the
        input, due to limitations in the :obj:`.QasmQobj` format that need to be maintained for
        backend system compatibility.  This is most likely to be the case when using newer features
        of :obj:`.QuantumCircuit`.  In most cases, the output should be equivalent, if not quite
        equal.

    Args:
        qobj (Qobj): The input qobj object to disassemble

    Returns:
        Union[CircuitModule, PulseModule]: The disassembled program which consists of:

            * programs: A list of quantum circuits or pulse schedules
            * run_config: The dict of the run config
            * user_qobj_header: The dict of any user headers in the qobj

    Examples:

        .. code-block:: python

            from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit
            from qiskit.compiler.assembler import assemble
            from qiskit.assembler.disassemble import disassemble
            # Create a circuit to assemble into a qobj
            q = QuantumRegister(2)
            c = ClassicalRegister(2)
            qc = QuantumCircuit(q, c)
            qc.h(q[0])
            qc.cx(q[0], q[1])
            qc.measure(q, c)
            # Assemble the circuit into a Qobj
            qobj = assemble(qc, shots=2000, memory=True)
            # Disassemble the qobj back into a circuit
            circuits, run_config_out, headers = disassemble(qobj)
    ÚPULSE)ÚtypeÚ_disassemble_pulse_scheduleÚ_disassemble_circuit)Úqobjs    úR/granary/edev/quantum/lib/python3.11/site-packages/qiskit/assembler/disassemble.pyÚdisassembler    )   s.   € ð` „y�GÒÐÝ*¨4Ñ0Ô0Ð0å# DÑ)Ô)Ð)ó    c                 ó@  — | j                              ¦   «         }|                     dg ¦  «        }|rd„ |D ¦   «         |d<   |                     dg ¦  «        }|rd„ |D ¦   «         |d<   | j                             ¦   «         }t	          t          | ¦  «        ||f¦  «        S )NÚqubit_lo_freqc                 ó   — g | ]}|d z  ‘ŒS ©ç    eÍÍA© ©Ú.0Úfreqs     r   ú
<listcomp>z(_disassemble_circuit.<locals>.<listcomp>e   ó   € Ð&LÐ&LÐ&L°d t¨c¡zÐ&LÐ&LÐ&Lr!   Úmeas_lo_freqc                 ó   — g | ]}|d z  ‘ŒS r%   r'   r(   s     r   r+   z(_disassemble_circuit.<locals>.<listcomp>i   ó   € Ð%JÐ%JÐ%J°T d¨S¡jÐ%JÐ%JÐ%Jr!   )ÚconfigÚto_dictÚgetÚheaderr   Ú_experiments_to_circuits)r   Ú
run_configr#   r-   Úuser_qobj_headers        r   r   r   _   s²   € Ø”×$Ò$Ñ&Ô&€Jð —N’N ?°BÑ7Ô7€MØð MØ&LÐ&L¸mÐ&LÑ&LÔ&Lˆ
�?Ñ#à—>’> .°"Ñ5Ô5€LØð KØ%JÐ%J¸\Ð%JÑ%JÔ%Jˆ
�>Ñ"à”{×*Ò*Ñ,Ô,ÐÝÕ2°4Ñ8Ô8¸*ÐFVÐWÑXÔXÐXr!   c                 óŒ  — | j         j                             ¦   «         d         }t          |¦  «        }i }|D �]
}t	          |d         ¦  «        t	          |d         ¦  «        f}|t          j        |d         › dt          |d         ¦  «        › dt          |d         ¦  «        › �¬¦  «        i}|d         D ]R}t          j	        |¦  «        }	 ||	¦  «        }
||          
                    |
                     ¦   «         |
¦  «        ||<   ŒS|d         |v r"||d                                       |¦  «         Œÿ|||d         <   �Œ|S )zIReturn circuit calibrations dictionary from qobj/exp config calibrations.ÚgatesÚqubitsÚparamsÚnameú ©r;   Úinstructions)r0   Úcalibrationsr1   r   Útupler	   ÚScheduleÚstrr   Ú	from_dictÚinsertÚch_start_timeÚupdate)r   Ú	pulse_libÚ	qobj_calsÚ	converterÚqc_calsÚgater0   ÚcalÚinstructionÚqobj_instructionÚschedules              r   Ú_qobj_to_circuit_calsrP   o   s[  € à”Ô(×0Ò0Ñ2Ô2°7Ô;€IÝ*¨9Ñ5Ô5€Ià€GØð (ñ (ˆÝ˜˜XœÑ'Ô'­¨t°H¬~Ñ)>Ô)>Ð?ˆà•E”NØ˜VœÐRÐR¥s¨4°¬>Ñ':Ô':ÐRÐR½SÀÀhÄÑ=PÔ=PÐRÐRðñ ô ð
ˆð
   Ô/ð 	Qð 	QˆKÝ3Ô=¸kÑJÔJÐØ �yÐ!1Ñ2Ô2ˆHØ˜fœ+×,Ò,¨X×-CÒ-CÑ-EÔ-EÀxÑPÔPˆC�‰KˆKØ�Œ<˜7Ð"Ð"Ø�D˜”LÔ!×(Ò(¨Ñ-Ô-Ð-Ð-à$'ˆG�D˜”LÑ!Ñ!à€Nr!   c                 ó‚
  ‡#— | j         sdS g }| j         D �])}d„ |j        j        D ¦   «         }d„ |j        j        D ¦   «         }t	          g |¢|¢R d|j        j        iŽ}t          j        ¦   «         }t          j        ¦   «         Š#|D ]}|||j        <   Œ|D ]}|‰#|j        <   Œi }|j        D �]ò}	|	j        }
g }t          |	dg ¦  «        }	 |	j
        D ]A}|j        j        |         }|                     ||d                  |d                  ¦  «         ŒBn# t          $ r Y nw xY wg }	 |	j        D ]A}|j        j        |         }|                     ‰#|d                  |d                  ¦  «         ŒBn# t          $ r Y nw xY wt!          ||
¦  «        r^t          ||
¦  «        }|	j        dk    r |||¦  «        }�n¸|	j        d	v r |g |¢|dd
…         ‘|d
         ‘|¢R Ž }�n‘ |g |¢|¢|¢R Ž }�nƒ|
dk    �r6t#          |	j        d¦  «        |d<   t'          ˆ#fd„‰#D ¦   «         ¦  «        }i }i }g }‰#D ]�}‰#|         j        }dg|z  }|s|}n%t+          |¦  «        D ]\  }}|dk    rd||<   Œ||z   }dg|t-          |¦  «        z
  z  |z   }|||<   ||t#          d                     d„ |D ¦   «         ¦  «        d¦  «        <   ŒŽt1          t#          |	j        d¦  «        ¦  «                             d¦  «        dk    rÍt#          t7          j        t#          |	j        d¦  «        ¦  «        ¦  «        }‰#                     ¦   «         D ]-}|j        }||k    r||z  }Œ|j        dk    r|n||         |d<    t1          t#          |	j        d¦  «        ¦  «        dd…                              |¦  «        }d„ t?          |¦  «        D ¦   «         }n.|t#          |	j        d¦  «                 }‰#|         |d<   ||         }t#          |	j        d¦  «        }tA          |¦  «        D ]} | dk    r|dz	  }Œ||d<    nFtC          |
t-          |¦  «        t-          |¦  «        |¬¦  «        x}}!|                     |!||¦  «         |r*|
dk    r$| "                    |d         |d         ¦  «         i }�Œôt!          | j#        d¦  «        r| j#        j$        ng }"t!          | j#        d¦  «        ri |j%        ¥tM          | |"¦  «        ¥|_%        t!          |j#        d¦  «        ri |j%        ¥tM          ||"¦  «        ¥|_%        |                     |¦  «         �Œ+|S )zÔReturn a list of QuantumCircuit object(s) from a qobj.

    Args:
        qobj (Qobj): The Qobj object to convert to QuantumCircuits

    Returns:
        list: A list of QuantumCircuit objects from the qobj
    Nc                 óH   — g | ]}t          |d          |d         ¬¦  «        ‘Œ S ©é   r   r=   r   ©r)   Úis     r   r+   z,_experiments_to_circuits.<locals>.<listcomp>–   s-   € Ð]Ð]Ð]À!�_¨Q¨q¬T¸¸!¼Ð=Ñ=Ô=Ð]Ð]Ð]r!   c                 óH   — g | ]}t          |d          |d         ¬¦  «        ‘Œ S rS   r
   rU   s     r   r+   z,_experiments_to_circuits.<locals>.<listcomp>—   s.   € ÐaÐaÐaÀaÕ0°°1´¸A¸a¼DÐAÑAÔAÐaÐaÐar!   r;   r:   r   rT   Ú
initialize)ÚmcxÚmcu1ÚmcpéÿÿÿÿÚbfuncé   Úvaluec              3   ó2   •K  — | ]}‰|         j         V — Œd S ©N)Úsize)r)   ÚxÚ	creg_dicts     €r   ú	<genexpr>z+_experiments_to_circuits.<locals>.<genexpr>»   s*   øè è € Ð#IÐ#I¸! I¨a¤LÔ$5Ð#IÐ#IÐ#IÐ#IÐ#IÐ#Ir!   Ú c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ra   )rB   )r)   rc   s     r   re   z+_experiments_to_circuits.<locals>.<genexpr>Ì   s(   è è € Ð(>Ð(>°A­¨Q©¬Ð(>Ð(>Ð(>Ð(>Ð(>Ð(>r!   é   Ú1Úregisterc                 ó,   — g | ]}t          |¦  «        ‘ŒS r'   )Úint)r)   Úitems     r   r+   z,_experiments_to_circuits.<locals>.<listcomp>Ü   s   € ÐAÐAÐA¨$�C ™IœIÐAÐAÐAr!   )r;   Ú
num_qubitsÚ
num_clbitsr:   Úpulse_libraryr?   )'Úexperimentsr3   Ú
qreg_sizesÚ
creg_sizesr   r;   ÚcollectionsÚOrderedDictr>   Úgetattrr9   Úqubit_labelsÚappendÚ	ExceptionÚmemoryÚclbit_labelsÚhasattrrl   ÚvalÚsumrb   Ú	enumerateÚlenÚjoinÚbinÚmaskÚcountÚmathÚlog2ÚvaluesÚzfillÚlistÚreversedr   Úc_ifr0   rp   r?   rP   )$r   ÚcircuitsÚexpÚquantum_registersÚclassical_registersÚcircuitÚ	qreg_dictÚregÚconditionalrV   r;   r9   r:   ÚqubitÚqubit_labelÚclbitsÚclbitÚclbit_labelÚinstr_methodÚ_instÚfull_bit_sizeÚmask_mapÚraw_mapÚrawÚcregrb   Úreg_rawÚposr}   rƒ   ÚcbitÚmask_strÚjÚtemp_opaque_instructionrG   rd   s$                                      @r   r4   r4   ˆ   sJ  ø€ ð Ôð Øˆtà€HØÔð d!ñ d!ˆØ]Ð]ÀsÄzÔG\Ð]Ñ]Ô]ÐØaÐaÈ3Ì:ÔK`ÐaÑaÔaÐÝ Ð`Ð"3Ð`Ð6IÐ`Ð`Ð`ÐPSÔPZÔP_Ð`Ð`ˆÝÔ+Ñ-Ô-ˆ	ÝÔ+Ñ-Ô-ˆ	Ø$ð 	&ð 	&ˆCØ"%ˆI�c”hÑÐØ&ð 	&ð 	&ˆCØ"%ˆI�c”hÑÐØˆØÔ!ð O	!ñ O	!ˆAØ”6ˆDØˆFÝ˜Q ¨"Ñ-Ô-ˆFðØœXð Mð M�EØ"%¤*Ô"9¸%Ô"@�KØ—M’M )¨K¸¬NÔ";¸KÈ¼NÔ"KÑLÔLÐLÐLðMøõ ð ð ð Ø�ðøøøàˆFðØœXð Mð M�EØ"%¤*Ô"9¸%Ô"@�KØ—M’M )¨K¸¬NÔ";¸KÈ¼NÔ"KÑLÔLÐLÐLðMøõ ð ð ð Ø�ðøøøå�w Ñ%Ô%ð ;HÝ& w°Ñ5Ô5�Ø”6˜\Ò)Ð)Ø(˜L¨°Ñ8Ô8�E‘EØ”VÐ5Ð5Ð5Ø(˜LÐS¨&ÐS°&¸¸"¸´+ÐS¸vÀb¼zÐSÈFÐSÐSÐS�E‘Eà(˜LÐC¨&ÐC°6ÐC¸FÐCÐCÐC�E‘EØ˜’‘Ý'*¨1¬5°"¡~¤~�˜GÑ$Ý #Ð#IÐ#IÐ#IÐ#I¸yÐ#IÑ#IÔ#IÑ IÔ I�Ø�Ø�Ø�à%ð Kð K�DØ$ Tœ?Ô/�DØ ˜c D™j�GØð ,Ø%˜˜å(1°#©¬ð -ð -™H˜C Ø" ašx˜xØ+,  C¡øØ%¨™m˜Ø˜3 -µ#°c±(´(Ñ":Ñ;¸cÑA�DØ$(�G˜D‘MØFJ�H�S §¢Ð(>Ð(>¸Ð(>Ñ(>Ô(>Ñ!>Ô!>ÀÑBÔBÑCÐCÝ•s˜1œ6 2‘”Ñ'Ô'×-Ò-¨cÑ2Ô2°aÒ7Ð7õ �tœy­¨Q¬V°R©¬Ñ9Ô9Ñ:Ô:�DØ(×/Ò/Ñ1Ô1ð "ð "˜Ø"œx˜Ø 4š<˜<Ø  D™L˜D˜Dà=@¼XÈº]¸]°c°cÐPSÐTXÔPY˜K¨
Ñ3Ø!Ý"¥3 q¤v¨r¡?¤?Ñ3Ô3°A°B°BÔ7×=Ò=¸mÑLÔL�HØAÐAµ$°x±.´.ÐAÑAÔA�D�Dà#¥C¨¬°¡O¤OÔ4�DØ.7¸¬o�K 
Ñ+Ø" 4œ=�DÝ˜!œ% ‘n”n�Ý! $™œð ð �AØ˜A’v�vØ! Q™h˜˜à/2˜ GÑ,Øøå2=Ø­#¨f©+¬+Å#ÀfÁ+Ä+ÐV\ð3ñ 3ô 3ð �Ð/ð —’Ð6¸ÀÑGÔGÐGØð !˜t wš˜Ø—
’
˜; zÔ2°KÀÔ4HÑIÔIÐIØ �ùÝ18¸¼ÀoÑ1VÔ1VÐ^�D”KÔ-Ð-Ð\^ˆ	å�4”; Ñ/Ô/ð 	ð$ØÔ&ð$å'¨¨iÑ8Ô8ð$ˆGÔ õ �3”:˜~Ñ.Ô.ð 	eØ#d gÔ&:Ð#dÕ>SÐTWÐYbÑ>cÔ>cÐ#dˆGÔ Ø�Š˜Ñ Ô Ð Ñ Ø€Os&   Ã	A	DÄ
D ÄD Ä&A	E0Å0
E=Å<E=c                 ó,  — | j                              ¦   «         }|                     d¦  «         |                     d¦  «        }|rd„ |D ¦   «         |d<   |                     d¦  «        }|rd„ |D ¦   «         |d<   | j                             ¦   «         }g }| j        D ]Å}i }t          |d¦  «        rœt          |j         d¦  «        r9t          |j         j        ¦  «        D ]\  }}	|	dz  |t          j
        |¦  «        <   Œ t          |j         d¦  «        r9t          |j         j        ¦  «        D ]\  }}	|	dz  |t          j        |¦  «        <   Œ |                     |¦  «         ŒÆt          |¦  «        r||d<   t          t!          | ¦  «        ||f¦  «        S )	Nrp   r#   c                 ó   — g | ]}|d z  ‘ŒS r%   r'   r(   s     r   r+   z/_disassemble_pulse_schedule.<locals>.<listcomp>  r,   r!   r-   c                 ó   — g | ]}|d z  ‘ŒS r%   r'   r(   s     r   r+   z/_disassemble_pulse_schedule.<locals>.<listcomp>  r/   r!   r0   r&   Úschedule_los)r0   r1   Úpopr2   r3   rq   r|   r   r#   r	   ÚDriveChannelr-   ÚMeasureChannelrx   Úanyr   Ú_experiments_to_schedules)
r   r5   r#   r-   r6   r©   ÚprogramÚprogram_losrV   Úlos
             r   r   r   ý   sÆ  € Ø”×$Ò$Ñ&Ô&€JØ‡N‚N�?Ñ#Ô#Ð#à—N’N ?Ñ3Ô3€MØð MØ&LÐ&L¸mÐ&LÑ&LÔ&Lˆ
�?Ñ#à—>’> .Ñ1Ô1€LØð KØ%JÐ%J¸\Ð%JÑ%JÔ%Jˆ
�>Ñ"à”{×*Ò*Ñ,Ô,Ðð €LØÔ#ð )ð )ˆØˆÝ�7˜HÑ%Ô%ð 	DÝ�w”~ Ñ7Ô7ð BÝ& w¤~Ô'CÑDÔDð Bð B‘E�A�rØ9;¸c¹�K¥Ô 2°1Ñ 5Ô 5Ñ6Ð6å�w”~ ~Ñ6Ô6ð DÝ& w¤~Ô'BÑCÔCð Dð D‘E�A�rØ;=À¹8�K¥Ô 4°QÑ 7Ô 7Ñ8Ð8à×Ò˜KÑ(Ô(Ð(Ð(å
ˆ<ÑÔð 2Ø%1ˆ
�>Ñ"åÕ1°$Ñ7Ô7¸ÐEUÐVÑWÔWÐWr!   c                 óê   — t          | j        j        ¦  «        }g }| j        D ]O}g }|j        D ] }|                      ||¦  «        ¦  «         Œ!t          j        |Ž }|                     |¦  «         ŒP|S )aB  Return a list of :class:`qiskit.pulse.Schedule` object(s) from a qobj.

    Args:
        qobj (Qobj): The Qobj object to convert to pulse schedules.

    Returns:
        A list of :class:`qiskit.pulse.Schedule` objects from the qobj

    Raises:
        pulse.PulseError: If a parameterized instruction is supplied.
    )r   r0   rp   rq   r>   rx   r	   rA   )r   rI   Ú	schedulesr¯   ÚinstsÚinstrO   s          r   r®   r®      sŠ   € õ +¨4¬;Ô+DÑEÔE€Ià€IØÔ#ð #ð #ˆØˆØÔ(ð 	*ð 	*ˆDØ�LŠL˜˜ 4™œÑ)Ô)Ð)Ð)å”> 5Ð)ˆØ×Ò˜Ñ"Ô"Ð"Ð"ØÐr!   )$Ú__doc__Útypingr   r   r   r   r   r   rt   r…   Úqiskitr	   Ú qiskit.circuit.classicalregisterr   Úqiskit.circuit.instructionr   Úqiskit.circuit.quantumcircuitr   Úqiskit.circuit.quantumregisterr   Úqiskit.qobjr   Úqiskit.qobj.convertersr   Úqiskit.utilsr   rB   r   rA   r   r    r   rP   r4   r   r®   r'   r!   r   ú<module>rÀ      s7  ðð MÐ LØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø :Ð :Ð :Ð :Ð :Ð :à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø =Ð =Ð =Ð =Ð =Ð =Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð
 �Ø�U˜4 Ô/°°c¸3°h´ÀÀcÈ3ÀhÄÐOÔPñô €ð ˆg�m U¨4°´Ô+?ÀÀcÈ3ÀhÄÐQUÐVYÐ[^ÐV^ÔQ_Ð+_Ô%`ÑaÔa€ð €Ø
Ø)ð,ðñ ô ð+*˜˜}¨kÐ9Ô:ð +*ð +*ð +*ñô ð+*ð\Y -ð Yð Yð Yð Yð ð ð ð2rð rð rðj X¨ð  Xð  Xð  Xð  XðF t¨E¬NÔ';ð ð ð ð ð ð r!   