§
    ¹³ÙgO  ã                  óÞ   — d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZ dd	lmZ  ej        e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zBuilt-in pass flow controllers.é    )ÚannotationsN)ÚCallableÚIterableÚ	Generator)ÚAnyé   )ÚBaseControllerÚTask)ÚPassManagerStateÚPropertySet)ÚPassManagerErrorc                  óN   ‡ — e Zd ZdZ	 dddœdˆ fd	„Zedd„¦   «         Zdd„Zˆ xZS )ÚFlowControllerLinearz?A standard flow controller that runs tasks one after the other.© N©ÚoptionsÚtasksúTask | Iterable[Task]r   údict[str, Any] | Nonec               ó¢   •— t          ¦   «                              |¦  «         t          |t          ¦  «        s|g}t	          |¦  «        | _        d S ©N)ÚsuperÚ__init__Ú
isinstancer   Útupler   )Úselfr   r   Ú	__class__s      €úY/granary/edev/quantum/lib/python3.11/site-packages/qiskit/passmanager/flow_controllers.pyr   zFlowControllerLinear.__init__   sG   ø€ õ 	‰Œ×Ò˜Ñ!Ô!Ð!å˜%¥Ñ*Ô*ð 	Ø�GˆEÝ"'¨¡,¤,ˆŒ
ˆ
ˆ
ó    Úreturnú
list[Task]c                ó*   — t          | j        ¦  «        S ©z*Alias of tasks for backward compatibility.©Úlistr   ©r   s    r   ÚpasseszFlowControllerLinear.passes*   ó   € õ �D”JÑÔÐr   Ústater   ú'Generator[Task, PassManagerState, None]c              #  ó&   K  — | j         D ]}|V —}Œd S r   )r   ©r   r)   Útasks      r   Ú
iter_taskszFlowControllerLinear.iter_tasks/   s,   è è € Ø”Jð 	ð 	ˆDØ�J�JˆEˆEð	ð 	r   )r   )r   r   r   r   ©r    r!   ©r)   r   r    r*   ©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr'   r.   Ú__classcell__©r   s   @r   r   r      s�   ø€ € € € € ØIÐIð (*ð
/ð *.ð	
/ð 
/ð 
/ð 
/ð 
/ð 
/ð 
/ð 
/ð ð ð  ð  ñ „Xð ðð ð ð ð ð ð ð r   r   c                  óP   ‡ — e Zd ZdZ	 	 dddœdˆ fd„Zedd„¦   «         Zdd„Zˆ xZS )ÚDoWhileControllera  Run the given tasks in a loop until the ``do_while`` condition on the property set becomes
    ``False``.

    The given tasks will always run at least once, and on iteration of the loop, all the
    tasks will be run (with the exception of a failure state being set).r   Nr   r   r   Údo_whileúCallable[[PropertySet], bool]r   r   c               ó°   •— t          ¦   «                              |¦  «         t          |t          ¦  «        s|g}t	          |¦  «        | _        || _        d S r   )r   r   r   r   r   r   r;   )r   r   r;   r   r   s       €r   r   zDoWhileController.__init__;   sN   ø€ õ 	‰Œ×Ò˜Ñ!Ô!Ð!å˜%¥Ñ*Ô*ð 	Ø�GˆEÝ"'¨¡,¤,ˆŒ
Ø ˆŒˆˆr   r    r!   c                ó*   — t          | j        ¦  «        S r#   r$   r&   s    r   r'   zDoWhileController.passesI   r(   r   r)   r   r*   c              #  ó"  K  — | j                              dd¦  «        }t          |¦  «        D ]Q}| j        D ]}|V —}Œ|                      |j        ¦  «        s d S |j        j                             | j        ¦  «         ŒRt          d|› �¦  «        ‚)NÚmax_iterationiè  z)Maximum iteration reached. max_iteration=)
Ú_optionsÚgetÚranger   r;   Úproperty_setÚworkflow_statusÚcompleted_passesÚdifference_updater   )r   r)   r@   Ú_r-   s        r   r.   zDoWhileController.iter_tasksN   s¦   è è € Øœ×)Ò)¨/¸4Ñ@Ô@ˆÝ�}Ñ%Ô%ð 	Qð 	QˆAØœ
ð #ð #�Ø"˜
˜
��Ø—=’= Ô!3Ñ4Ô4ð Ø��àÔ!Ô2×DÒDÀTÄZÑPÔPÐPÐPÝÐZÈ=ÐZÐZÑ[Ô[Ð[r   ©r   N)r   r   r;   r<   r   r   r/   r0   r1   r8   s   @r   r:   r:   4   s¡   ø€ € € € € ðLð Lð (*Ø26ð!ð
 *.ð!ð !ð !ð !ð !ð !ð !ð !ð ð ð  ð  ñ „Xð ð	\ð 	\ð 	\ð 	\ð 	\ð 	\ð 	\ð 	\r   r:   c                  óP   ‡ — e Zd ZdZ	 	 dddœdˆ fd„Zedd„¦   «         Zdd„Zˆ xZS )ÚConditionalControllerzqA flow controller runs the pipeline once if the condition is true, or does nothing if the
    condition is false.r   Nr   r   r   Ú	conditionr<   r   r   c               ó°   •— t          ¦   «                              |¦  «         t          |t          ¦  «        s|g}t	          |¦  «        | _        || _        d S r   )r   r   r   r   r   r   rL   )r   r   rL   r   r   s       €r   r   zConditionalController.__init__^   sN   ø€ õ 	‰Œ×Ò˜Ñ!Ô!Ð!å˜%¥Ñ*Ô*ð 	Ø�GˆEÝ"'¨¡,¤,ˆŒ
Ø"ˆŒˆˆr   r    r!   c                ó*   — t          | j        ¦  «        S r#   r$   r&   s    r   r'   zConditionalController.passesl   r(   r   r)   r   r*   c              #  ó^   K  — |                       |j        ¦  «        r| j        D ]}|V —}Œd S d S r   )rL   rD   r   r,   s      r   r.   z ConditionalController.iter_tasksq   sM   è è € Ø�>Š>˜%Ô,Ñ-Ô-ð 	#Øœ
ð #ð #�Ø"˜
˜
��ð	#ð 	#ð#ð #r   rI   )r   r   rL   r<   r   r   r/   r0   r1   r8   s   @r   rK   rK   Z   s—   ø€ € € € € ðð ð
 (*Ø37ð#ð
 *.ð#ð #ð #ð #ð #ð #ð #ð #ð ð ð  ð  ñ „Xð ð#ð #ð #ð #ð #ð #ð #ð #r   rK   )r5   Ú
__future__r   ÚloggingÚcollections.abcr   r   r   Útypingr   Ú
base_tasksr	   r
   Úcompilation_statusr   r   Ú
exceptionsr   Ú	getLoggerr2   Úloggerr   r:   rK   r   r   r   ú<module>rY      s=  ðð &Ð %Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø (Ð (Ð (Ð (Ð (Ð (à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð ˜>ñ ô ð ð2#\ð #\ð #\ð #\ð #\˜ñ #\ô #\ð #\ðL#ð #ð #ð #ð #˜Nñ #ô #ð #ð #ð #r   