§
    ¹³ÙgXD  ã                   óJ  — d Z ddlZddlmZmZmZmZmZmZ  G d„ d¦  «        Z	 G d„ de	¦  «        Z
 G d„ d	e	¦  «        Z G d
„ de
¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ deej        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d „ d!e¦  «        Z G d"„ d#e¦  «        Z G d$„ d%e	¦  «        Z G d&„ d'e¦  «        Z G d(„ d)e¦  «        Z G d*„ d+e¦  «        Z G d,„ d-e¦  «        Z G d.„ d/eej        ¦  «        Z G d0„ d1e¦  «        Z  G d2„ d3e¦  «        Z! G d4„ d5e¦  «        Z" G d6„ d7ej        ¦  «        Z# G d8„ d9e¦  «        Z$ G d:„ d;e¦  «        Z% G d<„ d=e¦  «        Z& G d>„ d?e¦  «        Z' G d@„ dAe¦  «        Z( G dB„ dCe	¦  «        Z) G dD„ dEe	¦  «        Z* G dF„ dGe
¦  «        Z+ G dH„ dIe	¦  «        Z, G dJ„ dKe
¦  «        Z- G dL„ dMe
¦  «        Z. G dN„ dOe	¦  «        Z/ G dP„ dQe	¦  «        Z0 G dR„ dSej        ¦  «        Z1 G dT„ dUe	¦  «        Z2 G dV„ dWe¦  «        Z3 G dX„ dYe¦  «        Z4 G dZ„ d[e¦  «        Z5 G d\„ d]e¦  «        Z6 G d^„ d_e	¦  «        Z7 G d`„ dae	¦  «        Z8 G db„ dce7¦  «        Z9 G dd„ dee7¦  «        Z: G df„ dge
¦  «        Z; G dh„ die
¦  «        Z< G dj„ dke	¦  «        Z= G dl„ dme
¦  «        Z> G dn„ doe
¦  «        Z? G dp„ dqe
¦  «        Z@ G dr„ dse
¦  «        ZA G dt„ due
¦  «        ZB G dv„ dwe
¦  «        ZC G dx„ dyej        ¦  «        ZD G dz„ d{e-¦  «        ZE G d|„ d}e¦  «        ZF G d~„ de
¦  «        ZG G d€„ d�e
¦  «        ZHdS )‚zQASM3 AST Nodesé    N)ÚOptionalÚListÚUnionÚIterableÚTupleÚSequencec                   ó   — e Zd ZdZdZdS )ÚASTNodez!Base abstract class for AST nodes© N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   ó    úF/granary/edev/quantum/lib/python3.11/site-packages/qiskit/qasm3/ast.pyr
   r
      s   € € € € € Ø+Ð+à€I€I€Ir   r
   c                   ó   — e Zd ZdZdZdS )Ú	Statementz÷
    statement
        : expressionStatement
        | assignmentStatement
        | classicalDeclarationStatement
        | branchingStatement
        | loopStatement
        | endStatement
        | aliasStatement
        | quantumStatement
    r   Nr   r   r   r   r   r      s   € € € € € ð
ð 
ð €I€I€Ir   r   c                   ó   — e Zd ZdZdZd„ ZdS )ÚPragmazd
    pragma
        : '#pragma' LBRACE statement* RBRACE  // match any valid openqasm statement
    ©Úcontentc                 ó   — || _         d S ©Nr   )Úselfr   s     r   Ú__init__zPragma.__init__3   s   € ØˆŒˆˆr   N©r   r   r   r   r   r   r   r   r   r   r   +   s4   € € € € € ðð ð
 €Iðð ð ð ð r   r   c                   ó   — e Zd ZdZdZd„ ZdS )ÚCalibrationGrammarDeclarationz^
    calibrationGrammarDeclaration
        : 'defcalgrammar' calibrationGrammar SEMICOLON
    ©Únamec                 ó   — || _         d S r   r!   )r   r"   s     r   r   z&CalibrationGrammarDeclaration.__init__?   ó   € ØˆŒ	ˆ	ˆ	r   Nr   r   r   r   r    r    7   s4   € € € € € ðð ð
 €Iðð ð ð ð r   r    c                   ó   — e Zd ZdZdZdd„ZdS )ÚProgramzA
    program
        : header (globalStatement | statement)*
    ©ÚheaderÚ
statementsr   c                 ó"   — || _         || _        d S r   r'   )r   r(   r)   s      r   r   zProgram.__init__K   s   € ØˆŒØ$ˆŒˆˆr   N©r   r   r   r   r   r&   r&   C   s9   € € € € € ðð ð
 )€Ið%ð %ð %ð %ð %ð %r   r&   c                   ó   — e Zd ZdZdZd„ ZdS )ÚHeaderz,
    header
        : version? include*
    ©ÚversionÚincludesc                 ó"   — || _         || _        d S r   r.   )r   r/   r0   s      r   r   zHeader.__init__X   s   € ØˆŒØ ˆŒˆˆr   Nr   r   r   r   r-   r-   P   s4   € € € € € ðð ð
 (€Ið!ð !ð !ð !ð !r   r-   c                   ó   — e Zd ZdZdZd„ ZdS )ÚIncludez=
    include
        : 'include' StringLiteral SEMICOLON
    ©Úfilenamec                 ó   — || _         d S r   r4   )r   r5   s     r   r   zInclude.__init__e   s   € Ø ˆŒˆˆr   Nr   r   r   r   r3   r3   ]   s4   € € € € € ðð ð
 €Ið!ð !ð !ð !ð !r   r3   c                   ó   — e Zd ZdZdZd„ ZdS )ÚVersionzF
    version
        : 'OPENQASM'(Integer | RealNumber) SEMICOLON
    ©Úversion_numberc                 ó   — || _         d S r   r9   )r   r:   s     r   r   zVersion.__init__q   ó   € Ø,ˆÔÐÐr   Nr   r   r   r   r8   r8   i   s4   € € € € € ðð ð
 $€Ið-ð -ð -ð -ð -r   r8   c                   ó   — e Zd ZdZdZdS )ÚQuantumInstructionzš
    quantumInstruction
        : quantumGateCall
        | quantumPhase
        | quantumMeasurement
        | quantumReset
        | quantumBarrier
    r   Nr   r   r   r   r>   r>   u   s   € € € € € ðð ð €I€I€Ir   r>   c                   ó   — e Zd ZdZdZdS )ÚClassicalTypezYInformation about a classical type.  This is just an abstract base for inheritance tests.r   Nr   r   r   r   r@   r@   ‚   s   € € € € € ØcÐcà€I€I€Ir   r@   c                   ó&   — e Zd ZdZdZdZdZdZdZdS )Ú	FloatTypez5Allowed values for the width of floating-point types.é   é    é@   é€   é   N)	r   r   r   r   ÚHALFÚSINGLEÚDOUBLEÚQUADÚOCTr   r   r   rB   rB   ˆ   s-   € € € € € Ø?Ð?à€DØ€FØ€FØ€DØ
€C€C€Cr   rB   c                   ó   — e Zd ZdZdZdS )ÚBoolTypezType information for a Boolean.r   Nr   r   r   r   rN   rN   ’   s   € € € € € Ø)Ð)à€I€I€Ir   rN   c                   ó0   — e Zd ZdZdZddee         fd„ZdS )ÚIntTypez&Type information for a signed integer.©ÚsizeNrR   c                 ó   — || _         d S r   rQ   ©r   rR   s     r   r   zIntType.__init__�   r$   r   r   ©r   r   r   r   r   r   Úintr   r   r   r   rP   rP   ˜   sC   € € € € € Ø0Ð0à€Iðð ˜X cœ]ð ð ð ð ð ð r   rP   c                   ó0   — e Zd ZdZdZddee         fd„ZdS )ÚUintTypez)Type information for an unsigned integer.rQ   NrR   c                 ó   — || _         d S r   rQ   rT   s     r   r   zUintType.__init__¦   r$   r   r   rU   r   r   r   rX   rX   ¡   sC   € € € € € Ø3Ð3à€Iðð ˜X cœ]ð ð ð ð ð ð r   rX   c                   ó   — e Zd ZdZdZdS )ÚBitTypez"Type information for a single bit.r   Nr   r   r   r   r[   r[   ª   s   € € € € € Ø,Ð,à€I€I€Ir   r[   c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚBitArrayTypez6Type information for a sized number of classical bits.rQ   rR   c                 ó   — || _         d S r   rQ   rT   s     r   r   zBitArrayType.__init__µ   r$   r   N)r   r   r   r   r   rV   r   r   r   r   r]   r]   °   s:   € € € € € Ø@Ð@à€Ið˜Sð ð ð ð ð ð r   r]   c                   ó   — e Zd ZdZdS )Ú
Expressionr   N)r   r   r   r   r   r   r   r`   r`   ¹   s   € € € € € Ø€I€I€Ir   r`   c                   ó   — e Zd ZdZd„ ZdS )ÚStringifyAndPray©Úobjc                 ó   — || _         d S r   rc   )r   rd   s     r   r   zStringifyAndPray.__init__Ã   s   € ØˆŒˆˆr   N©r   r   r   r   r   r   r   r   rb   rb   ½   s(   € € € € € Ø€Ið
ð ð ð ð r   rb   c                   óR   — e Zd ZdZ	 	 	 ddee         dee         dee         fd„ZdS )ÚRange©ÚstartÚstepÚendNrj   rl   rk   c                 ó0   — || _         || _        || _        d S r   ri   )r   rj   rl   rk   s       r   r   zRange.__init__Ê   s   € ð ˆŒ
ØˆŒ	ØˆŒˆˆr   )NNN)r   r   r   r   r   r`   r   r   r   r   rh   rh   Ç   sh   € € € € € Ø(€Ið '+Ø$(Ø%)ð	ð à˜
Ô#ðð �jÔ!ðð �zÔ"ð	ð ð ð ð ð r   rh   c                   ó   — e Zd ZdZd„ ZdS )Ú
Identifier©Ústringc                 ó   — || _         d S r   rp   )r   rq   s     r   r   zIdentifier.__init__Ø   ó   € ØˆŒˆˆr   Nrf   r   r   r   ro   ro   Õ   s(   € € € € € Ø€Iðð ð ð ð r   ro   c                   ó@   ‡ — e Zd ZdZdZdedeeef         fˆ fd„Z	ˆ xZ
S )ÚSubscriptedIdentifierz&An identifier with subscripted access.)Ú	subscriptrq   rv   c                 óX   •— t          ¦   «                              |¦  «         || _        d S r   )Úsuperr   rv   )r   rq   rv   Ú	__class__s      €r   r   zSubscriptedIdentifier.__init__á   s&   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø"ˆŒˆˆr   )r   r   r   r   r   Ústrr   rh   r`   r   Ú__classcell__©ry   s   @r   ru   ru   Ü   s`   ø€ € € € € Ø0Ð0à€Ið#˜sð #¨u°U¸JÐ5FÔ/Gð #ð #ð #ð #ð #ð #ð #ð #ð #ð #r   ru   c                   ól   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         ZdS )ÚConstantz,A constant value defined by the QASM 3 spec.N)	r   r   r   r   ÚenumÚautoÚPIÚEULERÚTAUr   r   r   r~   r~   æ   s;   € € € € € Ø6Ð6à	ˆŒ‰Œ€BØˆDŒI‰KŒK€EØ
ˆ$Œ)‰+Œ+€C€C€Cr   r~   c                   ó   — e Zd ZdZd„ ZdS )ÚIntegerLiteral©Úvaluec                 ó   — || _         d S r   r†   ©r   r‡   s     r   r   zIntegerLiteral.__init__ñ   ó   € ØˆŒ
ˆ
ˆ
r   Nrf   r   r   r   r…   r…   î   ó(   € € € € € Ø€Iðð ð ð ð r   r…   c                   ó   — e Zd ZdZd„ ZdS )ÚBooleanLiteralr†   c                 ó   — || _         d S r   r†   r‰   s     r   r   zBooleanLiteral.__init__ø   rŠ   r   Nrf   r   r   r   r�   r�   õ   r‹   r   r�   c                   ó   — e Zd ZdZd„ ZdS )ÚBitstringLiteral©r‡   Úwidthc                 ó"   — || _         || _        d S r   r‘   )r   r‡   r’   s      r   r   zBitstringLiteral.__init__ÿ   s   € ØˆŒ
ØˆŒ
ˆ
ˆ
r   Nrf   r   r   r   r�   r�   ü   s(   € € € € € Ø"€Iðð ð ð ð r   r�   c                   ó&   — e Zd ZdZdZdZdZdZdZdS )ÚDurationUnitz'Valid values for the unit of durations.ÚnsÚusÚmsÚsÚdtN)	r   r   r   r   Ú
NANOSECONDÚMICROSECONDÚMILLISECONDÚSECONDÚSAMPLEr   r   r   r•   r•     s-   € € € € € Ø1Ð1à€JØ€KØ€KØ€FØ€F€F€Fr   r•   c                   ó"   — e Zd ZdZdedefd„ZdS )ÚDurationLiteral©r‡   Úunitr‡   r£   c                 ó"   — || _         || _        d S r   r¢   )r   r‡   r£   s      r   r   zDurationLiteral.__init__  s   € ØˆŒ
ØˆŒ	ˆ	ˆ	r   N)r   r   r   r   Úfloatr•   r   r   r   r   r¡   r¡     s;   € € € € € Ø!€Ið˜eð ¨<ð ð ð ð ð ð r   r¡   c                   óH   — e Zd ZdZ G d„ dej        ¦  «        Zdedefd„ZdS )ÚUnary©ÚopÚoperandc                   ó   — e Zd ZdZdZdS )úUnary.Opú!ú~N)r   r   r   Ú	LOGIC_NOTÚBIT_NOTr   r   r   ÚOpr¬     s   € € € € € Øˆ	Øˆˆˆr   r±   r©   rª   c                 ó"   — || _         || _        d S r   r¨   )r   r©   rª   s      r   r   zUnary.__init__  s   € ØˆŒØˆŒˆˆr   N©	r   r   r   r   r   ÚEnumr±   r`   r   r   r   r   r§   r§     sg   € € € € € Ø!€Iðð ð ð ð ˆTŒYñ ô ð ð˜2ð ¨
ð ð ð ð ð ð r   r§   c                   óL   — e Zd ZdZ G d„ dej        ¦  «        Zdededefd„ZdS )	ÚBinary©r©   ÚleftÚrightc                   óB   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdS )ú	Binary.Opú&ú|ú^z&&z||ú<z<=ú>z>=z==z!=z<<z>>N)r   r   r   ÚBIT_ANDÚBIT_ORÚBIT_XORÚ	LOGIC_ANDÚLOGIC_ORÚLESSÚ
LESS_EQUALÚGREATERÚGREATER_EQUALÚEQUALÚ	NOT_EQUALÚ
SHIFT_LEFTÚSHIFT_RIGHTr   r   r   r±   r»   %  sO   € € € € € ØˆØˆØˆØˆ	ØˆØˆØˆ
ØˆØˆØˆØˆ	Øˆ
Øˆˆˆr   r±   r©   r¸   r¹   c                 ó0   — || _         || _        || _        d S r   r·   )r   r©   r¸   r¹   s       r   r   zBinary.__init__4  s   € ØˆŒØˆŒ	ØˆŒ
ˆ
ˆ
r   Nr³   r   r   r   r¶   r¶   "  sn   € € € € € Ø'€Iðð ð ð ð ˆTŒYñ ô ð ð˜2ð  Zð ¸
ð ð ð ð ð ð r   r¶   c                   ó"   — e Zd ZdZdedefd„ZdS )ÚCast©Útyperª   rÒ   rª   c                 ó"   — || _         || _        d S r   rÑ   )r   rÒ   rª   s      r   r   zCast.__init__=  s   € ØˆŒ	ØˆŒˆˆr   N)r   r   r   r   r@   r`   r   r   r   r   rÐ   rÐ   :  s;   € € € € € Ø#€Ið˜]ð °Zð ð ð ð ð ð r   rÐ   c                   ó"   — e Zd ZdZdedefd„ZdS )ÚIndex©ÚtargetÚindexr×   rØ   c                 ó"   — || _         || _        d S r   rÖ   )r   r×   rØ   s      r   r   zIndex.__init__E  s   € ØˆŒØˆŒ
ˆ
ˆ
r   N)r   r   r   r   r`   r   r   r   r   rÕ   rÕ   B  s;   € € € € € Ø#€Ið˜zð °*ð ð ð ð ð ð r   rÕ   c                   ó.   — e Zd ZdZdZdee         fd„ZdS )ÚIndexSetzQ
    A literal index set of values::

        { Expression (, Expression)* }
    ©ÚvaluesrÝ   c                 ó   — || _         d S r   rÜ   )r   rÝ   s     r   r   zIndexSet.__init__S  rs   r   N)r   r   r   r   r   r   r`   r   r   r   r   rÛ   rÛ   J  sE   € € € € € ðð ð €Ið˜t JÔ/ð ð ð ð ð ð r   rÛ   c                   ó.   — e Zd ZdZdZdee         fd„ZdS )ÚQuantumMeasurementzD
    quantumMeasurement
        : 'measure' indexIdentifierList
    ©ÚidentifierListrâ   c                 ó   — || _         d S r   rá   )r   râ   s     r   r   zQuantumMeasurement.__init___  r<   r   N©r   r   r   r   r   r   ro   r   r   r   r   rà   rà   W  sE   € € € € € ðð ð
 $€Ið- t¨JÔ'7ð -ð -ð -ð -ð -ð -r   rà   c                   ó&   — e Zd ZdZdZdedefd„ZdS )ÚQuantumMeasurementAssignmentz¯
    quantumMeasurementAssignment
        : quantumMeasurement ARROW indexIdentifierList
        | indexIdentifier EQUALS quantumMeasurement  # eg: bits = measure qubits;
    ©Ú
identifierÚquantumMeasurementrè   ré   c                 ó"   — || _         || _        d S r   rç   )r   rè   ré   s      r   r   z%QuantumMeasurementAssignment.__init__l  s   € Ø$ˆŒØ"4ˆÔÐÐr   N)r   r   r   r   r   ro   rà   r   r   r   r   ræ   ræ   c  sH   € € € € € ðð ð 5€Ið5 :ð 5ÐCUð 5ð 5ð 5ð 5ð 5ð 5r   ræ   c                   ó"   — e Zd ZdZdZdefd„ZdS )Ú
Designatorz;
    designator
        : LBRACKET expression RBRACKET
    ©Ú
expressionrî   c                 ó   — || _         d S r   rí   ©r   rî   s     r   r   zDesignator.__init__y  ó   € Ø$ˆŒˆˆr   N)r   r   r   r   r   r`   r   r   r   r   rì   rì   q  s@   € € € € € ðð ð
  €Ið% :ð %ð %ð %ð %ð %ð %r   rì   c                   ó(   — e Zd ZdZdZddedefd„ZdS )ÚClassicalDeclarationzGDeclaration of a classical type, optionally initializing it to a value.©rÒ   rè   ÚinitializerNÚtype_rè   c                 ó0   — || _         || _        || _        d S r   rô   )r   rö   rè   rõ   s       r   r   zClassicalDeclaration.__init__‚  s   € ØˆŒ	Ø$ˆŒØ&ˆÔÐÐr   r   )r   r   r   r   r   r@   ro   r   r   r   r   ró   ró   }  sF   € € € € € ØQÐQà5€Ið'ð '˜mð '¸ð 'ð 'ð 'ð 'ð 'ð 'r   ró   c                   ó&   — e Zd ZdZdZdedefd„ZdS )ÚAssignmentStatementz*Assignment of an expression to an l-value.©ÚlvalueÚrvaluerû   rü   c                 ó"   — || _         || _        d S r   rú   )r   rû   rü   s      r   r   zAssignmentStatement.__init__�  s   € ØˆŒØˆŒˆˆr   N)r   r   r   r   r   ru   r`   r   r   r   r   rù   rù   ˆ  sB   € € € € € Ø4Ð4à$€IðÐ4ð ¸jð ð ð ð ð ð r   rù   c                   ó$   — e Zd ZdZdZddefd„ZdS )ÚQuantumDeclarationz€
    quantumDeclaration
        : 'qreg' Identifier designator? |   # NOT SUPPORTED
         'qubit' designator? Identifier
    ©rè   Ú
designatorNrè   c                 ó"   — || _         || _        d S r   r   )r   rè   r  s      r   r   zQuantumDeclaration.__init__›  s   € Ø$ˆŒØ$ˆŒˆˆr   r   ©r   r   r   r   r   ro   r   r   r   r   rÿ   rÿ   ’  sE   € € € € € ðð ð -€Ið%ð % :ð %ð %ð %ð %ð %ð %r   rÿ   c                   ó&   — e Zd ZdZdZdedefd„ZdS )ÚAliasStatementzT
    aliasStatement
        : 'let' Identifier EQUALS indexIdentifier SEMICOLON
    ©rè   r‡   rè   r‡   c                 ó"   — || _         || _        d S r   r  )r   rè   r‡   s      r   r   zAliasStatement.__init__¨  s   € Ø$ˆŒØˆŒ
ˆ
ˆ
r   N)r   r   r   r   r   ro   r`   r   r   r   r   r  r     sG   € € € € € ðð ð
 (€Ið :ð °jð ð ð ð ð ð r   r  c                   óŠ   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z	dS )ÚQuantumGateModifierNamez4The names of the allowed modifiers of quantum gates.N)
r   r   r   r   r   r€   ÚCTRLÚNEGCTRLÚINVÚPOWr   r   r   r	  r	  ­  sH   € € € € € Ø>Ð>àˆ4Œ9‰;Œ;€DØˆdŒi‰kŒk€GØ
ˆ$Œ)‰+Œ+€CØ
ˆ$Œ)‰+Œ+€C€C€Cr   r	  c                   ó4   — e Zd ZdZdZddedee         fd„ZdS )ÚQuantumGateModifierzVA modifier of a gate. For example, in ``ctrl @ x $0``, the ``ctrl @`` is the modifier.©ÚmodifierÚargumentNr  r  c                 ó"   — || _         || _        d S r   r  )r   r  r  s      r   r   zQuantumGateModifier.__init__»  s   € Ø ˆŒØ ˆŒˆˆr   r   )	r   r   r   r   r   r	  r   r`   r   r   r   r   r  r  ¶  sL   € € € € € Ø`Ð`à(€Ið!ð !Ð!8ð !ÀHÈZÔDXð !ð !ð !ð !ð !ð !r   r  c            
       óX   — e Zd ZdZdZ	 	 d
dedee         dee         dee	         fd„Z
d	S )ÚQuantumGateCallz
    quantumGateCall
        : quantumGateModifier* quantumGateName ( LPAREN expressionList? RPAREN )? indexIdentifierList
    ©ÚquantumGateNameÚindexIdentifierListÚ
parametersÚ	modifiersr   r  r  r  r  c                 ó>   — || _         || _        || _        || _        d S r   r  )r   r  r  r  r  s        r   r   zQuantumGateCall.__init__È  s&   € ð  /ˆÔØ#6ˆÔ Ø$ˆŒØ"ˆŒˆˆr   N)r   r   )r   r   r   r   r   ro   r   r   r`   r  r   r   r   r   r  r  À  s}   € € € € € ðð ð
 V€Ið ,.Ø35ð
#ð 
#à#ð
#ð " *Ô-ð
#ð ˜ZÔ(ð	
#ð
 Ð/Ô0ð
#ð 
#ð 
#ð 
#ð 
#ð 
#r   r  c                   ó.   — e Zd ZdZdZdee         fd„ZdS )ÚQuantumBarrierz@
    quantumBarrier
        : 'barrier' indexIdentifierList
    ©r  r  c                 ó   — || _         d S r   r  )r   r  s     r   r   zQuantumBarrier.__init__Ý  s   € Ø#6ˆÔ Ð Ð r   Nrä   r   r   r   r  r  Õ  sE   € € € € € ðð ð
 )€Ið7¨D°Ô,<ð 7ð 7ð 7ð 7ð 7ð 7r   r  c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚQuantumResetz#A built-in ``reset q0;`` statement.©rè   rè   c                 ó   — || _         d S r   r"  )r   rè   s     r   r   zQuantumReset.__init__æ  rñ   r   Nr  r   r   r   r!  r!  á  s:   € € € € € Ø-Ð-à€Ið% :ð %ð %ð %ð %ð %ð %r   r!  c                   ó2   — e Zd ZdZdZdedee         fd„ZdS )ÚQuantumDelayz-A built-in ``delay[duration] q0;`` statement.©ÚdurationÚqubitsr'  r(  c                 ó"   — || _         || _        d S r   r&  )r   r'  r(  s      r   r   zQuantumDelay.__init__ï  s   € Ø ˆŒØˆŒˆˆr   N)	r   r   r   r   r   r`   r   ro   r   r   r   r   r%  r%  ê  sF   € € € € € Ø7Ð7à&€Ið ð °T¸*Ô5Eð ð ð ð ð ð r   r%  c                   ó.   — e Zd ZdZdZdee         fd„ZdS )ÚProgramBlockzu
    programBlock
        : statement | controlDirective
        | LBRACE(statement | controlDirective) * RBRACE
    ©r)   r)   c                 ó   — || _         d S r   r,  )r   r)   s     r   r   zProgramBlock.__init__ý  rñ   r   N)r   r   r   r   r   r   r   r   r   r   r   r+  r+  ô  sD   € € € € € ðð ð  €Ið% 4¨	¤?ð %ð %ð %ð %ð %ð %r   r+  c                   ó   — e Zd ZdZdZdd„ZdS )ÚReturnStatementz\
    returnStatement
        : 'return' ( expression | quantumMeasurement )? SEMICOLON;
    rí   Nc                 ó   — || _         d S r   rí   rð   s     r   r   zReturnStatement.__init__	  rñ   r   r   r   r   r   r   r/  r/    s9   € € € € € ðð ð
  €Ið%ð %ð %ð %ð %ð %r   r/  c                   ó   — e Zd ZdZdZdS )ÚQuantumBlockzR
    quantumBlock
        : LBRACE ( quantumStatement | quantumLoop )* RBRACE
    r   Nr   r   r   r   r2  r2    ó   € € € € € ðð ð
 €I€I€Ir   r2  c                   ó   — e Zd ZdZdZdS )ÚSubroutineBlockzM
    subroutineBlock
        : LBRACE statement* returnStatement? RBRACE
    r   Nr   r   r   r   r5  r5    r3  r   r5  c                   óN   — e Zd ZdZdZdedeedf         deedf         defd„Zd	S )
ÚQuantumGateDefinitionzR
    quantumGateDefinition
        : 'gate' quantumGateSignature quantumBlock
    ©r"   Úparamsr(  Úbodyr"   r9  .r(  r:  c                 ó>   — || _         || _        || _        || _        d S r   r8  )r   r"   r9  r(  r:  s        r   r   zQuantumGateDefinition.__init__'  s$   € ð ˆŒ	ØˆŒØˆŒØˆŒ	ˆ	ˆ	r   N)	r   r   r   r   r   ro   r   r2  r   r   r   r   r7  r7    sq   € € € € € ðð ð
 5€Ið
àð
ð �j #�oÔ&ð
ð �j #�oÔ&ð	
ð
 ð
ð 
ð 
ð 
ð 
ð 
r   r7  c                   ó*   — e Zd ZdZdZ	 ddedefd„ZdS )	ÚSubroutineDefinitionz…
    subroutineDefinition
        : 'def' Identifier LPAREN anyTypeArgumentList? RPAREN
        returnSignature? subroutineBlock
    ©rè   Ú	argumentsÚsubroutineBlockr   rè   r@  c                 ó0   — || _         || _        || _        d S r   r>  )r   rè   r@  r?  s       r   r   zSubroutineDefinition.__init__=  s    € ð %ˆŒØ"ˆŒØ.ˆÔÐÐr   Nr+   )r   r   r   r   r   ro   r5  r   r   r   r   r=  r=  4  sU   € € € € € ðð ð ?€Ið ð	/ð /àð/ð )ð/ð /ð /ð /ð /ð /r   r=  c                   ó   — e Zd ZdZdZdS )ÚCalibrationArgumentzR
    calibrationArgumentList
        : classicalArgumentList | expressionList
    r   Nr   r   r   r   rC  rC  H  r3  r   rC  c                   óF   — e Zd ZdZdZ	 d	dedee         dee         fd„Z	dS )
ÚCalibrationDefinitionzÝ
    calibrationDefinition
        : 'defcal' Identifier
        ( LPAREN calibrationArgumentList? RPAREN )? identifierList
        returnSignature? LBRACE .*? RBRACE  // for now, match anything inside body
        ;
    ©r"   râ   ÚcalibrationArgumentListr   r"   râ   rG  c                 ó0   — || _         || _        || _        d S r   rF  )r   r"   râ   rG  s       r   r   zCalibrationDefinition.__init__\  s!   € ð ˆŒ	Ø,ˆÔØ'>ˆÔ$Ð$Ð$r   Nr+   )
r   r   r   r   r   ro   r   r   rC  r   r   r   r   rE  rE  Q  sm   € € € € € ðð ð F€Ið BDð	?ð ?àð?ð ˜ZÔ(ð?ð "*Ð*=Ô!>ð	?ð ?ð ?ð ?ð ?ð ?r   rE  c                   ó(   — e Zd ZdZdZddedefd„ZdS )ÚBranchingStatementzq
    branchingStatement
        : 'if' LPAREN booleanExpression RPAREN programBlock ( 'else' programBlock )?
    ©Ú	conditionÚ	true_bodyÚ
false_bodyNrL  rM  c                 ó0   — || _         || _        || _        d S r   rK  )r   rL  rM  rN  s       r   r   zBranchingStatement.__init__o  s   € Ø"ˆŒØ"ˆŒØ$ˆŒˆˆr   r   ©r   r   r   r   r   r`   r+  r   r   r   r   rJ  rJ  g  sL   € € € € € ðð ð
 9€Ið%ð % *ð %¸ð %ð %ð %ð %ð %ð %r   rJ  c                   ó<   — e Zd ZdZdZdeeeef         dede	fd„Z
dS )ÚForLoopStatementzñ
    AST node for ``for`` loops.

    ::

        ForLoop: "for" Identifier "in" SetDeclaration ProgramBlock
        SetDeclaration:
            | Identifier
            | "{" Expression ("," Expression)* "}"
            | "[" Range "]"
    ©ÚindexsetÚ	parameterr:  rT  rU  r:  c                 ó0   — || _         || _        || _        d S r   rS  )r   rT  rU  r:  s       r   r   zForLoopStatement.__init__„  s   € ð !ˆŒØ"ˆŒØˆŒ	ˆ	ˆ	r   N)r   r   r   r   r   r   ro   rÛ   rh   r+  r   r   r   r   rR  rR  u  sa   € € € € € ð
ð 
ð 2€Iðà˜
 H¨eÐ3Ô4ðð ðð ð	ð ð ð ð ð r   rR  c                   ó&   — e Zd ZdZdZdedefd„ZdS )ÚWhileLoopStatementzk
    AST node for ``while`` loops.

    ::

        WhileLoop: "while" "(" Expression ")" ProgramBlock
    ©rL  r:  rL  r:  c                 ó"   — || _         || _        d S r   rY  )r   rL  r:  s      r   r   zWhileLoopStatement.__init__š  s   € Ø"ˆŒØˆŒ	ˆ	ˆ	r   NrP  r   r   r   rX  rX  �  sG   € € € € € ðð ð &€Ið *ð °Lð ð ð ð ð ð r   rX  c                   ó   — e Zd ZdZdZdS )ÚBreakStatementzBAST node for ``break`` statements.  Has no associated information.r   Nr   r   r   r   r\  r\  Ÿ  s   € € € € € ØLÐLà€I€I€Ir   r\  c                   ó   — e Zd ZdZdZdS )ÚContinueStatementzEAST node for ``continue`` statements.  Has no associated information.r   Nr   r   r   r   r^  r^  ¥  s   € € € € € ØOÐOà€I€I€Ir   r^  c                   óN   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         ZdS )Ú
IOModifierzIO Modifier objectN)r   r   r   r   r   r€   ÚINPUTÚOUTPUTr   r   r   r`  r`  «  s.   € € € € € ØÐàˆDŒI‰KŒK€EØˆTŒY‰[Œ[€F€F€Fr   r`  c                   ó4   ‡ — e Zd ZdZdZdededefˆ fd„Zˆ xZ	S )ÚIODeclarationz A declaration of an IO variable.)r  r  rö   rè   c                 óZ   •— t          ¦   «                              ||¦  «         || _        d S r   )rx   r   r  )r   r  rö   rè   ry   s       €r   r   zIODeclaration.__init__·  s(   ø€ Ý‰Œ×Ò˜ 
Ñ+Ô+Ð+Ø ˆŒˆˆr   )
r   r   r   r   r   r`  r@   ro   r   r{   r|   s   @r   rd  rd  ²  s]   ø€ € € € € Ø*Ð*à€Ið! ð !°Mð !Èzð !ð !ð !ð !ð !ð !ð !ð !ð !ð !r   rd  c                   ó   — e Zd ZdZdZdS )ÚDefaultCasezHAn object representing the `default` special label in switch statements.r   Nr   r   r   r   rg  rg  ¼  s   € € € € € ØRÐRà€I€I€Ir   rg  c                   óN   — e Zd ZdZdZdedeeee         ef                  fd„Z	dS )ÚSwitchStatementPreviewa  AST node for the proposed 'switch-case' extension to OpenQASM 3, before the syntax was
    stabilized.  This corresponds to the :attr:`.ExperimentalFeatures.SWITCH_CASE_V1` logic.

    The stabilized form of the syntax instead uses :class:`.SwitchStatement`.©r×   Úcasesr×   rk  c                 ó6   — || _         d„ |D ¦   «         | _        d S )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS r   ©Útuple©Ú.0rÝ   Úcases      r   ú
<listcomp>z3SwitchStatementPreview.__init__.<locals>.<listcomp>Î  ó'   € ÐFÐFÐF±°¸•u˜V‘}”} dÐ+ÐFÐFÐFr   rj  )r   r×   rk  s      r   r   zSwitchStatementPreview.__init__Ê  s$   € ð ˆŒØFÐFÀÐFÑFÔFˆŒ
ˆ
ˆ
r   N)
r   r   r   r   r   r`   r   r   r+  r   r   r   r   ri  ri  Â  sg   € € € € € ðQð Qð
 $€IðGØ ðGØ)1°%¸ÀÔ8LÈlÐ8ZÔ2[Ô)\ðGð Gð Gð Gð Gð Gr   ri  c                   ób   — e Zd ZdZdZ	 ddedeeee         ef                  de	e         fd„Z
dS )	ÚSwitchStatementa  AST node for the stable 'switch' statement of OpenQASM 3.

    The only real difference from an AST form is that the default is required to be separate; it
    cannot be joined with other cases (even though that's meaningless, the V1 syntax permitted it).
    ©r×   rk  ÚdefaultNr×   rk  rx  c                 óD   — || _         d„ |D ¦   «         | _        || _        d S )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS r   rn  rp  s      r   rs  z,SwitchStatement.__init__.<locals>.<listcomp>á  rt  r   rw  )r   r×   rk  rx  s       r   r   zSwitchStatement.__init__Ú  s+   € ð ˆŒØFÐFÀÐFÑFÔFˆŒ
ØˆŒˆˆr   r   )r   r   r   r   r   r`   r   r   r+  r   r   r   r   r   rv  rv  Ñ  sx   € € € € € ðð ð /€Ið +/ð	ð àðð ˜˜h zÔ2°LÐ@ÔAÔBðð ˜,Ô'ð	ð ð ð ð ð r   rv  )Ir   r   Útypingr   r   r   r   r   r   r
   r   r   r    r&   r-   r3   r8   r>   r@   r´   rB   rN   rP   rX   r[   r]   r`   rb   rh   ro   ru   r~   r…   r�   r�   r•   r¡   r§   r¶   rÐ   rÕ   rÛ   rà   ræ   rì   ró   rù   rÿ   r  r	  r  r  r  r!  r%  r+  r/  r2  r5  r7  r=  rC  rE  rJ  rR  rX  r\  r^  r`  rd  rg  ri  rv  r   r   r   ú<module>r|     s¿
  ðð Ð à €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ñ ô ð ðð ð ð ð �ñ ô ð ð 	ð 	ð 	ð 	ð 	ˆWñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	 Iñ 	ô 	ð 	ð
%ð 
%ð 
%ð 
%ð 
%ˆgñ 
%ô 
%ð 
%ð
!ð 
!ð 
!ð 
!ð 
!ˆWñ 
!ô 
!ð 
!ð	!ð 	!ð 	!ð 	!ð 	!ˆgñ 	!ô 	!ð 	!ð	-ð 	-ð 	-ð 	-ð 	-ˆgñ 	-ô 	-ð 	-ð
ð 
ð 
ð 
ð 
˜ñ 
ô 
ð 
ðð ð ð ð �Gñ ô ð ðð ð ð ð �˜tœyñ ô ð ðð ð ð ð ˆ}ñ ô ð ðð ð ð ð ˆmñ ô ð ðð ð ð ð ˆ}ñ ô ð ðð ð ð ð ˆmñ ô ð ðð ð ð ð �=ñ ô ð ðð ð ð ð �ñ ô ð ðð ð ð ð �zñ ô ð ðð ð ð ð ˆJñ ô ð ðð ð ð ð �ñ ô ð ð#ð #ð #ð #ð #˜Jñ #ô #ð #ðð ð ð ð ˆz˜4œ9ñ ô ð ðð ð ð ð �Zñ ô ð ðð ð ð ð �Zñ ô ð ðð ð ð ð �zñ ô ð ðð ð ð ð �4”9ñ ô ð ðð ð ð ð �jñ ô ð ð	ð 	ð 	ð 	ð 	ˆJñ 	ô 	ð 	ðð ð ð ð ˆZñ ô ð ð0ð ð ð ð ˆ:ñ ô ð ðð ð ð ð ˆJñ ô ð ð
ð 
ð 
ð 
ð 
ˆwñ 
ô 
ð 
ð	-ð 	-ð 	-ð 	-ð 	-˜ñ 	-ô 	-ð 	-ð5ð 5ð 5ð 5ð 5 9ñ 5ô 5ð 5ð	%ð 	%ð 	%ð 	%ð 	%�ñ 	%ô 	%ð 	%ð'ð 'ð 'ð 'ð '˜9ñ 'ô 'ð 'ðð ð ð ð ˜)ñ ô ð ð%ð %ð %ð %ð %˜ñ %ô %ð %ð
ð 
ð 
ð 
ð 
�Wñ 
ô 
ð 
ðð ð ð ð ˜dœiñ ô ð ð!ð !ð !ð !ð !˜'ñ !ô !ð !ð#ð #ð #ð #ð #Ð(ñ #ô #ð #ð*	7ð 	7ð 	7ð 	7ð 	7Ð'ñ 	7ô 	7ð 	7ð%ð %ð %ð %ð %Ð%ñ %ô %ð %ðð ð ð ð Ð%ñ ô ð ð
%ð 
%ð 
%ð 
%ð 
%�7ñ 
%ô 
%ð 
%ð	%ð 	%ð 	%ð 	%ð 	%�gñ 	%ô 	%ð 	%ðð ð ð ð �<ñ ô ð ðð ð ð ð �lñ ô ð ðð ð ð ð ˜Iñ ô ð ð*/ð /ð /ð /ð /˜9ñ /ô /ð /ð(ð ð ð ð ˜'ñ ô ð ð?ð ?ð ?ð ?ð ?˜Iñ ?ô ?ð ?ð,%ð %ð %ð %ð %˜ñ %ô %ð %ðð ð ð ð �yñ ô ð ð4ð ð ð ð ˜ñ ô ð ð ð ð ð ð �Yñ ô ð ðð ð ð ð ˜	ñ ô ð ðð ð ð ð �”ñ ô ð ð!ð !ð !ð !ð !Ð(ñ !ô !ð !ðð ð ð ð �*ñ ô ð ðGð Gð Gð Gð G˜Yñ Gô Gð Gðð ð ð ð �iñ ô ð ð ð r   