o
    ni5                  	   @   s  U d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZ ejdkr7ddlmZ nddlmZ edd	d
ZedZedd	dZedd	d
ZeG dd dee ZeG dd dee ZeG dd dee ZeG dd deeef ZeG dd dee ZeG dd deeef Zeee ee ee eeef ee eeef f Zeed< eG dd de	eef Z eeeeef  ee eef  f Z!eed< e!edf Z"eed< G d d! d!e	eef Z#e#edf Z$eed"< dS )#a  Finite state machine.

Simple FSM implementation.

Usage:
    ```python
    class A:
        def on_output(self, inputs) -> None:
            pass


    class B:
        def on_output(self, inputs) -> None:
            pass


    def to_b(inputs) -> bool:
        return True


    def to_a(inputs) -> bool:
        return True


    f = Fsm(states=[A(), B()], table={A: [(to_b, B)], B: [(to_a, A)]})
    f.run({"input1": 1, "input2": 2})
    ```
    N)abstractmethod)	dataclass)
CallableDictGenericOptionalProtocolSequenceTypeTypeVarUnionruntime_checkable)   
   )	TypeAliasT_FsmInputsT)contravariantT_FsmContextT_FsmContext_cov)	covariantT_FsmContext_contrac                   @   "   e Zd ZededdfddZdS )FsmStateCheckinputsreturnNc                 C      d S N selfr   r   r   O/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/fsm.pyon_check<      zFsmStateCheck.on_check)__name__
__module____qualname__r   r   r!   r   r   r   r    r   :       r   c                   @   r   )FsmStateOutputr   r   Nc                 C   r   r   r   r   r   r   r    on_stateB   r"   zFsmStateOutput.on_state)r#   r$   r%   r   r   r(   r   r   r   r    r'   @   r&   r'   c                   @   r   )FsmStateEnterr   r   Nc                 C   r   r   r   r   r   r   r    on_enterH   r"   zFsmStateEnter.on_enter)r#   r$   r%   r   r   r*   r   r   r   r    r)   F   r&   r)   c                   @   s&   e Zd ZedededdfddZdS )FsmStateEnterWithContextr   contextr   Nc                 C   r   r   r   )r   r   r,   r   r   r    r*   N   s   z!FsmStateEnterWithContext.on_enter)r#   r$   r%   r   r   r   r*   r   r   r   r    r+   L   s    r+   c                   @   r   )FsmStateStayr   r   Nc                 C   r   r   r   r   r   r   r    on_stayV   r"   zFsmStateStay.on_stay)r#   r$   r%   r   r   r.   r   r   r   r    r-   T   r&   r-   c                   @   s"   e Zd ZededefddZdS )FsmStateExitr   r   c                 C   r   r   r   r   r   r   r    on_exit\   r"   zFsmStateExit.on_exitN)r#   r$   r%   r   r   r   r0   r   r   r   r    r/   Z   r&   r/   FsmStatec                   @   sN   e Zd ZU eegef ed< eeee	f  ed< dZ
eeegdf  ed< dS )FsmEntry	conditiontarget_stateNaction)r#   r$   r%   r   r   bool__annotations__r
   r1   r   r5   r   r   r   r   r    r2   n   s   
 r2   FsmTableWithContextFsmTablec                	   @   s   e Zd ZU eee ef ed< eee	f ed< eee	f ed< e
e ed< de
e deee	f ddfd	d
Zdedeeee	f  deeegdf  ddfddZdeddfddZdeddfddZdS )FsmWithContext_state_dict_table_state_statesstatestabler   Nc                 C   s4   || _ || _dd |D | _| jt|d  | _d S )Nc                 S   s   i | ]}t ||qS r   )type).0sr   r   r    
<dictcomp>   s    z+FsmWithContext.__init__.<locals>.<dictcomp>r   )r>   r<   r;   rA   r=   )r   r?   r@   r   r   r    __init__   s   zFsmWithContext.__init__r   	new_stater5   c                 C   s   |r|| d }t | jtr| j|}t| j}||kr-t | jtr+| j| d S d S | j| | _|rEt | jtrE| jj	||d d S t | jt
rS| j	| d S d S )N)r,   )
isinstancer=   r/   r0   rA   r-   r.   r;   r+   r*   r)   )r   r   rF   r5   r,   
prev_stater   r   r    _transition   s    
zFsmWithContext._transitionc                 C   s<   | j t| j D ]}||r| ||j|j  d S qd S r   )r<   rA   r=   r3   rI   r4   r5   )r   r   entryr   r   r    _check_transitions   s   
z!FsmWithContext._check_transitionsc                 C   sB   t | jtr| j| | | t | jtr| j| d S d S r   )rG   r=   r   r!   rK   r'   r(   r   r   r   r    input   s   
zFsmWithContext.input)r#   r$   r%   r   r
   r1   r7   r8   r   r   r	   rE   r   r   rI   rK   rL   r   r   r   r    r:   ~   s.   
 



r:   Fsm)%__doc__sysabcr   dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r   version_infor   typing_extensionsr   r   r   r   r   r'   r)   r+   r-   r/   r1   r7   r2   r8   r9   r:   rM   r   r   r   r    <module>   sV   0
	


6