
    h}                     
   S /r SSKrSSKJr  SSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr   SSKrSSKJrJrJrJrJrJr  \(       a  SSKrS	rS
rSrSrSrS\-  rSr/ SQr S\-  r!S\-  S\-  sr"r#Sr$Sr%S\-  r&Sr'\%\-  S-  r(Sr)Sr*Sr+\" \" \  V Vs/ s H  u  pU \-  U\-  4PM     snn S9SSSSS S!9r,\" \" \"S"-  \#S"-  4S#9S$S SSS%9r-\" \" S&\"-  S"-  \#S"-  4S#9S$S SSS%9r. " S' S(\5      r/ " S) S*\R`                  \5      r1 " S+ S,5      r2 " S- S.5      r3\4S/:X  Ga4  \1" S0S19r5\5Rm                  5         Sr7Sr8\Rr                  " / S2Q5      r:\3" 5       r; \5Ry                  \:5      u  r=r>r?r@rA\8\>-  r8\7S-  S:X  d  \?(       d  \@(       a  \B" S3\C" \: V s/ s H  o S4 PM     sn 5      -   5        \B" S5\7 S6\8S4 35        \B" S7\C" \=SS  V s/ s H  o S4 PM     sn 5      -   5        \B" S8\C" \=SS9  V s/ s H  o S4 PM     sn 5      -   5        \B" S:\C" \=S9S  V s/ s H  o S4 PM     sn 5      -   5        \7S-  r7\;R                  \=5      r:\?(       d  \@(       a  gM  g! \ a  r\" S5      \eSrCff = fs  snn f s  sn f s  sn f s  sn f s  sn f );u   Andrea PIERRÉ    N)TYPE_CHECKING)errorspaces)DependencyNotInstalled)EzPickle)circleShapecontactListener	edgeShape
fixtureDefpolygonShaperevoluteJointDefzqBox2D is not installed, you can install it by run `pip install swig` followed by `pip install "gymnasium[box2d]"`2   g      >@P               ))	   )r   r   )"      )r   )r   r   r      r   iX  i        
      g      @vertices      @皙?    r           )shapedensityfrictioncategoryBitsmaskBitsrestitution   )box      ?)r$   r%   r)   r'   r(   皙?c                   &    \ rS rSrS rS rS rSrg)ContactDetectorS   c                 <    [         R                  " U 5        Xl        g N)r	   __init__env)selfr4   s     ]/home/james-whalen/.local/lib/python3.13/site-packages/gymnasium/envs/box2d/bipedal_walker.pyr3   ContactDetector.__init__T   s      &    c                    U R                   R                  UR                  R                  :X  d.  U R                   R                  UR                  R                  :X  a  SU R                   l        U R                   R                  S   U R                   R                  S   4 H;  nX!R                  R                  UR                  R                  4;   d  M4  SUl        M=     g )NTr      )r4   hullfixtureAbodyfixtureB	game_overlegsground_contactr5   contactlegs      r6   BeginContactContactDetector.BeginContactX   s    HHMMW--222xx}} 0 0 5 55!%DHHHHMM!$dhhmmA&67C'',,g.>.>.C.CDD%)" 8r8   c                     U R                   R                  S   U R                   R                  S   4 H;  nX!R                  R                  UR                  R                  4;   d  M4  SUl        M=     g )Nr   r:   F)r4   r@   r<   r=   r>   rA   rB   s      r6   
EndContactContactDetector.EndContactb   sV    HHMM!$dhhmmA&67C'',,g.>.>.C.CDD%*" 8r8   )r4   N)__name__
__module____qualname____firstlineno__r3   rE   rH   __static_attributes__ r8   r6   r/   r/   S   s    *+r8   r/   c                      ^  \ rS rSrSrSS/\S.rSS\S-  S\4S	 jjr	S
 r
S rS rSSS.S\S-  S\S-  4U 4S jjjrS\R"                  4S jrS rS rSrU =r$ )BipedalWalkerh   a  
## Description
This is a simple 4-joint walker robot environment.
There are two versions:
- Normal, with slightly uneven terrain.
- Hardcore, with ladders, stumps, pitfalls.

To solve the normal version, you need to get 300 points in 1600 time steps.
To solve the hardcore version, you need 300 points in 2000 time steps.

A heuristic is provided for testing. It's also useful to get demonstrations
to learn from. To run the heuristic:
```
python gymnasium/envs/box2d/bipedal_walker.py
```

## Action Space
Actions are motor speed values in the [-1, 1] range for each of the
4 joints at both hips and knees.

## Observation Space
State consists of hull angle speed, angular velocity, horizontal speed,
vertical speed, position of joints and joints angular speed, legs contact
with ground, and 10 lidar rangefinder measurements. There are no coordinates
in the state vector.

## Rewards
Reward is given for moving forward, totaling 300+ points up to the far end.
If the robot falls, it gets -100. Applying motor torque costs a small
amount of points. A more optimal agent will get a better score.

## Starting State
The walker starts standing at the left end of the terrain with the hull
horizontal, and both legs in the same position with a slight knee angle.

## Episode Termination
The episode will terminate if the hull gets in contact with the ground or
if the walker exceeds the right end of the terrain length.

## Arguments

To use the _hardcore_ environment, you need to specify the `hardcore=True`:

```python
>>> import gymnasium as gym
>>> env = gym.make("BipedalWalker-v3", hardcore=True, render_mode="rgb_array")
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<BipedalWalker<BipedalWalker-v3>>>>>

```

## Version History
- v3: Returns the closest lidar trace instead of furthest;
    faster video recording
- v2: Count energy spent
- v1: Legs now report contact with ground; motors have higher torque and
    speed; ground has higher friction; lidar rendered less nervously.
- v0: Initial version


<!-- ## References -->

## Credits
Created by Oleg Klimov

human	rgb_array)render_modes
render_fpsNrender_modehardcorec                    [         R                  " XU5        SU l        [        R                  " 5       U l        / U l        S U l        S U l        X l	        [        [        / SQS9[        S9U l        [        [        SS/S9[        SS9U l        [         R"                  " [$        R&                  * S	S	S	[$        R&                  * S	[$        R&                  * S	S
[$        R&                  * S	[$        R&                  * S	S
/S/S-  -   5      R)                  [         R*                  5      n[         R"                  " [$        R&                  SSS[$        R&                  S[$        R&                  SS[$        R&                  S[$        R&                  SS/S/S-  -   5      R)                  [         R*                  5      n[,        R.                  " [         R"                  " / SQ5      R)                  [         R*                  5      [         R"                  " / SQ5      R)                  [         R*                  5      5      U l        [,        R.                  " X45      U l        Xl        S U l        S U l        g )NT)r   r   )r   r   )r   )r   r[   r   )r$   r&   rZ   )r   r   r   )r$   r&   r'   g      g             r   r    r,   )r[   r[   r[   r[   )r   r   r   r   )r   r3   isopenBox2Db2Worldworldterrainr;   prev_shapingrX   r   r   FRICTION
fd_polygonr
   fd_edgenparraymathpiastypefloat32r   Boxaction_spaceobservation_spacerW   screenclock)r5   rW   rX   lowhighs        r6   r3   BipedalWalker.__init__   s   $X6]]_
+-)-	  $(JK

 "ff%56
 hh  frk!
$ &
% 	& xx  ebj!
$ &
% 	& #JJHH%&--bjj9HH\"))"**5
 "(C!6, '-1
r8   c                    U R                   (       d  g S U R                  l        U R                    H  nU R                  R                  U5        M      / U l         U R                  R                  U R                  5        S U l        U R
                   H  nU R                  R                  U5        M      / U l        / U l        g r2   )ra   r`   r	   DestroyBodyr;   r@   joints)r5   trD   s      r6   _destroyBipedalWalker._destroy  s    ||%)

"AJJ""1% 

tyy)	99CJJ""3' 	r8   c           
         [        S5      u  p#pEnUnSn[        n	[        n
Sn/ U l        / U l        / U l        Su  pnSn[        [        5       GH  nU[        -  nU R                  R                  U5        Xr:X  ab  U(       d[  SU-  S[        R                  " [        U	-
  5      -  -   nU[        :  a%  XR                  R                  SS	5      [        -  -  nX-  n	GOXu:X  GaP  U(       GaH  U R                  R                  S
S5      n
UU	4U[        -   U	4U[        -   U	S[        -  -
  4UU	S[        -  -
  4/nUU R                  R                   l        U R$                  R'                  U R                  S9nSu  Ul        Ul        U R                  R                  U5        U Vs/ s H  nUS   [        U
-  -   US	   4PM     snU R                  R                   l        U R$                  R'                  U R                  S9nSu  Ul        Ul        U R                  R                  U5        U
S-  n
U	nGO}Xu:X  a  U(       d  Un	U
S	:  a  U	S[        -  -  n	GO[Xs:X  a  U(       a  U R                  R                  S	S
5      n
UU	4UU
[        -  -   U	4UU
[        -  -   X[        -  -   4UX[        -  -   4/nUU R                  R                   l        U R$                  R'                  U R                  S9nSu  Ul        Ul        U R                  R                  U5        GOXt:X  Gae  U(       Ga]  U R                  R-                  5       S:  a  S	OSnU R                  R                  SS5      nU R                  R                  S
S5      nU	n[        U5       H  nUUU-  [        -  -   U	UU-  [        -  -   4US	U-   U-  [        -  -   U	UU-  [        -  -   4US	U-   U-  [        -  -   U	SUU-  -   [        -  -   4UUU-  [        -  -   U	SUU-  -   [        -  -   4/nUU R                  R                   l        U R$                  R'                  U R                  S9nSu  Ul        Ul        U R                  R                  U5        M     X-  n
O*Xt:X  a%  U(       d  X-  U
-
  U-
  nUU-  nUUU-  [        -  -   n	SnU R
                  R                  U	5        U
S	-  n
U
S:X  d  GM  U R                  R                  [.        S-  [.        5      n
Xr:X  a(  U(       a!  U R                  R                  S	U5      nSnGM  UnSnGM     / U l        [        [        S	-
  5       H  nU R                  U   U R
                  U   4U R                  US	-      U R
                  US	-      4/nUU R2                  R                   l        U R$                  R'                  U R2                  S9nSUS-  S:X  a  SOSS4nUUl        UUl        U R                  R                  U5        SnUUS	   S   S4US   S   S4/-  nU R0                  R                  UU45        M     U R                  R5                  5         g s  snf )Nr   r#   Fr   r   r   r   r-   g{Gz?r[   r   r:   r   )fixtures)   r~   r~   )   r   r   r*         ?TL   r~      )f   r   r   )rangeTERRAIN_HEIGHTTERRAIN_STARTPADra   	terrain_x	terrain_yTERRAIN_LENGTHTERRAIN_STEPappendrf   sign	np_randomuniformSCALEintegersrd   r$   r   r`   CreateStaticBodycolor1color2randomTERRAIN_GRASSterrain_polyre   reverse)r5   rX   GRASSSTUMPSTAIRSPIT_STATES_statevelocityycounteroneshotstair_stepsstair_widthstair_height
original_yixpolyrw   psncolors                           r6   _generate_terrainBipedalWalker._generate_terrain  s-   .3Ah+f8"18.,
~&AL ANN!!!$~g>D277>A;M3N,NN'' 6 6r1 = EEH'..11!Q7F%q)%q1|+;';<A,,-	 26%%.JJ///I%E"!(##A& DH2CGaQqTL722AaD942%%. JJ///I%E"!(##A&1
gQ;\))AG..11!Q7F<//3<//|5K1KLl223	 26%%.JJ///I%E"!(##A&W%)^^%:%:%<s%Br"nn55a;"nn55a;
{+A [L @@\!1\ AA
 !a%;!6, FF\!1\ AA
 !a%;!6, FFa,&6!6, FF
 [L @@a,&6!6, FFD$ 6:DOO))2

33T__3MA)I&AHahLL''*- ,. &3-7,FO!l"2l!BBGNN!!!$qLG!|..11-!2C]S>h NN33Ax@E"G!E"G 'B ~)*A"DNN1$56A&q1u(=>D +/DLL'

++T\\+BAA
R8EAHAHLL""Ed1gaj!_tAwqz1o66D$$dE]3 + 	s2s   "Y!c                    / U l         [        [        S-  5       GH2  nU R                  R	                  S[        5      [
        -  n[        [        -  S-  S-  n[        S5       Vs/ s H  nUS[
        -  [        R                  " SU-  S-  5      -  -   U R                  R	                  SS[
        -  5      -   US[
        -  [        R                  " SU-  S-  5      -  -   U R                  R	                  SS[
        -  5      -   4PM     nn[        S U 5       5      n[        S	 U 5       5      nU R                   R                  XVU45        GM5     g s  snf )
Nr   r   r:   r   r      gQ@c              3   *   #    U  H	  oS    v   M     g7fr   NrO   .0r   s     r6   	<genexpr>1BipedalWalker._generate_clouds.<locals>.<genexpr>       (4aqT4   c              3   *   #    U  H	  oS    v   M     g7fr   rO   r   s     r6   r   r     r   r   )
cloud_polyr   r   r   r   r   
VIEWPORT_Hr   rh   sincosminmaxr   )r5   r   r   r   ar   x1x2s           r6   _generate_cloudsBipedalWalker._generate_clouds  sE   ~+,A&&q.9LHAU"Q&*A q
 "A <'$((8a<!3C*DDEnn,,QL0@AB ,&(Q,2B)CCDnn,,QL0@AB	 "  
 (4((B(4((BOO""Db>2! -
s   %B$E)seedoptionsr   r   c                  > [         TU ]  US9  U R                  5         [        U 5      U R                  l        U R                  R
                  U R                  l        SU l        S U l        SU l	        SU l
        U R                  U R                  5        U R                  5         [        [        -  S-  n[         S["        -  -   nU R                  R%                  X44[&        S9U l        SU R(                  l        SU R(                  l        U R(                  R/                  U R0                  R3                  [4        * [4        5      S4S	5        / U l        / U l        S
 GH  nU R                  R%                  X4["        S-  -
  [:        -
  4US-  [<        S9nSUS-  -
  SUS-  -
  SUS-  -
  4Ul        SUS-  -
  SUS-  -
  SUS-  -
  4Ul        [?        U R(                  US[:        4S["        S-  4S	S	[@        USSS9
nU R6                  RC                  U5        U R8                  RC                  U R                  RE                  U5      5        U R                  R%                  X4["        S-  S-  -
  [:        -
  4US-  [F        S9nSUS-  -
  SUS-  -
  SUS-  -
  4Ul        SUS-  -
  SUS-  -
  SUS-  -
  4Ul        [?        UUS["        * S-  4S["        S-  4S	S	[@        SSSS9
nSUl$        U R6                  RC                  U5        U R8                  RC                  U R                  RE                  U5      5        GM     U RJ                  U R6                  -   U R(                  /-   U l&         " S S[N        RP                  RR                  5      n	[U        S5       V
s/ s H	  o" 5       PM     sn
U l+        U RX                  S:X  a  U R[                  5         U R]                  [^        R`                  " / SQ5      5      S   0 4$ s  sn
f )N)r   Fr#   r   r*   )positionr|   )   3      )r   r   r   T)r[   r   g?)r   angler|   r      r   r   r   r   g皙?)
bodyAbodyBlocalAnchorAlocalAnchorBenableMotorenableLimitmaxMotorTorque
motorSpeed
lowerAngle
upperAngler:   r   ggc                       \ rS rSrS rSrg)*BipedalWalker.reset.<locals>.LidarCallbacki  c                 Z    UR                   R                  S-  S:X  a  gX l        X@l        U$ )Nr   r   r[   )
filterDatar'   p2fraction)r5   fixturepointnormalr   s        r6   ReportFixture8BipedalWalker.reset.<locals>.LidarCallback.ReportFixture   s-    &&33a7A= (r8   )r   r   N)rJ   rK   rL   rM   r   rN   rO   r8   r6   LidarCallbackr     s     r8   r   r   rS   )r   r   r   r   )1superresetrx   r/   r`   contactListener_bug_workaroundr	   r?   rb   scrolllidar_renderr   rX   r   r   r   r   LEG_HCreateDynamicBodyHULL_FDr;   r   r   ApplyForceToCenterr   r   INITIAL_RANDOMr@   rv   LEG_DOWNLEG_FDr   MOTORS_TORQUEr   CreateJointLOWER_FDrA   ra   drawlistr^   b2rayCastCallbackr   lidarrW   rendersteprf   rg   )r5   r   r   init_xinit_yr   rD   rjdlowerr   _	__class__s              r6   r   BipedalWalker.reset  s    	4 4CD4I

1%)ZZ%N%N

" t}}- 0014!e)+JJ00% 1 
	 *		(				$$^^##^O^DaH$	
 )+	35A**.. 519"4x"?@4x / C
 B,QVS1r6\BCJB,QVR!b&[ACJ"ii]^  ,C IIS!KKtzz55c:;JJ00 519q="88"CD4x! 1 E
  !b&L"q2v+sQV|DEL!b&L"q2v+rAF{CEL"%!_^  ,C $)E IIU#KKtzz55c:;Y \ tyy0DII;>	 EHH44 	  05Ry9y!moy9
w&KKMyy,/03R77 :s   O=actionc                     U R                   c   eSnU(       a  [        [        [        R                  " US   SS5      -  5      U R
                  S   l        [        [        [        R                  " US   SS5      -  5      U R
                  S   l        [        [        [        R                  " US   SS5      -  5      U R
                  S   l        [        [        [        R                  " US   SS5      -  5      U R
                  S   l        GO0[        [        [        R                  " US   5      -  5      U R
                  S   l        [        [        [        R                  " [        R                  " US   5      SS5      -  5      U R
                  S   l        [        [        [        R                  " US   5      -  5      U R
                  S   l        [        [        [        R                  " [        R                  " US   5      SS5      -  5      U R
                  S   l        [        [        [        R                  " US   5      -  5      U R
                  S   l        [        [        [        R                  " [        R                  " US   5      SS5      -  5      U R
                  S   l        [        [        [        R                  " US   5      -  5      U R
                  S   l        [        [        [        R                  " [        R                  " US   5      SS5      -  5      U R
                  S   l        U R                  R                  S[        -  SS	5        U R                   R                  nU R                   R                   n[#        S
5       H  nSU R$                  U   l        X0R$                  U   l        US   [*        R,                  " SU-  S-  5      [.        -  -   US   [*        R0                  " SU-  S-  5      [.        -  -
  4U R$                  U   l        U R                  R5                  U R$                  U   U R$                  U   R(                  U R$                  U   R2                  5        M     U R                   R6                  SU R                   R8                  -  [        -  SUR:                  -  [<        [>        -  -  [        -  SUR@                  -  [B        [>        -  -  [        -  U R
                  S   R6                  U R
                  S   RD                  [        -  U R
                  S   R6                  S-   U R
                  S   RD                  [        -  U RF                  S   RH                  (       a  SOSU R
                  S   R6                  U R
                  S   RD                  [        -  U R
                  S   R6                  S-   U R
                  S   RD                  [        -  U RF                  S   RH                  (       a  SOS/nX`R$                   Vs/ s H  owR&                  PM     sn-  n[K        U5      S:X  d   eUR:                  [<        [>        -  S-  -
  U l&        SUS   -  [>        -  nUS[        US   5      -  -  nSn	U RN                  b  XRN                  -
  n	Xl'        U H<  n
U	S[        -  [        R                  " [        R                  " U
5      SS5      -  -  n	M>     SnU RP                  (       d	  US   S:  a  Sn	SnUS   [R        [T        -
  [V        -  :  a  SnU RX                  S:X  a  U R[                  5         [        R\                  " U[        R^                  S9XS0 4$ s  snf )NFr   r[   r   r*   r:   r,      <   r         ?g      $@g       @g333333?r#      r      r    gǺ6?iTrS   )dtype)0r;   float	SPEED_HIPrf   cliprv   r   
SPEED_KNEEr   r   absr   r`   StepFPSr   linearVelocityr   r   r   p1rh   r   LIDAR_RANGEr   r   RayCastr   angularVelocityr   
VIEWPORT_Wr   r   r   speedr@   rA   lenr   rb   r?   r   r   r   rW   r   rg   rk   )r5   r  control_speedposvelr   r   lshapingrewardr   
terminateds               r6   r   BipedalWalker.step  s   yy$$$ (-i"''&)RQR:S.S(TDKKN%(-j2776!9bRS;T.T(UDKKN%(-i"''&)RQR:S.S(TDKKN%(-j2776!9bRS;T.T(UDKKN%(-i"''&):L.L(MDKKN%,1vay(91a @@-DKKN) ).j2776!9;M.M(NDKKN%,1vay(91a @@-DKKN) ).i"''&):L.L(MDKKN%,1vay(91a @@-DKKN) ).j2776!9;M.M(NDKKN%,1vay(91a @@-DKKN) 	

c	662ii  ii&&rA%(DJJqM""JJqMA#'D.1K??A#'D.1K?? DJJqM JJtzz!}djjm.>.>

1@P@PQ  IIOO$))+++c1#%%K:-.4#%%K:-.4KKN  KKN  9,KKN  3&KKN  :-99Q<..CCKKN  KKN  9,KKN  3&KKN  :-99Q<..CC
" 	jj1j**j115zReej50144 #a&L5  	 	3!H
 
 	
 (000F#Ag-q	1a0HHHF  
>>SVaZFJq6^m3|CCJw&KKMxxRZZ0&eROO? 2s   2^c                 
   U R                   cG  U R                  c   e[        R                  R	                  SU R                  R
                   S35        g  SS KnSSKJn  U R                  ce  U R                   S:X  aU  UR                  " 5         UR                  R                  5         UR                  R                  [        [        45      U l
        U R                   c  UR"                  R%                  5       U l        UR&                  " [        [)        SU R*                  5      [,        -  -   [        45      U l        UR0                  R3                  U R.                  [,        [,        45        UR4                  R7                  U R.                  SU R*                  [,        -  S4U R*                  [,        -  [        -   S4U R*                  [,        -  [        -   [        4U R*                  [,        -  [        4/S	9  U R8                   H  u  pEnX`R*                  S
-  :  a  M  XPR*                  S
-  [        [,        -  -   :  a  M<  UR4                  R7                  U R.                  SU Vs/ s H1  owS   [,        -  U R*                  [,        -  S
-  -   US   [,        -  4PM3     snS	9  UR;                  U R.                  U Vs/ s H1  owS   [,        -  U R*                  [,        -  S
-  -   US   [,        -  4PM3     snS5        M     U R<                   H  u  pHUS   S   U R*                  :  a  M  US   S   U R*                  [        [,        -  -   :  a  MC  / n	U H*  n
U	R?                  U
S   [,        -  U
S   [,        -  /5        M,     UR4                  R7                  U R.                  XS	9  UR;                  U R.                  X5        M     U R@                  S-   S-  U l         U R@                  nUS
[C        U RD                  5      -  :  a  U[C        U RD                  5      :  a  U RD                  U   O'U RD                  [C        U RD                  5      U-
  S-
     n[G        US5      (       a  [G        US5      (       a{  UR4                  RI                  U R.                  SURJ                  S   [,        -  URJ                  S   [,        -  4URL                  S   [,        -  URL                  S   [,        -  4SS9  U RN                   GHW  nURP                   GHB  nURR                  R0                  n[U        URV                  5      [X        L a  UR4                  R[                  U R.                  UR\                  XRV                  R^                  -  [,        -  URV                  R`                  [,        -  S9  UR4                  R[                  U R.                  URb                  XRV                  R^                  -  [,        -  URV                  R`                  [,        -  S9  GM	  URV                  Rd                   Vs/ s H  nUU-  [,        -  PM     nn[C        U5      S
:  a  UR4                  R7                  U R.                  UR\                  US	9  UR;                  U R.                  UUR\                  5        UR?                  US   5        UR4                  R7                  U R.                  URb                  USS9  UR;                  U R.                  UURb                  5        GM  UR4                  Rg                  U R.                  US   US   UR\                  S9  GME     GMZ     [h        [,        -  nUS-   n[j        S-  [,        -  nUR4                  Rg                  U R.                  SUU4UU4S9  UU4UUS-
  4US-   US-
  4/nUR4                  R7                  U R.                  SUS	9  UR4                  Rm                  U R.                  SXS   /-   SSS9  UR0                  Ro                  U R.                  SS5      U l        U R                   S:X  a  U R                  c   eU R                  Rq                  U R.                  U R*                  * [,        -  S45        URr                  Ru                  5         U R                   Rw                  U Rx                  S    5        UR                  Ro                  5         g U R                   S!:X  aZ  [z        R|                  " [z        R~                  " UR                  R                  U R.                  5      5      S"S#9S S 2[        * S 24   $ g ! [         a  n[        S5      UeS nAff = fs  snf s  snf s  snf )$NzYou are calling render method without specifying any render mode. You can specify the render_mode at initialization, e.g. gym.make("z", render_mode="rgb_array")r   )gfxdrawz=pygame is not installed, run `pip install "gymnasium[box2d]"`rS   r#   )   r"  r~   )r   pointsr*   r}   r   d   r  r   )r~   r   r   )r   	start_posend_poswidth)r   centerradius)r   r#  r'  )r%  r&  r   r   r:   r{   )r   r%  r&  r   r   r   )   r   r   F)r   r#  r'  closedTrV   rT   )r   r   r*   )axes)BrW   specgymloggerwarnidpygamer!  ImportErrorr   ro   initdisplayset_moder  r   rp   timeClockSurfacer   r   r   surf	transformscaledrawpolygonr   	aapolygonr   r   r   r  r   hasattrliner  r   r   r|   r=   typer$   r   circler   r  r)  r   r   aaliner   r   linesflipbliteventpumptickmetadatarf   	transposerg   	surfarraypixels3d)r5   r2  r!  er   r   r   r   r   scaled_polycoordr   single_lidarobjftransvpathflagy1flagy2r   s                        r6   r   BipedalWalker.renderh  s   #99(((JJOO""&)),,/JL
 	& ;;4#3#3w#>KKMNN! ..11:z2JKDK::**,DJNN#c4;;/%77D
	 	tyy5%.9II!u$a(u$z115u$z1:>u$j1	 	 		
 !OOLDbKK!O#KK!Oj5&888KK		%TXTXqqTE\DKK%$7!$;;QqTE\JTX    		QUVQUAA$,u!4q!88!A$,GQUV ,"  ,,KDAwqzDKK'AwqzDKK*u*<<<K""E!Hu$4eAh6F#GH KK		Kdii< - "..2c9q3tzz?"" s4::& 

1ZZDJJ! 3a 78 
 |T**w|T/J/J  II%+q1E9<??1;MPU;UV)__Q/%79Ke9ST !  ==C\\((=K/KK&&		!jj$ww{{2U: ww~~5	 '  KK&&		!jj$ww{{2U: ww~~5	 '  89ww7G7GH7G!EAI-7GDH4y1}++DIISZZPT+U))$))T3::FDG,++ IISZZA ,   ))$))T3::F** II&*1g$(G"%**	 + 5 " !D  %'"1u$IIY1f+6{ 	 	
 KVVaZ 

 	DII\!DIIYqaD6z5 	 	
 $$))$))UDA	w&;;***KKTYY$++)=q(ABLLJJOODMM,78NN!,<<))22499=>Y*o  -I  	(O	J W` Is*   
e %8e6<8e;.f 
e3"e..e3c                     U R                   b7  SS KnUR                  R                  5         UR                  " 5         SU l        g g )Nr   F)ro   r2  r5  quitr]   )r5   r2  s     r6   closeBipedalWalker.close  s4    ;;"NN!KKMDK #r8   )rm   rp   r   r   re   rd   r?   rX   r;   r]   rv   r@   r   r   rn   rb   rW   ro   r   r:  ra   r   r   r   r`   )NF)rJ   rK   rL   rM   __doc__r  rK  strboolr3   rx   r   r   intdictr   rf   ndarrayr   r   r]  rN   __classcell__)r   s   @r6   rQ   rQ   h   s    AH !+.H
[C$J [ [z}~30  #	Z8 DjZ8 	Z8 Z8xZP2:: ZPxTl   r8   rQ   c                       \ rS rSrS rSrg)BipedalWalkerHardcorei  c                 .    [         R                  " S5      e)Na#  Error initializing BipedalWalkerHardcore Environment.
Currently, we do not support initializing this mode of environment by calling the class directly.
To use this environment, instead create it by specifying the hardcore keyword in gym.make, i.e.
gym.make("BipedalWalker-v3", hardcore=True))r   Error)r5   s    r6   r3   BipedalWalkerHardcore.__init__  s    kk:
 	
r8   rO   N)rJ   rK   rL   rM   r3   rN   rO   r8   r6   rg  rg    s    
r8   rg  c                   l    \ rS rSrSu  rrrSr\rSr	S\	-
  r
Sr\r\R                  " / SQ5      rS rS	rg
)BipedalWalkerHeuristicsi  )r   r*   r:   g(\?r   r   r!   r#   r#   r#   r#   c                 D   SSU R                   -  -   nSSU R                  -  -   nS S /nS S /nSS/nSS/nU R                  U R                  :X  a  SX@R                   '   SXPR                   '   U =R                  S-  sl        US   U R
                  :  a  U =R                  S-  sl        [        U R                  U R                  5      U l        U R                  XPR                  '   XS-      S	:  a  U R                  U l        U R                  U R                  :X  a{  S	X@R                   '   U R                  XPR                   '   U R                  XPR                  '   XS-      (       a1  U R                  U l        [        XS-      U R                  5      U l        U R                  U R                  :X  a  U R                  XPR                   '   S
XPR                  '   XS-      S:  d  US   SU R
                  -  :  a9  U R                  U l        SU R                   -
  U l         SU R                   -
  U l        US   (       a  SUS   US   -
  -  SUS   -  -
  US'   US   (       a  SUS   US   -
  -  SUS   -  -
  US'   US   (       a  SUS   US   -
  -  SUS   -  -
  US'   US   (       a  SUS   US   -
  -  SUS   -  -
  US'   US==   SSUS   -
  -  SUS   -  -
  -  ss'   US==   SSUS   -
  -  SUS   -  -
  -  ss'   US==   SUS   -  -  ss'   US==   SUS   -  -  ss'   US   U R                  S'   US   U R                  S'   US   U R                  S'   US   U R                  S'   [        R                  " SU R                  -  SS
5      U l
        U R                  $ )Nr   r   r#   r   g333333gQ?r*   r   r!   r,   g)\(?g333333?r   g?g      ?r   r   g      @r            r  g      .@r:   r   r\   )
moving_legsupporting_legr   STAY_ON_ONE_LEGsupporting_knee_angleSPEEDr   SUPPORT_KNEE_ANGLEPUT_OTHER_DOWNPUSH_OFFr   rf   r  )r5   r   moving_s_basesupporting_s_basehip_targ	knee_targhip_todo	knee_todos           r6   step_heuristic&BipedalWalkerHeuristics.step_heuristic  s   A//D$7$7 77$<4L	:#J	::---(+H__%)-Ioo&&&$.&tdjj **d2*),**D,C,C*D& .2-G-GI))*Q&'$.!00
::,,,(,H__%)-)@)@Ioo&-1-G-GI))*"#!]]
-0a'($*A*A.* ::&)-)C)CIoo&-1I))*Q&'$.!A$tzz9I2I!11
"#doo"5&'$//&9#A;!qt!34tad{BHQKA;!qt!34tae|CHQKQ<)A,1"56!DIaLQ<)A,2"67$2,FIaLsa!A$h'#!*44sa!A$h'#!*44!qt#!qt#QKq	aLq	QKq	aLq	tvvtS1vvr8   )r   rr  r   ru  rs  N)rJ   rK   rL   rM   rt  rx  ry  rv  r   rr  rs  rw  ru  rf   rg   r   r  rN   rO   r8   r6   rl  rl    sF    07-O^XEEJ^N.
%&A:r8   rl  __main__rS   )rW   rm  z
action z+0.2fzstep z total_reward zhull zleg0 r   zleg1 )E__credits__rh   typingr   numpyrf   	gymnasiumr.  r   r   gymnasium.errorr   gymnasium.utilsr   r^   Box2D.b2r   r	   r
   r   r   r   r3  rO  r2  r  r   r   r
  r  r  r   	HULL_POLYr   LEG_Wr   r  r   r   r   r   r   r   rc   r   r   r   r/   EnvrQ   rg  rl  rJ   r4   r   stepstotal_rewardrg   r   
heuristicsr   r   rr  	truncatedinfoprintr`  r  )r   r   s   00r6   <module>r     s&         # 2 $  	
EkB	:5y"u*u

Eze#a' 

I NIDA!e)QY!7I N
O 

EAIuqy1
2
 
C%K!OUQY7
8+o +*\
 CGGX \
 ~
 
D DN z
G
,CIIKEL
%&A(*J
,/HHQK)1j)T2:?jI+1$=1a%y\1$= >>?E%|E.BCD'Cq1v >v!e9v >??@'Cq1v >v!e9v >??@'Cq2w ?w!e9w ?@@A
%%a(  A  
 {D !OT %> > > ?s5   I I+I1I6,I;J I(	I##I(