
    z	i[                     \   S r SSKrSSKrSSKJr  SSKJr  SSKJr  \R                  " SSS	S
9r
0 \R                  R                  R                  \
" SS9_\R                  R                  R                  \
" SS9_\R                  R                  R                   \
" SS5      _\R                  R                  R"                  \
" SS5      _\R                  R                  R$                  \
" SS5      _\R                  R                  R&                  \
" SS5      _\R                  R                  R(                  \
" SS5      _\R                  R                  R*                  \
" SS5      _\R                  R                  R,                  \
" SS5      _\R                  R                  R.                  \
" SS5      _\R                  R                  R0                  \
" SS5      _\R                  R                  R2                  \
" SS5      _\R                  R                  R4                  \
" SS5      _\R                  R                  R6                  \
" SS5      _\R                  R                  R8                  \
" SS5      _\R                  R                  R:                  \
" SS5      _\R                  R                  R<                  \
" SS5      _\R                  R                  R>                  \
" SS5      \R                  R                  R@                  \
" SS5      0Er! " S  S!5      r"g)"z"Printers for OpenQASM 3 AST nodes.    N)Sequence   )ast)ExperimentalFeatures_BindingPower)leftright)   r
   )defaults   )r	                                 	   
                        c                      \ rS rSrSr\R                  R                  S\R                  R                  S\R                  R                  S0r
\R                  R                  S\R                  R                  S\R                  R                  S\R                  R                  S	0r\R"                   V Vs0 s H  oS
UR$                   S3_M     snn rS\" S5      S.S\R,                  S\S\S\4S jjrS\R4                  SS4S jrS`S jrS`S jrS`S jrS\SS4S jrSSS.S\ \R4                     S \S!\S"\SS4
S# jjr!S\RD                  SS4S$ jr#S\RH                  SS4S% jr%S\RL                  SS4S& jr'S\RP                  SS4S' jr)S\RT                  SS4S( jr+S\RX                  SS4S) jr-S\R\                  SS4S* jr/S\R"                  SS4S+ jr0S,\Rb                  SS4S- jr2S,\Rf                  SS4S. jr4S\Rj                  SS4S/ jr6S\Rn                  SS4S0 jr8S,\Rr                  SS4S1 jr:S\Rv                  SS4S2 jr<S\Rz                  SS4S3 jr>S\R~                  SS4S4 jr@S\R                  SS4S5 jrBS\R                  SS4S6 jrCS\R                  SS4S7 jrES\R                  SS4S8 jrGS\R                  SS4S9 jrIS\R                  SS4S: jrKS\R                  SS4S; jrMS\R                  SS4S< jrOS\R                  SS4S= jrQS\R                  SS4S> jrSS\R                  4S? jrUS\R                  4S@ jrWS\R                  SS4SA jrYS\R                  SS4SB jr[S\R                  4SC jr]S\R                  4SD jr_S\R                  4SE jraS\R                  4SF jrcS\R                  SS4SG jreS\R                  SS4SH jrgS\R                  SS4SI jriS\R                  SS4SJ jrkS\R                  SS4SK jrmS\R                  SS4SL jroS\R                  SS4SM jrqS\R                  SS4SN jrsS\R                  SS4SO jruS\R                  SS4SP jrwS\R                  SS4SQ jryS\R                  SS4SR jr{S\R                  SS4SS jr}S\R                  SS4ST jrS,\GR                   SS4SU jrS,\GR                  SS4SV jr SaS\GR                  SW\SS4SX jjrS\GR                  SS4SY jrS\GR                  SS4SZ jrS\GR                  SS4S[ jrS\GR                  SS4S\ jrS,\GR                  SS4S] jrS\GR                   SS4S^ jrS_rgs  snn f )bBasicPrinterD   zAn OpenQASM 3 AST visitor which writes the tree out in text mode to a stream, where the only
formatting is simple block indentation.pieulertauctrlnegctrlinvpowzfloat[]Fr   )chain_else_ifexperimentalstreamindentr+   r,   c                B    Xl         X l        SU l        X0l        X@l        g)a  
Args:
    stream (io.TextIOBase): the stream that the output will be written to.
    indent (str): the string to use as a single indentation level.
    chain_else_if (bool): If ``True``, then constructs of the form::

            if (x == 0) {
                // ...
            } else {
                if (x == 1) {
                    // ...
                } else {
                    // ...
                }
            }

        will be collapsed into the equivalent but flatter::

            if (x == 0) {
                // ...
            } else if (x == 1) {
                // ...
            } else {
                // ...
            }

        This collapsed form may have less support on backends, so it is turned off by
        default.  While the output of this printer is always unambiguous, using ``else``
        without immediately opening an explicit scope with ``{ }`` in nested contexts can
        cause issues, in the general case, which is why it is sometimes less supported.
r   N)r-   r.   _current_indent_chain_else_if_experimental)selfr-   r.   r+   r,   s        N/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/qasm3/printer.py__init__BasicPrinter.__init__Z   s#    N  +)    nodereturnNc                     Sn[        U5      R                  5        H"  n[        U SUR                  -   S5      nUc  M"    O*   UR                  R                  n[        SU SU S35      eU" U5        g)a>  Visit this node of the AST, printing it out to the stream in this class instance.

Normally, you will want to call this function on a complete :obj:`~qiskit.qasm3.ast.Program`
node, to print out a complete program to the stream.  The visit can start from any node,
however, if you want to build up a file bit-by-bit manually.

Args:
    node (ASTNode): the node to convert to OpenQASM 3 and write out to the stream.

Raises:
    RuntimeError: if an AST node is encountered that the visitor is unable to parse.  This
        typically means that the given AST was malformed.
N_visit_z<This visitor does not know how to handle AST nodes of type 'z', but was given 'z'.)typemrogetattr__name__	__class__RuntimeError)r3   r8   visitorcls_	node_types        r4   visitBasicPrinter.visit   s~     JNN$DdI$=tDG" %
 //INyk Z##'&,  	r7   c                 h    U R                   R                  U R                  U R                  -  5        g N)r-   writer0   r.   r3   s    r4   _start_lineBasicPrinter._start_line   s#    $..<=r7   c                 :    U R                   R                  S5        g )Nz;
r-   rI   rJ   s    r4   _end_statementBasicPrinter._end_statement       % r7   c                 :    U R                   R                  S5        g )N
rN   rJ   s    r4   	_end_lineBasicPrinter._end_line   s    $r7   linec                 z    U R                  5         U R                  R                  U5        U R                  5         g rH   )rK   r-   rI   rO   )r3   rV   s     r4   _write_statementBasicPrinter._write_statement   s,    $r7    )startendnodesr[   r\   	separatorc                4   U(       a  U R                   R                  U5        US S  H/  nU R                  U5        U R                   R                  U5        M1     U(       a  U R                  US   5        U(       a  U R                   R                  U5        g g )N)r-   rI   rE   )r3   r]   r[   r\   r^   r8   s         r4   _visit_sequenceBasicPrinter._visit_sequence   sv     KKe$#2JDJJtKKi(  JJuRy!KKc" r7   c                     U R                  UR                  5        UR                   H  nU R                  U5        M     g rH   )rE   header
statementsr3   r8   	statements      r4   _visit_ProgramBasicPrinter._visit_Program   s,    

4;;IJJy! )r7   c                     U R                  UR                  5        UR                   H  nU R                  U5        M     g rH   )rE   versionincludes)r3   r8   includes      r4   _visit_HeaderBasicPrinter._visit_Header   s,    

4<< }}GJJw %r7   c                 @    U R                  SUR                   35        g )Nz	OPENQASM )rX   version_numberr3   r8   s     r4   _visit_VersionBasicPrinter._visit_Version   s    	$*=*=)>?@r7   c                 B    U R                  SUR                   S35        g )Nz	include "")rX   filenamerr   s     r4   _visit_IncludeBasicPrinter._visit_Include   s    	$--:;r7   c                 @    U R                  SUR                   35        g )Nz#pragma )rX   contentrr   s     r4   _visit_PragmaBasicPrinter._visit_Pragma   s    78r7   c                    U R                  5         U R                  R                  SUR                   35        UR                  (       a(  U R                  R                  SUR                   35        U R                  5         g )N@ )rK   r-   rI   	namespacepayloadrT   rr   s     r4   _visit_AnnotationBasicPrinter._visit_Annotation   sZ    Adnn-./<<KK$,,01r7   c                 B    U R                  SUR                   S35        g )Nzdefcalgrammar "rv   )rX   namerr   s     r4   $_visit_CalibrationGrammarDeclaration1BasicPrinter._visit_CalibrationGrammarDeclaration   s    		{!<=r7   c                 T    U R                   R                  U R                  U   5        g rH   )r-   rI   _FLOAT_TYPE_LOOKUPrr   s     r4   _visit_FloatTypeBasicPrinter._visit_FloatType   s    $11$78r7   _nodec                 :    U R                   R                  S5        g )NboolrN   r3   r   s     r4   _visit_BoolTypeBasicPrinter._visit_BoolType   s    &!r7   c                 :    U R                   R                  S5        g )NdurationrN   r   s     r4   _visit_DurationType BasicPrinter._visit_DurationType   s    *%r7   c                     U R                   R                  S5        UR                  b*  U R                   R                  SUR                   S35        g g )Nint[r*   r-   rI   sizerr   s     r4   _visit_IntTypeBasicPrinter._visit_IntType   sB    % 99 KK$))A./ !r7   c                     U R                   R                  S5        UR                  b*  U R                   R                  SUR                   S35        g g )Nuintr   r*   r   rr   s     r4   _visit_UintTypeBasicPrinter._visit_UintType   sB    &!99 KK$))A./ !r7   c                 :    U R                   R                  S5        g )NbitrN   r   s     r4   _visit_BitTypeBasicPrinter._visit_BitType   rQ   r7   c                 V    U R                   R                  SUR                   S35        g )Nzbit[r*   r   rr   s     r4   _visit_BitArrayType BasicPrinter._visit_BitArrayType   s!    D1-.r7   c                 `    U R                   R                  [        UR                  5      5        g rH   )r-   rI   strobjrr   s     r4   _visit_StringifyAndPray$BasicPrinter._visit_StringifyAndPray   s    #dhh-(r7   c                 N    U R                   R                  UR                  5        g rH   )r-   rI   stringrr   s     r4   _visit_IdentifierBasicPrinter._visit_Identifier   s    $++&r7   c                     U R                   R                  UR                  5        U R                   R                  S5        U R                  UR                  5        U R                   R                  S5        g Nr   r*   )r-   rI   r   rE   	subscriptrr   s     r4   _visit_SubscriptedIdentifier)BasicPrinter._visit_SubscriptedIdentifier   sL    $++&#

4>>"#r7   c                 T    U R                   R                  U R                  U   5        g rH   )r-   rI   _CONSTANT_LOOKUPrr   s     r4   _visit_ConstantBasicPrinter._visit_Constant   s    $//56r7   c                 b   UR                   b  U R                  UR                   5        U R                  R                  S5        UR                  b6  U R                  UR                  5        U R                  R                  S5        UR
                  b  U R                  UR
                  5        g g )N:)r[   rE   r-   rI   stepr\   rr   s     r4   _visit_RangeBasicPrinter._visit_Range  sy    ::!JJtzz"#99 JJtyy!KKc"88JJtxx   r7   c                 <    U R                  UR                  SSSS9  g )N{, })r[   r^   r\   )ra   valuesrr   s     r4   _visit_IndexSetBasicPrinter._visit_IndexSet  s    T[[tMr7   c                 n    U R                   R                  S5        U R                  UR                  SS9  g )Nzmeasure r   r^   )r-   rI   ra   identifierListrr   s     r4   _visit_QuantumMeasurement&BasicPrinter._visit_QuantumMeasurement  s-    *%T00DAr7   c                     U R                  5         U R                  UR                  5        U R                  R	                  S5        U R                  UR
                  5        U R                  5         g N = )rK   rE   
identifierr-   rI   quantumMeasurementrO   rr   s     r4   #_visit_QuantumMeasurementAssignment0BasicPrinter._visit_QuantumMeasurementAssignment  sN    

4??#% 

4**+r7   c                     U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  5         g )Nzreset )rK   r-   rI   rE   r   rO   rr   s     r4   _visit_QuantumReset BasicPrinter._visit_QuantumReset  s<    (#

4??#r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  UR                  SS9  U R                  5         g )Nzdelay[z] r   r   )rK   r-   rI   rE   r   ra   qubitsrO   rr   s     r4   _visit_QuantumDelay BasicPrinter._visit_QuantumDelay   se    (#

4==!$T[[D9r7   c                 `    U R                   R                  [        UR                  5      5        g rH   r-   rI   r   valuerr   s     r4   _visit_IntegerLiteral"BasicPrinter._visit_IntegerLiteral(      #djj/*r7   c                 `    U R                   R                  [        UR                  5      5        g rH   r   rr   s     r4   _visit_FloatLiteral BasicPrinter._visit_FloatLiteral+  r   r7   c                 j    U R                   R                  UR                  (       a  S5        g S5        g )Ntruefalse)r-   rI   r   rr   s     r4   _visit_BooleanLiteral"BasicPrinter._visit_BooleanLiteral.  s    DJJ&<G<r7   c                 t    U R                   R                  SUR                  SUR                   S3 S35        g )Nrv   0b)r-   rI   r   widthrr   s     r4   _visit_BitstringLiteral$BasicPrinter._visit_BitstringLiteral1  s0    Adjj4::,a8:;r7   c                 ~    U R                   R                  UR                   UR                  R                   35        g rH   )r-   rI   r   unitrr   s     r4   _visit_DurationLiteral#BasicPrinter._visit_DurationLiteral4  s*    TZZL(9:;r7   c                     U R                   R                  S5        U R                  UR                  5        U R                   R                  S5        g r   )r-   rI   rE   
expressionrr   s     r4   _visit_DesignatorBasicPrinter._visit_Designator7  s6    #

4??##r7   c                 :   U R                   R                  UR                  R                  5        [	        UR
                  [        R                  [        R                  45      (       a  [        UR
                  R                     R                  [        UR                     R                  :  aR  U R                   R                  S5        U R                  UR
                  5        U R                   R                  S5        g U R                  UR
                  5        g N())r-   rI   opr   
isinstanceoperandr   UnaryBinary_BINDING_POWERr   r	   rE   rr   s     r4   _visit_UnaryBasicPrinter._visit_Unary<  s    $''--(t||cii%<==t||/44~dgg7N7T7TTKKc"JJt||$KKc"JJt||$r7   c                    [        UR                  [        R                  [        R                  45      (       a  [
        UR                  R                     R                  [
        UR                     R                  :  aR  U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        OU R                  UR                  5        U R                  R                  SUR                  R                   S35        [        UR                  [        R                  [        R                  45      (       a  [
        UR                  R                     R                  [
        UR                     R                  :  aR  U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        g U R                  UR                  5        g )Nr   r   r   )r   r   r   r   r   r   r   r	   r-   rI   rE   r   rr   s     r4   _visit_BinaryBasicPrinter._visit_BinaryH  s=   tyy399cjj"9::tyy||,22^DGG5L5Q5QQKKc"JJtyy!KKc"JJtyy!Adggmm_A./tzzCIIszz#:;;tzz}}-22^DGG5L5R5RRKKc"JJtzz"KKc"JJtzz"r7   c                     U R                  UR                  5        U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        g r   )rE   r<   r-   rI   r   rr   s     r4   _visit_CastBasicPrinter._visit_Cast]  sF    

499#

4<< #r7   c                    [        UR                  [        R                  [        R                  45      (       aR  U R
                  R                  S5        U R                  UR                  5        U R
                  R                  S5        OU R                  UR                  5        U R
                  R                  S5        U R                  UR                  5        U R
                  R                  S5        g )Nr   r   r   r*   )	r   targetr   r   r   r-   rI   rE   indexrr   s     r4   _visit_IndexBasicPrinter._visit_Indexc  s    dkkCIIszz#:;;KKc"JJt{{#KKc"JJt{{##

4::#r7   c                 l   U R                  5         U R                  UR                  5        U R                  R	                  S5        U R                  UR
                  5        UR                  b6  U R                  R	                  S5        U R                  UR                  5        U R                  5         g )Nr   r   )rK   rE   r<   r-   rI   r   initializerrO   rr   s     r4   _visit_ClassicalDeclaration(BasicPrinter._visit_ClassicalDeclarationn  s|    

499#

4??#'KKe$JJt''(r7   c                 l   U R                  5         U R                  R                  S5        U R                  R                  S5        U R                  UR                  5        UR
                  b6  U R                  R                  S5        U R                  UR
                  5        U R                  5         g )Nstretchr   r   )rK   r-   rI   rE   r   boundrO   rr   s     r4   _visit_StretchDeclaration&BasicPrinter._visit_StretchDeclarationx  sz    )$#

4??#::!KKe$JJtzz"r7   c                     U R                  5         U R                  UR                  5        U R                  R	                  S5        U R                  UR
                  5        U R                  5         g r   )rK   rE   lvaluer-   rI   rvaluerO   rr   s     r4   _visit_AssignmentStatement'BasicPrinter._visit_AssignmentStatement  sL    

4;;% 

4;;r7   c                 x   U R                  5         UR                  [        R                  R                  L a  SOSnU R
                  R                  US-   5        U R                  UR                  5        U R
                  R                  S5        U R                  UR                  5        U R                  5         g )Ninputoutputr   )rK   modifierr   
IOModifierINPUTr-   rI   rE   r<   r   rO   )r3   r8   r  s      r4   _visit_IODeclaration!BasicPrinter._visit_IODeclaration  s~    "mms~~/C/CC7(S.)

499#

4??#r7   c                 6   U R                  5         U R                  R                  S5        UR                  b  U R	                  UR                  5        U R                  R                  S5        U R	                  UR
                  5        U R                  5         g )Nqubitr   )rK   r-   rI   
designatorrE   r   rO   rr   s     r4   _visit_QuantumDeclaration&BasicPrinter._visit_QuantumDeclaration  sh    '"??&JJt'#

4??#r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  UR
                  5        U R                  5         g )Nzlet r   )rK   r-   rI   rE   r   r   rO   rr   s     r4   _visit_AliasStatement"BasicPrinter._visit_AliasStatement  s^    &!

4??#% 

4::r7   c                 .   U R                   R                  U R                  UR                     5        UR                  (       aR  U R                   R                  S5        U R                  UR                  5        U R                   R                  S5        g g r   )r-   rI   _MODIFIER_LOOKUPr  argumentrE   rr   s     r4   _visit_QuantumGateModifier'BasicPrinter._visit_QuantumGateModifier  sc    $//>?==KKc"JJt}}%KKc" r7   c                    U R                  5         UR                  (       a  U R                  UR                  SSS9  U R                  UR                  5        UR
                  (       a  U R                  UR
                  SSSS9  U R                  R                  S5        U R                  UR                  SS9  U R                  5         g )	Nz @ )r\   r^   r   r   r   r[   r\   r^   r   r   )
rK   	modifiersra   rE   quantumGateName
parametersr-   rI   indexIdentifierListrO   rr   s     r4   _visit_QuantumGateCall#BasicPrinter._visit_QuantumGateCall  s    >>  Ue L

4''(??  PT U#T55Fr7   c                    U R                  5         UR                  b6  U R                  UR                  5        U R                  R	                  S5        U R                  UR
                  5        UR                  (       a  U R                  UR                  SSSS9  UR                  (       a  U R                  UR                  SSS9  U R                  5         g )Nr   r   r   r   r1  r   )r[   r^   )
rK   r  rE   r-   rI   identr4  ra   r   rO   rr   s     r4   _visit_DefcalCallStatement'BasicPrinter._visit_DefcalCallStatement  s    ;;"JJt{{#KKe$

4::??  PT U;;  C4 Hr7   c                     U R                  5         U R                  R                  S5        U R                  UR                  SS9  U R                  5         g )Nzbarrier r   r   )rK   r-   rI   ra   r5  rO   rr   s     r4   _visit_QuantumBarrier"BasicPrinter._visit_QuantumBarrier  sE    *%T55Fr7   c                 ,   U R                   R                  S5        U =R                  S-  sl        UR                   H  nU R	                  U5        M     U =R                  S-  sl        U R                  5         U R                   R                  S5        g )Nz{
r   r   )r-   rI   r0   re   rE   rK   rf   s      r4   _visit_ProgramBlock BasicPrinter._visit_ProgramBlock  sn    % !IJJy! )!#r7   c                 
   U R                  5         UR                  (       a7  U R                  R                  S5        U R	                  UR                  5        OU R                  R                  S5        U R                  5         g )Nzreturn r9   )rK   r   r-   rI   rE   rO   rr   s     r4   _visit_ReturnStatement#BasicPrinter._visit_ReturnStatement  sU    ??KKi(JJt'KKh'r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        UR
                  (       a  U R                  UR
                  SSSS9  U R                  R                  S5        UR                  (       a5  U R                  UR                  SS9  U R                  R                  S5        U R                  UR                  5        U R                  5         g )Nzgate r   r   r   r1  r   r   )
rK   r-   rI   rE   r   paramsra   r   bodyrT   rr   s     r4   _visit_QuantumGateDefinition)BasicPrinter._visit_QuantumGateDefinition  s    '"

499;;  CSD Q#;;   =KKc"

499r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        UR
                  (       a7  U R                  UR
                  SSSS9  U R                  R                  S5        U R                  UR                  SS9  U R                  R                  S5        U R                  5         g )	Nzdefcal r   r   r   r   r1  r   z {})	rK   r-   rI   rE   r   calibrationArgumentListra   r   rT   rr   s     r4   _visit_CalibrationDefinition)BasicPrinter._visit_CalibrationDefinition  s    )$

499#''  !=!=Sc]a bKKc"T00DA 	% r7   c                 &    U R                  S5        g )NbreakrX   r   s     r4   _visit_BreakStatement"BasicPrinter._visit_BreakStatement  s    g&r7   c                 &    U R                  S5        g )NcontinuerP  r   s     r4   _visit_ContinueStatement%BasicPrinter._visit_ContinueStatement  s    j)r7   chainedc                    U(       d  U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  UR
                  5        UR                  b  U R                  R                  S5        U R                  (       a  [        UR                  R                  5      S:X  a^  [        UR                  R                  S   [        R                  5      (       a(  U R                  UR                  R                  S   SS9  OU R                  UR                  5        U(       d  U R                  5         g g )Nzif () z else r   r   T)rW  )rK   r-   rI   rE   	condition	true_body
false_bodyr1   lenre   r   r   BranchingStatement_visit_BranchingStatementrT   )r3   r8   rW  s      r4   r_  &BasicPrinter._visit_BranchingStatement  s     &!

4>>"$

4>>"??&KKh' ##223q8t99!<c>T>TUU..t/I/I!/LVZ.[

4??+NN r7   c                 ~   U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        [        UR                  [        R                  5      (       aR  U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        OU R                  UR                  5        U R                  R                  S5        U R                  UR                  5        U R                  5         g )Nzfor z in r   r*   r   )rK   r-   rI   rE   	parameterr   indexsetr   RangerG  rT   rr   s     r4   _visit_ForLoopStatement$BasicPrinter._visit_ForLoopStatement  s    &!

4>>"&!dmmSYY//KKc"JJt}}%KKc"JJt}}%#

499r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  UR
                  5        U R                  5         g )Nzwhile (rY  )rK   r-   rI   rE   rZ  rG  rT   rr   s     r4   _visit_WhileLoopStatement&BasicPrinter._visit_WhileLoopStatement%  s\    )$

4>>"$

499r7   c                    U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  5         U =R                  S-  sl        UR                   H  u  p#U(       d  M  U R                  5         U R                  R                  S5        U R                  USS9  U R                  R                  S5        U R                  U5        U R                  5         M     UR                  bV  U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  5         U =R                  S-  sl        U R                  5         U R                  R                  S	5        U R                  5         g )
Nswitch () {r   case r   r   r   zdefault r   )
rK   r-   rI   rE   r	  rT   r0   casesra   default)r3   r8   labelscases       r4   _visit_SwitchStatement#BasicPrinter._visit_SwitchStatement-  sI   *%

4;;% ! JJLFKKg&  4 8KKc"JJtNN ' <<#KKj)JJt||$NN!#r7   c                 \   U R                  5         U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  5         U =R                  S-  sl        UR                   GHE  u  p#U(       d  M  US S  Hj  nU R                  5         U R                  R                  S5        U R                  U5        U R                  R                  S5        U R                  5         Ml     U R                  5         [        US   [        R                  5      (       a  U R                  US   5        O/U R                  R                  S5        U R                  US   5        U R                  R                  S5        U R                  U5        U R                  5         U R                  S5        GMH     U =R                  S-  sl        U R                  5         U R                  R                  S	5        U R                  5         g )
Nrk  rl  r   r`   rm  r   z: rO  r   )rK   r-   rI   rE   r	  rT   r0   rn  r   r   DefaultCaserX   )r3   r8   rp  rq  labels        r4   _visit_SwitchStatementPreview*BasicPrinter._visit_SwitchStatementPreviewG  s   *%

4;;% ! JJLF  "!!'*

5!!!#&  % &*coo66

6":&!!'*

6":&KKd#JJtNN!!'*% '& 	!#r7   c                 :    U R                   R                  S5        g )Nro  rN   r   s     r4   _visit_DefaultCaseBasicPrinter._visit_DefaultCaseg  s    )$r7   c                    [        UR                  5       H  nU R                  U5        M     U R                  5         U R                  R                  S5        UR                  bQ  U R                  R                  S5        U R                  UR                  5        U R                  R                  S5        U R                  R                  S5        U R                  UR                  5        U R                  5         g )Nboxr   r*   r   )	reversedannotationsrE   rK   r-   rI   r   rG  rT   )r3   r8   
annotations      r4   _visit_BoxStatement BasicPrinter._visit_BoxStatementj  s     #4#3#34JJJz" 5% ==$KKc"JJt}}%KKc"#

499r7   )r1   r0   r2   r.   r-   )r9   N)F)r?   
__module____qualname____firstlineno____doc__r   ConstantPIEULERTAUr   QuantumGateModifierNameCTRLNEGCTRLINVPOWr,  	FloatTyper   r   r   io
TextIOBaser   r   r5   ASTNoderE   rK   rO   rT   rX   r   ra   Programrh   Headerrn   Versionrs   Includerx   Pragmar|   
Annotationr   CalibrationGrammarDeclarationr   r   BoolTyper   DurationTyper   IntTyper   UintTyper   BitTyper   BitArrayTyper   StringifyAndPrayr   
Identifierr   SubscriptedIdentifierr   r   rd  r   IndexSetr   QuantumMeasurementr   QuantumMeasurementAssignmentr   QuantumResetr   QuantumDelayr   IntegerLiteralr   FloatLiteralr   BooleanLiteralr   BitstringLiteralr   DurationLiteralr   
Designatorr   r   r   r   r  Castr  Indexr  ClassicalDeclarationr  StretchDeclarationr  AssignmentStatementr  IODeclarationr!  QuantumDeclarationr&  AliasStatementr)  QuantumGateModifierr.  QuantumGateCallr6  DefcalCallStatementr:  QuantumBarrierr=  ProgramBlockr@  ReturnStatementrC  QuantumGateDefinitionrH  CalibrationDefinitionrL  BreakStatementrQ  ContinueStatementrU  r^  r_  ForLoopStatementre  WhileLoopStatementrh  SwitchStatementrr  SwitchStatementPreviewrw  ru  rz  BoxStatementr  __static_attributes__).0r<   s   00r4   r!   r!   D   s   / 	G% 	##((&##++Y##''##''	 DG==Q=4&A 66=Q $-A!-D+*+* 	+*
 +* ++*Z#++ $ 6>! S T  =?2#ckk*#69#EH#Z]#	#"3;; "4 "
 #**    
A3;; A4 A<3;; <4 <9#** 9 9cnn  >9Z9Z >_c >9S]] 9t 9"S\\ "d "&)9)9 &d &03;; 04 0
0CLL 0T 0
!CKK !D !/(8(8 /T /)C,@,@ )T )'cnn ' '1J1J t 7CLL 7T 7! !t !NCLL NT NBc.D.D B B8X8X ]a (8(8 T (8(8 T +#*<*< + ++(8(8 +T +=#*<*< =<C,@,@ <<3+>+> <4 <cnn  

% 
%##** #* 	 	0H0H T c.D.D  s/F/F 4 ):): t c.D.D  #*<*<  #s/F/F #4 #	3+>+> 	4 	
s/F/F 
4 
#*<*<  (8(8 T 3+>+> 4 1J1J t 1J1J t '3+=+= '$ '*c.C.C * * =B**59	8C,@,@ T c.D.D  3+>+> 4 4#2L2L QU @% %D %(8(8 T k Rs   6Vr!   )#r  collectionsr  typingr   rZ   r   r,   r   
namedtupler   r   Op	LOGIC_NOTBIT_NOTr   MULDIVADDSUB
SHIFT_LEFTSHIFT_RIGHTLESS
LESS_EQUALGREATERGREATER_EQUALEQUAL	NOT_EQUALBIT_ANDBIT_XORBIT_OR	LOGIC_ANDLOGIC_ORr   r!    r7   r4   <module>r     s   )  	   . &&8IT^_ IILLM3 IILL-b1	 JJMM}R, JJMM}R, JJMM}R, JJMM}R, JJMMmB3 JJMM}R4  JJMMb"-!" JJMMmB3#$ JJMM=R0%& JJMMr2!6'* JJMMr2.+, JJMM]2r2-0 JJMM=B/12 JJMM=A.34 JJMM-1-56 JJMM]1a0JJMMM!Q/9@t tr7   