Buckets:
| import{s as Gt,n as Nt,o as Qt}from"../chunks/scheduler.2b22cead.js";import{S as Vt,i as Ft,e as w,s as a,c as M,h as Wt,a as j,d as t,b as n,f as Rt,g as i,j as r,k as Et,l as vt,m as e,n as T,t as J,o as p,p as U}from"../chunks/index.1a0e8013.js";import{C as Yt,H as y,E as Zt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.f6f2e20a.js";import{C as m}from"../chunks/CodeBlock.6eebe645.js";function Xt(it){let c,vl,Fl,Yl,I,Zl,A,Xl,o,Tt="Integration of Atari 2600 games with the OpenEnv framework via the Arcade Learning Environment (ALE). ALE provides access to 100+ classic Atari games for RL research.",Sl,C,_l,d,Jt="ALE supports 100+ Atari 2600 games including:",Ol,h,zl,u,pt="<li><strong>Pong</strong> - Classic two-player tennis</li> <li><strong>Breakout</strong> - Break bricks with a ball</li> <li><strong>Space Invaders</strong> - Shoot descending aliens</li> <li><strong>Pac-Man / Ms. Pac-Man</strong> - Navigate mazes and eat pellets</li> <li><strong>Asteroids</strong> - Destroy asteroids in space</li> <li><strong>Defender</strong> - Side-scrolling space shooter</li> <li><strong>Centipede</strong> - Shoot segmented centipede</li> <li><strong>Donkey Kong</strong> - Jump over barrels to save princess</li> <li><strong>Frogger</strong> - Cross road and river safely</li> <li><strong>Q*bert</strong> - Jump on pyramid cubes</li>",Ll,g,Ut='And many more! For a complete list, see <a href="https://ale.farama.org/environments/complete_list/" rel="nofollow">ALE documentation</a>.',Dl,b,Hl,f,xl,B,Pl,$,ql,k,yt="<strong>Requirements:</strong>",Kl,R,wt="<li>Python 3.11+</li> <li>ale-py installed: <code>pip install ale-py</code></li>",ls,E,jt="The client is <strong>async by default</strong>:",ss,G,ts,N,rt="For <strong>synchronous usage</strong>, use the <code>.sync()</code> wrapper:",es,Q,as,V,ns,F,mt="<strong>Build Atari image:</strong>",Ms,W,is,v,ct="<strong>Run specific games:</strong>",Ts,Y,Js,Z,It="<strong>Use with from_docker_image():</strong>",ps,X,Us,S,ys,_,ws,O,At="<li><strong>Shape</strong>: [210, 160, 3]</li> <li><strong>Description</strong>: Full-color screen observation</li> <li><strong>Usage</strong>: Most realistic, good for vision-based learning</li>",js,z,rs,L,ms,D,ot="<li><strong>Shape</strong>: [210, 160]</li> <li><strong>Description</strong>: Grayscale screen observation</li> <li><strong>Usage</strong>: Reduced dimensionality, faster processing</li>",cs,H,Is,x,As,P,Ct="<li><strong>Shape</strong>: [128]</li> <li><strong>Description</strong>: Raw 128-byte Atari 2600 RAM contents</li> <li><strong>Usage</strong>: Compact representation, useful for specific research</li>",os,q,Cs,K,ds,ll,hs,sl,dt="Game-specific minimal actions (typically 4-9 actions).",us,tl,ht="<li>Pong: 6 actions (NOOP, FIRE, UP, DOWN, etc.)</li> <li>Breakout: 4 actions (NOOP, FIRE, LEFT, RIGHT)</li>",gs,el,bs,al,fs,nl,ut=`All 18 possible Atari 2600 actions: | |
| 0. NOOP`,Bs,Ml,gt="<li>FIRE</li> <li>UP</li> <li>RIGHT</li> <li>LEFT</li> <li>DOWN</li> <li>UPRIGHT</li> <li>UPLEFT</li> <li>DOWNRIGHT</li> <li>DOWNLEFT</li> <li>UPFIRE</li> <li>RIGHTFIRE</li> <li>LEFTFIRE</li> <li>DOWNFIRE</li> <li>UPRIGHTFIRE</li> <li>UPLEFTFIRE</li> <li>DOWNRIGHTFIRE</li> <li>DOWNLEFTFIRE</li>",$s,il,ks,Tl,Rs,Jl,Es,pl,bt="<li><code>ATARI_GAME</code>: Game name (default: “pong”)</li> <li><code>ATARI_OBS_TYPE</code>: Observation type - “rgb”, “grayscale”, “ram” (default: “rgb”)</li> <li><code>ATARI_FULL_ACTION_SPACE</code>: Use full action space - “true”/“false” (default: “false”)</li> <li><code>ATARI_MODE</code>: Game mode (optional, game-specific)</li> <li><code>ATARI_DIFFICULTY</code>: Game difficulty (optional, game-specific)</li> <li><code>ATARI_REPEAT_ACTION_PROB</code>: Sticky action probability 0.0-1.0 (default: “0.0”)</li> <li><code>ATARI_FRAMESKIP</code>: Frames to skip per action (default: “4”)</li>",Gs,Ul,Ns,yl,Qs,wl,Vs,jl,Fs,rl,Ws,ml,vs,cl,Ys,Il,Zs,Al,Xs,ol,Ss,Cl,_s,dl,Os,hl,zs,ul,Ls,gl,Ds,bl,Hs,fl,xs,Bl,ft="<thead><tr><th>Game</th> <th>Minimal Actions</th> <th>Lives</th> <th>Difficulty</th> <th>Notes</th></tr></thead> <tbody><tr><td>Pong</td> <td>6</td> <td>1</td> <td>Low</td> <td>Good for learning basics</td></tr> <tr><td>Breakout</td> <td>4</td> <td>5</td> <td>Medium</td> <td>Classic RL benchmark</td></tr> <tr><td>Space Invaders</td> <td>6</td> <td>3</td> <td>Medium</td> <td>Shooting game</td></tr> <tr><td>Ms. Pac-Man</td> <td>9</td> <td>3</td> <td>High</td> <td>Complex navigation</td></tr> <tr><td>Asteroids</td> <td>14</td> <td>3</td> <td>Medium</td> <td>Continuous shooting</td></tr> <tr><td>Montezuma’s Revenge</td> <td>18</td> <td>5</td> <td>Very High</td> <td>Exploration challenge</td></tr> <tr><td>Pitfall</td> <td>18</td> <td>1</td> <td>High</td> <td>Platformer</td></tr> <tr><td>Seaquest</td> <td>18</td> <td>3</td> <td>High</td> <td>Submarine rescue</td></tr></tbody>",Ps,$l,qs,kl,Bt="<li><strong>Frame perfect timing</strong>: Some games require precise timing</li> <li><strong>Exploration</strong>: Games like Montezuma’s Revenge are notoriously difficult</li> <li><strong>Observation delay</strong>: HTTP adds minimal latency vs local gym</li> <li><strong>Determinism</strong>: Set <code>ATARI_REPEAT_ACTION_PROB=0.0</code> for deterministic behavior</li> <li><strong>ROMs</strong>: All ROMs are bundled with ale-py package</li>",Ks,Rl,lt,El,$t='<li><a href="https://jair.org/index.php/jair/article/view/10819" rel="nofollow">Arcade Learning Environment Paper (2013)</a></li> <li><a href="https://github.com/Farama-Foundation/Arcade-Learning-Environment" rel="nofollow">ALE GitHub</a></li> <li><a href="https://ale.farama.org/" rel="nofollow">ALE Documentation</a></li> <li><a href="https://gymnasium.farama.org/environments/atari/" rel="nofollow">Gymnasium Atari Environments</a></li>',st,Gl,tt,Nl,kt="If you use ALE in your research, please cite:",et,Ql,at,Vl,nt,Wl,Mt;return I=new Yt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),A=new y({props:{title:"Atari Environment",local:"atari-environment",headingTag:"h1"}}),C=new y({props:{title:"Supported Games",local:"supported-games",headingTag:"h2"}}),h=new y({props:{title:"Popular Games",local:"popular-games",headingTag:"h3"}}),b=new y({props:{title:"Architecture",local:"architecture",headingTag:"h2"}}),f=new m({props:{code:"JUUyJTk0JThDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTkwJTBBJUUyJTk0JTgyJTIwUkwlMjBUcmFpbmluZyUyMENvZGUlMjAoQ2xpZW50KSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU4MiUyMCUyMCUyMEF0YXJpRW52LnN0ZXAoYWN0aW9uKSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCVBQyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5OCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMEhUVFAlMEElRTIlOTQlOEMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTYlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTAlMEElRTIlOTQlODIlMjBGYXN0QVBJJTIwU2VydmVyJTIwKERvY2tlciklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMEElRTIlOTQlODIlMjAlMjAlMjBBdGFyaUVudmlyb25tZW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJTIwV3JhcHMlMjBBTEVJbnRlcmZhY2UlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMEElRTIlOTQlODIlMjAlMjAlMjAlMjAlMjAlRTIlOTQlOUMlRTIlOTQlODAlMjBIYW5kbGVzJTIwb2JzZXJ2YXRpb25zJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJTIwQWN0aW9uJTIwZXhlY3V0aW9uJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4",highlighted:`┌────────────────────────────────────┐ | |
| │ RL Training <span class="hljs-selector-tag">Code</span> (Client) │ | |
| │ AtariEnv<span class="hljs-selector-class">.step</span>(action) │ | |
| └──────────────┬─────────────────────┘ | |
| │ HTTP | |
| ┌──────────────▼─────────────────────┐ | |
| │ FastAPI Server (Docker) │ | |
| │ AtariEnvironment │ | |
| │ ├─ Wraps ALEInterface │ | |
| │ ├─ Handles observations │ | |
| │ └─ Action execution │ | |
| └────────────────────────────────────┘`,lang:"",wrap:!1}}),B=new y({props:{title:"Installation & Usage",local:"installation--usage",headingTag:"h2"}}),$=new y({props:{title:"Option 1: Local Development (without Docker)",local:"option-1-local-development-without-docker",headingTag:"h3"}}),G=new m({props:{code:"aW1wb3J0JTIwYXN5bmNpbyUwQWZyb20lMjBhdGFyaV9lbnYlMjBpbXBvcnQlMjBBdGFyaUVudiUyQyUyMEF0YXJpQWN0aW9uJTBBJTBBYXN5bmMlMjBkZWYlMjBtYWluKCklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBTdGFydCUyMGxvY2FsJTIwc2VydmVyJTIwbWFudWFsbHklM0ElMjBweXRob24lMjAtbSUyMGF0YXJpX2Vudi5zZXJ2ZXIuYXBwJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjB3aXRoJTIwQXRhcmlFbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMiklMjBhcyUyMGVudiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFJlc2V0JTIwZW52aXJvbm1lbnQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBhd2FpdCUyMGVudi5yZXNldCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlNjcmVlbiUyMHNoYXBlJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLnNjcmVlbl9zaGFwZSU3RCUyMiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyTGVnYWwlMjBhY3Rpb25zJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLmxlZ2FsX2FjdGlvbnMlN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVGFrZSUyMGFjdGlvbnMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBfJTIwaW4lMjByYW5nZSgxMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBhd2FpdCUyMGVudi5zdGVwKEF0YXJpQWN0aW9uKGFjdGlvbl9pZCUzRDIlMkMlMjBnYW1lX25hbWUlM0QlMjJwb25nJTIyKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyUmV3YXJkJTNBJTIwJTdCcmVzdWx0LnJld2FyZCU3RCUyQyUyMERvbmUlM0ElMjAlN0JyZXN1bHQuZG9uZSU3RCUyMiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHJlc3VsdC5kb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMEElMEFhc3luY2lvLnJ1bihtYWluKCkp",highlighted:`<span class="hljs-keyword">import</span> asyncio | |
| <span class="hljs-keyword">from</span> atari_env <span class="hljs-keyword">import</span> AtariEnv, AtariAction | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>(): | |
| <span class="hljs-comment"># Start local server manually: python -m atari_env.server.app</span> | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> AtariEnv(base_url=<span class="hljs-string">"http://localhost:8000"</span>) <span class="hljs-keyword">as</span> env: | |
| <span class="hljs-comment"># Reset environment</span> | |
| result = <span class="hljs-keyword">await</span> env.reset() | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Screen shape: <span class="hljs-subst">{result.observation.screen_shape}</span>"</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Legal actions: <span class="hljs-subst">{result.observation.legal_actions}</span>"</span>) | |
| <span class="hljs-comment"># Take actions</span> | |
| <span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">10</span>): | |
| result = <span class="hljs-keyword">await</span> env.step(AtariAction(action_id=<span class="hljs-number">2</span>, game_name=<span class="hljs-string">"pong"</span>)) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Reward: <span class="hljs-subst">{result.reward}</span>, Done: <span class="hljs-subst">{result.done}</span>"</span>) | |
| <span class="hljs-keyword">if</span> result.done: | |
| <span class="hljs-keyword">break</span> | |
| asyncio.run(main())`,lang:"python",wrap:!1}}),Q=new m({props:{code:"ZnJvbSUyMGF0YXJpX2VudiUyMGltcG9ydCUyMEF0YXJpRW52JTJDJTIwQXRhcmlBY3Rpb24lMEElMEF3aXRoJTIwQXRhcmlFbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMikuc3luYygpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoKSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5zdGVwKEF0YXJpQWN0aW9uKGFjdGlvbl9pZCUzRDIlMkMlMjBnYW1lX25hbWUlM0QlMjJwb25nJTIyKSklMEElMjAlMjAlMjAlMjBwcmludChmJTIyUmV3YXJkJTNBJTIwJTdCcmVzdWx0LnJld2FyZCU3RCUyMik=",highlighted:`<span class="hljs-keyword">from</span> atari_env <span class="hljs-keyword">import</span> AtariEnv, AtariAction | |
| <span class="hljs-keyword">with</span> AtariEnv(base_url=<span class="hljs-string">"http://localhost:8000"</span>).sync() <span class="hljs-keyword">as</span> env: | |
| result = env.reset() | |
| result = env.step(AtariAction(action_id=<span class="hljs-number">2</span>, game_name=<span class="hljs-string">"pong"</span>)) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Reward: <span class="hljs-subst">{result.reward}</span>"</span>)`,lang:"python",wrap:!1}}),V=new y({props:{title:"Option 2: Docker (Recommended)",local:"option-2-docker-recommended",headingTag:"h3"}}),W=new m({props:{code:"Y2QlMjBPcGVuRW52JTBBJTBBJTIzJTIwQnVpbGQlMjB0aGUlMjBpbWFnZSUwQWRvY2tlciUyMGJ1aWxkJTIwJTVDJTBBJTIwJTIwLWYlMjBlbnZzJTJGYXRhcmlfZW52JTJGc2VydmVyJTJGRG9ja2VyZmlsZSUyMCU1QyUwQSUyMCUyMC10JTIwYXRhcmktZW52JTNBbGF0ZXN0JTIwJTVDJTBBJTIwJTIwLg==",highlighted:`<span class="hljs-built_in">cd</span> OpenEnv | |
| <span class="hljs-comment"># Build the image</span> | |
| docker build \\ | |
| -f envs/atari_env/server/Dockerfile \\ | |
| -t atari-env:latest \\ | |
| .`,lang:"bash",wrap:!1}}),Y=new m({props:{code:"JTIzJTIwUG9uZyUyMChkZWZhdWx0KSUwQWRvY2tlciUyMHJ1biUyMC1wJTIwODAwMCUzQTgwMDAlMjBhdGFyaS1lbnYlM0FsYXRlc3QlMEElMEElMjMlMjBCcmVha291dCUwQWRvY2tlciUyMHJ1biUyMC1wJTIwODAwMCUzQTgwMDAlMjAtZSUyMEFUQVJJX0dBTUUlM0RicmVha291dCUyMGF0YXJpLWVudiUzQWxhdGVzdCUwQSUwQSUyMyUyMFNwYWNlJTIwSW52YWRlcnMlMjB3aXRoJTIwZ3JheXNjYWxlJTIwb2JzZXJ2YXRpb24lMEFkb2NrZXIlMjBydW4lMjAtcCUyMDgwMDAlM0E4MDAwJTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9HQU1FJTNEc3BhY2VfaW52YWRlcnMlMjAlNUMlMEElMjAlMjAtZSUyMEFUQVJJX09CU19UWVBFJTNEZ3JheXNjYWxlJTIwJTVDJTBBJTIwJTIwYXRhcmktZW52JTNBbGF0ZXN0JTBBJTBBJTIzJTIwTXMuJTIwUGFjLU1hbiUyMHdpdGglMjBmdWxsJTIwYWN0aW9uJTIwc3BhY2UlMEFkb2NrZXIlMjBydW4lMjAtcCUyMDgwMDAlM0E4MDAwJTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9HQU1FJTNEbXNfcGFjbWFuJTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9GVUxMX0FDVElPTl9TUEFDRSUzRHRydWUlMjAlNUMlMEElMjAlMjBhdGFyaS1lbnYlM0FsYXRlc3Q=",highlighted:`<span class="hljs-comment"># Pong (default)</span> | |
| docker run -p 8000:8000 atari-env:latest | |
| <span class="hljs-comment"># Breakout</span> | |
| docker run -p 8000:8000 -e ATARI_GAME=breakout atari-env:latest | |
| <span class="hljs-comment"># Space Invaders with grayscale observation</span> | |
| docker run -p 8000:8000 \\ | |
| -e ATARI_GAME=space_invaders \\ | |
| -e ATARI_OBS_TYPE=grayscale \\ | |
| atari-env:latest | |
| <span class="hljs-comment"># Ms. Pac-Man with full action space</span> | |
| docker run -p 8000:8000 \\ | |
| -e ATARI_GAME=ms_pacman \\ | |
| -e ATARI_FULL_ACTION_SPACE=<span class="hljs-literal">true</span> \\ | |
| atari-env:latest`,lang:"bash",wrap:!1}}),X=new m({props:{code:"aW1wb3J0JTIwYXN5bmNpbyUwQWltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUwQWZyb20lMjBhdGFyaV9lbnYlMjBpbXBvcnQlMjBBdGFyaUVudiUyQyUyMEF0YXJpQWN0aW9uJTBBJTBBYXN5bmMlMjBkZWYlMjBtYWluKCklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBBdXRvbWF0aWNhbGx5JTIwc3RhcnRzJTIwY29udGFpbmVyJTBBJTIwJTIwJTIwJTIwY2xpZW50JTIwJTNEJTIwYXdhaXQlMjBBdGFyaUVudi5mcm9tX2RvY2tlcl9pbWFnZSglMjJhdGFyaS1lbnYlM0FsYXRlc3QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjB3aXRoJTIwY2xpZW50JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwYXdhaXQlMjBjbGllbnQucmVzZXQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGF3YWl0JTIwY2xpZW50LnN0ZXAoQXRhcmlBY3Rpb24oYWN0aW9uX2lkJTNEMikpJTIwJTIwJTIzJTIwVVAlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBSZXNoYXBlJTIwc2NyZWVuJTIwZm9yJTIwdmlzdWFsaXphdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNjcmVlbiUyMCUzRCUyMG5wLmFycmF5KHJlc3VsdC5vYnNlcnZhdGlvbi5zY3JlZW4pLnJlc2hhcGUocmVzdWx0Lm9ic2VydmF0aW9uLnNjcmVlbl9zaGFwZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyU2NyZWVuJTIwc2hhcGUlM0ElMjAlN0JzY3JlZW4uc2hhcGUlN0QlMjIpJTIwJTIwJTIzJTIwKDIxMCUyQyUyMDE2MCUyQyUyMDMpJTIwZm9yJTIwUkdCJTBBJTBBYXN5bmNpby5ydW4obWFpbigpKQ==",highlighted:`<span class="hljs-keyword">import</span> asyncio | |
| <span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| <span class="hljs-keyword">from</span> atari_env <span class="hljs-keyword">import</span> AtariEnv, AtariAction | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>(): | |
| <span class="hljs-comment"># Automatically starts container</span> | |
| client = <span class="hljs-keyword">await</span> AtariEnv.from_docker_image(<span class="hljs-string">"atari-env:latest"</span>) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> client: | |
| result = <span class="hljs-keyword">await</span> client.reset() | |
| result = <span class="hljs-keyword">await</span> client.step(AtariAction(action_id=<span class="hljs-number">2</span>)) <span class="hljs-comment"># UP</span> | |
| <span class="hljs-comment"># Reshape screen for visualization</span> | |
| screen = np.array(result.observation.screen).reshape(result.observation.screen_shape) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Screen shape: <span class="hljs-subst">{screen.shape}</span>"</span>) <span class="hljs-comment"># (210, 160, 3) for RGB</span> | |
| asyncio.run(main())`,lang:"python",wrap:!1}}),S=new y({props:{title:"Observation Types",local:"observation-types",headingTag:"h2"}}),_=new y({props:{title:"1. RGB (Default)",local:"1-rgb-default",headingTag:"h3"}}),z=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMC1lJTIwQVRBUklfT0JTX1RZUEUlM0RyZ2IlMjBhdGFyaS1lbnYlM0FsYXRlc3Q=",highlighted:'docker run -p <span class="hljs-number">8000</span>:<span class="hljs-number">8000</span> -e ATARI_OBS_TYPE=rgb atari-env:latest',lang:"python",wrap:!1}}),L=new y({props:{title:"2. Grayscale",local:"2-grayscale",headingTag:"h3"}}),H=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMC1lJTIwQVRBUklfT0JTX1RZUEUlM0RncmF5c2NhbGUlMjBhdGFyaS1lbnYlM0FsYXRlc3Q=",highlighted:'docker run -p <span class="hljs-number">8000</span>:<span class="hljs-number">8000</span> -e ATARI_OBS_TYPE=grayscale atari-env:latest',lang:"python",wrap:!1}}),x=new y({props:{title:"3. RAM",local:"3-ram",headingTag:"h3"}}),q=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMC1lJTIwQVRBUklfT0JTX1RZUEUlM0RyYW0lMjBhdGFyaS1lbnYlM0FsYXRlc3Q=",highlighted:'docker run -p <span class="hljs-number">8000</span>:<span class="hljs-number">8000</span> -e ATARI_OBS_TYPE=ram atari-env:latest',lang:"python",wrap:!1}}),K=new y({props:{title:"Action Spaces",local:"action-spaces",headingTag:"h2"}}),ll=new y({props:{title:"Minimal Action Set (Default)",local:"minimal-action-set-default",headingTag:"h3"}}),el=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMC1lJTIwQVRBUklfRlVMTF9BQ1RJT05fU1BBQ0UlM0RmYWxzZSUyMGF0YXJpLWVudiUzQWxhdGVzdA==",highlighted:'docker run -p <span class="hljs-number">8000</span>:<span class="hljs-number">8000</span> -e ATARI_FULL_ACTION_SPACE=false atari-env:latest',lang:"python",wrap:!1}}),al=new y({props:{title:"Full Action Set",local:"full-action-set",headingTag:"h3"}}),il=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMC1lJTIwQVRBUklfRlVMTF9BQ1RJT05fU1BBQ0UlM0R0cnVlJTIwYXRhcmktZW52JTNBbGF0ZXN0",highlighted:'docker run -p <span class="hljs-number">8000</span>:<span class="hljs-number">8000</span> -e ATARI_FULL_ACTION_SPACE=true atari-env:latest',lang:"python",wrap:!1}}),Tl=new y({props:{title:"Configuration",local:"configuration",headingTag:"h2"}}),Jl=new y({props:{title:"Environment Variables",local:"environment-variables",headingTag:"h3"}}),Ul=new y({props:{title:"Example: Breakout with Custom Settings",local:"example-breakout-with-custom-settings",headingTag:"h3"}}),yl=new m({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMCU1QyUwQSUyMCUyMC1lJTIwQVRBUklfR0FNRSUzRGJyZWFrb3V0JTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9PQlNfVFlQRSUzRGdyYXlzY2FsZSUyMCU1QyUwQSUyMCUyMC1lJTIwQVRBUklfRlVMTF9BQ1RJT05fU1BBQ0UlM0R0cnVlJTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9SRVBFQVRfQUNUSU9OX1BST0IlM0QwLjI1JTIwJTVDJTBBJTIwJTIwLWUlMjBBVEFSSV9GUkFNRVNLSVAlM0Q0JTIwJTVDJTBBJTIwJTIwYXRhcmktZW52JTNBbGF0ZXN0",highlighted:`docker run -p 8000:8000 \\ | |
| -e ATARI_GAME=breakout \\ | |
| -e ATARI_OBS_TYPE=grayscale \\ | |
| -e ATARI_FULL_ACTION_SPACE=<span class="hljs-literal">true</span> \\ | |
| -e ATARI_REPEAT_ACTION_PROB=0.25 \\ | |
| -e ATARI_FRAMESKIP=4 \\ | |
| atari-env:latest`,lang:"bash",wrap:!1}}),wl=new y({props:{title:"API Reference",local:"api-reference",headingTag:"h2"}}),jl=new y({props:{title:"AtariAction",local:"atariaction",headingTag:"h3"}}),rl=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBBdGFyaUFjdGlvbihBY3Rpb24pJTNBJTBBJTIwJTIwJTIwJTIwYWN0aW9uX2lkJTNBJTIwaW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQWN0aW9uJTIwaW5kZXglMjB0byUyMGV4ZWN1dGUlMEElMjAlMjAlMjAlMjBnYW1lX25hbWUlM0ElMjBzdHIlMjAlM0QlMjAlMjJwb25nJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwR2FtZSUyMG5hbWUlMEElMjAlMjAlMjAlMjBvYnNfdHlwZSUzQSUyMHN0ciUyMCUzRCUyMCUyMnJnYiUyMiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME9ic2VydmF0aW9uJTIwdHlwZSUwQSUyMCUyMCUyMCUyMGZ1bGxfYWN0aW9uX3NwYWNlJTNBJTIwYm9vbCUyMCUzRCUyMEZhbHNlJTIwJTIzJTIwRnVsbCUyMG9yJTIwbWluaW1hbCUyMGFjdGlvbiUyMHNwYWNl",highlighted:`<span class="hljs-meta">@dataclass</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AtariAction</span>(<span class="hljs-title class_ inherited__">Action</span>): | |
| action_id: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Action index to execute</span> | |
| game_name: <span class="hljs-built_in">str</span> = <span class="hljs-string">"pong"</span> <span class="hljs-comment"># Game name</span> | |
| obs_type: <span class="hljs-built_in">str</span> = <span class="hljs-string">"rgb"</span> <span class="hljs-comment"># Observation type</span> | |
| full_action_space: <span class="hljs-built_in">bool</span> = <span class="hljs-literal">False</span> <span class="hljs-comment"># Full or minimal action space</span>`,lang:"python",wrap:!1}}),ml=new y({props:{title:"AtariObservation",local:"atariobservation",headingTag:"h3"}}),cl=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBBdGFyaU9ic2VydmF0aW9uKE9ic2VydmF0aW9uKSUzQSUwQSUyMCUyMCUyMCUyMHNjcmVlbiUzQSUyMExpc3QlNUJpbnQlNUQlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBGbGF0dGVuZWQlMjBzY3JlZW4lMjBwaXhlbHMlMEElMjAlMjAlMjAlMjBzY3JlZW5fc2hhcGUlM0ElMjBMaXN0JTVCaW50JTVEJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwT3JpZ2luYWwlMjBzY3JlZW4lMjBzaGFwZSUwQSUyMCUyMCUyMCUyMGxlZ2FsX2FjdGlvbnMlM0ElMjBMaXN0JTVCaW50JTVEJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTGVnYWwlMjBhY3Rpb24lMjBpbmRpY2VzJTBBJTIwJTIwJTIwJTIwbGl2ZXMlM0ElMjBpbnQlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBMaXZlcyUyMHJlbWFpbmluZyUwQSUyMCUyMCUyMCUyMGVwaXNvZGVfZnJhbWVfbnVtYmVyJTNBJTIwaW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRnJhbWUlMjAlMjMlMjBpbiUyMGVwaXNvZGUlMEElMjAlMjAlMjAlMjBmcmFtZV9udW1iZXIlM0ElMjBpbnQlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBUb3RhbCUyMGZyYW1lJTIwJTIzJTBBJTIwJTIwJTIwJTIwZG9uZSUzQSUyMGJvb2wlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBFcGlzb2RlJTIwZmluaXNoZWQlMEElMjAlMjAlMjAlMjByZXdhcmQlM0ElMjBPcHRpb25hbCU1QmZsb2F0JTVEJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUmV3YXJkJTIwZnJvbSUyMGxhc3QlMjBhY3Rpb24=",highlighted:`<span class="hljs-meta">@dataclass</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AtariObservation</span>(<span class="hljs-title class_ inherited__">Observation</span>): | |
| screen: <span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>] <span class="hljs-comment"># Flattened screen pixels</span> | |
| screen_shape: <span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>] <span class="hljs-comment"># Original screen shape</span> | |
| legal_actions: <span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>] <span class="hljs-comment"># Legal action indices</span> | |
| lives: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Lives remaining</span> | |
| episode_frame_number: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Frame # in episode</span> | |
| frame_number: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Total frame #</span> | |
| done: <span class="hljs-built_in">bool</span> <span class="hljs-comment"># Episode finished</span> | |
| reward: <span class="hljs-type">Optional</span>[<span class="hljs-built_in">float</span>] <span class="hljs-comment"># Reward from last action</span>`,lang:"python",wrap:!1}}),Il=new y({props:{title:"AtariState",local:"ataristate",headingTag:"h3"}}),Al=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBBdGFyaVN0YXRlKFN0YXRlKSUzQSUwQSUyMCUyMCUyMCUyMGVwaXNvZGVfaWQlM0ElMjBzdHIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBVbmlxdWUlMjBlcGlzb2RlJTIwSUQlMEElMjAlMjAlMjAlMjBzdGVwX2NvdW50JTNBJTIwaW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTnVtYmVyJTIwb2YlMjBzdGVwcyUwQSUyMCUyMCUyMCUyMGdhbWVfbmFtZSUzQSUyMHN0ciUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEdhbWUlMjBuYW1lJTBBJTIwJTIwJTIwJTIwb2JzX3R5cGUlM0ElMjBzdHIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBPYnNlcnZhdGlvbiUyMHR5cGUlMEElMjAlMjAlMjAlMjBmdWxsX2FjdGlvbl9zcGFjZSUzQSUyMGJvb2wlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBBY3Rpb24lMjBzcGFjZSUyMHR5cGUlMEElMjAlMjAlMjAlMjBtb2RlJTNBJTIwT3B0aW9uYWwlNUJpbnQlNUQlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBHYW1lJTIwbW9kZSUwQSUyMCUyMCUyMCUyMGRpZmZpY3VsdHklM0ElMjBPcHRpb25hbCU1QmludCU1RCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEdhbWUlMjBkaWZmaWN1bHR5JTBBJTIwJTIwJTIwJTIwcmVwZWF0X2FjdGlvbl9wcm9iYWJpbGl0eSUzQSUyMGZsb2F0JTIwJTIwJTIwJTIwJTIwJTIzJTIwU3RpY2t5JTIwYWN0aW9uJTIwcHJvYiUwQSUyMCUyMCUyMCUyMGZyYW1lc2tpcCUzQSUyMGludCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEZyYW1lc2tpcCUyMHNldHRpbmc=",highlighted:`<span class="hljs-meta">@dataclass</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AtariState</span>(<span class="hljs-title class_ inherited__">State</span>): | |
| episode_id: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Unique episode ID</span> | |
| step_count: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Number of steps</span> | |
| game_name: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Game name</span> | |
| obs_type: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Observation type</span> | |
| full_action_space: <span class="hljs-built_in">bool</span> <span class="hljs-comment"># Action space type</span> | |
| mode: <span class="hljs-type">Optional</span>[<span class="hljs-built_in">int</span>] <span class="hljs-comment"># Game mode</span> | |
| difficulty: <span class="hljs-type">Optional</span>[<span class="hljs-built_in">int</span>] <span class="hljs-comment"># Game difficulty</span> | |
| repeat_action_probability: <span class="hljs-built_in">float</span> <span class="hljs-comment"># Sticky action prob</span> | |
| frameskip: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Frameskip setting</span>`,lang:"python",wrap:!1}}),ol=new y({props:{title:"Example Script",local:"example-script",headingTag:"h2"}}),Cl=new m({props:{code:"JTIzISUyRnVzciUyRmJpbiUyRmVudiUyMHB5dGhvbjMlMEElMjIlMjIlMjJFeGFtcGxlJTIwdHJhaW5pbmclMjBsb29wJTIwd2l0aCUyMEF0YXJpJTIwZW52aXJvbm1lbnQuJTIyJTIyJTIyJTBBJTBBaW1wb3J0JTIwYXN5bmNpbyUwQWltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUwQWZyb20lMjBhdGFyaV9lbnYlMjBpbXBvcnQlMjBBdGFyaUVudiUyQyUyMEF0YXJpQWN0aW9uJTBBJTBBYXN5bmMlMjBkZWYlMjB0cmFpbigpJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU3RhcnQlMjBlbnZpcm9ubWVudCUwQSUyMCUyMCUyMCUyMGNsaWVudCUyMCUzRCUyMGF3YWl0JTIwQXRhcmlFbnYuZnJvbV9kb2NrZXJfaW1hZ2UoJTIyYXRhcmktZW52JTNBbGF0ZXN0JTIyKSUwQSUwQSUyMCUyMCUyMCUyMGFzeW5jJTIwd2l0aCUyMGNsaWVudCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFRyYWluaW5nJTIwbG9vcCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGVwaXNvZGUlMjBpbiUyMHJhbmdlKDEwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGF3YWl0JTIwY2xpZW50LnJlc2V0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlcGlzb2RlX3Jld2FyZCUyMCUzRCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGVwcyUyMCUzRCUyMDAlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMG5vdCUyMHJlc3VsdC5kb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUmFuZG9tJTIwcG9saWN5JTIwKHJlcGxhY2UlMjB3aXRoJTIweW91ciUyMFJMJTIwYWdlbnQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWN0aW9uX2lkJTIwJTNEJTIwbnAucmFuZG9tLmNob2ljZShyZXN1bHQub2JzZXJ2YXRpb24ubGVnYWxfYWN0aW9ucyklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBUYWtlJTIwYWN0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwYXdhaXQlMjBjbGllbnQuc3RlcChBdGFyaUFjdGlvbihhY3Rpb25faWQlM0RhY3Rpb25faWQpKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVwaXNvZGVfcmV3YXJkJTIwJTJCJTNEJTIwcmVzdWx0LnJld2FyZCUyMG9yJTIwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0ZXBzJTIwJTJCJTNEJTIwMSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFJlc2hhcGUlMjBzY3JlZW4lMjBmb3IlMjBwcm9jZXNzaW5nJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2NyZWVuJTIwJTNEJTIwbnAuYXJyYXkocmVzdWx0Lm9ic2VydmF0aW9uLnNjcmVlbikucmVzaGFwZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQub2JzZXJ2YXRpb24uc2NyZWVuX3NoYXBlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFlvdXIlMjBSTCUyMHRyYWluaW5nJTIwY29kZSUyMGhlcmUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjAuLi4lMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyRXBpc29kZSUyMCU3QmVwaXNvZGUlN0QlM0ElMjByZXdhcmQlM0QlN0JlcGlzb2RlX3Jld2FyZCUzQS4yZiU3RCUyQyUyMHN0ZXBzJTNEJTdCc3RlcHMlN0QlMjIpJTBBJTBBYXN5bmNpby5ydW4odHJhaW4oKSk=",highlighted:`<span class="hljs-comment">#!/usr/bin/env python3</span> | |
| <span class="hljs-string">"""Example training loop with Atari environment."""</span> | |
| <span class="hljs-keyword">import</span> asyncio | |
| <span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| <span class="hljs-keyword">from</span> atari_env <span class="hljs-keyword">import</span> AtariEnv, AtariAction | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">train</span>(): | |
| <span class="hljs-comment"># Start environment</span> | |
| client = <span class="hljs-keyword">await</span> AtariEnv.from_docker_image(<span class="hljs-string">"atari-env:latest"</span>) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> client: | |
| <span class="hljs-comment"># Training loop</span> | |
| <span class="hljs-keyword">for</span> episode <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">10</span>): | |
| result = <span class="hljs-keyword">await</span> client.reset() | |
| episode_reward = <span class="hljs-number">0</span> | |
| steps = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> <span class="hljs-keyword">not</span> result.done: | |
| <span class="hljs-comment"># Random policy (replace with your RL agent)</span> | |
| action_id = np.random.choice(result.observation.legal_actions) | |
| <span class="hljs-comment"># Take action</span> | |
| result = <span class="hljs-keyword">await</span> client.step(AtariAction(action_id=action_id)) | |
| episode_reward += result.reward <span class="hljs-keyword">or</span> <span class="hljs-number">0</span> | |
| steps += <span class="hljs-number">1</span> | |
| <span class="hljs-comment"># Reshape screen for processing</span> | |
| screen = np.array(result.observation.screen).reshape( | |
| result.observation.screen_shape | |
| ) | |
| <span class="hljs-comment"># Your RL training code here</span> | |
| <span class="hljs-comment"># ...</span> | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Episode <span class="hljs-subst">{episode}</span>: reward=<span class="hljs-subst">{episode_reward:<span class="hljs-number">.2</span>f}</span>, steps=<span class="hljs-subst">{steps}</span>"</span>) | |
| asyncio.run(train())`,lang:"python",wrap:!1}}),dl=new y({props:{title:"Testing",local:"testing",headingTag:"h2"}}),hl=new y({props:{title:"Local Testing",local:"local-testing",headingTag:"h3"}}),ul=new m({props:{code:"JTIzJTIwSW5zdGFsbCUyMGRlcGVuZGVuY2llcyUwQXBpcCUyMGluc3RhbGwlMjBhbGUtcHklMjBmYXN0YXBpJTIwdXZpY29ybiUyMHJlcXVlc3RzJTBBJTBBJTIzJTIwU3RhcnQlMjBzZXJ2ZXIlMEFleHBvcnQlMjBQWVRIT05QQVRIJTNEc3JjJTNBZW52cyUwQXB5dGhvbiUyMC1tJTIwYXRhcmlfZW52LnNlcnZlci5hcHAlMEElMEElMjMlMjBUZXN0JTIwZnJvbSUyMGFub3RoZXIlMjB0ZXJtaW5hbCUyMCh1c2luZyUyMHN5bmMlMjB3cmFwcGVyJTIwZm9yJTIwc2ltcGxpY2l0eSklMEFweXRob24lMjAtYyUyMCUyMiUwQWZyb20lMjBhdGFyaV9lbnYlMjBpbXBvcnQlMjBBdGFyaUVudiUyQyUyMEF0YXJpQWN0aW9uJTBBd2l0aCUyMEF0YXJpRW52KGJhc2VfdXJsJTNEJ2h0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJykuc3luYygpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoKSUwQSUyMCUyMCUyMCUyMHByaW50KGYnSW5pdGlhbCUyMG9icyUzQSUyMCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5zY3JlZW5fc2hhcGUlN0QnKSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5zdGVwKEF0YXJpQWN0aW9uKGFjdGlvbl9pZCUzRDIpKSUwQSUyMCUyMCUyMCUyMHByaW50KGYnQWZ0ZXIlMjBzdGVwJTNBJTIwcmV3YXJkJTNEJTdCcmVzdWx0LnJld2FyZCU3RCUyQyUyMGRvbmUlM0QlN0JyZXN1bHQuZG9uZSU3RCcpJTBBJTIy",highlighted:`<span class="hljs-comment"># Install dependencies</span> | |
| pip install ale-py fastapi uvicorn requests | |
| <span class="hljs-comment"># Start server</span> | |
| <span class="hljs-built_in">export</span> PYTHONPATH=src:envs | |
| python -m atari_env.server.app | |
| <span class="hljs-comment"># Test from another terminal (using sync wrapper for simplicity)</span> | |
| python -c <span class="hljs-string">" | |
| from atari_env import AtariEnv, AtariAction | |
| with AtariEnv(base_url='http://localhost:8000').sync() as env: | |
| result = env.reset() | |
| print(f'Initial obs: {result.observation.screen_shape}') | |
| result = env.step(AtariAction(action_id=2)) | |
| print(f'After step: reward={result.reward}, done={result.done}') | |
| "</span>`,lang:"bash",wrap:!1}}),gl=new y({props:{title:"Docker Testing",local:"docker-testing",headingTag:"h3"}}),bl=new m({props:{code:"JTIzJTIwQnVpbGQlMjBhbmQlMjBydW4lMEFkb2NrZXIlMjBidWlsZCUyMC1mJTIwZW52cyUyRmF0YXJpX2VudiUyRnNlcnZlciUyRkRvY2tlcmZpbGUlMjAtdCUyMGF0YXJpLWVudiUzQWxhdGVzdCUyMC4lMEFkb2NrZXIlMjBydW4lMjAtcCUyMDgwMDAlM0E4MDAwJTIwYXRhcmktZW52JTNBbGF0ZXN0JTBBJTBBJTIzJTIwVGVzdCUyMGluJTIwYW5vdGhlciUyMHRlcm1pbmFsJTBBY3VybCUyMGh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTJGaGVhbHRoJTBBY3VybCUyMC1YJTIwUE9TVCUyMGh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTJGcmVzZXQ=",highlighted:`<span class="hljs-comment"># Build and run</span> | |
| docker build -f envs/atari_env/server/Dockerfile -t atari-env:latest . | |
| docker run -p 8000:8000 atari-env:latest | |
| <span class="hljs-comment"># Test in another terminal</span> | |
| curl http://localhost:8000/health | |
| curl -X POST http://localhost:8000/reset`,lang:"bash",wrap:!1}}),fl=new y({props:{title:"Popular Games and Their Characteristics",local:"popular-games-and-their-characteristics",headingTag:"h2"}}),$l=new y({props:{title:"Limitations & Notes",local:"limitations--notes",headingTag:"h2"}}),Rl=new y({props:{title:"References",local:"references",headingTag:"h2"}}),Gl=new y({props:{title:"Citation",local:"citation",headingTag:"h2"}}),Ql=new m({props:{code:"JTQwQXJ0aWNsZSU3QmJlbGxlbWFyZTEzYXJjYWRlJTJDJTBBJTIwJTIwJTIwJTIwYXV0aG9yJTIwJTNEJTIwJTdCJTdCQmVsbGVtYXJlJTdEJTJDJTIwTS5+Ry4lMjBhbmQlMjAlN0JOYWRkYWYlN0QlMkMlMjBZLiUyMGFuZCUyMCU3QlZlbmVzcyU3RCUyQyUyMEouJTIwYW5kJTIwJTdCQm93bGluZyU3RCUyQyUyME0uJTdEJTJDJTBBJTIwJTIwJTIwJTIwdGl0bGUlMjAlM0QlMjAlN0JUaGUlMjBBcmNhZGUlMjBMZWFybmluZyUyMEVudmlyb25tZW50JTNBJTIwQW4lMjBFdmFsdWF0aW9uJTIwUGxhdGZvcm0lMjBmb3IlMjBHZW5lcmFsJTIwQWdlbnRzJTdEJTJDJTBBJTIwJTIwJTIwJTIwam91cm5hbCUyMCUzRCUyMCU3QkpvdXJuYWwlMjBvZiUyMEFydGlmaWNpYWwlMjBJbnRlbGxpZ2VuY2UlMjBSZXNlYXJjaCU3RCUyQyUwQSUyMCUyMCUyMCUyMHllYXIlMjAlM0QlMjAlMjIyMDEzJTIyJTJDJTBBJTIwJTIwJTIwJTIwbW9udGglMjAlM0QlMjAlMjJqdW4lMjIlMkMlMEElMjAlMjAlMjAlMjB2b2x1bWUlMjAlM0QlMjAlMjI0NyUyMiUyQyUwQSUyMCUyMCUyMCUyMHBhZ2VzJTIwJTNEJTIwJTIyMjUzLS0yNzklMjIlMkMlMEElN0Q=",highlighted:`<span class="language-xml">@Article{bellemare13arcade, | |
| author = </span><span class="hljs-template-variable">{{<span class="hljs-name">Bellemare</span>}, M.~G. and {Naddaf}, Y. and {Veness}, J. and {Bowling}, M.}, | |
| title = {The Arcade Learning Environment: An Evaluation Platform for General Agents}, | |
| journal = {Journal of Artificial Intelligence Research}, | |
| year = <span class="hljs-string">"2013"</span>, | |
| month = <span class="hljs-string">"jun"</span>, | |
| volume = <span class="hljs-string">"47"</span>, | |
| pages = <span class="hljs-string">"253--279"</span>, | |
| }</span>`,lang:"bibtex",wrap:!1}}),Vl=new Zt({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/atari.md"}}),{c(){c=w("meta"),vl=a(),Fl=w("p"),Yl=a(),M(I.$$.fragment),Zl=a(),M(A.$$.fragment),Xl=a(),o=w("p"),o.textContent=Tt,Sl=a(),M(C.$$.fragment),_l=a(),d=w("p"),d.textContent=Jt,Ol=a(),M(h.$$.fragment),zl=a(),u=w("ul"),u.innerHTML=pt,Ll=a(),g=w("p"),g.innerHTML=Ut,Dl=a(),M(b.$$.fragment),Hl=a(),M(f.$$.fragment),xl=a(),M(B.$$.fragment),Pl=a(),M($.$$.fragment),ql=a(),k=w("p"),k.innerHTML=yt,Kl=a(),R=w("ul"),R.innerHTML=wt,ls=a(),E=w("p"),E.innerHTML=jt,ss=a(),M(G.$$.fragment),ts=a(),N=w("p"),N.innerHTML=rt,es=a(),M(Q.$$.fragment),as=a(),M(V.$$.fragment),ns=a(),F=w("p"),F.innerHTML=mt,Ms=a(),M(W.$$.fragment),is=a(),v=w("p"),v.innerHTML=ct,Ts=a(),M(Y.$$.fragment),Js=a(),Z=w("p"),Z.innerHTML=It,ps=a(),M(X.$$.fragment),Us=a(),M(S.$$.fragment),ys=a(),M(_.$$.fragment),ws=a(),O=w("ul"),O.innerHTML=At,js=a(),M(z.$$.fragment),rs=a(),M(L.$$.fragment),ms=a(),D=w("ul"),D.innerHTML=ot,cs=a(),M(H.$$.fragment),Is=a(),M(x.$$.fragment),As=a(),P=w("ul"),P.innerHTML=Ct,os=a(),M(q.$$.fragment),Cs=a(),M(K.$$.fragment),ds=a(),M(ll.$$.fragment),hs=a(),sl=w("p"),sl.textContent=dt,us=a(),tl=w("ul"),tl.innerHTML=ht,gs=a(),M(el.$$.fragment),bs=a(),M(al.$$.fragment),fs=a(),nl=w("p"),nl.textContent=ut,Bs=a(),Ml=w("ol"),Ml.innerHTML=gt,$s=a(),M(il.$$.fragment),ks=a(),M(Tl.$$.fragment),Rs=a(),M(Jl.$$.fragment),Es=a(),pl=w("ul"),pl.innerHTML=bt,Gs=a(),M(Ul.$$.fragment),Ns=a(),M(yl.$$.fragment),Qs=a(),M(wl.$$.fragment),Vs=a(),M(jl.$$.fragment),Fs=a(),M(rl.$$.fragment),Ws=a(),M(ml.$$.fragment),vs=a(),M(cl.$$.fragment),Ys=a(),M(Il.$$.fragment),Zs=a(),M(Al.$$.fragment),Xs=a(),M(ol.$$.fragment),Ss=a(),M(Cl.$$.fragment),_s=a(),M(dl.$$.fragment),Os=a(),M(hl.$$.fragment),zs=a(),M(ul.$$.fragment),Ls=a(),M(gl.$$.fragment),Ds=a(),M(bl.$$.fragment),Hs=a(),M(fl.$$.fragment),xs=a(),Bl=w("table"),Bl.innerHTML=ft,Ps=a(),M($l.$$.fragment),qs=a(),kl=w("ul"),kl.innerHTML=Bt,Ks=a(),M(Rl.$$.fragment),lt=a(),El=w("ul"),El.innerHTML=$t,st=a(),M(Gl.$$.fragment),tt=a(),Nl=w("p"),Nl.textContent=kt,et=a(),M(Ql.$$.fragment),at=a(),M(Vl.$$.fragment),nt=a(),Wl=w("p"),this.h()},l(l){const s=Wt("svelte-u9bgzb",document.head);c=j(s,"META",{name:!0,content:!0}),s.forEach(t),vl=n(l),Fl=j(l,"P",{}),Rt(Fl).forEach(t),Yl=n(l),i(I.$$.fragment,l),Zl=n(l),i(A.$$.fragment,l),Xl=n(l),o=j(l,"P",{"data-svelte-h":!0}),r(o)!=="svelte-1ylza3d"&&(o.textContent=Tt),Sl=n(l),i(C.$$.fragment,l),_l=n(l),d=j(l,"P",{"data-svelte-h":!0}),r(d)!=="svelte-cnrekz"&&(d.textContent=Jt),Ol=n(l),i(h.$$.fragment,l),zl=n(l),u=j(l,"UL",{"data-svelte-h":!0}),r(u)!=="svelte-17iwf87"&&(u.innerHTML=pt),Ll=n(l),g=j(l,"P",{"data-svelte-h":!0}),r(g)!=="svelte-1phmom5"&&(g.innerHTML=Ut),Dl=n(l),i(b.$$.fragment,l),Hl=n(l),i(f.$$.fragment,l),xl=n(l),i(B.$$.fragment,l),Pl=n(l),i($.$$.fragment,l),ql=n(l),k=j(l,"P",{"data-svelte-h":!0}),r(k)!=="svelte-11lzvnb"&&(k.innerHTML=yt),Kl=n(l),R=j(l,"UL",{"data-svelte-h":!0}),r(R)!=="svelte-1oey537"&&(R.innerHTML=wt),ls=n(l),E=j(l,"P",{"data-svelte-h":!0}),r(E)!=="svelte-uwz595"&&(E.innerHTML=jt),ss=n(l),i(G.$$.fragment,l),ts=n(l),N=j(l,"P",{"data-svelte-h":!0}),r(N)!=="svelte-8391rg"&&(N.innerHTML=rt),es=n(l),i(Q.$$.fragment,l),as=n(l),i(V.$$.fragment,l),ns=n(l),F=j(l,"P",{"data-svelte-h":!0}),r(F)!=="svelte-1hv1j2z"&&(F.innerHTML=mt),Ms=n(l),i(W.$$.fragment,l),is=n(l),v=j(l,"P",{"data-svelte-h":!0}),r(v)!=="svelte-12tvtmf"&&(v.innerHTML=ct),Ts=n(l),i(Y.$$.fragment,l),Js=n(l),Z=j(l,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-q43vqw"&&(Z.innerHTML=It),ps=n(l),i(X.$$.fragment,l),Us=n(l),i(S.$$.fragment,l),ys=n(l),i(_.$$.fragment,l),ws=n(l),O=j(l,"UL",{"data-svelte-h":!0}),r(O)!=="svelte-99suqb"&&(O.innerHTML=At),js=n(l),i(z.$$.fragment,l),rs=n(l),i(L.$$.fragment,l),ms=n(l),D=j(l,"UL",{"data-svelte-h":!0}),r(D)!=="svelte-1y3h37w"&&(D.innerHTML=ot),cs=n(l),i(H.$$.fragment,l),Is=n(l),i(x.$$.fragment,l),As=n(l),P=j(l,"UL",{"data-svelte-h":!0}),r(P)!=="svelte-8ebu7w"&&(P.innerHTML=Ct),os=n(l),i(q.$$.fragment,l),Cs=n(l),i(K.$$.fragment,l),ds=n(l),i(ll.$$.fragment,l),hs=n(l),sl=j(l,"P",{"data-svelte-h":!0}),r(sl)!=="svelte-os3cu"&&(sl.textContent=dt),us=n(l),tl=j(l,"UL",{"data-svelte-h":!0}),r(tl)!=="svelte-439ikl"&&(tl.innerHTML=ht),gs=n(l),i(el.$$.fragment,l),bs=n(l),i(al.$$.fragment,l),fs=n(l),nl=j(l,"P",{"data-svelte-h":!0}),r(nl)!=="svelte-uoxzid"&&(nl.textContent=ut),Bs=n(l),Ml=j(l,"OL",{"data-svelte-h":!0}),r(Ml)!=="svelte-ux11fj"&&(Ml.innerHTML=gt),$s=n(l),i(il.$$.fragment,l),ks=n(l),i(Tl.$$.fragment,l),Rs=n(l),i(Jl.$$.fragment,l),Es=n(l),pl=j(l,"UL",{"data-svelte-h":!0}),r(pl)!=="svelte-13xn18c"&&(pl.innerHTML=bt),Gs=n(l),i(Ul.$$.fragment,l),Ns=n(l),i(yl.$$.fragment,l),Qs=n(l),i(wl.$$.fragment,l),Vs=n(l),i(jl.$$.fragment,l),Fs=n(l),i(rl.$$.fragment,l),Ws=n(l),i(ml.$$.fragment,l),vs=n(l),i(cl.$$.fragment,l),Ys=n(l),i(Il.$$.fragment,l),Zs=n(l),i(Al.$$.fragment,l),Xs=n(l),i(ol.$$.fragment,l),Ss=n(l),i(Cl.$$.fragment,l),_s=n(l),i(dl.$$.fragment,l),Os=n(l),i(hl.$$.fragment,l),zs=n(l),i(ul.$$.fragment,l),Ls=n(l),i(gl.$$.fragment,l),Ds=n(l),i(bl.$$.fragment,l),Hs=n(l),i(fl.$$.fragment,l),xs=n(l),Bl=j(l,"TABLE",{"data-svelte-h":!0}),r(Bl)!=="svelte-1so793o"&&(Bl.innerHTML=ft),Ps=n(l),i($l.$$.fragment,l),qs=n(l),kl=j(l,"UL",{"data-svelte-h":!0}),r(kl)!=="svelte-7i53zl"&&(kl.innerHTML=Bt),Ks=n(l),i(Rl.$$.fragment,l),lt=n(l),El=j(l,"UL",{"data-svelte-h":!0}),r(El)!=="svelte-hrgqv7"&&(El.innerHTML=$t),st=n(l),i(Gl.$$.fragment,l),tt=n(l),Nl=j(l,"P",{"data-svelte-h":!0}),r(Nl)!=="svelte-wmucn"&&(Nl.textContent=kt),et=n(l),i(Ql.$$.fragment,l),at=n(l),i(Vl.$$.fragment,l),nt=n(l),Wl=j(l,"P",{}),Rt(Wl).forEach(t),this.h()},h(){Et(c,"name","hf:doc:metadata"),Et(c,"content",St)},m(l,s){vt(document.head,c),e(l,vl,s),e(l,Fl,s),e(l,Yl,s),T(I,l,s),e(l,Zl,s),T(A,l,s),e(l,Xl,s),e(l,o,s),e(l,Sl,s),T(C,l,s),e(l,_l,s),e(l,d,s),e(l,Ol,s),T(h,l,s),e(l,zl,s),e(l,u,s),e(l,Ll,s),e(l,g,s),e(l,Dl,s),T(b,l,s),e(l,Hl,s),T(f,l,s),e(l,xl,s),T(B,l,s),e(l,Pl,s),T($,l,s),e(l,ql,s),e(l,k,s),e(l,Kl,s),e(l,R,s),e(l,ls,s),e(l,E,s),e(l,ss,s),T(G,l,s),e(l,ts,s),e(l,N,s),e(l,es,s),T(Q,l,s),e(l,as,s),T(V,l,s),e(l,ns,s),e(l,F,s),e(l,Ms,s),T(W,l,s),e(l,is,s),e(l,v,s),e(l,Ts,s),T(Y,l,s),e(l,Js,s),e(l,Z,s),e(l,ps,s),T(X,l,s),e(l,Us,s),T(S,l,s),e(l,ys,s),T(_,l,s),e(l,ws,s),e(l,O,s),e(l,js,s),T(z,l,s),e(l,rs,s),T(L,l,s),e(l,ms,s),e(l,D,s),e(l,cs,s),T(H,l,s),e(l,Is,s),T(x,l,s),e(l,As,s),e(l,P,s),e(l,os,s),T(q,l,s),e(l,Cs,s),T(K,l,s),e(l,ds,s),T(ll,l,s),e(l,hs,s),e(l,sl,s),e(l,us,s),e(l,tl,s),e(l,gs,s),T(el,l,s),e(l,bs,s),T(al,l,s),e(l,fs,s),e(l,nl,s),e(l,Bs,s),e(l,Ml,s),e(l,$s,s),T(il,l,s),e(l,ks,s),T(Tl,l,s),e(l,Rs,s),T(Jl,l,s),e(l,Es,s),e(l,pl,s),e(l,Gs,s),T(Ul,l,s),e(l,Ns,s),T(yl,l,s),e(l,Qs,s),T(wl,l,s),e(l,Vs,s),T(jl,l,s),e(l,Fs,s),T(rl,l,s),e(l,Ws,s),T(ml,l,s),e(l,vs,s),T(cl,l,s),e(l,Ys,s),T(Il,l,s),e(l,Zs,s),T(Al,l,s),e(l,Xs,s),T(ol,l,s),e(l,Ss,s),T(Cl,l,s),e(l,_s,s),T(dl,l,s),e(l,Os,s),T(hl,l,s),e(l,zs,s),T(ul,l,s),e(l,Ls,s),T(gl,l,s),e(l,Ds,s),T(bl,l,s),e(l,Hs,s),T(fl,l,s),e(l,xs,s),e(l,Bl,s),e(l,Ps,s),T($l,l,s),e(l,qs,s),e(l,kl,s),e(l,Ks,s),T(Rl,l,s),e(l,lt,s),e(l,El,s),e(l,st,s),T(Gl,l,s),e(l,tt,s),e(l,Nl,s),e(l,et,s),T(Ql,l,s),e(l,at,s),T(Vl,l,s),e(l,nt,s),e(l,Wl,s),Mt=!0},p:Nt,i(l){Mt||(J(I.$$.fragment,l),J(A.$$.fragment,l),J(C.$$.fragment,l),J(h.$$.fragment,l),J(b.$$.fragment,l),J(f.$$.fragment,l),J(B.$$.fragment,l),J($.$$.fragment,l),J(G.$$.fragment,l),J(Q.$$.fragment,l),J(V.$$.fragment,l),J(W.$$.fragment,l),J(Y.$$.fragment,l),J(X.$$.fragment,l),J(S.$$.fragment,l),J(_.$$.fragment,l),J(z.$$.fragment,l),J(L.$$.fragment,l),J(H.$$.fragment,l),J(x.$$.fragment,l),J(q.$$.fragment,l),J(K.$$.fragment,l),J(ll.$$.fragment,l),J(el.$$.fragment,l),J(al.$$.fragment,l),J(il.$$.fragment,l),J(Tl.$$.fragment,l),J(Jl.$$.fragment,l),J(Ul.$$.fragment,l),J(yl.$$.fragment,l),J(wl.$$.fragment,l),J(jl.$$.fragment,l),J(rl.$$.fragment,l),J(ml.$$.fragment,l),J(cl.$$.fragment,l),J(Il.$$.fragment,l),J(Al.$$.fragment,l),J(ol.$$.fragment,l),J(Cl.$$.fragment,l),J(dl.$$.fragment,l),J(hl.$$.fragment,l),J(ul.$$.fragment,l),J(gl.$$.fragment,l),J(bl.$$.fragment,l),J(fl.$$.fragment,l),J($l.$$.fragment,l),J(Rl.$$.fragment,l),J(Gl.$$.fragment,l),J(Ql.$$.fragment,l),J(Vl.$$.fragment,l),Mt=!0)},o(l){p(I.$$.fragment,l),p(A.$$.fragment,l),p(C.$$.fragment,l),p(h.$$.fragment,l),p(b.$$.fragment,l),p(f.$$.fragment,l),p(B.$$.fragment,l),p($.$$.fragment,l),p(G.$$.fragment,l),p(Q.$$.fragment,l),p(V.$$.fragment,l),p(W.$$.fragment,l),p(Y.$$.fragment,l),p(X.$$.fragment,l),p(S.$$.fragment,l),p(_.$$.fragment,l),p(z.$$.fragment,l),p(L.$$.fragment,l),p(H.$$.fragment,l),p(x.$$.fragment,l),p(q.$$.fragment,l),p(K.$$.fragment,l),p(ll.$$.fragment,l),p(el.$$.fragment,l),p(al.$$.fragment,l),p(il.$$.fragment,l),p(Tl.$$.fragment,l),p(Jl.$$.fragment,l),p(Ul.$$.fragment,l),p(yl.$$.fragment,l),p(wl.$$.fragment,l),p(jl.$$.fragment,l),p(rl.$$.fragment,l),p(ml.$$.fragment,l),p(cl.$$.fragment,l),p(Il.$$.fragment,l),p(Al.$$.fragment,l),p(ol.$$.fragment,l),p(Cl.$$.fragment,l),p(dl.$$.fragment,l),p(hl.$$.fragment,l),p(ul.$$.fragment,l),p(gl.$$.fragment,l),p(bl.$$.fragment,l),p(fl.$$.fragment,l),p($l.$$.fragment,l),p(Rl.$$.fragment,l),p(Gl.$$.fragment,l),p(Ql.$$.fragment,l),p(Vl.$$.fragment,l),Mt=!1},d(l){l&&(t(vl),t(Fl),t(Yl),t(Zl),t(Xl),t(o),t(Sl),t(_l),t(d),t(Ol),t(zl),t(u),t(Ll),t(g),t(Dl),t(Hl),t(xl),t(Pl),t(ql),t(k),t(Kl),t(R),t(ls),t(E),t(ss),t(ts),t(N),t(es),t(as),t(ns),t(F),t(Ms),t(is),t(v),t(Ts),t(Js),t(Z),t(ps),t(Us),t(ys),t(ws),t(O),t(js),t(rs),t(ms),t(D),t(cs),t(Is),t(As),t(P),t(os),t(Cs),t(ds),t(hs),t(sl),t(us),t(tl),t(gs),t(bs),t(fs),t(nl),t(Bs),t(Ml),t($s),t(ks),t(Rs),t(Es),t(pl),t(Gs),t(Ns),t(Qs),t(Vs),t(Fs),t(Ws),t(vs),t(Ys),t(Zs),t(Xs),t(Ss),t(_s),t(Os),t(zs),t(Ls),t(Ds),t(Hs),t(xs),t(Bl),t(Ps),t(qs),t(kl),t(Ks),t(lt),t(El),t(st),t(tt),t(Nl),t(et),t(at),t(nt),t(Wl)),t(c),U(I,l),U(A,l),U(C,l),U(h,l),U(b,l),U(f,l),U(B,l),U($,l),U(G,l),U(Q,l),U(V,l),U(W,l),U(Y,l),U(X,l),U(S,l),U(_,l),U(z,l),U(L,l),U(H,l),U(x,l),U(q,l),U(K,l),U(ll,l),U(el,l),U(al,l),U(il,l),U(Tl,l),U(Jl,l),U(Ul,l),U(yl,l),U(wl,l),U(jl,l),U(rl,l),U(ml,l),U(cl,l),U(Il,l),U(Al,l),U(ol,l),U(Cl,l),U(dl,l),U(hl,l),U(ul,l),U(gl,l),U(bl,l),U(fl,l),U($l,l),U(Rl,l),U(Gl,l),U(Ql,l),U(Vl,l)}}}const St='{"title":"Atari Environment","local":"atari-environment","sections":[{"title":"Supported Games","local":"supported-games","sections":[{"title":"Popular Games","local":"popular-games","sections":[],"depth":3}],"depth":2},{"title":"Architecture","local":"architecture","sections":[],"depth":2},{"title":"Installation & Usage","local":"installation--usage","sections":[{"title":"Option 1: Local Development (without Docker)","local":"option-1-local-development-without-docker","sections":[],"depth":3},{"title":"Option 2: Docker (Recommended)","local":"option-2-docker-recommended","sections":[],"depth":3}],"depth":2},{"title":"Observation Types","local":"observation-types","sections":[{"title":"1. RGB (Default)","local":"1-rgb-default","sections":[],"depth":3},{"title":"2. Grayscale","local":"2-grayscale","sections":[],"depth":3},{"title":"3. RAM","local":"3-ram","sections":[],"depth":3}],"depth":2},{"title":"Action Spaces","local":"action-spaces","sections":[{"title":"Minimal Action Set (Default)","local":"minimal-action-set-default","sections":[],"depth":3},{"title":"Full Action Set","local":"full-action-set","sections":[],"depth":3}],"depth":2},{"title":"Configuration","local":"configuration","sections":[{"title":"Environment Variables","local":"environment-variables","sections":[],"depth":3},{"title":"Example: Breakout with Custom Settings","local":"example-breakout-with-custom-settings","sections":[],"depth":3}],"depth":2},{"title":"API Reference","local":"api-reference","sections":[{"title":"AtariAction","local":"atariaction","sections":[],"depth":3},{"title":"AtariObservation","local":"atariobservation","sections":[],"depth":3},{"title":"AtariState","local":"ataristate","sections":[],"depth":3}],"depth":2},{"title":"Example Script","local":"example-script","sections":[],"depth":2},{"title":"Testing","local":"testing","sections":[{"title":"Local Testing","local":"local-testing","sections":[],"depth":3},{"title":"Docker Testing","local":"docker-testing","sections":[],"depth":3}],"depth":2},{"title":"Popular Games and Their Characteristics","local":"popular-games-and-their-characteristics","sections":[],"depth":2},{"title":"Limitations & Notes","local":"limitations--notes","sections":[],"depth":2},{"title":"References","local":"references","sections":[],"depth":2},{"title":"Citation","local":"citation","sections":[],"depth":2}],"depth":1}';function _t(it){return Qt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ht extends Vt{constructor(c){super(),Ft(this,c,_t,Xt,Gt,{})}}export{Ht as component}; | |
Xet Storage Details
- Size:
- 52.8 kB
- Xet hash:
- fc3ff5d7613c0e9dc7cf2dc16598687f6c8972d15ebc98837167957a5deff0d0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.