o
    ci                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlm	Z	 G dd dej
ZG dd dej
ZG d	d
 d
ej
ZG dd deZG dd deZdS )    N)Optional)	VectorEnv)overridec                   @   s2   e Zd ZdZd
ddZdddddZdd	 ZdS )MockEnvzMock environment for testing purposes.

    Observation=0, reward=1.0, episode-len is configurable.
    Actions are ignored.
    Nc                 C   s2   || _ || _d| _tjd| _tjd| _d S Nr         )episode_lengthconfigigymspacesDiscreteobservation_spaceaction_space)selfr	   r
    r   \/home/ubuntu/.local/lib/python3.10/site-packages/ray/rllib/examples/envs/classes/mock_env.py__init__   s
   zMockEnv.__init__seedoptionsc                C   s   d| _ di fS Nr   r   r   r   r   r   r   r   reset   s   zMockEnv.resetc                 C   s,   |  j d7  _ | j | jk }}dd||i fS )Nr   r   g      ?r   r	   r   action
terminated	truncatedr   r   r   step   s   zMockEnv.stepN__name__
__module____qualname____doc__r   r   r!   r   r   r   r   r   	   s
    
r   c                   @   sT   e Zd ZU dZddgiZdZee ed< dd Z	dddd	d
Z
dd Zdd ZdS )MockEnv2Mock environment for testing purposes.

    Observation=ts (discrete space!), reward=100.0, episode-len is
    configurable. Actions are ignored.
    zrender.modes	rgb_arrayrender_modec                 C   s8   || _ d| _tj| j d | _tjd| _d | _d S r   )r	   r   r   r   r   r   r   rng_seedr   r	   r   r   r   r   -   s
   
zMockEnv2.__init__Nr   c                C   s   d| _ |d ur
|| _| j i fS r   )r   r,   r   r   r   r   r   4   s   
zMockEnv2.resetc                 C   s.   |  j d7  _ | j | jk }}| j d||i fS )Nr   g      Y@r   r   r   r   r   r!   :   s   zMockEnv2.stepc                 C   s   t jjdddt jdS )Nr      )i,  i     )sizedtype)nprandomrandintuint8r   r   r   r   render?   s   zMockEnv2.render)r$   r%   r&   r'   metadatar+   r   str__annotations__r   r   r!   r7   r   r   r   r   r(   !   s   
 r(   c                   @   s0   e Zd ZdZdd ZdddddZdd	 ZdS )
MockEnv3r)   c                 C   s,   || _ d| _tjd| _tjd| _d S )Nr   d   r   )r	   r   r   r   r   r   r   r-   r   r   r   r   M   s   zMockEnv3.__init__Nr   c                C   s   d| _ | j ddifS )Nr   timestepr   r   r   r   r   r   S   s   zMockEnv3.resetc                 C   s6   |  j d7  _ | j | jk }}| j | j ||d| j ifS )Nr   r=   r   r   r   r   r   r!   W   s   zMockEnv3.stepr#   r   r   r   r   r;   F   s
    r;   c                       p   e Zd ZdZ fddZeedddddZeedddd	d
Zeedd Z	eedd Z
  ZS )VectorizedMockEnvzVectorized version of the MockEnv.

    Contains `num_envs` MockEnv instances, each one having its own
    `episode_length` horizon.
    c                    s>   t  jtjdtjd|d  fddt|D | _d S )Nr   r   r   r   num_envsc                    s   g | ]}t  qS r   )r   .0_r	   r   r   
<listcomp>j       z.VectorizedMockEnv.__init__.<locals>.<listcomp>)superr   r   r   r   rangeenvs)r   r	   rA   	__class__rE   r   r   d   s   

zVectorizedMockEnv.__init__Nseedsr   c                   sV   pd g| j   pd g| j    fddt| jD }dd |D dd |D fS )Nc                    s&   g | ]\}}|j |  | d qS )r   )r   )rC   r   er   rN   r   r   rF   p   s    z2VectorizedMockEnv.vector_reset.<locals>.<listcomp>c                 S      g | ]}|d  qS )r   r   rC   oir   r   r   rF   s   rG   c                 S   rQ   )r   r   rR   r   r   r   rF   s   rG   )rA   	enumeraterJ   )r   rN   r   obs_and_infosr   rP   r   vector_resetl   s   zVectorizedMockEnv.vector_resetr   c                C   s   | j | j||dS )Nr   )rJ   r   r   indexr   r   r   r   r   reset_atu   s   zVectorizedMockEnv.reset_atc                 C   s   g g g g g f\}}}}}t t| jD ]*}| j| || \}}	}
}}|| ||	 ||
 || || q|||||fS r"   )rI   lenrJ   r!   append)r   actions	obs_batch	rew_batchterminated_batchtruncated_batch
info_batchr   obsrewr   r    infor   r   r   vector_stepy   s   



zVectorizedMockEnv.vector_stepc                 C   s   | j S r"   )rJ   r6   r   r   r   get_sub_environments   s   z&VectorizedMockEnv.get_sub_environmentsr$   r%   r&   r'   r   r   r   rV   rY   re   rf   __classcell__r   r   rK   r   r?   ]   s    
r?   c                       r>   )MockVectorEnvzA custom vector env that uses a single(!) CartPole sub-env.

    However, this env pretends to be a vectorized one to illustrate how one
    could create custom VectorEnvs w/o the need for actual vectorizations of
    sub-envs under the hood.
    c                    s6   t d| _t j| jj| jj|d || _d| _d S )NzCartPole-v1r@   r   )	r   makeenvrH   r   r   r   episode_lents)r   r	   mocked_num_envsrK   r   r   r      s   
zMockVectorEnv.__init__NrM   c                   s`   |pd g}|p	d g}| j j|d |d d\ fddt| jD  fddt| jD fS )Nr   r   c                       g | ]} qS r   r   rB   rb   r   r   rF          z.MockVectorEnv.vector_reset.<locals>.<listcomp>c                    ro   r   r   rB   )infosr   r   rF      rq   )rk   r   rI   rA   )r   rN   r   r   )rr   rb   r   rV      s   

zMockVectorEnv.vector_resetr   c                C   s   d| _ | jj||dS )Nr   r   )rm   rk   r   rW   r   r   r   rY      s   zMockVectorEnv.reset_atc           	         sF  |  j d7  _ g g g g g f\}}}}}t| jD ]}| j|| \ | j | jkr/d| | | | |  sLr| j|d  }|fddt|D  |fddt|D  |fddt|D  |fddt|D  | fddt|D   nq|||||fS )	Nr   Tc                    ro   r   r   rB   rp   r   r   rF      rq   z-MockVectorEnv.vector_step.<locals>.<listcomp>c                    ro   r   r   rB   )rc   r   r   rF      rq   c                    ro   r   r   rB   )r   r   r   rF      rq   c                    ro   r   r   rB   )r    r   r   rF      rq   c                    ro   r   r   rB   )rd   r   r   rF      rq   )rm   rI   rA   rk   r!   rl   r[   extend)	r   r\   r]   r^   r_   r`   ra   r   	remainingr   )rd   rb   rc   r   r    r   re      s4   




zMockVectorEnv.vector_stepc                    s    fddt  jD S )Nc                    s   g | ]} j qS r   )rk   rB   r6   r   r   rF      s    z6MockVectorEnv.get_sub_environments.<locals>.<listcomp>)rI   rA   r6   r   r6   r   rf      s   z"MockVectorEnv.get_sub_environmentsrg   r   r   rK   r   ri      s    

!ri   )	gymnasiumr   numpyr2   typingr   ray.rllib.env.vector_envr   ray.rllib.utils.annotationsr   Envr   r(   r;   r?   ri   r   r   r   r   <module>   s    %3