
    h              	      F   % S r SSKJr  SSKJrJrJr  SSKrSSKJ	r
  SSKJr  SSKrSSKJr  SSKJrJrJrJr  SSKJr  SSKJr  SS	KJr  \R:                  rS
\S'    " S S\R@                  \\   5      r! " S S\RD                  RF                  \\\4   \\\\4   5      r$g)z(Functional to Environment compatibility.    )annotations)AnyGeneric	TypeAliasN)EnvSpec)ActTypeFuncEnvObsType	StateType)seeding)AutoresetMode)batch_spacer   PRNGKeyTypec                     ^  \ rS rSr% SrS\S'   S\S'      S       SS jjrSSS	.SU 4S
 jjjrSS jrS r	S r
SrU =r$ )FunctionalJaxEnv   z.A conversion layer for jax-based environments.r   stater   rngNc                |   Uc  / SS.nXl         UR                  U l        UR                  U l        X l        X0l        X@l        U R                  S:X  a   U R                   R                  5       U l        OSU l        [        R                  " 5       u  pVUR                  SSSS9n[        R                  " U5      U l        g)	*Initialize the environment from a FuncEnv.NT)render_modejax	rgb_arrayr       uint32dtype)func_envobservation_spaceaction_spacemetadatar   specrender_initrender_stater   	np_randomintegersjrngPRNGKeyr   )selfr   r!   r   r"   r%   _seeds           [/home/james-whalen/.local/lib/python3.13/site-packages/gymnasium/envs/functional_jax_env.py__init__FunctionalJaxEnv.__init__   s     ')$7H !)!;!;$11 &	{* $ 9 9 ;D $D((*	!!!Yh!?<<%    r+   optionsc                 > [         TU ]  US9  Ub  [        R                  " U5      U l        [        R
                  " U R                  5      u  o0l        U R                  R                  US9U l        U R                  R                  U R                  U5      nU R                  R                  U R                  5      nXE4$ )z&Resets the environment using the seed.r+   r   )superresetr'   r(   r   splitr   initialr   observation
state_infor)   r+   r1   r   obsinfo	__class__s         r,   r6   FunctionalJaxEnv.reset<   s    4 ||D)DH

488,X]]**s*3
mm''

C8}}''

3yr/   c                   [         R                  " U R                  5      u  o l        U R                  R	                  U R
                  X5      nU R                  R                  X25      nU R                  R                  U R
                  XU5      nU R                  R                  X25      nU R                  R                  U R
                  X5      nX0l        U[        U5      [        U5      SU4$ )/Steps through the environment using the action.F)r'   r7   r   r   
transitionr   r9   rewardterminaltransition_infofloatbool)r)   actionr   
next_stater9   rC   
terminatedr=   s           r,   stepFunctionalJaxEnv.stepJ   s    

488,X]]--djj&F
mm//
@%%djj&cJ]]++J<
}},,TZZL
E&M4
+;UDHHr/   c                    U R                   S:X  a:  U R                  R                  U R                  U R                  5      u  U l        nU$ [
        ez9Returns the render state if `render_mode` is "rgb_array".r   r   r   render_imager   r$   NotImplementedErrorr)   images     r,   renderFunctionalJaxEnv.renderW   H    {*'+}}'A'A

D--($Du L%%r/   c                x    U R                   b-  U R                  R                  U R                   5        SU l         ggz0Closes the environments and render state if set.Nr$   r   render_closer)   s    r,   closeFunctionalJaxEnv.closea   3    (MM&&t'8'89 $D )r/   )	r    r   r!   r   r   r$   r   r"   r   )NNN)r   r	   r!   dict[str, Any] | Noner   
str | Noner"   EnvSpec | Noner+   z
int | Noner1   zdict | NonerH   r   __name__
__module____qualname____firstlineno____doc____annotations__r-   r6   rK   rT   r\   __static_attributes____classcell__r>   s   @r,   r   r      so    8	
 +/"&#&& (&  	&
 &@ +/t  I&% %r/   r   c                     ^  \ rS rSr% SrS\S'   S\S'       S           SU 4S jjjrSSS	.SU 4S
 jjjrSS jrS r	S r
SrU =r$ )FunctionalJaxVectorEnvh   z4A vector env implementation for functional Jax envs.r   r   r   r   Nc                z  > [         T
U ]  5         Uc  S[        R                  0nXl        X l        UR                  U l        UR                  U l	        [        U R                  U R
                  5      U l        [        U R                  U R
                  5      U l        X@l        XPl        X`l        X0l        [        R                   " U R
                  [        R"                  S9U l        [        R                   " U R
                  [        R&                  S9U l        U R                  S:X  a   U R                  R+                  5       U l        OSU l        [.        R0                  " 5       u  pxUR3                  SSSS9n	[4        R6                  " U	5      U l        U R                  R;                  [<        R>                  5        g)r   Nautoreset_moder   r   r   r   r   ) r5   r-   r   	NEXT_STEPr   num_envsr   single_observation_spacer    single_action_spacer   r!   r   r"   
time_limitjnpzerosint32stepsbool_	prev_doner#   r$   r   r%   r&   r'   r(   r   	transformr   vmap)r)   r   rt   max_episode_stepsr!   r   r"   r%   r*   r+   r>   s             r,   r-   FunctionalJaxVectorEnv.__init__p   sD    	(-*A*ABH  (0(B(B%#+#8#8 !,))4=="
 ((@(@$--P &	+YYt}}CII>
4==		B{* $ 9 9 ;D $D((*	!!!Yh!?<<%)r/   r0   c               $  > [         TU ]  US9  Ub  [        R                  " U5      U l        [        R
                  " U R                  5      u  o0l        [        R
                  " X0R                  5      nU R                  R                  US9U l	        U R                  R                  U R                  U5      nU R                  R                  U R                  5      n[        R                  " U R                  [        R                  S9U l        XE4$ )zResets the environment.r3   r4   r   )r5   r6   r'   r(   r   r7   rt   r   r8   r   r9   r:   rx   ry   rz   r{   r;   s         r,   r6   FunctionalJaxVectorEnv.reset   s    4 ||D)DH

488,Xjjmm,]]**s*3
mm''

C8}}''

3YYt}}CII>
yr/   c                   U =R                   S-  sl         [        R                  " U R                  5      u  o l        [        R                  " X R                  5      nU R
                  R                  U R                  X5      nU R
                  R                  U R                  XU5      nU R
                  R                  X25      nU R                  S:  a  U R                   U R                  :  O[        R                  " U5      nU R
                  R                  U R                  X5      n[        R                  " U R                  5      (       Ga  [        R                   " U R                  5      S   nUR"                  S   n	[        R                  " U R                  5      u  o l        [        R                  " X)5      nU R
                  R%                  U5      n
U R                  R&                  U   R)                  U
5      nU R                   R&                  U   R)                  S5      U l         UR&                  U   R)                  S5      nUR&                  U   R)                  S5      n[        R*                  " XV5      U l        [        R                  " U R                  U R                  5      nU R
                  R-                  X25      nX0l        XXVU4$ )rA      r   F)r{   r'   r7   r   rt   r   rB   r   rC   rD   rw   rx   
zeros_likerE   anyr}   whereshaper8   atset
logical_orr9   )r)   rH   r   rI   rC   rJ   	truncatedr=   to_resetreset_countnew_initialsr9   s               r,   rK   FunctionalJaxVectorEnv.step   s   

a


488,Xjjmm,]]--djj&F
%%djj&cJ]]++J<
 " JJ$//)
+ 	 }},,TZZL774>>""yy03H"..+K JJtxx0MC**S.C==005Lx044\BJx044Q7DJ#x044U;J!X.2259I
>jj4==1mm//
@
J4??r/   c                    U R                   S:X  a:  U R                  R                  U R                  U R                  5      u  U l        nU$ [
        erN   rO   rR   s     r,   rT   FunctionalJaxVectorEnv.render   rV   r/   c                x    U R                   b-  U R                  R                  U R                   5        SU l         ggrX   rY   r[   s    r,   r\   FunctionalJaxVectorEnv.close   r^   r/   )r    r   r!   rt   r   r}   r   r$   r   rv   ru   r"   r   r{   rw   )r   NNN)r   z8FuncEnv[StateType, ObsType, ActType, Any, Any, Any, Any]rt   intr   r   r!   r_   r   r`   r"   ra   rb   rc   rd   rm   s   @r,   ro   ro   h   s     ?	 "#*."&#**J** ** 	**
 (**  ** ** **X +/t  $*@X&% %r/   ro   )%ri   
__future__r   typingr   r   r   r   	jax.numpynumpyrx   
jax.randomrandomr'   	gymnasiumgymgymnasium.envs.registrationr   !gymnasium.experimental.functionalr   r	   r
   r   gymnasium.utilsr   gymnasium.vectorr   gymnasium.vector.utilsr   Arrayr   rj   Envr   vector	VectorEnvro    r/   r,   <module>r      s    . " * * 
    / R R # * . Y "O%sww	 2 O%d@%JJ'3./'99T1U@%r/   