
    h                         S SK rS SKJr  S SKJr  S SKJr  SS\R                  " S5      SS	.r	 " S
 S\\R                  5      rg)    N)utils)	MujocoEnv)Box   g      @)        r   gffffff?g      4)trackbodyiddistancelookat	elevationc                       \ rS rSr/ SQSS.r        SS jr\S 5       rS r\S 5       r	\S	 5       r
S
 rS rS rSrg)Walker2dEnv   )human	rgb_arraydepth_array
rgbd_tuple}   )render_modes
render_fpsc	                    [         R                  R                  " U UUUUUUUU4	0 U	D6  Xl        X l        X0l        X@l        XPl        X`l        Xpl	        UU l
        U(       a8  [        [        R                  * [        R                  S[        R                  S9n
O7[        [        R                  * [        R                  S[        R                  S9n
[        R                  " U SS4U
[         S.U	D6  g )N)   )lowhighshapedtype)   zwalker2d.xml   )observation_spacedefault_camera_config)r   EzPickle__init___forward_reward_weight_ctrl_cost_weight_healthy_reward_terminate_when_unhealthy_healthy_z_range_healthy_angle_range_reset_noise_scale+_exclude_current_positions_from_observationr   npinffloat64r   DEFAULT_CAMERA_CONFIG)selfforward_reward_weightctrl_cost_weighthealthy_rewardterminate_when_unhealthyhealthy_z_rangehealthy_angle_rangereset_noise_scale*exclude_current_positions_from_observationkwargsr   s              [/home/james-whalen/.local/lib/python3.13/site-packages/gymnasium/envs/mujoco/walker2d_v4.pyr!   Walker2dEnv.__init__   s     	!$6	
 	
 '<#!1-)A& /$7!"3 7 	8 6 #VVG"&&RZZ! !$VVG"&&RZZ! 		
 0"7	
 	
    c                 l    [        U R                  =(       d    U R                  5      U R                  -  $ N)float
is_healthyr%   r$   )r.   s    r8   r1   Walker2dEnv.healthy_rewardU   s.     $//CT%C%CD""#	
r:   c                 t    U R                   [        R                  " [        R                  " U5      5      -  nU$ r<   )r#   r*   sumsquare)r.   actioncontrol_costs      r8   rD   Walker2dEnv.control_cost\   s*    --ryy7H0IIr:   c                     U R                   R                  SS u  pU R                  u  p4U R                  u  pVX1s=:  =(       a    U:  Os  nXRs=:  =(       a    U:  Os  nU=(       a    Un	U	$ )N      )dataqposr&   r'   )
r.   zanglemin_zmax_z	min_angle	max_angle	healthy_zhealthy_angler>   s
             r8   r>   Walker2dEnv.is_healthy`   sc    99>>!A&,,#88	%%%	!55I50=
r:   c                 R    U R                   (       a  U R                  (       + nU$ SnU$ )NF)r%   r>   )r.   
terminateds     r8   rU   Walker2dEnv.terminatedm   s+    ,0,J,J(
 QV
r:   c                 `   U R                   R                  R                  R                  5       n[        R
                  " U R                   R                  R                  R                  5       SS5      nU R                  (       a  USS  n[        R                  " X45      R                  5       nU$ )Ni
   rG   )
rI   rJ   flatcopyr*   clipqvelr)   concatenateravel)r.   positionvelocityobservations       r8   _get_obsWalker2dEnv._get_obsr   s{    99>>&&++-77499>>..335sB?;;|Hnnh%9:@@Br:   c                    U R                   R                  S   nU R                  XR                  5        U R                   R                  S   nX2-
  U R                  -  nU R                  U5      nU R                  U-  nU R                  nXg-   nUn	U R                  5       n
X-
  nU R                  nUUS.nU R                  S:X  a  U R                  5         XUSU4$ )Nr   )
x_position
x_velocityr   F)rI   rJ   do_simulation
frame_skipdtrD   r"   r1   rb   rU   render_moderender)r.   rC   x_position_beforex_position_afterrf   	ctrl_costforward_rewardr1   rewardscostsra   rewardrU   infos                 r8   stepWalker2dEnv.step|   s     IINN1-6??399>>!,&:dggE
%%f-	44zA,, 1mmo__
*$

 w&KKMJt;;r:   c                 f   U R                   * nU R                   nU R                  U R                  R                  XU R                  R
                  S9-   nU R                  U R                  R                  XU R                  R                  S9-   nU R                  X45        U R                  5       nU$ )N)r   r   size)
r(   	init_qpos	np_randomuniformmodelnq	init_qvelnv	set_staterb   )r.   	noise_low
noise_highrJ   r\   ra   s         r8   reset_modelWalker2dEnv.reset_model   s    ,,,	,,
~~ 6 6 !7 !
 
 ~~ 6 6 !7 !
 
 	t"mmor:   )r#   r)   r"   r'   r$   r&   r(   r%   N)      ?gMbP?r   T)g?g       @)g      r   g{Gzt?T)__name__
__module____qualname____firstlineno__metadatar!   propertyr1   rD   r>   rU   rb   rt   r   __static_attributes__ r:   r8   r   r      s    
 H "!%"'378
t 
 
 
 
  <6r:   r   )numpyr*   	gymnasiumr   gymnasium.envs.mujocor   gymnasium.spacesr   arrayr-   r    r   r   r:   r8   <module>r      sE      +   hh'(	 U)U^^ Ur:   