import{S as Mi,i as Bi,s as Ni,e as a,k as p,w as m,t as r,M as Ui,c as l,d as s,m as h,a as n,x as v,h as o,b as f,N as Nr,G as t,g as c,y as b,L as zi,q as _,o as g,B as E,v as Gi}from"../chunks/vendor-hf-doc-builder.js";import{I as q}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as de}from"../chunks/CodeBlock-hf-doc-builder.js";function qi(Ur){let C,xs,O,H,rt,ue,qa,ot,Ha,As,F,Fa,me,Qa,Va,Cs,Te,Wa,Os,Re,Ka,Is,Q,Ya,Me,Ja,Xa,Ls,Be,Za,Ds,ve,Ts,k,el,it,tl,sl,ct,al,ll,Rs,be,Ms,I,V,pt,_e,nl,ht,rl,Bs,Ne,ol,Ns,W,il,Ue,cl,pl,Us,L,K,ft,ge,hl,dt,fl,zs,w,dl,ut,ul,ml,mt,vl,bl,vt,_l,gl,Gs,Ee,qs,$,El,jl,ze,zr,wl,yl,Hs,D,Y,bt,je,$l,_t,Pl,Fs,Ge,Sl,Qs,we,Vs,J,kl,gt,xl,Al,Ws,qe,Cl,Ks,d,X,Et,Ol,Il,jt,Ll,Dl,Tl,wt,yt,Rl,Ml,$t,Pt,Bl,Nl,St,kt,Ul,zl,xt,At,Gl,ql,Ct,Ot,Hl,Fl,It,Lt,Ql,Vl,Dt,Tt,Wl,Kl,Rt,Mt,Yl,Jl,Bt,Nt,Xl,Zl,Ut,zt,en,tn,Gt,qt,sn,an,Ht,Ft,ln,nn,Qt,Vt,rn,on,Wt,Kt,cn,pn,Yt,Jt,hn,fn,Xt,Zt,dn,Ys,Z,un,ye,mn,vn,Js,$e,Xs,P,bn,_n,He,Gr,gn,En,Zs,T,ee,es,Pe,jn,ts,wn,ea,Fe,yn,ta,x,R,$n,ss,Pn,Sn,as,kn,xn,An,M,Cn,ls,On,In,ns,Ln,Dn,Tn,Se,Rn,rs,Mn,Bn,sa,Qe,Nn,aa,te,ke,Un,os,zn,Gn,qn,B,Hn,is,Fn,Qn,cs,Vn,Wn,la,Ve,Kn,na,xe,ra,N,se,ps,Ae,Yn,hs,Jn,oa,Ce,ia,U,ae,fs,Oe,Xn,ds,Zn,ca,le,er,us,tr,sr,pa,ne,ar,ms,lr,nr,ha,Ie,fa,re,rr,vs,or,ir,da,z,oe,bs,Le,cr,_s,pr,ua,j,hr,We,fr,dr,gs,ur,mr,Ke,vr,br,Ye,_r,gr,ma,ie,Er,Es,jr,wr,va,S,yr,$r,Je,qr,Pr,Sr,ba,y,kr,js,xr,Ar,ws,Cr,Or,ys,Ir,Lr,_a,G,ce,$s,De,Dr,Ps,Tr,ga,pe,Rr,Ss,Mr,Br,Ea;return ue=new q({}),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 q({}),ge=new q({}),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 q({}),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'}}),Pe=new q({}),xe=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)`}}),Ae=new q({}),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>, it&#x27;s 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 axis`}}),Oe=new q({}),Ie=new de({props:{code:"scene.show()",highlighted:'<span class="hljs-built_in">scene</span>.<span class="hljs-built_in">show</span>()'}}),Le=new q({}),De=new q({}),{c(){C=a("meta"),xs=p(),O=a("h1"),H=a("a"),rt=a("span"),m(ue.$$.fragment),qa=p(),ot=a("span"),Ha=r("Quicktour"),As=p(),F=a("p"),Fa=r("Simulate\u2019s API is inspired by the great "),me=a("a"),Qa=r("Kubric\u2019s API"),Va=r(`.
The user create a scene and add assets in 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 using the industry standard glTF format for saving scenes.`),Cs=p(),Te=a("p"),Wa=r("Let\u2019s do a quick exploration together."),Os=p(),Re=a("p"),Ka=r("We\u2019ll use the default backend which is a simple"),Is=p(),Q=a("p"),Ya=r("To install and contribute (from "),Me=a("a"),Ja=r("CONTRIBUTING.md"),Xa=r(")"),Ls=p(),Be=a("p"),Za=r("Create a virtual env and then install the code style/quality tools as well as the code base locally"),Ds=p(),m(ve.$$.fragment),Ts=p(),k=a("p"),el=r("Before you merge a PR, fix the style (we use "),it=a("code"),tl=r("isort"),sl=r(" + "),ct=a("code"),al=r("black"),ll=r(")"),Rs=p(),m(be.$$.fragment),Ms=p(),I=a("h2"),V=a("a"),pt=a("span"),m(_e.$$.fragment),nl=p(),ht=a("span"),rl=r("Project Structure"),Bs=p(),Ne=a("p"),ol=r("The Python API is located in src/simulate. It allows creation and loading of scenes, and sending commands to the backend."),Ns=p(),W=a("p"),il=r("The backend, currently just Unity, is located in "),Ue=a("a"),cl=r("integrations/Unity"),pl=r(`.
This is currently a Unity editor project, which must be opened in Unity 2021.3.2f1.
In the future, this will be built as an executable, and spawned by the Python API.`),Us=p(),L=a("h2"),K=a("a"),ft=a("span"),m(ge.$$.fragment),hl=p(),dt=a("span"),fl=r("Loading a scene from the hub or a local file"),zs=p(),w=a("p"),dl=r("Loading a scene from a local file or the hub is done with "),ut=a("code"),ul=r("Scene.create_from()"),ml=r(", saving or pushing to the hub with "),mt=a("code"),vl=r("scene.save()"),bl=r(" or "),vt=a("code"),_l=r("scene.push_to_hub()"),gl=r(":"),Gs=p(),m(Ee.$$.fragment),qs=p(),$=a("p"),El=a("br"),jl=p(),ze=a("img"),wl=p(),yl=a("br"),Hs=p(),D=a("h2"),Y=a("a"),bt=a("span"),m(je.$$.fragment),$l=p(),_t=a("span"),Pl=r("Creating a Scene and adding/managing Objects in the scene"),Fs=p(),Ge=a("p"),Sl=r("Basic example of creating a scene with a plane and a sphere above it:"),Qs=p(),m(we.$$.fragment),Vs=p(),J=a("p"),kl=r("An object (as well as the Scene) is just a node in a tree provided with optional mesh (as "),gt=a("code"),xl=r("pyvista.PolyData"),Al=r(" structure) and material and/or light, camera, agents special objects."),Ws=p(),qe=a("p"),Cl=r("The following objects creation helpers are currently provided:"),Ks=p(),d=a("ul"),X=a("li"),Et=a("code"),Ol=r("Object3D"),Il=r(" any object with a "),jt=a("code"),Ll=r("pyvista.PolyData"),Dl=r(" mesh and/or material"),Tl=p(),wt=a("li"),yt=a("code"),Rl=r("Plane"),Ml=p(),$t=a("li"),Pt=a("code"),Bl=r("Sphere"),Nl=p(),St=a("li"),kt=a("code"),Ul=r("Capsule"),zl=p(),xt=a("li"),At=a("code"),Gl=r("Cylinder"),ql=p(),Ct=a("li"),Ot=a("code"),Hl=r("Box"),Fl=p(),It=a("li"),Lt=a("code"),Ql=r("Cone"),Vl=p(),Dt=a("li"),Tt=a("code"),Wl=r("Line"),Kl=p(),Rt=a("li"),Mt=a("code"),Yl=r("MultipleLines"),Jl=p(),Bt=a("li"),Nt=a("code"),Xl=r("Tube"),Zl=p(),Ut=a("li"),zt=a("code"),en=r("Polygon"),tn=p(),Gt=a("li"),qt=a("code"),sn=r("Ring"),an=p(),Ht=a("li"),Ft=a("code"),ln=r("Text3D"),nn=p(),Qt=a("li"),Vt=a("code"),rn=r("Triangle"),on=p(),Wt=a("li"),Kt=a("code"),cn=r("Rectangle"),pn=p(),Yt=a("li"),Jt=a("code"),hn=r("Circle"),fn=p(),Xt=a("li"),Zt=a("code"),dn=r("StructuredGrid"),Ys=p(),Z=a("p"),un=r("Most of these objects can be visualized by running the following "),ye=a("a"),mn=r("example"),vn=r(":"),Js=p(),m($e.$$.fragment),Xs=p(),P=a("p"),bn=a("br"),_n=p(),He=a("img"),gn=p(),En=a("br"),Zs=p(),T=a("h3"),ee=a("a"),es=a("span"),m(Pe.$$.fragment),jn=p(),ts=a("span"),wn=r("Objects are organized in a tree structure"),ea=p(),Fe=a("p"),yn=r("Adding/removing objects:"),ta=p(),x=a("ul"),R=a("li"),$n=r("Using the addition ("),ss=a("code"),Pn=r("+"),Sn=r(") operator (or alternatively the method "),as=a("code"),kn=r(".add(object)"),xn=r(") will add an object as a child of a previous object."),An=p(),M=a("li"),Cn=r("Objects can be removed with the subtraction ("),ls=a("code"),On=r("-"),In=r(") operator or the "),ns=a("code"),Ln=r(".remove(object)"),Dn=r(" command."),Tn=p(),Se=a("li"),Rn=r("The whole scene can be cleared with "),rs=a("code"),Mn=r(".clear()"),Bn=r("."),sa=p(),Qe=a("p"),Nn=r("Accessing objects:"),aa=p(),te=a("ul"),ke=a("li"),Un=r("Objects can be directly accessed as attributes of their parents using their names (given with  "),os=a("code"),zn=r("name"),Gn=r(" attribute at creation or automatically generated from the class name + creation counter)."),qn=p(),B=a("li"),Hn=r("Objects can also be accessed from their names with "),is=a("code"),Fn=r(".get(name)"),Qn=r(" or by navigating in the tree using the various "),cs=a("code"),Vn=r("tree_*"),Wn=r(" attributes available on any node."),la=p(),Ve=a("p"),Kn=r("Here are a couple of examples of manipulations:"),na=p(),m(xe.$$.fragment),ra=p(),N=a("h3"),se=a("a"),ps=a("span"),m(Ae.$$.fragment),Yn=p(),hs=a("span"),Jn=r("Objects can be translated, rotated, scaled"),oa=r(`

Here are a couple of examples:

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

Here are a couple of examples:

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