
    &`iA                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ  e j        e          Z G d de          Z ed           ZdS )	    N)CartPoleEnv)make_multi_agent)override)EnvErrorc                        e Zd ZdZd	 fd	Z ee          ddd fd
            Z ee           fd            Zd Z	d Z
 xZS )
CartPoleCrashinga@  A CartPole env that crashes (or stalls) from time to time.

    Useful for testing faulty sub-env (within a vectorized env) handling by
    EnvRunners.

    After crashing, the env expects a `reset()` call next (calling `step()` will
    result in yet another error), which may or may not take a very long time to
    complete. This simulates the env having to reinitialize some sub-processes, e.g.
    an external connection.

    The env can also be configured to stall (and do nothing during a call to `step()`)
    from time to time for a configurable amount of time.
    Nc                    t                                                       ||ni | _        |                    dd          | _        |                    dd          | _        |                    d          | _        d | _        | j        Nt          | j        t                    s4t          | j        t                    rt          | j                  dk    sJ |                    dd           }|r|j        |vrd| _        d| _        d | _        |                    dd          | _        |                    d	d          | _        |                    d
          | _        d | _        |                    d          | _        | j        Ut          | j        t          t$          f          s4t          | j        t                    rt          | j                  dk    sJ |                    dd           }|r|j        |vrd| _        d| _        d | _        d| _        d}d|v r[t          |d         t                    s|d         n7t(          j                            |d         d         |d         d                   }t/          d| d           t1          j        |           t(          j                                        | _        d S )Np_crashg{Gzt?p_crash_resetg        crash_after_n_steps   crash_on_worker_indicesp_stallp_stall_resetstall_after_n_stepsstall_time_secstall_on_worker_indicesr   init_time_s   z.Initializing crashing env (with init-delay of zsec) ...)super__init__configgetr
   r   r   _crash_after_n_steps
isinstanceinttuplelenworker_indexr   r   r   _stall_after_n_stepsr   float	timestepsnprandomuniformprinttimesleepRandomState_rng)selfr   faulty_indicessample	__class__s       /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/examples/envs/classes/cartpole_crashing.pyr   zCartPoleCrashing.__init__   s    & 2ff zz)U33#ZZ== $*::.C#D#D $(!$,$2C88 - 43U;; - 011Q666	  $=tDD 	,f1GGDL!$D'+D$ zz)S11#ZZ==#)::.C#D#D $(! %jj)9::'$-U|<< ( 4.66 ( <?t?R;S;SWX;X;X;X  $=tDD 	,f1GGDL!$D'+D$  F"" "&"7??}%%Y&&=)!,f].CA.F   	OvOOOPPP
6 I))++			    )seedoptionsc                    d| _         d | _        |                     | j                  r*t	          d| j        j         d| j        j         d          |                     | j	                   t                                                      S )Nr   pSimulated env crash on worker=	 env-idx=zJ during `reset()`! Feel free to use any other exception type here instead.)r"   r   _should_crashr   r   r   r   vector_index_stall_if_necessaryr   r   reset)r+   r1   r2   r.   s      r/   r;   zCartPoleCrashing.resetf   s     $(!  233 	J1I J J;3J J J   	  4#5 666ww}}r0   c                 &   | xj         dz  c_         |                     | j                  r*t          d| j        j         d| j        j         d          |                     | j                   t                      
                    |          S )Nr   r4   r6   r7   zI during `step()`! Feel free to use any other exception type here instead.)r"   r8   r
   r   r   r   r9   r:   r   r   step)r+   actionr.   s     r/   r=   zCartPoleCrashing.stepx   s     	! -- 	J1I J J;3J J J   	  4< 000ww||F###r0   c                 |   | j                                         }||k     rt          d           dS | j        | j        \t          | j        t                    s| j        n5t          j        	                    | j        d         | j        d                   | _        | j        | j
        k    rt          d           dS dS )NzCrashing due to p(crash)!Tr   r   z$Crashing due to n timesteps reached!F)r*   randr&   r   r   r   r   r#   r$   randintr"   )r+   r5   rnds      r/   r8   zCartPoleCrashing._should_crash   s    inn77-...4%1(0 &d&>FFD,,**03T5Ma5P  ) (DN::<===tur0   c                 F   d}| j                                         |k     rd}n|| j        u| j        \t	          | j        t
                    s| j        n5t          j                            | j        d         | j        d                   | _        | j        | j	        k    rd}|rt	          | j
        t
                    s| j
        n5t          j                            | j
        d         | j
        d                   }t          d| d           t          j        |           d S d S )NFTr   r   z -> will stall for zsec ...)r*   r@   r   r    r   r   r#   r$   rA   r"   r   r%   r&   r'   r(   )r+   r5   stallsecs       r/   r:   z$CartPoleCrashing._stall_if_necessary   s)   9>>aEE%1(0 &d&>FFD,,**03T5Ma5P  ) (DN:: 	 "$"5u==W##Y&&t':1'=t?RST?UVV 
 4444555JsOOOOO	 	r0   N)__name__
__module____qualname____doc__r   r   r   r;   r=   r8   r:   __classcell__)r.   s   @r/   r   r      s         G, G, G, G, G, G,R Xk $       " Xk$ $ $ $ $   (      r0   r   c                      t          |           S rF   )r   )r   s    r/   <lambda>rM      s    =Mf=U=U r0   )loggingr'   numpyr#   gymnasium.envs.classic_controlr   +ray.rllib.examples.envs.classes.multi_agentr   ray.rllib.utils.annotationsr   ray.rllib.utils.errorr   	getLoggerrG   loggerr   MultiAgentCartPoleCrashing r0   r/   <module>rX      s          6 6 6 6 6 6 H H H H H H 0 0 0 0 0 0 * * * * * *		8	$	$f f f f f{ f f fR .-.U.UVV   r0   