§
    º³Ùg,  ã                   ój   — d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  G d„ de
¦  «        Zd	S )
zASAP Scheduling.é    )ÚDelayÚQubitÚMeasure)Ú
DAGCircuit)ÚTranspilerError)ÚBaseSchedulerTransform)Údeprecate_funcc                   óN   ‡ — e Zd ZdZ edd¬¦  «        ˆ fd„¦   «         Zd„ Zˆ xZS )ÚASAPScheduleaÝ  ASAP Scheduling pass, which schedules the start time of instructions as early as possible..

    See :class:`~qiskit.transpiler.passes.scheduling.base_scheduler.BaseSchedulerTransform` for the
    detailed behavior of the control flow operation, i.e. ``c_if``.

    .. note::

        This base class has been superseded by :class:`~.ASAPScheduleAnalysis` and
        the new scheduling workflow. It will be deprecated and subsequently
        removed in a future release.
    z�Instead, use :class:`~.ASAPScheduleAnalysis`, which is an analysis pass that requires a padding pass to later modify the circuit.z1.1.0)Úadditional_msgÚsincec                 ó:   •—  t          ¦   «         j        |i |¤Ž d S ©N)ÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ	__class__s      €ú^/granary/edev/quantum/lib/python3.11/site-packages/qiskit/transpiler/passes/scheduling/asap.pyr   zASAPSchedule.__init__#   s'   ø€ ð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)ó    c                 ón  ‡— t          |j        ¦  «        dk    s|j                             dd¦  «        €t          d¦  «        ‚| j        d         }t          ¦   «         }|j                             ¦   «         D ]}|                     |¦  «         Œ|j                             ¦   «         D ]}| 	                    |¦  «         Œd„ |j
        |j        z   D ¦   «         Š|                     ¦   «         D �]d}|                      ||¦  «        }t          |j        | j        ¦  «        r¦t#          ˆfd„|j        D ¦   «         ¦  «        }|j        j        rrt#          ˆfd„|j        j        D ¦   «         ¦  «        }	||	k    rt#          || j        z
  |	¦  «        }	|	| j        z   }
|j        j        D ]}|
‰|<   Œt#          ||
¦  «        }n|}||z   }nÝ|j        j        rt          d	|j        j        › d
�¦  «        ‚t          |j        t,          ¦  «        rmt#          ˆfd„|j        D ¦   «         ¦  «        }t#          ˆfd„|j        D ¦   «         ¦  «        }	t#          ||	| j        z
  ¦  «        }||z   }|j        D ]}|‰|<   Œn-t#          ˆfd„|j        |j        z   D ¦   «         ¦  «        }||z   }|j        D ]€}|‰|         z
  }|dk    rht          |t2          ¦  «        rS|                      |                     |¦  «        j        ¦  «        r&|                     t=          ||¦  «        |gg ¦  «         |‰|<   Œ�|                     |j        |j        |j        ¦  «         �Œft#          ‰                     ¦   «         ¦  «        }‰                     ¦   «         D ]y\  }}||z
  }|dk    rt          |t2          ¦  «        sŒ&|                      |                     |¦  «        j        ¦  «        r&|                     t=          ||¦  «        |gg ¦  «         Œz|j        |_        |j         |_         |j!        |_!        ||_"        ||_#        |S )a[  Run the ASAPSchedule pass on `dag`.

        Args:
            dag (DAGCircuit): DAG to schedule.

        Returns:
            DAGCircuit: A scheduled DAG.

        Raises:
            TranspilerError: if the circuit is not mapped on physical qubits.
            TranspilerError: if conditional bit is added to non-supported instruction.
        é   ÚqNz,ASAP schedule runs on physical circuits onlyÚ	time_unitc                 ó   — i | ]}|d “ŒS )r   © )Ú.0r   s     r   ú
<dictcomp>z$ASAPSchedule.run.<locals>.<dictcomp>E   s   € Ð<Ð<Ð<˜q�a˜Ð<Ð<Ð<r   c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   ©r   r   Ú
idle_afters     €r   ú	<genexpr>z#ASAPSchedule.run.<locals>.<genexpr>M   s'   øè è € Ð<Ð<¨A˜* Qœ-Ð<Ð<Ð<Ð<Ð<Ð<r   c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   ©r   Úbitr"   s     €r   r#   z#ASAPSchedule.run.<locals>.<genexpr>P   s'   øè è € ÐPÐP°#˜j¨œoÐPÐPÐPÐPÐPÐPr   zConditional instruction z$ is not supported in ASAP scheduler.c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   r!   s     €r   r#   z#ASAPSchedule.run.<locals>.<genexpr>r   ó'   øè è € Ð@Ð@°˜j¨œmÐ@Ð@Ð@Ð@Ð@Ð@r   c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   )r   Úcr"   s     €r   r#   z#ASAPSchedule.run.<locals>.<genexpr>s   r(   r   c              3   ó(   •K  — | ]}‰|         V — Œd S r   r   r%   s     €r   r#   z#ASAPSchedule.run.<locals>.<genexpr>�   s'   øè è € ÐPÐP°˜Z¨œ_ÐPÐPÐPÐPÐPÐPr   r   )$ÚlenÚqregsÚgetr   Úproperty_setr   ÚvaluesÚadd_qregÚcregsÚadd_cregÚqubitsÚclbitsÚtopological_op_nodesÚ_get_node_durationÚ
isinstanceÚopÚCONDITIONAL_SUPPORTEDÚmaxÚqargsÚcondition_bitsÚconditional_latencyÚnamer   ÚcargsÚclbit_write_latencyr   Ú_delay_supportedÚfind_bitÚindexÚapply_operation_backr   ÚitemsÚmetadataÚ_calibrations_propÚdurationÚunit)r   Údagr   Únew_dagÚqregÚcregÚnodeÚop_durationÚt0qÚt0cÚt1cr&   Út0Út1ÚclbitÚdeltaÚcircuit_durationÚafterr"   s                     @r   ÚrunzASAPSchedule.run-   sˆ  ø€ õ ˆsŒy‰>Œ>˜QÒÐ #¤)§-¢-°°TÑ":Ô":Ð"BÝ!Ð"PÑQÔQÐQàÔ% kÔ2ˆ	å‘,”,ˆØ”I×$Ò$Ñ&Ô&ð 	#ð 	#ˆDØ×Ò˜TÑ"Ô"Ð"Ð"Ø”I×$Ò$Ñ&Ô&ð 	#ð 	#ˆDØ×Ò˜TÑ"Ô"Ð"Ð"à<Ð< C¤J°´Ñ$;Ð<Ñ<Ô<ˆ
Ø×,Ò,Ñ.Ô.ð X	Jñ X	JˆDØ×1Ò1°$¸Ñ<Ô<ˆKõ
 ˜$œ' 4Ô#=Ñ>Ô>ð E*ÝÐ<Ð<Ð<Ð<°´Ð<Ñ<Ô<Ñ<Ô<�Ø”7Ô)ð åÐPÐPÐPÐP¸¼Ô9OÐPÑPÔPÑPÔP�CØ˜S’y�yõ " #¨Ô(@Ñ"@À#ÑFÔF˜Ø Ô 8Ñ8�CØ#œwÔ5ð .ð .˜à*-˜
 3™˜å˜S #™œ�B�Bà�BØ˜+Ñ%��à”7Ô)ð Ý)Øe°4´7´<ÐeÐeÐeñô ð õ ˜dœg¥wÑ/Ô/ð !*åÐ@Ð@Ð@Ð@°T´ZÐ@Ñ@Ô@Ñ@Ô@�CÝÐ@Ð@Ð@Ð@°T´ZÐ@Ñ@Ô@Ñ@Ô@�Cõ. ˜S #¨Ô(@Ñ"@ÑAÔA�BØ˜kÑ)�BØ!%¤ð /ð /˜Ø,.˜
 5Ñ)Ð)ð/õ ÐPÐPÐPÐP¸¼
ÀTÄZÑ8OÐPÑPÔPÑPÔP�BØ˜kÑ)�Bð ”zð %ð %�Ø˜Z¨œ_Ñ,�à˜A’I�IÝ" 3­Ñ.Ô.ð à×-Ò-¨c¯lªl¸3Ñ.?Ô.?Ô.EÑFÔFð ð ×0Ò0µ°u¸iÑ1HÔ1HÈ3È%ÐQSÑTÔTÐTØ"$�
˜3‘�à×(Ò(¨¬°$´*¸d¼jÑIÔIÐIÑIå˜z×0Ò0Ñ2Ô2Ñ3Ô3ÐØ$×*Ò*Ñ,Ô,ð 	Qð 	Q‰JˆC�Ø$ uÑ,ˆEØ˜A’I�I¥*¨Sµ%Ñ"8Ô"8�IØØ×$Ò$ S§\¢\°#Ñ%6Ô%6Ô%<Ñ=Ô=ð QØ×,Ò,­U°5¸)Ñ-DÔ-DÀsÀeÈRÑPÔPÐPøà”xˆŒØœ<ˆÔØ%(Ô%;ˆÔ"ð ,ˆÔØ ˆŒØˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   rZ   Ú__classcell__)r   s   @r   r   r      sƒ   ø€ € € € € ð
ð 
ð €^ðVð ðñ ô ð*ð *ð *ð *ñô ð*ðBð Bð Bð Bð Bð Bð Br   r   N)r^   Úqiskit.circuitr   r   r   Úqiskit.dagcircuitr   Úqiskit.transpiler.exceptionsr   Ú2qiskit.transpiler.passes.scheduling.base_schedulerr   Úqiskit.utils.deprecationr	   r   r   r   r   ú<module>re      s²   ðð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø (Ð (Ð (Ð (Ð (Ð (Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø UÐ UÐ UÐ UÐ UÐ UØ 3Ð 3Ð 3Ð 3Ð 3Ð 3ðYð Yð Yð Yð YÐ)ñ Yô Yð Yð Yð Yr   