import{S as Di,i as Ii,s as Ti,e as a,k as p,w as m,t as r,M as Ri,c as l,d as s,m as h,a as n,x as v,h as o,b as f,N as Rr,G as t,g as c,y as b,L as Bi,q as _,o as g,B as E,v as Mi}from"../chunks/vendor-hf-doc-builder.js";import{I as G}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as de}from"../chunks/CodeBlock-hf-doc-builder.js";function Ni(Br){let C,ks,O,H,nt,ue,za,rt,qa,As,F,Ga,me,Ha,Fa,xs,Te,Qa,Cs,Q,Va,Re,Ka,Ya,Os,Be,Ja,Ls,ve,Ds,k,Wa,ot,Xa,Za,it,el,tl,Is,be,Ts,L,V,ct,_e,sl,pt,al,Rs,Me,ll,Bs,K,nl,Ne,rl,ol,Ms,D,Y,ht,ge,il,ft,cl,Ns,w,pl,dt,hl,fl,ut,dl,ul,mt,ml,vl,Us,Ee,zs,$,bl,_l,Ue,Mr,gl,El,qs,I,J,vt,je,jl,bt,wl,Gs,ze,yl,Hs,we,Fs,W,$l,_t,Sl,Pl,Qs,qe,kl,Vs,d,X,gt,Al,xl,Et,Cl,Ol,Ll,jt,wt,Dl,Il,yt,$t,Tl,Rl,St,Pt,Bl,Ml,kt,At,Nl,Ul,xt,Ct,zl,ql,Ot,Lt,Gl,Hl,Dt,It,Fl,Ql,Tt,Rt,Vl,Kl,Bt,Mt,Yl,Jl,Nt,Ut,Wl,Xl,zt,qt,Zl,en,Gt,Ht,tn,sn,Ft,Qt,an,ln,Vt,Kt,nn,rn,Yt,Jt,on,cn,Wt,Xt,pn,Ks,Z,hn,ye,fn,dn,Ys,$e,Js,S,un,mn,Ge,Nr,vn,bn,Ws,T,ee,Zt,Se,_n,es,gn,Xs,He,En,Zs,A,R,jn,ts,wn,yn,ss,$n,Sn,Pn,B,kn,as,An,xn,ls,Cn,On,Ln,Pe,Dn,ns,In,Tn,ea,Fe,Rn,ta,te,ke,Bn,rs,Mn,Nn,Un,M,zn,os,qn,Gn,is,Hn,Fn,sa,Qe,Qn,aa,Ae,la,N,se,cs,xe,Vn,ps,Kn,na,Ce,ra,U,ae,hs,Oe,Yn,fs,Jn,oa,le,Wn,ds,Xn,Zn,ia,ne,er,us,tr,sr,ca,Le,pa,re,ar,ms,lr,nr,ha,z,oe,vs,De,rr,bs,or,fa,j,ir,Ve,cr,pr,_s,hr,fr,Ke,dr,ur,Ye,mr,vr,da,ie,br,gs,_r,gr,ua,P,Er,jr,Je,Ur,wr,yr,ma,y,$r,Es,Sr,Pr,js,kr,Ar,ws,xr,Cr,va,q,ce,ys,Ie,Or,$s,Lr,ba,pe,Dr,Ss,Ir,Tr,_a;return ue=new G({}),ve=new de({props:{code:"pip install --upgrade simulate",highlighted:'pip install <span class="hljs-comment">--upgrade simulate</span>'}}),be=new de({props:{code:"make style",highlighted:'<span class="hljs-attribute">make style</span>'}}),_e=new G({}),ge=new G({}),Ee=new de({props:{code:`from simulate import Scene

scene = Scene.create_from('tests/test_assets/fixtures/Box.gltf')  # either local (priority) or on the hub with full path to file
scene = Scene.create_from('simulate-tests/Box/glTF/Box.gltf', is_local=False)  # Set priority to the hub file

scene.save('local_dir/file.gltf')  # Save to a local file
scene.push_to_hub('simulate-tests/Debug/glTF/Box.gltf')  # Save to the hub

scene.show()`,highlighted:`from simulate import Scene

scene = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Scene</span>.</span></span>create<span class="hljs-constructor">_from(&#x27;<span class="hljs-params">tests</span><span class="hljs-operator">/</span><span class="hljs-params">test_assets</span><span class="hljs-operator">/</span><span class="hljs-params">fixtures</span><span class="hljs-operator">/</span>Box.<span class="hljs-params">gltf</span>&#x27;)</span>  # either local (priority) <span class="hljs-keyword">or</span> on the hub <span class="hljs-keyword">with</span> full path <span class="hljs-keyword">to</span> file
scene = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Scene</span>.</span></span>create<span class="hljs-constructor">_from(&#x27;<span class="hljs-params">simulate</span>-<span class="hljs-params">tests</span><span class="hljs-operator">/</span>Box<span class="hljs-operator">/</span><span class="hljs-params">glTF</span><span class="hljs-operator">/</span>Box.<span class="hljs-params">gltf</span>&#x27;, <span class="hljs-params">is_local</span>=False)</span>  # Set priority <span class="hljs-keyword">to</span> the hub file

scene.save(&#x27;local_dir/file.gltf&#x27;)  # Save <span class="hljs-keyword">to</span> a local file
scene.push<span class="hljs-constructor">_to_hub(&#x27;<span class="hljs-params">simulate</span>-<span class="hljs-params">tests</span><span class="hljs-operator">/</span>Debug<span class="hljs-operator">/</span><span class="hljs-params">glTF</span><span class="hljs-operator">/</span>Box.<span class="hljs-params">gltf</span>&#x27;)</span>  # Save <span class="hljs-keyword">to</span> the hub

scene.show<span class="hljs-literal">()</span>`}}),je=new G({}),we=new de({props:{code:`

scene
Scene(dimensionality=3, engine='PyVistaEngine')
\u2514\u2500\u2500 plane_01 (Plane - Mesh: 121 points, 100 cells)
    \u2514\u2500\u2500 sphere_02 (Sphere - Mesh: 842 points, 870 cells)
`,highlighted:`import simulate as sm

<span class="hljs-built_in">scene</span> = sm.Scene()
<span class="hljs-built_in">scene</span> += sm.Plane() + sm.Sphere(<span class="hljs-built_in">position</span>=[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>], <span class="hljs-built_in">radius</span>=<span class="hljs-number">0.2</span>)

&gt;&gt;&gt; <span class="hljs-built_in">scene</span>
&gt;&gt;&gt; Scene(dimensionality=<span class="hljs-number">3</span>, engine=&#x27;PyVistaEngine&#x27;)
&gt;&gt;&gt; \u2514\u2500\u2500 plane_01 (Plane - Mesh: <span class="hljs-number">121</span> <span class="hljs-built_in">points</span>, <span class="hljs-number">100</span> cells)
&gt;&gt;&gt;     \u2514\u2500\u2500 sphere_02 (Sphere - Mesh: <span class="hljs-number">842</span> <span class="hljs-built_in">points</span>, <span class="hljs-number">870</span> cells)

<span class="hljs-built_in">scene</span>.<span class="hljs-built_in">show</span>()`}}),$e=new de({props:{code:"python examples/basic/objects.py",highlighted:'python examples<span class="hljs-regexp">/basic/</span>objects.py'}}),Se=new G({}),Ae=new de({props:{code:`
scene
Scene(dimensionality=3, engine='pyvista')
\u251C\u2500\u2500 plane_01 (Plane - Mesh: 121 points, 100 cells)
\u2502   \u2514\u2500\u2500 sphere_02 (Sphere - Mesh: 842 points, 870 cells)
\u251C\u2500\u2500 sphere_03 (Sphere - Mesh: 842 points, 870 cells)
\u2514\u2500\u2500 sphere_04 (Sphere - Mesh: 842 points, 870 cells)

scene.remove(scene.sphere_04)
Scene(dimensionality=3, engine='pyvista')
\u251C\u2500\u2500 plane_01 (Plane - Mesh: 121 points, 100 cells)
\u2502   \u2514\u2500\u2500 sphere_02 (Sphere - Mesh: 842 points, 870 cells)
\u2514\u2500\u2500 sphere_03 (Sphere - Mesh: 842 points, 870 cells)`,highlighted:`<span class="hljs-comment"># Add two copy of the sphere to the scene as children of the root node (using list will add all objects on the same level)</span>
<span class="hljs-comment"># Using \`.copy()\` will create a copy of an object (the copy doesn&#x27;t have any parent or children)</span>
scene += [scene.plane_01.sphere_02.copy(), scene.plane_01.sphere_02.copy()]

&gt;&gt;&gt; scene
&gt;&gt;&gt; Scene(dimensionality=3, engine=&#x27;pyvista&#x27;)
&gt;&gt;&gt; \u251C\u2500\u2500 plane_01 (Plane - Mesh:<span class="hljs-number"> 121 </span>points,<span class="hljs-number"> 100 </span>cells)
&gt;&gt;&gt; \u2502   \u2514\u2500\u2500 sphere_02 (Sphere - Mesh:<span class="hljs-number"> 842 </span>points,<span class="hljs-number"> 870 </span>cells)
&gt;&gt;&gt; \u251C\u2500\u2500 sphere_03 (Sphere - Mesh:<span class="hljs-number"> 842 </span>points,<span class="hljs-number"> 870 </span>cells)
&gt;&gt;&gt; \u2514\u2500\u2500 sphere_04 (Sphere - Mesh:<span class="hljs-number"> 842 </span>points,<span class="hljs-number"> 870 </span>cells)

<span class="hljs-comment"># Remove the last added sphere</span>
&gt;&gt;&gt; scene.remove(scene.sphere_04)
&gt;&gt;&gt; Scene(dimensionality=3, engine=&#x27;pyvista&#x27;)
&gt;&gt;&gt; \u251C\u2500\u2500 plane_01 (Plane - Mesh:<span class="hljs-number"> 121 </span>points,<span class="hljs-number"> 100 </span>cells)
&gt;&gt;&gt; \u2502   \u2514\u2500\u2500 sphere_02 (Sphere - Mesh:<span class="hljs-number"> 842 </span>points,<span class="hljs-number"> 870 </span>cells)
&gt;&gt;&gt; \u2514\u2500\u2500 sphere_03 (Sphere - Mesh:<span class="hljs-number"> 842 </span>points,<span class="hljs-number"> 870 </span>cells)`}}),xe=new G({}),Ce=new de({props:{code:`

array([1., 0., 0.])
array([0.1, 0.1, 0.1])
`,highlighted:`# Let&#x27;s <span class="hljs-built_in">translate</span> our <span class="hljs-built_in">floor</span> (with the <span class="hljs-built_in">first</span> <span class="hljs-built_in">sphere</span>, its child)
<span class="hljs-built_in">scene</span>.plane_01.translate_x(<span class="hljs-number">1</span>)

# Let&#x27;s <span class="hljs-built_in">scale</span> the <span class="hljs-built_in">second</span> <span class="hljs-built_in">sphere</span> uniformly
<span class="hljs-built_in">scene</span>.sphere_03.<span class="hljs-built_in">scale</span>(<span class="hljs-number">0.1</span>)

# Inspect the current <span class="hljs-built_in">position</span> <span class="hljs-keyword">and</span> scaling <span class="hljs-built_in">values</span>
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">scene</span>.plane_01.<span class="hljs-built_in">position</span>)
&gt;&gt;&gt; <span class="hljs-built_in">array</span>([<span class="hljs-number">1</span>., <span class="hljs-number">0</span>., <span class="hljs-number">0</span>.])
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">scene</span>.sphere_03.scaling)
&gt;&gt;&gt; <span class="hljs-built_in">array</span>([<span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>])

# We can also <span class="hljs-built_in">translate</span> from a <span class="hljs-built_in">vector</span> <span class="hljs-keyword">and</span> rotate from a quaternion <span class="hljs-keyword">or</span> along the various <span class="hljs-built_in">axes</span>`}}),Oe=new G({}),Le=new de({props:{code:"scene.show()",highlighted:'<span class="hljs-built_in">scene</span>.<span class="hljs-built_in">show</span>()'}}),De=new G({}),Ie=new G({}),{c(){C=a("meta"),ks=p(),O=a("h1"),H=a("a"),nt=a("span"),m(ue.$$.fragment),za=p(),rt=a("span"),qa=r("Quicktour"),As=p(),F=a("p"),Ga=r("Simulate\u2019s API is inspired by the great "),me=a("a"),Ha=r("Kubric API"),Fa=r(`.
The user can create a scene and add assets to it (objects, cameras, lights if needed).
Once the scene is created you can save/share it and also render or do simulations using one of the backend rendering/simulation engines (at the moment Unity, Blender and Godot). The saving/sharing format is engine-agnostic and uses the standard glTF format for saving scenes.`),xs=p(),Te=a("p"),Qa=r("Let\u2019s do a quick exploration together."),Cs=p(),Q=a("p"),Va=r("To install and contribute (from "),Re=a("a"),Ka=r("CONTRIBUTING.md"),Ya=r(")"),Os=p(),Be=a("p"),Ja=r("Create a virtual env and then install the code style/quality tools as well as the code base locally"),Ls=p(),m(ve.$$.fragment),Ds=p(),k=a("p"),Wa=r("Before you merge a PR, fix the style (we use "),ot=a("code"),Xa=r("isort"),Za=r(" + "),it=a("code"),el=r("black"),tl=r(")"),Is=p(),m(be.$$.fragment),Ts=p(),L=a("h2"),V=a("a"),ct=a("span"),m(_e.$$.fragment),sl=p(),pt=a("span"),al=r("Project Structure"),Rs=p(),Me=a("p"),ll=r("The Python API is located in src/simulate. It allows creation and loading of scenes, and sending commands to the backend."),Bs=p(),K=a("p"),nl=r(`The backend options (Unity, Godot, Blender) can be found in the integrations folder.
The most fully-featured backend is Unity, located in `),Ne=a("a"),rl=r("integrations/Unity"),ol=r(`.
The Unity editor isn\u2019t required to run \u{1F917} Simulate, unless making changes to the backend, which requires Unity 2021.3.2f1.`),Ms=p(),D=a("h2"),Y=a("a"),ht=a("span"),m(ge.$$.fragment),il=p(),ft=a("span"),cl=r("Loading a scene from the hub or a local file"),Ns=p(),w=a("p"),pl=r("Loading a scene from a local file or the hub is done with "),dt=a("code"),hl=r("Scene.create_from()"),fl=r(", saving or pushing to the hub with "),ut=a("code"),dl=r("scene.save()"),ul=r(" or "),mt=a("code"),ml=r("scene.push_to_hub()"),vl=r(":"),Us=p(),m(Ee.$$.fragment),zs=p(),$=a("p"),bl=a("br"),_l=p(),Ue=a("img"),gl=p(),El=a("br"),qs=p(),I=a("h2"),J=a("a"),vt=a("span"),m(je.$$.fragment),jl=p(),bt=a("span"),wl=r("Creating a Scene and adding/managing Objects in the scene"),Gs=p(),ze=a("p"),yl=r("Basic example of creating a scene with a plane and a sphere above it:"),Hs=p(),m(we.$$.fragment),Fs=p(),W=a("p"),$l=r("An object (as well as the Scene) is just a node in a tree provided with optional mesh (as "),_t=a("code"),Sl=r("pyvista.PolyData"),Pl=r(" structure) and material and/or light, camera, agents special objects."),Qs=p(),qe=a("p"),kl=r("The following objects creation helpers are currently provided:"),Vs=p(),d=a("ul"),X=a("li"),gt=a("code"),Al=r("Object3D"),xl=r(" any object with a "),Et=a("code"),Cl=r("pyvista.PolyData"),Ol=r(" mesh and/or material"),Ll=p(),jt=a("li"),wt=a("code"),Dl=r("Plane"),Il=p(),yt=a("li"),$t=a("code"),Tl=r("Sphere"),Rl=p(),St=a("li"),Pt=a("code"),Bl=r("Capsule"),Ml=p(),kt=a("li"),At=a("code"),Nl=r("Cylinder"),Ul=p(),xt=a("li"),Ct=a("code"),zl=r("Box"),ql=p(),Ot=a("li"),Lt=a("code"),Gl=r("Cone"),Hl=p(),Dt=a("li"),It=a("code"),Fl=r("Line"),Ql=p(),Tt=a("li"),Rt=a("code"),Vl=r("MultipleLines"),Kl=p(),Bt=a("li"),Mt=a("code"),Yl=r("Tube"),Jl=p(),Nt=a("li"),Ut=a("code"),Wl=r("Polygon"),Xl=p(),zt=a("li"),qt=a("code"),Zl=r("Ring"),en=p(),Gt=a("li"),Ht=a("code"),tn=r("Text3D"),sn=p(),Ft=a("li"),Qt=a("code"),an=r("Triangle"),ln=p(),Vt=a("li"),Kt=a("code"),nn=r("Rectangle"),rn=p(),Yt=a("li"),Jt=a("code"),on=r("Circle"),cn=p(),Wt=a("li"),Xt=a("code"),pn=r("StructuredGrid"),Ks=p(),Z=a("p"),hn=r("Most of these objects can be visualized by running the following "),ye=a("a"),fn=r("example"),dn=r(":"),Ys=p(),m($e.$$.fragment),Js=p(),S=a("p"),un=a("br"),mn=p(),Ge=a("img"),vn=p(),bn=a("br"),Ws=p(),T=a("h3"),ee=a("a"),Zt=a("span"),m(Se.$$.fragment),_n=p(),es=a("span"),gn=r("Objects are organized in a tree structure"),Xs=p(),He=a("p"),En=r("Adding/removing objects:"),Zs=p(),A=a("ul"),R=a("li"),jn=r("Using the addition ("),ts=a("code"),wn=r("+"),yn=r(") operator (or alternatively the method "),ss=a("code"),$n=r(".add(object)"),Sn=r(") will add an object as a child of a previous object."),Pn=p(),B=a("li"),kn=r("Objects can be removed with the subtraction ("),as=a("code"),An=r("-"),xn=r(") operator or the "),ls=a("code"),Cn=r(".remove(object)"),On=r(" command."),Ln=p(),Pe=a("li"),Dn=r("The whole scene can be cleared with "),ns=a("code"),In=r(".clear()"),Tn=r("."),ea=p(),Fe=a("p"),Rn=r("Accessing objects:"),ta=p(),te=a("ul"),ke=a("li"),Bn=r("Objects can be directly accessed as attributes of their parents using their names (given with  "),rs=a("code"),Mn=r("name"),Nn=r(" attribute at creation or automatically generated from the class name + creation counter)."),Un=p(),M=a("li"),zn=r("Objects can also be accessed from their names with "),os=a("code"),qn=r(".get(name)"),Gn=r(" or by navigating in the tree using the various "),is=a("code"),Hn=r("tree_*"),Fn=r(" attributes available on any node."),sa=p(),Qe=a("p"),Qn=r("Here are a couple of examples of manipulations:"),aa=p(),m(Ae.$$.fragment),la=p(),N=a("h3"),se=a("a"),cs=a("span"),m(xe.$$.fragment),Vn=p(),ps=a("span"),Kn=r("Objects can be translated, rotated, scaled"),na=r(`

Here are a couple of examples:

	`),m(Ce.$$.fragment),ra=p(),U=a("h3"),ae=a("a"),hs=a("span"),m(Oe.$$.fragment),Yn=p(),fs=a("span"),Jn=r("Visualization engine"),oa=p(),le=a("p"),Wn=r("A default vizualization engine is provided with the vtk backend of "),ds=a("code"),Xn=r("pyvista"),Zn=r("."),ia=p(),ne=a("p"),er=r("Starting the vizualization engine can be done simply with "),us=a("code"),tr=r(".show()"),sr=r("."),ca=p(),m(Le.$$.fragment),pa=p(),re=a("p"),ar=r("You can find bridges to other rendering/simulation engines in the "),ms=a("code"),lr=r("integrations"),nr=r(" directory."),ha=p(),z=a("h1"),oe=a("a"),vs=a("span"),m(De.$$.fragment),rr=p(),bs=a("span"),or=r("Reinforcement Learning (RL) with \u{1F917} Simulate"),fa=p(),j=a("p"),ir=r(`\u{1F917} Simulate is designed to provide easy and scalable integration with reinforcement learning algorithms.
The core abstraction is through the `),Ve=a("a"),cr=r("RLEnv"),pr=r(" class that wraps a "),_s=a("code"),hr=r("Scene"),fr=r(`.
The `),Ke=a("a"),dr=r("RLEnv"),ur=r(" allows an "),Ye=a("a"),mr=r("Actuator"),vr=r(" to be manipulated by an external agent or policy."),da=p(),ie=a("p"),br=r("It is core to the design of \u{1F917} Simulate that we are "),gs=a("em"),_r=r("not creating"),gr=r(` Agents, but rather providing an interface for applications of machine learning and embodied AI.
The core API for RL applications can be seen below, where \u{1F917} Simulate constrains the information that flows from the Scene to the external agent through an Actuator abstraction.`),ua=p(),P=a("p"),Er=a("br"),jr=p(),Je=a("img"),wr=p(),yr=a("br"),ma=p(),y=a("p"),$r=r("At release, we include a set of pre-designed "),Es=a("code"),Sr=r("Actor"),Pr=r("s that can act or navigate a scene. An "),js=a("code"),kr=r("Actor"),Ar=r(" inherits from an "),ws=a("code"),xr=r("Object3D"),Cr=r(" and has sensors, actuators, and action mappings."),va=p(),q=a("h3"),ce=a("a"),ys=a("span"),m(Ie.$$.fragment),Or=p(),$s=a("span"),Lr=r("Tips"),ba=p(),pe=a("p"),Dr=r("If you are running on GCP, remember to not install "),Ss=a("code"),Ir=r("pyvistaqt"),Tr=r(", and if you did so, uninstall it in your environment, since QT doesn\u2019t work well on GCP."),this.h()},l(e){const i=Ri('[data-svelte="svelte-1phssyn"]',document.head);C=l(i,"META",{name:!0,content:!0}),i.forEach(s),ks=h(e),O=l(e,"H1",{class:!0});var ga=n(O);H=l(ga,"A",{id:!0,class:!0,href:!0});var zr=n(H);nt=l(zr,"SPAN",{});var qr=n(nt);v(ue.$$.fragment,qr),qr.forEach(s),zr.forEach(s),za=h(ga),rt=l(ga,"SPAN",{});var Gr=n(rt);qa=o(Gr,"Quicktour"),Gr.forEach(s),ga.forEach(s),As=h(e),F=l(e,"P",{});var Ea=n(F);Ga=o(Ea,"Simulate\u2019s API is inspired by the great "),me=l(Ea,"A",{href:!0,rel:!0});var Hr=n(me);Ha=o(Hr,"Kubric API"),Hr.forEach(s),Fa=o(Ea,`.
The user can create a scene and add assets to it (objects, cameras, lights if needed).
Once the scene is created you can save/share it and also render or do simulations using one of the backend rendering/simulation engines (at the moment Unity, Blender and Godot). The saving/sharing format is engine-agnostic and uses the standard glTF format for saving scenes.`),Ea.forEach(s),xs=h(e),Te=l(e,"P",{});var Fr=n(Te);Qa=o(Fr,"Let\u2019s do a quick exploration together."),Fr.forEach(s),Cs=h(e),Q=l(e,"P",{});var ja=n(Q);Va=o(ja,"To install and contribute (from "),Re=l(ja,"A",{href:!0});var Qr=n(Re);Ka=o(Qr,"CONTRIBUTING.md"),Qr.forEach(s),Ya=o(ja,")"),ja.forEach(s),Os=h(e),Be=l(e,"P",{});var Vr=n(Be);Ja=o(Vr,"Create a virtual env and then install the code style/quality tools as well as the code base locally"),Vr.forEach(s),Ls=h(e),v(ve.$$.fragment,e),Ds=h(e),k=l(e,"P",{});var We=n(k);Wa=o(We,"Before you merge a PR, fix the style (we use "),ot=l(We,"CODE",{});var Kr=n(ot);Xa=o(Kr,"isort"),Kr.forEach(s),Za=o(We," + "),it=l(We,"CODE",{});var Yr=n(it);el=o(Yr,"black"),Yr.forEach(s),tl=o(We,")"),We.forEach(s),Is=h(e),v(be.$$.fragment,e),Ts=h(e),L=l(e,"H2",{class:!0});var wa=n(L);V=l(wa,"A",{id:!0,class:!0,href:!0});var Jr=n(V);ct=l(Jr,"SPAN",{});var Wr=n(ct);v(_e.$$.fragment,Wr),Wr.forEach(s),Jr.forEach(s),sl=h(wa),pt=l(wa,"SPAN",{});var Xr=n(pt);al=o(Xr,"Project Structure"),Xr.forEach(s),wa.forEach(s),Rs=h(e),Me=l(e,"P",{});var Zr=n(Me);ll=o(Zr,"The Python API is located in src/simulate. It allows creation and loading of scenes, and sending commands to the backend."),Zr.forEach(s),Bs=h(e),K=l(e,"P",{});var ya=n(K);nl=o(ya,`The backend options (Unity, Godot, Blender) can be found in the integrations folder.
The most fully-featured backend is Unity, located in `),Ne=l(ya,"A",{href:!0});var eo=n(Ne);rl=o(eo,"integrations/Unity"),eo.forEach(s),ol=o(ya,`.
The Unity editor isn\u2019t required to run \u{1F917} Simulate, unless making changes to the backend, which requires Unity 2021.3.2f1.`),ya.forEach(s),Ms=h(e),D=l(e,"H2",{class:!0});var $a=n(D);Y=l($a,"A",{id:!0,class:!0,href:!0});var to=n(Y);ht=l(to,"SPAN",{});var so=n(ht);v(ge.$$.fragment,so),so.forEach(s),to.forEach(s),il=h($a),ft=l($a,"SPAN",{});var ao=n(ft);cl=o(ao,"Loading a scene from the hub or a local file"),ao.forEach(s),$a.forEach(s),Ns=h(e),w=l(e,"P",{});var he=n(w);pl=o(he,"Loading a scene from a local file or the hub is done with "),dt=l(he,"CODE",{});var lo=n(dt);hl=o(lo,"Scene.create_from()"),lo.forEach(s),fl=o(he,", saving or pushing to the hub with "),ut=l(he,"CODE",{});var no=n(ut);dl=o(no,"scene.save()"),no.forEach(s),ul=o(he," or "),mt=l(he,"CODE",{});var ro=n(mt);ml=o(ro,"scene.push_to_hub()"),ro.forEach(s),vl=o(he,":"),he.forEach(s),Us=h(e),v(Ee.$$.fragment,e),zs=h(e),$=l(e,"P",{align:!0});var Xe=n($);bl=l(Xe,"BR",{}),_l=h(Xe),Ue=l(Xe,"IMG",{src:!0,width:!0}),gl=h(Xe),El=l(Xe,"BR",{}),Xe.forEach(s),qs=h(e),I=l(e,"H2",{class:!0});var Sa=n(I);J=l(Sa,"A",{id:!0,class:!0,href:!0});var oo=n(J);vt=l(oo,"SPAN",{});var io=n(vt);v(je.$$.fragment,io),io.forEach(s),oo.forEach(s),jl=h(Sa),bt=l(Sa,"SPAN",{});var co=n(bt);wl=o(co,"Creating a Scene and adding/managing Objects in the scene"),co.forEach(s),Sa.forEach(s),Gs=h(e),ze=l(e,"P",{});var po=n(ze);yl=o(po,"Basic example of creating a scene with a plane and a sphere above it:"),po.forEach(s),Hs=h(e),v(we.$$.fragment,e),Fs=h(e),W=l(e,"P",{});var Pa=n(W);$l=o(Pa,"An object (as well as the Scene) is just a node in a tree provided with optional mesh (as "),_t=l(Pa,"CODE",{});var ho=n(_t);Sl=o(ho,"pyvista.PolyData"),ho.forEach(s),Pl=o(Pa," structure) and material and/or light, camera, agents special objects."),Pa.forEach(s),Qs=h(e),qe=l(e,"P",{});var fo=n(qe);kl=o(fo,"The following objects creation helpers are currently provided:"),fo.forEach(s),Vs=h(e),d=l(e,"UL",{});var u=n(d);X=l(u,"LI",{});var Ps=n(X);gt=l(Ps,"CODE",{});var uo=n(gt);Al=o(uo,"Object3D"),uo.forEach(s),xl=o(Ps," any object with a "),Et=l(Ps,"CODE",{});var mo=n(Et);Cl=o(mo,"pyvista.PolyData"),mo.forEach(s),Ol=o(Ps," mesh and/or material"),Ps.forEach(s),Ll=h(u),jt=l(u,"LI",{});var vo=n(jt);wt=l(vo,"CODE",{});var bo=n(wt);Dl=o(bo,"Plane"),bo.forEach(s),vo.forEach(s),Il=h(u),yt=l(u,"LI",{});var _o=n(yt);$t=l(_o,"CODE",{});var go=n($t);Tl=o(go,"Sphere"),go.forEach(s),_o.forEach(s),Rl=h(u),St=l(u,"LI",{});var Eo=n(St);Pt=l(Eo,"CODE",{});var jo=n(Pt);Bl=o(jo,"Capsule"),jo.forEach(s),Eo.forEach(s),Ml=h(u),kt=l(u,"LI",{});var wo=n(kt);At=l(wo,"CODE",{});var yo=n(At);Nl=o(yo,"Cylinder"),yo.forEach(s),wo.forEach(s),Ul=h(u),xt=l(u,"LI",{});var $o=n(xt);Ct=l($o,"CODE",{});var So=n(Ct);zl=o(So,"Box"),So.forEach(s),$o.forEach(s),ql=h(u),Ot=l(u,"LI",{});var Po=n(Ot);Lt=l(Po,"CODE",{});var ko=n(Lt);Gl=o(ko,"Cone"),ko.forEach(s),Po.forEach(s),Hl=h(u),Dt=l(u,"LI",{});var Ao=n(Dt);It=l(Ao,"CODE",{});var xo=n(It);Fl=o(xo,"Line"),xo.forEach(s),Ao.forEach(s),Ql=h(u),Tt=l(u,"LI",{});var Co=n(Tt);Rt=l(Co,"CODE",{});var Oo=n(Rt);Vl=o(Oo,"MultipleLines"),Oo.forEach(s),Co.forEach(s),Kl=h(u),Bt=l(u,"LI",{});var Lo=n(Bt);Mt=l(Lo,"CODE",{});var Do=n(Mt);Yl=o(Do,"Tube"),Do.forEach(s),Lo.forEach(s),Jl=h(u),Nt=l(u,"LI",{});var Io=n(Nt);Ut=l(Io,"CODE",{});var To=n(Ut);Wl=o(To,"Polygon"),To.forEach(s),Io.forEach(s),Xl=h(u),zt=l(u,"LI",{});var Ro=n(zt);qt=l(Ro,"CODE",{});var Bo=n(qt);Zl=o(Bo,"Ring"),Bo.forEach(s),Ro.forEach(s),en=h(u),Gt=l(u,"LI",{});var Mo=n(Gt);Ht=l(Mo,"CODE",{});var No=n(Ht);tn=o(No,"Text3D"),No.forEach(s),Mo.forEach(s),sn=h(u),Ft=l(u,"LI",{});var Uo=n(Ft);Qt=l(Uo,"CODE",{});var zo=n(Qt);an=o(zo,"Triangle"),zo.forEach(s),Uo.forEach(s),ln=h(u),Vt=l(u,"LI",{});var qo=n(Vt);Kt=l(qo,"CODE",{});var Go=n(Kt);nn=o(Go,"Rectangle"),Go.forEach(s),qo.forEach(s),rn=h(u),Yt=l(u,"LI",{});var Ho=n(Yt);Jt=l(Ho,"CODE",{});var Fo=n(Jt);on=o(Fo,"Circle"),Fo.forEach(s),Ho.forEach(s),cn=h(u),Wt=l(u,"LI",{});var Qo=n(Wt);Xt=l(Qo,"CODE",{});var Vo=n(Xt);pn=o(Vo,"StructuredGrid"),Vo.forEach(s),Qo.forEach(s),u.forEach(s),Ks=h(e),Z=l(e,"P",{});var ka=n(Z);hn=o(ka,"Most of these objects can be visualized by running the following "),ye=l(ka,"A",{href:!0,rel:!0});var Ko=n(ye);fn=o(Ko,"example"),Ko.forEach(s),dn=o(ka,":"),ka.forEach(s),Ys=h(e),v($e.$$.fragment,e),Js=h(e),S=l(e,"P",{align:!0});var Ze=n(S);un=l(Ze,"BR",{}),mn=h(Ze),Ge=l(Ze,"IMG",{src:!0,width:!0}),vn=h(Ze),bn=l(Ze,"BR",{}),Ze.forEach(s),Ws=h(e),T=l(e,"H3",{class:!0});var Aa=n(T);ee=l(Aa,"A",{id:!0,class:!0,href:!0});var Yo=n(ee);Zt=l(Yo,"SPAN",{});var Jo=n(Zt);v(Se.$$.fragment,Jo),Jo.forEach(s),Yo.forEach(s),_n=h(Aa),es=l(Aa,"SPAN",{});var Wo=n(es);gn=o(Wo,"Objects are organized in a tree structure"),Wo.forEach(s),Aa.forEach(s),Xs=h(e),He=l(e,"P",{});var Xo=n(He);En=o(Xo,"Adding/removing objects:"),Xo.forEach(s),Zs=h(e),A=l(e,"UL",{});var et=n(A);R=l(et,"LI",{});var tt=n(R);jn=o(tt,"Using the addition ("),ts=l(tt,"CODE",{});var Zo=n(ts);wn=o(Zo,"+"),Zo.forEach(s),yn=o(tt,") operator (or alternatively the method "),ss=l(tt,"CODE",{});var ei=n(ss);$n=o(ei,".add(object)"),ei.forEach(s),Sn=o(tt,") will add an object as a child of a previous object."),tt.forEach(s),Pn=h(et),B=l(et,"LI",{});var st=n(B);kn=o(st,"Objects can be removed with the subtraction ("),as=l(st,"CODE",{});var ti=n(as);An=o(ti,"-"),ti.forEach(s),xn=o(st,") operator or the "),ls=l(st,"CODE",{});var si=n(ls);Cn=o(si,".remove(object)"),si.forEach(s),On=o(st," command."),st.forEach(s),Ln=h(et),Pe=l(et,"LI",{});var xa=n(Pe);Dn=o(xa,"The whole scene can be cleared with "),ns=l(xa,"CODE",{});var ai=n(ns);In=o(ai,".clear()"),ai.forEach(s),Tn=o(xa,"."),xa.forEach(s),et.forEach(s),ea=h(e),Fe=l(e,"P",{});var li=n(Fe);Rn=o(li,"Accessing objects:"),li.forEach(s),ta=h(e),te=l(e,"UL",{});var Ca=n(te);ke=l(Ca,"LI",{});var Oa=n(ke);Bn=o(Oa,"Objects can be directly accessed as attributes of their parents using their names (given with  "),rs=l(Oa,"CODE",{});var ni=n(rs);Mn=o(ni,"name"),ni.forEach(s),Nn=o(Oa," attribute at creation or automatically generated from the class name + creation counter)."),Oa.forEach(s),Un=h(Ca),M=l(Ca,"LI",{});var at=n(M);zn=o(at,"Objects can also be accessed from their names with "),os=l(at,"CODE",{});var ri=n(os);qn=o(ri,".get(name)"),ri.forEach(s),Gn=o(at," or by navigating in the tree using the various "),is=l(at,"CODE",{});var oi=n(is);Hn=o(oi,"tree_*"),oi.forEach(s),Fn=o(at," attributes available on any node."),at.forEach(s),Ca.forEach(s),sa=h(e),Qe=l(e,"P",{});var ii=n(Qe);Qn=o(ii,"Here are a couple of examples of manipulations:"),ii.forEach(s),aa=h(e),v(Ae.$$.fragment,e),la=h(e),N=l(e,"H3",{class:!0});var La=n(N);se=l(La,"A",{id:!0,class:!0,href:!0});var ci=n(se);cs=l(ci,"SPAN",{});var pi=n(cs);v(xe.$$.fragment,pi),pi.forEach(s),ci.forEach(s),Vn=h(La),ps=l(La,"SPAN",{});var hi=n(ps);Kn=o(hi,"Objects can be translated, rotated, scaled"),hi.forEach(s),La.forEach(s),na=o(e,`

Here are a couple of examples:

	`),v(Ce.$$.fragment,e),ra=h(e),U=l(e,"H3",{class:!0});var Da=n(U);ae=l(Da,"A",{id:!0,class:!0,href:!0});var fi=n(ae);hs=l(fi,"SPAN",{});var di=n(hs);v(Oe.$$.fragment,di),di.forEach(s),fi.forEach(s),Yn=h(Da),fs=l(Da,"SPAN",{});var ui=n(fs);Jn=o(ui,"Visualization engine"),ui.forEach(s),Da.forEach(s),oa=h(e),le=l(e,"P",{});var Ia=n(le);Wn=o(Ia,"A default vizualization engine is provided with the vtk backend of "),ds=l(Ia,"CODE",{});var mi=n(ds);Xn=o(mi,"pyvista"),mi.forEach(s),Zn=o(Ia,"."),Ia.forEach(s),ia=h(e),ne=l(e,"P",{});var Ta=n(ne);er=o(Ta,"Starting the vizualization engine can be done simply with "),us=l(Ta,"CODE",{});var vi=n(us);tr=o(vi,".show()"),vi.forEach(s),sr=o(Ta,"."),Ta.forEach(s),ca=h(e),v(Le.$$.fragment,e),pa=h(e),re=l(e,"P",{});var Ra=n(re);ar=o(Ra,"You can find bridges to other rendering/simulation engines in the "),ms=l(Ra,"CODE",{});var bi=n(ms);lr=o(bi,"integrations"),bi.forEach(s),nr=o(Ra," directory."),Ra.forEach(s),ha=h(e),z=l(e,"H1",{class:!0});var Ba=n(z);oe=l(Ba,"A",{id:!0,class:!0,href:!0});var _i=n(oe);vs=l(_i,"SPAN",{});var gi=n(vs);v(De.$$.fragment,gi),gi.forEach(s),_i.forEach(s),rr=h(Ba),bs=l(Ba,"SPAN",{});var Ei=n(bs);or=o(Ei,"Reinforcement Learning (RL) with \u{1F917} Simulate"),Ei.forEach(s),Ba.forEach(s),fa=h(e),j=l(e,"P",{});var x=n(j);ir=o(x,`\u{1F917} Simulate is designed to provide easy and scalable integration with reinforcement learning algorithms.
The core abstraction is through the `),Ve=l(x,"A",{href:!0});var ji=n(Ve);cr=o(ji,"RLEnv"),ji.forEach(s),pr=o(x," class that wraps a "),_s=l(x,"CODE",{});var wi=n(_s);hr=o(wi,"Scene"),wi.forEach(s),fr=o(x,`.
The `),Ke=l(x,"A",{href:!0});var yi=n(Ke);dr=o(yi,"RLEnv"),yi.forEach(s),ur=o(x," allows an "),Ye=l(x,"A",{href:!0});var $i=n(Ye);mr=o($i,"Actuator"),$i.forEach(s),vr=o(x," to be manipulated by an external agent or policy."),x.forEach(s),da=h(e),ie=l(e,"P",{});var Ma=n(ie);br=o(Ma,"It is core to the design of \u{1F917} Simulate that we are "),gs=l(Ma,"EM",{});var Si=n(gs);_r=o(Si,"not creating"),Si.forEach(s),gr=o(Ma,` Agents, but rather providing an interface for applications of machine learning and embodied AI.
The core API for RL applications can be seen below, where \u{1F917} Simulate constrains the information that flows from the Scene to the external agent through an Actuator abstraction.`),Ma.forEach(s),ua=h(e),P=l(e,"P",{align:!0});var lt=n(P);Er=l(lt,"BR",{}),jr=h(lt),Je=l(lt,"IMG",{src:!0,width:!0}),wr=h(lt),yr=l(lt,"BR",{}),lt.forEach(s),ma=h(e),y=l(e,"P",{});var fe=n(y);$r=o(fe,"At release, we include a set of pre-designed "),Es=l(fe,"CODE",{});var Pi=n(Es);Sr=o(Pi,"Actor"),Pi.forEach(s),Pr=o(fe,"s that can act or navigate a scene. An "),js=l(fe,"CODE",{});var ki=n(js);kr=o(ki,"Actor"),ki.forEach(s),Ar=o(fe," inherits from an "),ws=l(fe,"CODE",{});var Ai=n(ws);xr=o(Ai,"Object3D"),Ai.forEach(s),Cr=o(fe," and has sensors, actuators, and action mappings."),fe.forEach(s),va=h(e),q=l(e,"H3",{class:!0});var Na=n(q);ce=l(Na,"A",{id:!0,class:!0,href:!0});var xi=n(ce);ys=l(xi,"SPAN",{});var Ci=n(ys);v(Ie.$$.fragment,Ci),Ci.forEach(s),xi.forEach(s),Or=h(Na),$s=l(Na,"SPAN",{});var Oi=n($s);Lr=o(Oi,"Tips"),Oi.forEach(s),Na.forEach(s),ba=h(e),pe=l(e,"P",{});var Ua=n(pe);Dr=o(Ua,"If you are running on GCP, remember to not install "),Ss=l(Ua,"CODE",{});var Li=n(Ss);Ir=o(Li,"pyvistaqt"),Li.forEach(s),Tr=o(Ua,", and if you did so, uninstall it in your environment, since QT doesn\u2019t work well on GCP."),Ua.forEach(s),this.h()},h(){f(C,"name","hf:doc:metadata"),f(C,"content",JSON.stringify(Ui)),f(H,"id","quicktour"),f(H,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(H,"href","#quicktour"),f(O,"class","relative group"),f(me,"href","https://github.com/google-research/kubric"),f(me,"rel","nofollow"),f(Re,"href","CONTRIBUTING.md"),f(V,"id","project-structure"),f(V,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(V,"href","#project-structure"),f(L,"class","relative group"),f(Ne,"href","integrations/Unity"),f(Y,"id","loading-a-scene-from-the-hub-or-a-local-file"),f(Y,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(Y,"href","#loading-a-scene-from-the-hub-or-a-local-file"),f(D,"class","relative group"),Rr(Ue.src,Mr="https://user-images.githubusercontent.com/10695622/191554717-acba4764-a4f4-4609-834a-39ddb50b844a.png")||f(Ue,"src",Mr),f(Ue,"width","400"),f($,"align","center"),f(J,"id","creating-a-scene-and-addingmanaging-objects-in-the-scene"),f(J,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(J,"href","#creating-a-scene-and-addingmanaging-objects-in-the-scene"),f(I,"class","relative group"),f(ye,"href","https://github.com/huggingface/simulate/tree/main/examples/objects.py"),f(ye,"rel","nofollow"),Rr(Ge.src,Nr="https://user-images.githubusercontent.com/10695622/191562825-49d4c692-a1ed-44e9-bdb9-da5f0bfb9828.png")||f(Ge,"src",Nr),f(Ge,"width","400"),f(S,"align","center"),f(ee,"id","objects-are-organized-in-a-tree-structure"),f(ee,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(ee,"href","#objects-are-organized-in-a-tree-structure"),f(T,"class","relative group"),f(se,"id","objects-can-be-translated-rotated-scaled"),f(se,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(se,"href","#objects-can-be-translated-rotated-scaled"),f(N,"class","relative group"),f(ae,"id","visualization-engine"),f(ae,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(ae,"href","#visualization-engine"),f(U,"class","relative group"),f(oe,"id","reinforcement-learning-rl-with-simulate"),f(oe,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(oe,"href","#reinforcement-learning-rl-with-simulate"),f(z,"class","relative group"),f(Ve,"href","/docs/simulate/pr_350/en/api/rl_env#simulate.RLEnv"),f(Ke,"href","/docs/simulate/pr_350/en/api/rl_env#simulate.RLEnv"),f(Ye,"href","/docs/simulate/pr_350/en/api/actuators#simulate.Actuator"),Rr(Je.src,Ur="https://user-images.githubusercontent.com/10695622/192663853-a7543091-8d45-4fba-b8dc-2b632d66a35f.png")||f(Je,"src",Ur),f(Je,"width","500"),f(P,"align","center"),f(ce,"id","tips"),f(ce,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(ce,"href","#tips"),f(q,"class","relative group")},m(e,i){t(document.head,C),c(e,ks,i),c(e,O,i),t(O,H),t(H,nt),b(ue,nt,null),t(O,za),t(O,rt),t(rt,qa),c(e,As,i),c(e,F,i),t(F,Ga),t(F,me),t(me,Ha),t(F,Fa),c(e,xs,i),c(e,Te,i),t(Te,Qa),c(e,Cs,i),c(e,Q,i),t(Q,Va),t(Q,Re),t(Re,Ka),t(Q,Ya),c(e,Os,i),c(e,Be,i),t(Be,Ja),c(e,Ls,i),b(ve,e,i),c(e,Ds,i),c(e,k,i),t(k,Wa),t(k,ot),t(ot,Xa),t(k,Za),t(k,it),t(it,el),t(k,tl),c(e,Is,i),b(be,e,i),c(e,Ts,i),c(e,L,i),t(L,V),t(V,ct),b(_e,ct,null),t(L,sl),t(L,pt),t(pt,al),c(e,Rs,i),c(e,Me,i),t(Me,ll),c(e,Bs,i),c(e,K,i),t(K,nl),t(K,Ne),t(Ne,rl),t(K,ol),c(e,Ms,i),c(e,D,i),t(D,Y),t(Y,ht),b(ge,ht,null),t(D,il),t(D,ft),t(ft,cl),c(e,Ns,i),c(e,w,i),t(w,pl),t(w,dt),t(dt,hl),t(w,fl),t(w,ut),t(ut,dl),t(w,ul),t(w,mt),t(mt,ml),t(w,vl),c(e,Us,i),b(Ee,e,i),c(e,zs,i),c(e,$,i),t($,bl),t($,_l),t($,Ue),t($,gl),t($,El),c(e,qs,i),c(e,I,i),t(I,J),t(J,vt),b(je,vt,null),t(I,jl),t(I,bt),t(bt,wl),c(e,Gs,i),c(e,ze,i),t(ze,yl),c(e,Hs,i),b(we,e,i),c(e,Fs,i),c(e,W,i),t(W,$l),t(W,_t),t(_t,Sl),t(W,Pl),c(e,Qs,i),c(e,qe,i),t(qe,kl),c(e,Vs,i),c(e,d,i),t(d,X),t(X,gt),t(gt,Al),t(X,xl),t(X,Et),t(Et,Cl),t(X,Ol),t(d,Ll),t(d,jt),t(jt,wt),t(wt,Dl),t(d,Il),t(d,yt),t(yt,$t),t($t,Tl),t(d,Rl),t(d,St),t(St,Pt),t(Pt,Bl),t(d,Ml),t(d,kt),t(kt,At),t(At,Nl),t(d,Ul),t(d,xt),t(xt,Ct),t(Ct,zl),t(d,ql),t(d,Ot),t(Ot,Lt),t(Lt,Gl),t(d,Hl),t(d,Dt),t(Dt,It),t(It,Fl),t(d,Ql),t(d,Tt),t(Tt,Rt),t(Rt,Vl),t(d,Kl),t(d,Bt),t(Bt,Mt),t(Mt,Yl),t(d,Jl),t(d,Nt),t(Nt,Ut),t(Ut,Wl),t(d,Xl),t(d,zt),t(zt,qt),t(qt,Zl),t(d,en),t(d,Gt),t(Gt,Ht),t(Ht,tn),t(d,sn),t(d,Ft),t(Ft,Qt),t(Qt,an),t(d,ln),t(d,Vt),t(Vt,Kt),t(Kt,nn),t(d,rn),t(d,Yt),t(Yt,Jt),t(Jt,on),t(d,cn),t(d,Wt),t(Wt,Xt),t(Xt,pn),c(e,Ks,i),c(e,Z,i),t(Z,hn),t(Z,ye),t(ye,fn),t(Z,dn),c(e,Ys,i),b($e,e,i),c(e,Js,i),c(e,S,i),t(S,un),t(S,mn),t(S,Ge),t(S,vn),t(S,bn),c(e,Ws,i),c(e,T,i),t(T,ee),t(ee,Zt),b(Se,Zt,null),t(T,_n),t(T,es),t(es,gn),c(e,Xs,i),c(e,He,i),t(He,En),c(e,Zs,i),c(e,A,i),t(A,R),t(R,jn),t(R,ts),t(ts,wn),t(R,yn),t(R,ss),t(ss,$n),t(R,Sn),t(A,Pn),t(A,B),t(B,kn),t(B,as),t(as,An),t(B,xn),t(B,ls),t(ls,Cn),t(B,On),t(A,Ln),t(A,Pe),t(Pe,Dn),t(Pe,ns),t(ns,In),t(Pe,Tn),c(e,ea,i),c(e,Fe,i),t(Fe,Rn),c(e,ta,i),c(e,te,i),t(te,ke),t(ke,Bn),t(ke,rs),t(rs,Mn),t(ke,Nn),t(te,Un),t(te,M),t(M,zn),t(M,os),t(os,qn),t(M,Gn),t(M,is),t(is,Hn),t(M,Fn),c(e,sa,i),c(e,Qe,i),t(Qe,Qn),c(e,aa,i),b(Ae,e,i),c(e,la,i),c(e,N,i),t(N,se),t(se,cs),b(xe,cs,null),t(N,Vn),t(N,ps),t(ps,Kn),c(e,na,i),b(Ce,e,i),c(e,ra,i),c(e,U,i),t(U,ae),t(ae,hs),b(Oe,hs,null),t(U,Yn),t(U,fs),t(fs,Jn),c(e,oa,i),c(e,le,i),t(le,Wn),t(le,ds),t(ds,Xn),t(le,Zn),c(e,ia,i),c(e,ne,i),t(ne,er),t(ne,us),t(us,tr),t(ne,sr),c(e,ca,i),b(Le,e,i),c(e,pa,i),c(e,re,i),t(re,ar),t(re,ms),t(ms,lr),t(re,nr),c(e,ha,i),c(e,z,i),t(z,oe),t(oe,vs),b(De,vs,null),t(z,rr),t(z,bs),t(bs,or),c(e,fa,i),c(e,j,i),t(j,ir),t(j,Ve),t(Ve,cr),t(j,pr),t(j,_s),t(_s,hr),t(j,fr),t(j,Ke),t(Ke,dr),t(j,ur),t(j,Ye),t(Ye,mr),t(j,vr),c(e,da,i),c(e,ie,i),t(ie,br),t(ie,gs),t(gs,_r),t(ie,gr),c(e,ua,i),c(e,P,i),t(P,Er),t(P,jr),t(P,Je),t(P,wr),t(P,yr),c(e,ma,i),c(e,y,i),t(y,$r),t(y,Es),t(Es,Sr),t(y,Pr),t(y,js),t(js,kr),t(y,Ar),t(y,ws),t(ws,xr),t(y,Cr),c(e,va,i),c(e,q,i),t(q,ce),t(ce,ys),b(Ie,ys,null),t(q,Or),t(q,$s),t($s,Lr),c(e,ba,i),c(e,pe,i),t(pe,Dr),t(pe,Ss),t(Ss,Ir),t(pe,Tr),_a=!0},p:Bi,i(e){_a||(_(ue.$$.fragment,e),_(ve.$$.fragment,e),_(be.$$.fragment,e),_(_e.$$.fragment,e),_(ge.$$.fragment,e),_(Ee.$$.fragment,e),_(je.$$.fragment,e),_(we.$$.fragment,e),_($e.$$.fragment,e),_(Se.$$.fragment,e),_(Ae.$$.fragment,e),_(xe.$$.fragment,e),_(Ce.$$.fragment,e),_(Oe.$$.fragment,e),_(Le.$$.fragment,e),_(De.$$.fragment,e),_(Ie.$$.fragment,e),_a=!0)},o(e){g(ue.$$.fragment,e),g(ve.$$.fragment,e),g(be.$$.fragment,e),g(_e.$$.fragment,e),g(ge.$$.fragment,e),g(Ee.$$.fragment,e),g(je.$$.fragment,e),g(we.$$.fragment,e),g($e.$$.fragment,e),g(Se.$$.fragment,e),g(Ae.$$.fragment,e),g(xe.$$.fragment,e),g(Ce.$$.fragment,e),g(Oe.$$.fragment,e),g(Le.$$.fragment,e),g(De.$$.fragment,e),g(Ie.$$.fragment,e),_a=!1},d(e){s(C),e&&s(ks),e&&s(O),E(ue),e&&s(As),e&&s(F),e&&s(xs),e&&s(Te),e&&s(Cs),e&&s(Q),e&&s(Os),e&&s(Be),e&&s(Ls),E(ve,e),e&&s(Ds),e&&s(k),e&&s(Is),E(be,e),e&&s(Ts),e&&s(L),E(_e),e&&s(Rs),e&&s(Me),e&&s(Bs),e&&s(K),e&&s(Ms),e&&s(D),E(ge),e&&s(Ns),e&&s(w),e&&s(Us),E(Ee,e),e&&s(zs),e&&s($),e&&s(qs),e&&s(I),E(je),e&&s(Gs),e&&s(ze),e&&s(Hs),E(we,e),e&&s(Fs),e&&s(W),e&&s(Qs),e&&s(qe),e&&s(Vs),e&&s(d),e&&s(Ks),e&&s(Z),e&&s(Ys),E($e,e),e&&s(Js),e&&s(S),e&&s(Ws),e&&s(T),E(Se),e&&s(Xs),e&&s(He),e&&s(Zs),e&&s(A),e&&s(ea),e&&s(Fe),e&&s(ta),e&&s(te),e&&s(sa),e&&s(Qe),e&&s(aa),E(Ae,e),e&&s(la),e&&s(N),E(xe),e&&s(na),E(Ce,e),e&&s(ra),e&&s(U),E(Oe),e&&s(oa),e&&s(le),e&&s(ia),e&&s(ne),e&&s(ca),E(Le,e),e&&s(pa),e&&s(re),e&&s(ha),e&&s(z),E(De),e&&s(fa),e&&s(j),e&&s(da),e&&s(ie),e&&s(ua),e&&s(P),e&&s(ma),e&&s(y),e&&s(va),e&&s(q),E(Ie),e&&s(ba),e&&s(pe)}}}const Ui={local:"reinforcement-learning-rl-with-simulate",sections:[{local:"tips",title:"Tips"}],title:"Reinforcement Learning (RL) with \u{1F917} Simulate"};function zi(Br){return Mi(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Fi extends Di{constructor(C){super();Ii(this,C,zi,Ni,Ti,{})}}export{Fi as default,Ui as metadata};
