
    z	i                      S r SSKJr  SSKrSSKJr  SSKrSSKrSSKrSSK	r	SSK
r
SSK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KJr  SSKJr  SS	KJrJr  SS
KJr  SSKJ r J!r!  SSK"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+  SSK,J-r-  SSKJ.r.J/r/  SSK0J1r1J2r2J3r3  SSK4J5r5J6r6  SSK7J8r8J9r9  SSK:J;r;J<r<  SSK=J>r?  SSK@JArAJBrB  \
R                  (       a  SSKJDrDJErE   " S S5      rF " S S5      rGS:S jrHS:S jrIS:S jrJS rKS  rLS;S! jrMS" rNS# rOS$ rPS% rQS& rRS' rSS( rTS) rUS* rVS+ rWS, rXS- rY S:S. jrZS/ r[S0 r\S1 r]S2 r^S3 r_S4 r`S5 raS6 rbSS7\1R                  S4S8 jrd S<S9 jreg)=zBinary IO for circuit objects.    )annotationsN)defaultdict)circuit)librarycontrolflowCircuitInstructionControlFlowOpIfElseOp)iter_namespaces)expr)ClassicalRegisterClbit)Gate)SingletonInstructionSingletonGate)ControlledGate)AnnotatedOperationModifierInverseModifierControlModifierPowerModifier)Instruction)QuantumCircuit)QuantumRegisterQubit)commonformats	type_keys)QpyErrorUnsupportedFeatureForVersion)value	schedules)SparsePauliOpClifford)	evolution)LayoutTranspileLayout)QPYSerializer
Annotationc                  F    \ rS rSrSS jr\S	S j5       rS
S jrSS jrSr	g)_AnnotationSerializationState;   c                ,    Xl         0 U l        0 U l        g N)	factoriesserializerspotential_serializersselfr/   s     W/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/qpy/binary_io/circuits.py__init__&_AnnotationSerializationState.__init__<   s    "%'"    c                ,    [        U R                  5      $ )z&The number of constructed serializers.)lenr0   r3   s    r4   num_serializers-_AnnotationSerializationState.num_serializersA   s     4##$$r7   c                   [        UR                  5       GH0  nU R                  R                  US5      =nb#  Uu  pEUR	                  X!5      =n[
        La  XF4s  $ U R                  R                  US5      =nbQ  UR	                  X!5      =n[
        La7  U R                  U	 [        U R                  5      nXE4U R                  U'   XF4s  $ U R                  R                  US5      =nc  M  U" 5       nUR	                  X!5      =n[
        L a  XPR                  U'   GM	  [        U R                  5      nXE4U R                  U'   XF4s  $    [        SU 35      e)zSerialize an annotation using a known serializer (initializing one, if necessary).

Returns the index of the serializer used, and the serialized annotation.Nz1No configured annotation serializer could handle )
r   	namespacer0   getdump_annotationNotImplementedr1   r9   r/   r   )r3   
annotationr>   existingindex
serializeroutfactorys           r4   	serialize'_AnnotationSerializationState.serializeF   sZ    ))=)=>I ,,00DAAN$,!%55iLLCUcc :%"88<<YMM
Z%55iLLCUcc229= 0 01E382ED$$Y/ :%>>--i>>K$Y
%55iLLCQ__<F..y9 0 01E382ED$$Y/ :%% ?& J:,WXXr7   c                D    S U R                   R                  5        5       $ )zmIterate over the namespaces and serializers that have had at least one successful use, in
order of first use.c              3  2   #    U  H  u  nu  p#X4v   M     g 7fr.    ).0r>   _rE   s       r4   	<genexpr>A_AnnotationSerializationState.iter_serializers.<locals>.<genexpr>b   s$      
 1I,OQ #0Hs   )r0   itemsr:   s    r4   iter_serializers._AnnotationSerializationState.iter_serializers_   s%    
 150@0@0F0F0H
 	
r7   )r/   r1   r0   Nr/   z-dict[str, typing.Callable[[], QPYSerializer]])returnint)rB   r)   rU   z(int, bytes))rU   z*typing.Iterator[tuple[str, QPYSerializer]])
__name__
__module____qualname____firstlineno__r5   propertyr;   rH   rR   __static_attributes__rL   r7   r4   r+   r+   ;   s&    (
 % %Y2
r7   r+   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
_AnnotationDeserializationStatei   c                    Xl         / U l        g r.   )r/   deserializersr2   s     r4   r5   (_AnnotationDeserializationState.__init__j   s    "r7   c                    [        U5       HW  nU R                  R                  US5      =nc  M$  U" 5       nUR                  X5        U R                  R                  U5          g   [        SU S35      e)zAInitialize a suitable deserializer using the given state payload.Nz9No configured annotation deserializer matched namespace '')r   r/   r?   
load_statera   appendr   )r3   r>   payloadparent_namespacerG   deserializers         r4   
initialize*_AnnotationDeserializationState.initializen   su     /	 :>>--.>EER&y''	;"")),7 !; RS\R]]^_``r7   c                >    U R                   U   R                  U5      $ )z7Load a payload using the deserializer of a given index.)ra   load_annotation)r3   rD   rg   s      r4   load$_AnnotationDeserializationState.loadx   s    !!%(88AAr7   )ra   r/   NrT   )r>   strrg   bytes)rD   rV   rg   rq   rU   r)   )rW   rX   rY   rZ   r5   rj   rn   r\   rL   r7   r4   r^   r^   i   s     aBr7   r^   c                   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nU R                  UR                  5      R                  [        R                  5      n[        R                  " UR                  U R                  UR                  5      UUS9nUUR                   UR"                  UR$                  UR&                  UR(                  S.nU R                  UR*                  5      n[,        R.                  " XS9n	XuU	4$ )Nversionvectors)global_phase
num_qubits
num_clbitsnum_registersnum_instructionsnum_varscls)r   CIRCUIT_HEADER_V12_makestructunpackCIRCUIT_HEADER_V12_PACKreadCIRCUIT_HEADER_V12_SIZE	name_sizedecoder   ENCODEr!   loads_valueglobal_phase_typeglobal_phase_sizerw   rx   ry   rz   r{   metadata_sizejsonloads
file_objrt   ru   metadata_deserializerdatanamerv   headermetadata_rawmetadatas
             r4   _read_header_v12r   }   s    %%++++X]]7;Z;Z-[	
D
 ==(//>D$$d,,-	L %oooo++ 11MMF ==!3!34Lzz,BH!!r7   c                j   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nU R                  UR                  5      R                  [        R                  5      n[        R                  " UR                  U R                  UR                  5      UUS9nUUR                   UR"                  UR$                  UR&                  S.nU R                  UR(                  5      n[*        R,                  " XS9n	XuU	4$ )Nrs   rv   rw   rx   ry   rz   r|   )r   CIRCUIT_HEADER_V2r   r   r   CIRCUIT_HEADER_V2_PACKr   CIRCUIT_HEADER_V2_SIZEr   r   r   r   r!   r   r   r   rw   rx   ry   rz   r   r   r   r   s
             r4   _read_header_v2r      s    $$****MM'889	
D ==(//>D$$d,,-	L %oooo++ 11F ==!3!34Lzz,BH!!r7   c                
   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nU R                  UR                  5      R                  [        R                  5      nUR                  UR                  UR                  UR                  UR                   S.nU R                  UR"                  5      n[$        R&                  " XQS9nXCU4$ )Nr   r|   )r   CIRCUIT_HEADERr   r   r   CIRCUIT_HEADER_PACKr   CIRCUIT_HEADER_SIZEr   r   r   r   rv   rw   rx   ry   rz   r   r   r   )r   r   r   r   r   r   r   s          r4   _read_headerr      s    !!''g118==A\A\3]^D ==(//>D))oooo++ 11F ==!3!34Lzz,BH!!r7   c           	        0 0 S.n[        U5       GH?  n[        R                  R                  [        R
                  " [        R                  U R                  [        R                  5      5      5      nU R                  UR                  5      R                  S5      nSUR                   S3nU R                  [        R                  " U5      5      n[        [        R
                  " Xg5      5      nUR                  R                  S5      S:X  a!  UR                  XR                   4US   U'   GM!  UR                  XR                   4US   U'   GMB     U$ )Nqcutf8!r   r   )ranger   REGISTER_V4r   r   r   REGISTER_V4_PACKr   REGISTER_V4_SIZEr   r   sizecalcsizelisttype
standalone
in_circuit	r   ry   	registers_regr   r   REGISTER_ARRAY_PACKbit_indices_rawbit_indicess	            r4   _read_registers_v4r      s   r"Im$""((MM((g667
 }}T^^,33F; !$))A."--8K(LM6==)<NO99F#s*$(OO[//#RIcN4 $(OO[//#RIcN4  % r7   c           	        0 0 S.n[        U5       GH-  n[        R                  R                  [        R
                  " [        R                  U R                  [        R                  5      5      5      nU R                  UR                  5      R                  S5      nSUR                   S3nU R                  [        R                  " U5      5      n[        [        R
                  " Xg5      5      nUR                  R                  S5      S:X  a  UR                  US4US   U'   GM  UR                  US4US   U'   GM0     U$ )Nr   r   r   Ir   Tr   )r   r   REGISTERr   r   r   REGISTER_PACKr   REGISTER_SIZEr   r   r   r   r   r   r   r   s	            r4   _read_registersr      s   r"Im$%%MM%%g334
 }}T^^,33F; !$))A."--8K(LM6==)<NO99F#s*$(OO[$#GIcN4 $(OO[$#GIcN4  % r7   c           	     v   [        U5      n[        R                  R                  [        R
                  " [        R                  U R                  [        R                  5      5      5      n[        UR                  5       H  n[        R                  R                  [        R
                  " [        R                  U R                  [        R                  5      5      5      nUR                  U R                  UR                  5      R!                  S5      U R                  UR"                  5      5        M     U$ )Nutf-8)r^   r   ANNOTATION_HEADER_STATICr   r   r   ANNOTATION_HEADER_STATIC_PACKr   ANNOTATION_HEADER_STATIC_SIZEr   num_namespacesANNOTATION_STATE_HEADERANNOTATION_STATE_HEADER_PACKANNOTATION_STATE_HEADER_SIZErj   namespace_sizer   
state_size)r   annotation_factoriesstatestatic_payloadrN   rg   s         r4   _read_annotation_statesr      s    +,@AE55;;11MM'??@	
N >0011177MM44gBBC
 	MM'00188A8==QXQcQcCd	
 2 Lr7   c                *   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  UR                  U R                  UR                  5      5      $ r.   )r   INSTRUCTION_ANNOTATIONr   r   r   INSTRUCTION_ANNOTATION_PACKr   INSTRUCTION_ANNOTATION_SIZErn   namespace_indexpayload_size)r   annotation_stater   s      r4   _read_instruction_annotationr     si    ++11//MM'==>	
F   !7!7vGZGZ9[\\r7   c                (   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      n[        UR                  5       Vs/ s H  n[        X5      PM     sn$ s  snf r.   )r   INSTRUCTION_ANNOTATIONS_HEADERr   r   r   #INSTRUCTION_ANNOTATIONS_HEADER_PACKr   #INSTRUCTION_ANNOTATIONS_HEADER_SIZEr   num_annotationsr   )r   r   r   rN   s       r4   _read_instruction_annotationsr     sv    339977MM'EEF	
F v--..A 	%X@.  s   7Bc	                t   U [         R                  R                  :X  a  [        R                  " U[
        X(S9n	U	$ U [         R                  R                  :X  a  [        R                  " U[        5      n	U	$ U [         R                  R                  :X  ao  [        R                  R                  [        R                  " [        R                  U5      5      n
[!        U
R"                  U
R$                  U
R&                  5      n	U	$ U [         R                  R(                  :X  a+  [+        [        R,                  " U[.        UUUUUUUS9	5      n	U	$ U [         R                  R0                  :X  a  [        R                  " SU5      S   n	U	$ U [         R                  R2                  :X  a  [        R                  " SU5      S   n	U	$ U [         R                  R4                  :X  a+  [7        UR9                  [        R:                  5      XT5      n	U	$ Ub  UR<                  OSn[>        R@                  " U UUUUUS   UUS9n	U	$ )	Nrt   r   )rt   ru   r   r   use_symenginestandalone_varsr   <qr   <drL   r   clbitscregsr   r   )!r   ProgramCIRCUITr   data_from_binaryread_circuitValueMODIFIER_read_modifier	ContainerRANGEr   r   r   r   
RANGE_PACKr   startstopstepTUPLEtuplesequence_from_binary_loads_instruction_parameterINTEGERFLOATr   _loads_register_paramr   r   r   r!   r   )type_key
data_bytesrt   ru   r   r   r   r   r   paramr   r   s               r4   r   r     s    9$$,,,''g
V LQ 
Y__--	-''
NCN LM 
Y((..	.}}""6==1C1CZ#PQdjj$))TYY7H LG 
Y((..	.'',#+ /%9

D L+ 
Y__,,	,dJ/2& L% 
Y__**	*dJ/2  L 
Y__--	-%j&7&7&F[ L $+#6B!!C.'+	
 Lr7   c                ^    U S   S:X  a  [        U SS  5      nUR                  U   $ US   U    $ )Nr       r   )rV   r   )r   r   r   conditional_bits       r4   r   r   R  s<    !}jn-~~o..S>*%%r7   c	                &   US:  a  [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      n	U	R                  (       a  [        R                  R                  O[        R                  R                  n
SnO[         R                  R                  [        R                  " [         R                  U R                  [         R                  5      5      5      n	[        R                  " U	R                   S-  5      n
[#        U	R                   [        R$                  R&                  -  5      nU R                  U	R(                  5      R+                  [,        R.                  5      nU R                  U	R0                  5      R+                  [,        R.                  5      nU R                  U	R2                  5      R+                  [,        R.                  5      n/ n/ n/ nS nU
[        R                  R                  :X  a  [5        XU5      U	R6                  4nOEU
[        R                  R8                  :X  a'  [:        R<                  " U UUUR>                  US   UUS9nUGb  [A        U	RB                  5       H  n[         RD                  R                  [        R                  " [         RF                  U R                  [         RH                  5      5      5      nURJ                  R+                  [,        R.                  5      S:X  a  [M        S5      eURO                  URP                  URR                     5        M     [A        U	RT                  5       H  n[         RD                  R                  [        R                  " [         RF                  U R                  [         RH                  5      5      5      nURJ                  R+                  [,        R.                  5      S:X  a  [M        S5      eURO                  UR>                  URR                     5        M     [A        U	RV                  5       HH  n[,        RX                  " U 5      u  nn[[        UUUUUUUUUR\                  S	9	nURO                  U5        MJ     U(       a  [_        X5      OS nUS
;   a  [a        UUUUUUUUUS9	nUbI  [b        Rd                  " SU S3[f        SS9  [i        UU5      nURO                  UUU5        [k        UU5      nU	R0                  S:  a  UUl6        Uc  U$ URo                  UUU5        g X;   aH  [a        UUUUUUUUUS9	nUUl8        U	R0                  S:  a  UUl6        Uc  U$ URo                  UUU5        g [s        [t        U5      (       a  [w        [t        U5      nOg[s        [x        U5      (       a  [w        [x        U5      nOA[s        [z        U5      (       a  [w        [z        U5      nOUS:X  a  [|        nO[        SU 35      eU	R0                  S::  a  S nUS;   a  U" U/UQ7SU06nGOzUS:X  a  UGt nn n!U" UUU U!U=(       d    SS.6nGOXUS:  a  [        U[        5      (       a  US;   a  U" / UQU	R                  P7SU06nOnU" USU06nUR                  U	R                  :w  d  UR                  U	R                  :w  a2  UR                  5       nU	R                  UlB        U	R                  UlC        U(       a+  [i        UU5      nURO                  UUU5        [k        UU5      nGO}US;   az  [        US   [        5      (       a  U" SR                  S U 5       5      5      nOU	RV                  S:X  a*  U" [        US   R                  5      U	RB                  5      nOU" U5      nOUS;   a	  U" U5      nOUS:X  a  U" [        U5      /UQ76 nOhUS:X  a  [        U5      /nOUS;   a  [        U5      [        U5      /nUb1  [        U[        [        45      (       a	  U" USU06nOU" U6 nUUl6        OU" U6 nU(       af  [        U[        5      (       dJ  [b        Rd                  " SU S3[f        SS9  [i        UU5      nURO                  UUU5        [k        UU5      nOUUl8        Uc  U$ [        U[        5      (       d  URO                  UUU5        g URo                  [        UUU5      5        g ) N   F   r   r   z%Invalid input carg prior to all qargsr   z"Invalid input qarg after all qargs)r   >   r   r   r   r   zThe .condition attribute on za can not be represented in this version of Qiskit. It will be represented as an IfElseOp instead.)
stacklevelr   r$   zInvalid instruction type: )r
   WhileLoopOplabelBoxOprL   )r  durationunitr   >   MCXGateMCU1Gate	MCXVChainMCPhaseGateMCXGrayCodeMCXRecursive>   
InitializeStatePreparation c              3  $   #    U  H  ov   M     g 7fr.   rL   )rM   r  s     r4   rO   $_read_instruction.<locals>.<genexpr>   s     )DVE%Vs   r   >   UCRXGateUCRYGateUCRZGateDiagonalGateQFTGateBarrier>   BreakLoopOpContinueLoopOp)Pr   CIRCUIT_INSTRUCTIONr   r   r   CIRCUIT_INSTRUCTION_PACKr   CIRCUIT_INSTRUCTION_SIZEhas_conditionr   	Condition	TWO_TUPLENONECIRCUIT_INSTRUCTION_V2CIRCUIT_INSTRUCTION_V2_PACKCIRCUIT_INSTRUCTION_V2_SIZE
extras_keyboolInstructionExtraFlagsHAS_ANNOTATIONSr   r   r   r   
label_sizecondition_register_sizer   condition_value
EXPRESSIONr!   
read_valuer   r   	num_qargsCIRCUIT_INSTRUCTION_ARGCIRCUIT_INSTRUCTION_ARG_PACKCIRCUIT_INSTRUCTION_ARG_SIZEr   	TypeErrorrf   qubitsr   	num_cargsnum_parametersread_generic_typed_datar   r/   r   _parse_custom_operationwarningswarnUserWarningr   r
   r  _append	conditionhasattrr   getattrcircuit_modr   r$   AttributeError
issubclassr   num_ctrl_qubits
ctrl_state
to_mutable
isinstancerp   joinrV   realr9   r   r   r	   r   r   )"r   r   r   custom_operationsrt   ru   r   r   r   instructionconditional_keyhas_annotations	gate_namer  condition_registerqargscargsparamsr>  _qargqarg_cargcarg_paramr   r   r   r   inst_objbody
gate_classgater  r	  s"                                     r4   _read_instructionr\  Z  s    {1177MM00g>>?
 .9-F-FI))IL_L_LdLd 	  44::MM33gAAB
 $--k.D.Dt.KL""Y%D%D%T%TT
 k334;;FMMJIMM+00188GE!{'J'JKRRSYS`S`aEEFI)--777!"4yI''
	 
I//::	:$$>>C.'+
	 ;001E228888MM'"F"FGD yy.#5 GHHLL		23 2 ;001E228888MM'"F"FGD yy.#5 DEELL		23 2 223%==hG*,!1!;!;

 	e 4" FU%hAZ^ 
 ==*-

  MM.yk :6 6  "%/DKK%/	40H!!A%"HN?O%/		'*-

 '!!A%"HN?O%/	)	$	$Wi0
	i	(	([)4
	i	(	([)4
	j	 
9)EFF"//):f:E:	g	"(458$KL][]
 
A*Z@@ 
 
 PvP{'B'BP%PDv3U3D$$(C(CC??k&<&<<('2'B'B$"-"8"8!%/DKKeU+It,D::&)S))!"'')DV)D"DE++q0!#fQinn"5{7L7LM "&) 
 
 f%D)#c%j262DI%e*??e*c%j1 j+?*OPP%v;U;D%v.D!&DJ!6*dM2229+ >: :    &eU3D%/	40!*dK((tUE*  	*4>?r7   c	                
   US:  a  X   u  n	n
nnnnnOX   u  ppS =n=pUS:  a#  SR                  UR                  S5      S S 5      n[        R                  " U	5      nU[        R                  R                  :X  a  [        XX5      nUb  UUl        U$ U[        R                  R                  :X  a  [        XU5      nUUl        U$ US:  a  U[        R                  R                  :X  ah  [        R                  " U5       n[        US UU UUUUUS9	nS S S 5        USU-  S-
  :  a  UR                  SS5      S   n[        UU
UUUWS	9nUUl        U$ US:  aZ  U[        R                  R                  :X  a<  [        R                  " U5       n[        US UU UUUUUS9	nS S S 5        [!        WUS
9nU$ U[        R                  R"                  :X  a  U$ [%        SU	 S35      e! , (       d  f       N= f! , (       d  f       NZ= f)Nr     rN   r     r   r   )rD  rE  	base_gate)base_op	modifiersz!Invalid custom instruction type 'rd   )rH  splitr   r   INSTRUCTIONr   
definitionGATEr   CONTROLLED_GATEioBytesIOr\  rsplitr   ANNOTATED_OPERATIONr   PAULI_EVOL_GATE
ValueError)rJ  rN  rR  rt   ru   r   r   r   r   type_strrw   rx   rf  rD  rE  base_gate_rawr   rX  base_gate_objra  s                       r4   r9  r9  T  s.    !| (	
 8I7S4j7;;;
"}HHY__S1#267	++H5H9//;;;yjI!",H9//444	v6(!|I$@$@$P$PPZZ&-)!!1
I ' ?*Q..!((a03I!+!
 )"}Y%A%A%U%UUZZ&-)!!1
I ' &i6J9//???
8
!D
EE[ '&6 '&s   G#G4#
G14
Hc           	     B   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  S:w  a  UR                  (       a  [        S5      e/ n[        UR                  5       H  n[         R                  R                  [        R                  " [         R                  U R                  [         R                  5      5      5      n[        R                   " U R                  UR"                  5      [$        R&                  5      nUR)                  [*        R,                  " U5      5        M     UR                  (       a  US   nOUn[.        R0                  " UR2                  U R                  UR4                  5      UUS9n	[6        R8                  " U R                  UR:                  5      5      n
[=        [>        U
S   5      " S0 U
S   D6n[@        RB                  " XUS9nU$ )	Nr   zWCan't have a standalone operator with {pauli_evolution_raw[0]} operators in the payloadr   rs   classsettings)time	synthesisrL   )"r   PAULI_EVOLUTION_DEFr   r   r   PAULI_EVOLUTION_DEF_PACKr   PAULI_EVOLUTION_DEF_SIZEoperator_sizestandalone_oprn  r   SPARSE_PAULI_OP_LIST_ELEMSPARSE_PAULI_OP_LIST_ELEM_PACKSPARSE_PAULI_OP_LIST_ELEM_SIZEr   r   r   nprn   rf   r#   	from_listr!   r   	time_type	time_sizer   r   synth_method_sizer@  	evo_synthr   PauliEvolutionGate)r   rt   ru   pauli_evolution_defoperator_listrN   op_elemop_raw_datapauli_opru  
synth_datarv  return_gates                r4   _read_pauli_evolution_gater    s   !55;;,,hmmG<\<\.]	

 ((A-2E2S2Se
 	
 M&4453399MM66gDDE
 --hmmGLL.I277S]44[AB 6 (( # %%)334	D HMM*=*O*OPQJ	:g#67Q*Z:PQI,,XIVKr7   c                   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  S:X  a
  [        5       $ UR                  S:X  a  [        UR                  UR                  S9$ UR                  S:X  a  [        UR                  S9$ [        S5      e)N   i   c)rD  rE     p)powerUnsupported modifier.)r   MODIFIER_DEFr   r   r   MODIFIER_DEF_PACKr   MODIFIER_DEF_SIZEr   r   r   rD  rE  r   r  r4  )r   modifiers     r4   r   r     s    ##))%%MM'334	
H }}  	$	$44ATAT
 	
 
$	8>>22/00r7   c           	     X   0 n[         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  S:  Ga7  [        UR                  5       GH  nUS:  a`  [         R                  R                  [        R                  " [         R                  U R                  [         R                  5      5      5      nO_[         R                  R                  [        R                  " [         R                  U R                  [         R                  5      5      5      nU R                  UR                   5      R#                  [$        R&                  5      nUR(                  n	S n
UR*                  (       a  U R                  UR                  5      nUS:  d  UR-                  S5      (       d&  [$        R.                  " U[0        UUR2                  S9n
O0UR-                  S5      (       a  [$        R.                  " U[4        XS9n
US:  a  XR6                  UR8                  U
4nOLU R                  UR:                  5      nU	UR6                  UR8                  U
UR<                  UR>                  U4nXU'   GM      U$ )Nr   r  r  ###PauliEvolutionGate_r   rs   ) r   CUSTOM_CIRCUIT_DEF_HEADERr   r   r   CUSTOM_CIRCUIT_DEF_HEADER_PACKr   CUSTOM_CIRCUIT_DEF_HEADER_SIZEr   r   CUSTOM_CIRCUIT_INST_DEFCUSTOM_CIRCUIT_INST_DEF_PACKCUSTOM_CIRCUIT_INST_DEF_SIZECUSTOM_CIRCUIT_INST_DEF_V2CUSTOM_CIRCUIT_INST_DEF_V2_PACKCUSTOM_CIRCUIT_INST_DEF_V2_SIZEgate_name_sizer   r   r   r   custom_definition
startswithr   r   r/   r  rw   rx   base_gate_sizerD  rE  )r   rt   ru   r   rJ  custom_definition_headerrN   r   r   ro  definition_circuit
def_binarydata_payloadra  s                 r4   _read_custom_operationsr    s   &@@FF22MM'@@A	
   $$q(/445A{66<<MM<< g&J&JK 99??MM?? g&M&MN ==!4!45<<V]]KDyyH!%%%%]]4995
Q;doo6O&P&P)/)@)@"$ '-=-G-G	*& __%>??)/)@)@"$>*& { (//4??L^_$MM$*=*=>	OOOO&((OO  '3d#[ 6\ r7   c           	        [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      n[        UR                  5       GHJ  n[         R                  R                  [        R                  " [         R                  U R                  [         R                  5      5      5      nU R                  UR                  5      R                  [        R                   5      nU(       a  ["        R$                  " [&        SU S3S9  [        UR(                  5       H(  nU R                  [        R*                  " S5      5        M*     [        UR,                  5       H  n[.        R0                  " XU5        M     [2        R4                  " XU5        GMM     g)zIConsume calibrations data, make the file handle point to the next sectionzDSupport for loading pulse gates has been removed in Qiskit 2.0. If `z=` is in the circuit it will be left as an opaque instruction.)categorymessagez!qN)r   CALIBRATIONr   r   r   CALIBRATION_PACKr   CALIBRATION_SIZEr   num_calsCALIBRATION_DEFCALIBRATION_DEF_PACKCALIBRATION_DEF_SIZEr   r   r   r   r:  r;  r<  rw   r   
num_paramsr!   r/  r"   read_schedule_block)r   rt   ru   r   r   rN   	defheaderr   s           r4   _read_calibrationsr  !  s9     &&g..g>V>V0WXF 6??#++11MM'66gFbFb8cd
	 }}Y00188GMM$fY[ y++,AMM&//$/0 - y++,AX8 - 	%%h9NO% $r7   c                    [        U [        5      (       a)  U R                  R                  [        R
                  5      $ S[        US   U    5      R                  [        R
                  5      -   $ )N    r   )rG  r   r   encoder   r   rp   )register	index_maps     r4   _dumps_registerr  ;  sQ    (-..}}##FMM22S31299&--HHHr7   c          
        [        U [        5      (       a7  [        R                  R                  n[
        R                  " U [        X5S9nXg4$ [        U [        5      (       a8  [        R                  R                  n[
        R                  " U [        5      nXg4$ [        U [        5      (       ab  [        R                  R                  n[        R                   " ["        R$                  U R&                  U R(                  U R*                  5      nXg4$ [        U [,        5      (       a;  [        R                  R.                  n[
        R0                  " U [2        UUUUUS9nXg4$ [        U [4        5      (       a4  [        R                  R6                  n[        R                   " SU 5      nXg4$ [        U [8        5      (       a4  [        R                  R:                  n[        R                   " SU 5      nXg4$ [        U [<        [>        45      (       a(  [        R                  R@                  n[C        X5      nXg4$ [D        RF                  " U UUUUS9u  pgXg4$ )Nr   )r  r   rt   standalone_var_indicesr   r   r   )r  r   r  rt   )$rG  r   r   r   r   r   data_to_binarywrite_circuitr   r   r   _write_modifierr   r   r   r   packr   r   r   r   r   r   r   sequence_to_binary_dumps_instruction_parameterrV   r   floatr   r   r   r   r  r!   dumps_value)r   r  r   rt   r  r   r   r   s           r4   r  r  B  s    %(($$,,**='

P K 
E8	$	$??++**5/B
F E 
E5	!	!&&,,[[!3!3U[[%**ejjY
@ ? 
E5	!	!&&,,..('#9!5

: ) 
E3		??**[[u-
" ! 
E5	!	!??(([[u-
  
EE#45	6	6??++$U6
   %00'#9 
 r7   c                   [        UR                  [        5      (       a!  UR                  R                  R                  nO UR                  R
                  R                  n/ n	[        [        U5      (       d0  [        [        U5      (       d  [        [        U5      (       d  US:w  d5  US:X  d/  US:X  d)  [        UR                  [        R                  5      (       a  UR                  R                  nUR                  R                  S;  a%  U S[        R                  " 5       R                   3nOU S[        R                  " 5        3nUR                  X('   U	R                  U5        GOHUS;   aX  UR                  R                  S-   [!        [        R                  " 5       5      -   nUR                  X('   U	R                  U5        O[        UR                  [        R"                  5      (       aA  S[!        [        R                  " 5       5      -   nUR                  X('   U	R                  U5        O[        UR                  [        R$                  5      (       aW  UR                  R                  S-   [!        [        R                  " 5       5      -   nUR                  X('   U	R                  U5        [&        R(                  R*                  n
SnS	n[-        UR                  S
S 5      =nb  [        U[.        R0                  5      (       a  [&        R(                  R2                  n
O_[&        R(                  R4                  n
[7        UR                  R8                  S	   U5      n[;        UR                  R8                  S   5      nUR=                  [>        R@                  5      n[-        UR                  SS 5      nU(       a   UR=                  [>        R@                  5      nOSn/ n[        UR                  [        RB                  5      (       a;  UR                  RD                  [G        UR                  RI                  5       5      /nGO'[        UR                  [        RJ                  5      (       az  UR                  RL                  S	   UR                  RN                  UR                  RP                  /nUR                  RR                   Vs/ s H  nURU                  U5      PM     nnO[        UR                  [V        5      (       a  UR                  RX                  /nOM[        UR                  [Z        5      (       a  UR                  R\                  nO[-        UR                  S/ 5      nU(       a  U
[&        R^                  R`                  -  n
[-        UR                  SS	5      n[-        UR                  SS	5      n[b        Rd                  " [f        Rh                  [k        U5      [k        U5      [k        U5      UR                  Rl                  UR                  Rn                  [;        U
5      [k        U5      UUU5      nU Rq                  U5        U Rq                  U5        U Rq                  U5        [&        R(                  " U
S-  5      nU[&        R(                  R2                  L a  [r        Rt                  " U UUUUS9  OU Rq                  U5        URv                   H@  n[b        Rd                  " [f        Rx                  SUS   U   5      nU Rq                  U5        MB     URz                   H@  n[b        Rd                  " [f        Rx                  SUS   U   5      nU Rq                  U5        MB     U H6  n[}        UUUUUUR~                  S9u  nn[>        R                  " U UU5        M8     U(       a  US:  a  [        SSU5      eU Rq                  [b        Rd                  " [f        R                  [k        U5      5      5        U HU  u  nnU Rq                  [b        Rd                  " [f        R                  U[k        U5      5      5        U Rq                  U5        MW     U	$ s  snf )Nr$   r   r   >   ucrx_dgucry_dgucrz_dgrN   >   r   r   r  r7   r   
_conditionr   r  rR  rD  rE  r  )rt   r  r     qr   r  r   )rt   r  r      r   )DrG  	operationr   
base_classrW   	__class__r?  r   rA  r   BlueprintCircuitr   uuiduuid4hexrf   rp   r  MCMTGater   r!  r#  r@  r   Exprr.  r"  r  r  rV   r  r   r   SwitchCaseOptargetr   cases_specifierr  blocksr  r	  r   rH   r$   tableaur   rc  r)  r*  r   r  r   r%  r9   rw   rx   writer!   write_valuer5  r2  r   r  r/   write_generic_typed_datar    r   r   )r   rK  rJ  r  r   rt   r   r  gate_class_namecustom_operations_list
extra_typerO  r-  op_conditionr  	label_rawr   instruction_paramsrB   rD  rE  instruction_rawcondition_typeqbitinstruction_arg_rawclbitr   r   r   serializer_indexannotation_payloads                                  r4   _write_instructionr  s  s    +''55%//::CC%//99BB 11K99K99:-f$m+k++W-E-EFF%//44  %%-NN!0 14::<3C3C2DEO "1 14::<.AO-8-B-B*%%o6	D	D &//44s:S=NN-8-B-B*%%o6	K))7+E+E	F	F3c$**,6GG-8-B-B*%%o6	K))7+;+;	<	<%//44s:S=NN-8-B-B*%%o6$$))JO 5 5|TJJWlDII..",,77J",,66J!01F1F1Q1QRS1TV_!`!+"7"7"B"B1"EFO%,,V]];OK))7D9ELL/		K +'')A)ABB!!((+''779:
 
K));+<+<	=	=!!((+!!**!!&&
 *33??
?
 &&z2? 	 
 
K))8	4	4)33;;<	K))+=	>	>(22<<$[%:%:HbIi55EEE
k335FJO..a@Jkk++OI((((JO NN?#NN?#NN9((d):;N,,777#9	
 	)* ""$kk00$	#t8L
 	*+	 #
 ##$kk00$	#u8M
 	*+	 $ $;#9!1!;!; 
* 	''(JG $ R<.}b'JJv{{7#N#NPST_P`ab4?00NN779I3OaKb
 NN-. 5@ "![
s   a*c                d   UR                   nSn[        U[        5      (       d  U/nSn[        U5      nS n[        R
                  " 5       nU H*  n[        R                  " X5      n	UR                  U	5        M,     [        R                  " UR                  US9u  p[        U5      n[        [        UR                  5      R                  5      nUR                  R                   n["        R$                  " XS.5      R'                  [        R(                  5      n[        U5      n[*        R,                  " [.        R0                  UUU
UU5      nU R                  U5        U R                  UR3                  5       5        UR5                  5         U R                  U5        U R                  U5        g )NFTc                   [         R                  " UR                  SS9[        R                  5      n[
        R                  " [        R                  [        U5      5      nU R                  U5        U R                  U5        g )NT)array)r   r  to_listr  saver   r  r   r}  r9   r  )bufferop	elem_dataelem_metadatas       r4   _write_elem0_write_pauli_evolution_gate.<locals>._write_elem'  sV    ))"**4**@"''J	G$J$JCPYN[]#Yr7   rt   )rs  rt  )operatorrG  r   r9   ri  rj  r   r  r  r!   r  ru  rp   r   rv  rW   rt  r   dumpsr  r   r   r  r   rx  getvalueclose)r   evolution_gatert   r  r   num_operatorsr  pauli_data_bufr  r   r  	time_datar  synth_classsettings_dictr  
synth_sizepauli_evolution_raws                     r4   _write_pauli_evolution_gater    s\   "++MJmT**&
&M  ZZ\N!$$X;T" " !,,^-@-@'RIIId>334==>K",,55MkMNUUV\VcVcdJZJ ++(( NN&'NN>**,-NN9NN:r7   c                x   [        U[        5      (       a	  SnSnSnSnOe[        U[        5      (       a  SnUR                  nUR                  nSnO3[        U[
        5      (       a  SnSnSnUR                  nO[        S5      e[        R                  " [        R                  X#XE5      nU R                  U5        g )Nr  r   g        r  r  r  )rG  r   r   rD  rE  r   r  r4  r   r  r   r  r  )r   r  r   rD  rE  r  modifier_datas          r4   r  r  G  s    (O,,
	Ho	.	."22((
	Hm	,	,
/00KK!!8jM NN=!r7   c               2   [         R                  R                  U5      nSn	Sn
S nUR                  nUR                  nSnSnS n/ nU[         R                  R
                  :X  a)  Sn	[        R                  " U[        US9n[        U5      n
GOU[         R                  R                  :X  am  Sn	UR                    [        R                  " UR                  [        UUR                  S9n[        U5      n
UR                  nUR                   nUR"                  nOvU[         R                  R$                  :X  a  Sn	UR&                  nOIUR                  b<  Sn	[        R                  " UR                  [        UUR                  S9n[        U5      n
Uc  SnOI[(        R*                  " 5        n[-        U[        USS5      U0 UUUUS9nUR/                  5       nS S S 5        UR1                  [        R2                  5      n[4        R6                  " [8        R:                  [        U5      UUUU	U
UU[        W5      5
      nU R=                  U5        U R=                  U5        U(       a  U R=                  U5        U R=                  U5        U$ ! , (       d  f       N= f)	NFr   Tr  r   r7   rL   r  r   )r   r   assignrw   rx   rm  r   r  r  r9   rh  rf  _definitionr  r/   rD  rE  ra  rl  rb  ri  rj  r  r  r  r   r   r  r   r  r  )r   r   r  rJ  r   rt   r  r   r   has_definitionr   r   rw   rx   rE  rD  ra  new_custom_instructionrp  base_gate_buffername_rawcustom_operation_raws                         r4   _write_custom_operationr  `  sZ    ++229=HNDD%%J%%JJOI9//???$$Y0KU\]4y	Y11AA	A
  	$$!!!1!;!;	
 4y#33))
''		Y11EE	E%%					)$$  !1!;!;	
 4yZZ\-%7 "9b"5!'=!1	&" -557M  {{6==)H!;;//HM NN'(NN8tNN=!!!= \s   ),J
Jc                  ^ [        U5       VVs0 s H  u  p4XC_M	     nnn[        5       nU H?  nUR                  c  M  UR                  U;  d  M$  UR                  UR                  5        MA     US4US44 GH?  u  pxU GH2  m[	        U4S j[        T5       5       5      n	TR
                  R                  [        R                  5      n
TR                  R                  [        R                  5      nU R                  [        R                  " [        R                  UU	TR                  [!        U
5      U5      5        U R                  U
5        STR                   S3n/ nT H$  nUR#                  UR%                  US5      5        M&     U R                  [        R                  " U/UQ76 5        GM5     GMB     [!        U5      [!        U5      -   $ s  snnf )NTFc              3  r   >#    U  H,  u  pUR                   T:H  =(       a    UR                  U:H  v   M.     g 7fr.   )	_register_index)rM   rD   bitregs      r4   rO   #_write_registers.<locals>.<genexpr>  s0      O]$<u)<<~s   47r   r   r_  )	enumeratesetr  addallr   r  r   r   prefixr  r   r  r   r   r   r9   rf   r?   )r   in_circ_regs	full_bitsrD   r  bitmapout_circ_regsregsis_in_circuitr   reg_namereg_typer   r   r  s                 @r4   _write_registersr)    s   +4Y+?@+?ZUcj+?F@EM==$l)Jcmm,  ".t 4}e6LMC OXY\~ J xxv}}5Hzz((7HNN,,HHM!	 NN8$$%chhZq/K""6::c2#67 NN6;;':I[IJ+   N0 |s=111? As   Gc                6	   UR                   c:  U R                  [        R                  " [        R
                  SSSSSS5      5        g Sn0 n/ n[        [        5      nUR                   R                  b  [        UR                   R                  5      nUR                   R                  R                  5       n[        UR                  5       H  nXg   nXsU'   UR                  c  UR                  b`  UR                  UR                  ;  a  XXR                     R!                  U5        UR!                  UR                  UR                  45        M  UR!                  S5        M     Sn	/ n
UR                   R"                  b  [        UR                   R"                  5      n	S /U	-  n
UR                   R                  R%                  5       nUR                   R"                  R'                  5        Hf  u  p[)        USS 5      bM  [)        USS 5      b?  UR                  UR                  ;  a  XXR                     R!                  U5        Xh   X'   M`  Xh   X'   Mh     Sn/ nUR                   R*                  b  [        UR                   R*                  5      nUR                   R*                  R                  5       n[        UR                  5       H1  nX   nUR!                  UR-                  U5      R.                  5        M3     UR0                  R2                  nUc  SnU R                  [        R                  " [        R
                  SUU	U[        U5      U5      5        [5        U [        U5      UR7                  5        VVs/ s H  nU  H  nUPM     M     snn5        U H  u  nnUc  S O(UR8                  R;                  [<        R>                  5      nU R                  [        R                  " [        R@                  Uc  SOUUc  SO
[        U5      5      5        Uc  M  U R                  U5        M     U
 H)  nU R                  [        R                  " SU5      5        M+     U H)  nU R                  [        R                  " SU5      5        M+     g s  snnf )	NFr_  r   )NNr  r  T!I)!layoutr  r   r  r   LAYOUT_V2_PACKr   r   initial_layoutr9   get_physical_bitsr   rw   r  r  qregsrf   input_qubit_mappingget_virtual_bitsrQ   r@  final_layoutfind_bitrD   _layout_input_qubit_countr)  valuesr   r  r   r   INITIAL_LAYOUT_BIT_PACK)r   r   initial_sizer1  initial_layout_arrayextra_registerslayout_mappingiqubitinput_qubit_sizeinput_qubit_mapping_arrayrD   final_layout_sizefinal_layout_arrayfinal_layout_physicalvirtual_bitinput_qubit_countbitsxr  reg_name_bytess                        r4   _write_layoutrI    s   ~~v{{7#9#95"b"aQRSTL!$'O~~$$07>>889 66HHJw))*A"%E)*&*ell.F??'--7#OO4;;EB$++U\\5??,KL$++L9 +  "~~))5w~~AAB%)F-=$=! 66GGI#NN>>DDFLE{D1=E8T2>??'--7#OO4;;EB3A3H)03A3H)0 G ~~"". ; ;< ' ; ; M M Ow))*A/2K%%g&6&6{&C&I&IJ +  :: NN"" 	

 $'8N8N8P)_8PZ^UV!Z^!8P)_ 0x!)!1x}}7K7KFMM7ZKK//m$,#n2E	
 %NN>* 0 'v{{4+, 'v{{4+,   *`s    Rc                    [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  (       d  g [        XU5        g r.   )
r   LAYOUTr   r   r   LAYOUT_PACKr   LAYOUT_SIZEexists_read_common_layoutr   r   r   s      r4   _read_layoutrQ  0  sO    ^^!!g))8==9L9L+MNF =='2r7   c                .   [        XR                  5      S   R                  5        VVs0 s H  u  p4U[        [	        US   5      U5      _M      nnnS n/ n[        UR                  5       GH  n[        R                  R                  [        R                  " [        R                  U R                  [        R                  5      5      5      n	U	R                  S:X  a  U	R                   S:X  a  [#        5       n
OU R                  U	R                   5      R%                  [&        R(                  5      nX;   a  X[   U	R                     n
O1[+        [-        U4S jUR.                  5      5      nXR                     n
UR1                  U
5        GM"     U(       a  [2        R4                  " U5      nS n/ n[        UR6                  5       HO  nUR1                  [        R                  " SU R                  [        R8                  " S5      5      5      S   5        MQ     U(       a.  0 nUR;                  5       n[=        U5       H  u  nnUXU   '   M     S n/ n[        UR>                  5       HO  nUR1                  [        R                  " SU R                  [        R8                  " S5      5      5      S   5        MQ     U(       a9  [=        U5       VVs0 s H  u  nnUR@                  U   U_M     nnn[3        U5      n[C        XmU5      Ul"        g s  snnf s  snnf )Nr   r   r_  c                     U R                   U:H  $ r.   )r   )rG  r   s     r4   <lambda>%_read_common_layout.<locals>.<lambda>N  s    QVVt^r7   r+  r   )#r   r;  rQ   r   r9   r   initial_layout_sizer   INITIAL_LAYOUT_BITr   r   r   r8  r   INITIAL_LAYOUT_BIT_SIZErD   register_sizer   r   r   r   nextfilterr0  rf   r&   from_qubit_listinput_mapping_sizer   r/  r  rA  r5  r'   r5  )r   r   r   r   vr   r.  initial_layout_virtual_bitsrN   rD  r>  register_namer  r1  r@  physical_bitsrD   r  r3  rB  layout_dicts                        r4   rO  rO  9  s    *(4J4JKCPVVXXGD 	oc!A$i..X   N"$6--.0066MM//g==>
 "{'@'@B'FGE$MM+*C*CDKKFMMZM)!01B1BCm'SU\UbUb cd !2!23#**51! /" #//0KL "6,,-!((MM$food.C DEaH	
 . ! &88:#$=>JE36;c 23 ?L6++,!!&--hmmFOOTXDY6Z"[\]"^_ - DMN`DabDajeSw~~c*E1Dabk*%n<XGO[T cs   %LLc                   [         R                  R                  [        R                  " [         R
                  U R                  [         R                  5      5      5      nUR                  (       d  g [        XU5        UR                  S:  a7  UR                  UR                  l        UR                  UR                  l        g g )Nr   )r   	LAYOUT_V2r   r   r   r-  r   LAYOUT_V2_SIZErN  rO  rE  r5  r6  r5  _output_qubit_listrP  s      r4   _read_layout_v2rg  j  s    $$g,,hmmG<R<R.STF =='21$-3-E-E*-4^^* %r7   Fc                X
   [        U=(       d    0 5      n[        R                  " UR                  SUS9R	                  [
        R                  5      n[        U5      n[        U5      n	UR                  R	                  [
        R                  5      n
[        R                  " UR                  US9u  p[        R                  " 5        n[        XR                  UR                   5      n[        XR"                  UR$                  5      nUR'                  5       nSSS5        WW-   n[(        R*                  " [        U
5      U[        U5      UR,                  UR.                  UUU	UR0                  S9	n[2        R4                  " [(        R6                  /UQ76 nU R9                  U5        U R9                  U
5        U R9                  U5        U R9                  U5        U R9                  W5        [        R:                  " XU5      n[        R                  " 5       n0 n0 n[=        UR                   5       VVs0 s H	  u  nnUU_M     snnUS'   [=        UR$                  5       VVs0 s H	  u  nnUU_M     snnUS'   UR>                   H  n[A        UUUUUUUUS9  M     [        R                  " 5        n[C        URE                  5       5      nU(       aH  URG                  5       n/ nU H'  nUU   nURI                  [K        UUUUUUUUS95        M)     U(       a  MH  UR'                  5       n SSS5        US	:  a  U R9                  [2        R4                  " [(        RL                  URN                  5      5        URQ                  5        H  u  n!n"U!R	                  S
5      n#U"RS                  5       n$U R9                  [2        R4                  " [(        RT                  [        U#5      [        U$5      5      5        U R9                  U#5        U R9                  U$5        M     O"URN                  (       a  [W        [X        S	U5      eU R9                  [2        R4                  " [(        RZ                  [        U5      5      5        U R9                  W 5        U R9                  UR'                  5       5        UR]                  5         [2        R4                  " [(        R^                  S5      nU R9                  U5        [a        X5        g! , (       d  f       GN= fs  snnf s  snnf ! , (       d  f       GN= f)aB  Write a single QuantumCircuit object in the file like object.

Args:
    file_obj (FILE): The file like object to write the circuit data in.
    circuit (QuantumCircuit): The circuit data to write.
    metadata_serializer (JSONEncoder): An optional JSONEncoder class that
        will be passed the :attr:`.QuantumCircuit.metadata` dictionary for
        ``circuit`` and will be used as the ``cls`` kwarg
        on the ``json.dump()`` call to JSON serialize that dictionary.
    use_symengine (bool): If True, symbolic objects will be serialized using symengine's
        native mechanism. This is a faster serialization alternative, but not supported in all
        platforms. Please check that your target platform is supported by the symengine library
        before setting this option, as it will be required by qpy to deserialize the payload.
    version (int): The QPY format version to use for serializing this circuit
    annotation_factories (dict): a mapping of namespaces to zero-argument factory functions that
        produce instances of :class:`.annotation.QPYSerializer`.
),:)
separatorsr}   r  N)	r   r   r   rw   rx   r   ry   rz   r{   r   r   r  r  r   r   )1r+   r   r  r   r  r   r   r9   r   r!   r  rv   ri  rj  r)  r0  r5  r   r   r  r   r~   rw   rx   num_identifiersr   r  r   r  write_standalone_varsr  r   r  r   keyscopyextendr  r   r;   rR   
dump_stater   r    r   r  r  r  rI  )%r   r   metadata_serializerr   rt   r   r   r   r   rz   circuit_namer   global_phase_datareg_buf	num_qregs	num_cregsregisters_rawry   
header_rawr   r  instruction_bufferrJ  r  rD   r  rK  custom_operations_buffernew_custom_operationsoperations_to_serializer   r  custom_operations_payloadr>   rE   namespace_bytesserializer_states%                                        r4   r  r  v  s2   2 55I5ORP::Z5HfV]]  %M7|<<&&v}}5L+0+<+<W=Q=Q[b+c(	$WmmW^^L	$WmmW^^L	((* 
 	)M ++l#+/0%%%%##)((
J [[88F:FFNN6NN< NN$%NN< NN=!"88GTI3<W^^3LM3LZUCc5j3LMIcN3<W^^3LM3LZUCc5j3LMIcN||#9-		
 $ 
1 $%6%;%;%= >#&;&@&@&B#$&!/-d3	%,,+0!)%/E)9	 0 $#$ %=$E$E$G!) 
, "}KK==?O?_?_`	
 &6%F%F%H!Iz'..w7O)446NN88(() NN?+NN+, &I 
	)	)*;GDDNN6;;wEEsK\G]^_NN,-NN%..01 [[1115FNN6($ 
< NM 
s,   AS<3T"T1A'TT<
T
T)c                   0 nUS:  a  [        XS9u  pgnO!US:  a  [        XXRS9u  pgnO[        XXRS9u  pgnUS   n	US   n
US   nUS   nUS   nUR                  S	S
5      n0 0 S.n/ nS/U
-  S/U-  S.nUS
:  GaL  US:  a  [	        X5      nO[        X5      nS[        [        4S[        [        44 GH  u  nnnUU   nUU   nUR                  5        HP  u  nu  nnnU(       d  M  U" [        U5      U5      nUUU   U'   [        UU5       H  u  nnUS
:  d  M  UUU'   M     MR     U Vs/ s H  nUb  UOU" 5       PM     nnUR                  5        Hd  u  nu  nnn U(       a	  UU   U   nO0U" UU V!s/ s H  n!U!S
:  a  UU!   OU" 5       PM     sn!S9nUUU   U'   U (       d  MS  UR                  U5        Mf     UUU'   GM     O=US    V"s/ s H  n"[        5       PM     sn"US    V"s/ s H  n"[        5       PM     sn"S.n[        R                  " X5      u  n#n$[!        US   US   /UQ7UU	UU#["        R$                  R&                     [(        R*                  " U#["        R$                  R,                     U#["        R$                  R.                     5      S.6n%U#["        R$                  R0                      H  n&U%R3                  U&5        M     U#["        R$                  R4                      H  n'U%R7                  U'5        M     US:  a  [9        X=(       d    0 5      n(O[;        U=(       d    0 5      n([=        XUU(5      n)[?        U5       H  n*[A        U U%UU)UUUU$U(S9	  M     US:  a  [C        XXR5        URE                  5        H  u  n+n,[        U,5      [        U+5      :w  d  M   [F        RH                  " SU+RJ                   SSRM                  [O        [?        [        U+5      5      5      U,-
   V!s/ s H  n![Q        U!5      PM     sn!5       SU%RJ                   3[R        5        M     US:  a   US:  a  [U        U U%5        U%$ [W        U U%5        U%$ s  snf s  sn!f s  sn"f s  sn"f s  sn!f )a  Read a single QuantumCircuit object from the file like object.

Args:
    file_obj (FILE): The file like object to read the circuit data from.
    version (int): QPY version.
    metadata_deserializer (JSONDecoder): An optional JSONDecoder class
        that will be used for the ``cls`` kwarg on the internal
        ``json.load`` call used to deserialize the JSON payload used for
        the :attr:`.QuantumCircuit.metadata` attribute for a circuit
        in the file-like object. If this is not specified the circuit metadata will
        be parsed as JSON with the stdlib ``json.load()`` function using
        the default ``JSONDecoder`` class.
    use_symengine (bool): If True, symbolic objects will be de-serialized using
        symengine's native mechanism. This is a faster serialization alternative, but not
        supported in all platforms. Please check that your target platform is supported by
        the symengine library before setting this option, as it will be required by qpy to
        deserialize the payload.
    annotation_factories (dict): mapping of namespaces to factory functions for custom
        annotation deserializer objects.
Returns:
    QuantumCircuit: The circuit object from the file.

Raises:
    QpyError: Invalid register.
r`  )r      rv   rw   rx   ry   rz   r{   r   r   N   r   r   )r   rF  )r   rv   r   inputscapturesr  r  r  zThe ParameterVector: 'zB' is not fully identical to its pre-serialization state. Elements z, zu in the ParameterVector will be not equal to the pre-serialized ParameterVector as they weren't used in the circuit:    
   ),r   r   r   r?   r   r   r   r   r   r   rQ   r9   ziprf   r!   read_standalone_varsr   r   ExprVarDeclarationINPUT	itertoolschainCAPTURESTRETCH_CAPTURELOCALadd_uninitialized_varSTRETCH_LOCALadd_stretchr   r^   r  r   r\  r  r7  r:  r;  r   rH  r  rp   r<  rg  rQ  )-r   rt   r   r   r   ru   r   r   r   rv   rw   rx   ry   rz   rl  out_registersall_registersout_bitsr   bit_type_labelbit_typer(  
typed_bitstyped_registersr`  r   indices
_incircuitr  ownedrD   r  r   rG  rN   var_segmentsr  circdeclarationstretchr   rJ  _instructionvectorinitialized_paramss-                                                r4   r   r     s   8 G{!-h!dh	2!0w"
h "2w"
h .)L%J%J?+M01jjQ/O 2&MMVj(v
/BCHqQ;'@I*8CI%)%*+3
.NHh ".1J'7ODSDYDYD[@@
GZ!#CL-@?Gn-m<$''$:LE5z,1
5) %; E\ MWWJS#hj@JJW ETDYDYD[@@
GZ,^<]KH'*OVWw!qAvjm8:EwW H DLM.1-@:!((2 E\ (2H^$Q3
V $,C=1=a%'=1#+C=1=a%'=1
 ,1+E+Eh+`(L( 
 !I88>>?55==>55EEF
D $I$@$@$F$FG"";/ H	 < < J JK! L"}28=WUWX:;O;USUV/7L\]./"-
	
 0 !|8gM&-nn&6""!"c&k1MM( 6599c%F2D.EHZ.Z[.Zc!f.Z[\] ^88<		{	D
  '7 !|b=Hd+ K 4(KW X X 21^ \s   .Q7QQ-Q$5Q)r.   )rU   r^   )NFN)f__doc__
__future__r   r  collectionsr   ri  r   r   r  typingr:  numpyr  qiskitr   rA  qiskit.circuitr   r   r   r	   r
   qiskit.circuit.annotationr   qiskit.circuit.classicalr   r   r   qiskit.circuit.gater   qiskit.circuit.singletonr   r   qiskit.circuit.controlledgater   "qiskit.circuit.annotated_operationr   r   r   r   r   qiskit.circuit.instructionr   qiskit.circuit.quantumcircuitr   r   r   
qiskit.qpyr   r   r   qiskit.qpy.exceptionsr   r    qiskit.qpy.binary_ior!   r"   qiskit.quantum_info.operatorsr#   r$   qiskit.synthesisr%   r  qiskit.transpiler.layoutr&   r'   TYPE_CHECKINGr(   r)   r+   r^   r   r   r   r   r   r   r   r   r   r   r\  r9  r  r   r  r  r  r  r  r  r  r  r)  rI  rQ  rO  rg  QPY_VERSIONr  r   rL   r7   r4   <module>r     sZ   % "  # 	       ) \ \ 5 ) 3 $ H 8  3 8 1 1 1 H 1 A 3 <	C+
 +
\B B("4"8""((*]
7t&wtVFr$N1&7tP4I- r  i"X%P"2Z"z 2FM-`3.Yb	< A%J ^b]r7   