import{S as Lo,i as Co,s as Oo,e as t,k as p,w as m,t as r,M as Io,c as l,d as a,m as h,a as n,x as v,h as o,b as d,N as Ao,G as s,g as c,y as b,L as To,q as g,o as w,B as y,v as Do}from"../chunks/vendor-hf-doc-builder.js";import{I as B}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as ae}from"../chunks/CodeBlock-hf-doc-builder.js";function qo(Rn){let $,pa,S,M,Ve,te,yt,We,_t,ha,N,jt,le,Et,kt,da,Se,$t,fa,Pe,St,ua,U,Pt,xe,xt,At,ma,Ae,Lt,va,ne,ba,E,Ct,Ye,Ot,It,Je,Tt,Dt,ga,re,wa,P,z,Xe,oe,qt,Ze,Rt,ya,Le,Bt,_a,G,Mt,Ce,Nt,Ut,ja,x,H,es,ie,zt,ss,Gt,Ea,_,Ht,as,Ft,Qt,ts,Kt,Vt,ls,Wt,Yt,ka,ce,$a,j,Jt,Xt,Oe,Bn,Zt,el,sl,A,F,ns,pe,al,rs,tl,Sa,Ie,ll,Pa,he,xa,Q,nl,os,rl,ol,Aa,Te,il,La,f,K,is,cl,pl,cs,hl,dl,fl,ps,hs,ul,ml,ds,fs,vl,bl,us,ms,gl,wl,vs,bs,yl,_l,gs,ws,jl,El,ys,_s,kl,$l,js,Es,Sl,Pl,ks,$s,xl,Al,Ss,Ps,Ll,Cl,xs,As,Ol,Il,Ls,Cs,Tl,Dl,Os,Is,ql,Rl,Ts,Ds,Bl,Ml,qs,Rs,Nl,Ul,Bs,Ms,zl,Gl,Ns,Us,Hl,Ca,V,Fl,de,Ql,Kl,Oa,fe,Ia,De,Vl,Ta,Da,qa,ue,Mn,Ra,Ba,Ma,L,W,zs,me,Wl,Gs,Yl,Na,qe,Jl,Ua,k,C,Xl,Hs,Zl,en,Fs,sn,an,tn,O,ln,Qs,nn,rn,Ks,on,cn,pn,ve,hn,Vs,dn,fn,za,Re,un,Ga,Y,be,mn,Ws,vn,bn,gn,I,wn,Ys,yn,_n,Js,jn,En,Ha,Be,kn,Fa,ge,Qa,T,J,Xs,we,$n,Zs,Sn,Ka,D,X,ea,ye,Pn,sa,xn,Va,Me,An,Wa,q,Z,aa,_e,Ln,ta,Cn,Ya,Ne,On,Ja,Ue,la,na,ra,In,Xa,R,ee,oa,je,Tn,ia,Dn,Za,Ee,et,ze,qn,st,ke,at;return te=new B({}),ne=new ae({props:{code:"pip install --upgrade simulate",highlighted:'pip install <span class="hljs-comment">--upgrade simulate</span>'}}),re=new ae({props:{code:"make style",highlighted:'<span class="hljs-attribute">make style</span>'}}),oe=new B({}),ie=new B({}),ce=new ae({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`,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`}}),pe=new B({}),he=new ae({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>()`}}),fe=new ae({props:{code:"python examples/basic/objects.py",highlighted:'python examples<span class="hljs-regexp">/basic/</span>objects.py'}}),me=new B({}),ge=new ae({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)`}}),we=new B({}),ye=new B({}),_e=new B({}),je=new B({}),Ee=new ae({props:{code:`
<h3 class="relative group">
	<a 
		id="visualization-engine" 
		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" 
		href="#visualization-engine"
	>
		<span><IconCopyLink/></span>
	</a>
	<span>
		Visualization engine
	</span>
</h3>


A default vizualization engine is provided with the vtk backend of \`pyvista\`.

Starting the vizualization engine can be done simply with \`.show()\`.`,highlighted:`
&lt;h3 id=<span class="hljs-string">&quot;visualization-engine&quot;</span>&gt;Visualization engine&lt;/h3&gt;

A <span class="hljs-keyword">default</span> vizualization engine <span class="hljs-keyword">is</span> provided <span class="hljs-keyword">with</span> the vtk backend of <span class="hljs-string">\`pyvista\`</span>.

Starting the vizualization engine can be done simply <span class="hljs-keyword">with</span> <span class="hljs-string">\`.show()\`</span>.`}}),ke=new ae({props:{code:`
You can find bridges to other rendering/simulation engines in the \`integrations\` directory.

<h1 class="relative group">
	<a 
		id="reinforcement-learning-rl-with-simulate" 
		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" 
		href="#reinforcement-learning-rl-with-simulate"
	>
		<span><IconCopyLink/></span>
	</a>
	<span>
		Reinforcement Learning (RL) with Simulate
	</span>
</h1>


Simulate is designed to provide easy and scalable integration with reinforcement learning algorithms.
The core abstraction is through the [RLEnv](/docs/simulate/pr_310/en/api/rl_env#simulate.RLEnv) class that wraps a \`Scene\`.
The [RLEnv](/docs/simulate/pr_310/en/api/rl_env#simulate.RLEnv) allows an [Actuator](/docs/simulate/pr_310/en/api/actuators#simulate.Actuator) to be manipulated by an external agent or policy.

It is core to the design of Simulate that we are *not creating* 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.

<p align="center">
    <br>
    <img src="https://user-images.githubusercontent.com/10695622/192663853-a7543091-8d45-4fba-b8dc-2b632d66a35f.png" width="500"/>
    <br>
</p>

At release, we include a set of pre-designed \`Actor\`'s that can act or navigate a scene. An \`Actor\` inherits from an \`Object3D\` and has sensors, actuators, and action mappings.


<h3 class="relative group">
	<a 
		id="tips" 
		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" 
		href="#tips"
	>
		<span><IconCopyLink/></span>
	</a>
	<span>
		Tips
	</span>
</h3>


If you are running on GCP, remember to not install \`pyvistaqt\`, and if you did so, uninstall it in your environment, since QT doesn't work well on GCP.
`,highlighted:`
You can find bridges <span class="hljs-keyword">to</span> other rendering/simulation engines <span class="hljs-keyword">in</span> <span class="hljs-keyword">the</span> \`integrations\` directory.

&lt;h1 <span class="hljs-built_in">id</span>=<span class="hljs-string">&quot;reinforcement-learning-rl-with-simulate&quot;</span>&gt;Reinforcement Learning (RL) <span class="hljs-keyword">with</span> Simulate&lt;/h1&gt;

Simulate <span class="hljs-keyword">is</span> designed <span class="hljs-keyword">to</span> provide easy <span class="hljs-keyword">and</span> scalable integration <span class="hljs-keyword">with</span> reinforcement learning algorithms.
The core abstraction <span class="hljs-keyword">is</span> <span class="hljs-keyword">through</span> <span class="hljs-keyword">the</span> [RLEnv](/docs/simulate/pr_310/en/api/rl_env<span class="hljs-comment">#simulate.RLEnv) class that wraps a \`Scene\`.</span>
The [RLEnv](/docs/simulate/pr_310/en/api/rl_env<span class="hljs-comment">#simulate.RLEnv) allows an [Actuator](/docs/simulate/pr_310/en/api/actuators#simulate.Actuator) to be manipulated by an external agent or policy.</span>

It <span class="hljs-keyword">is</span> core <span class="hljs-keyword">to</span> <span class="hljs-keyword">the</span> design <span class="hljs-keyword">of</span> Simulate <span class="hljs-keyword">that</span> we are *<span class="hljs-keyword">not</span> creating* Agents, <span class="hljs-keyword">but</span> rather providing an interface <span class="hljs-keyword">for</span> applications <span class="hljs-keyword">of</span> machine learning <span class="hljs-keyword">and</span> embodied AI.
The core API <span class="hljs-keyword">for</span> RL applications can be seen <span class="hljs-keyword">below</span>, <span class="hljs-keyword">where</span> Simulate constrains <span class="hljs-keyword">the</span> information <span class="hljs-keyword">that</span> flows <span class="hljs-keyword">from</span> <span class="hljs-keyword">the</span> Scene <span class="hljs-keyword">to</span> <span class="hljs-keyword">the</span> external agent <span class="hljs-keyword">through</span> an Actuator abstraction.

&lt;p align=<span class="hljs-string">&quot;center&quot;</span>&gt;
    &lt;br&gt;
    &lt;img src=<span class="hljs-string">&quot;https://user-images.githubusercontent.com/10695622/192663853-a7543091-8d45-4fba-b8dc-2b632d66a35f.png&quot;</span> width=<span class="hljs-string">&quot;500&quot;</span>/&gt;
    &lt;br&gt;
&lt;/p&gt;

At release, we include a <span class="hljs-keyword">set</span> <span class="hljs-keyword">of</span> pre-designed \`Actor\`&#x27;s <span class="hljs-keyword">that</span> can act <span class="hljs-keyword">or</span> navigate a scene. An \`Actor\` inherits <span class="hljs-keyword">from</span> an \`Object3D\` <span class="hljs-keyword">and</span> has sensors, actuators, <span class="hljs-keyword">and</span> action mappings.


&lt;h3 <span class="hljs-built_in">id</span>=<span class="hljs-string">&quot;tips&quot;</span>&gt;Tips&lt;/h3&gt;

If you are <span class="hljs-built_in">running</span> <span class="hljs-keyword">on</span> GCP, remember <span class="hljs-keyword">to</span> <span class="hljs-keyword">not</span> install \`pyvistaqt\`, <span class="hljs-keyword">and</span> <span class="hljs-keyword">if</span> you did so, uninstall <span class="hljs-keyword">it</span> <span class="hljs-keyword">in</span> your environment, <span class="hljs-keyword">since</span> QT doesn&#x27;t work well <span class="hljs-keyword">on</span> GCP.
`}}),{c(){$=t("meta"),pa=p(),S=t("h1"),M=t("a"),Ve=t("span"),m(te.$$.fragment),yt=p(),We=t("span"),_t=r("Quicktour"),ha=p(),N=t("p"),jt=r("Simulate\u2019s API is inspired by the great "),le=t("a"),Et=r("Kubric\u2019s API"),kt=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.`),da=p(),Se=t("p"),$t=r("Let\u2019s do a quick exploration together."),fa=p(),Pe=t("p"),St=r("We\u2019ll use the default backend which is a simple"),ua=p(),U=t("p"),Pt=r("To install and contribute (from "),xe=t("a"),xt=r("CONTRIBUTING.md"),At=r(")"),ma=p(),Ae=t("p"),Lt=r("Create a virtual env and then install the code style/quality tools as well as the code base locally"),va=p(),m(ne.$$.fragment),ba=p(),E=t("p"),Ct=r("Before you merge a PR, fix the style (we use "),Ye=t("code"),Ot=r("isort"),It=r(" + "),Je=t("code"),Tt=r("black"),Dt=r(")"),ga=p(),m(re.$$.fragment),wa=p(),P=t("h2"),z=t("a"),Xe=t("span"),m(oe.$$.fragment),qt=p(),Ze=t("span"),Rt=r("Project Structure"),ya=p(),Le=t("p"),Bt=r("The Python API is located in src/simulate. It allows creation and loading of scenes, and sending commands to the backend."),_a=p(),G=t("p"),Mt=r("The backend, currently just Unity, is located in "),Ce=t("a"),Nt=r("integrations/Unity"),Ut=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.`),ja=p(),x=t("h2"),H=t("a"),es=t("span"),m(ie.$$.fragment),zt=p(),ss=t("span"),Gt=r("Loading a scene from the hub or a local file"),Ea=p(),_=t("p"),Ht=r("Loading a scene from a local file or the hub is done with "),as=t("code"),Ft=r("Scene.create_from()"),Qt=r(", saving or pushing to the hub with "),ts=t("code"),Kt=r("scene.save()"),Vt=r(" or "),ls=t("code"),Wt=r("scene.push_to_hub()"),Yt=r(":"),ka=p(),m(ce.$$.fragment),$a=p(),j=t("p"),Jt=t("br"),Xt=p(),Oe=t("img"),Zt=p(),el=t("br"),sl=r(`
&lt;p>
`),A=t("h2"),F=t("a"),ns=t("span"),m(pe.$$.fragment),al=p(),rs=t("span"),tl=r("Creating a Scene and adding/managing Objects in the scene"),Sa=p(),Ie=t("p"),ll=r("Basic example of creating a scene with a plane and a sphere above it:"),Pa=p(),m(he.$$.fragment),xa=p(),Q=t("p"),nl=r("An object (as well as the Scene) is just a node in a tree provided with optional mesh (as "),os=t("code"),rl=r("pyvista.PolyData"),ol=r(" structure) and material and/or light, camera, agents special objects."),Aa=p(),Te=t("p"),il=r("The following objects creation helpers are currently provided:"),La=p(),f=t("ul"),K=t("li"),is=t("code"),cl=r("Object3D"),pl=r(" any object with a "),cs=t("code"),hl=r("pyvista.PolyData"),dl=r(" mesh and/or material"),fl=p(),ps=t("li"),hs=t("code"),ul=r("Plane"),ml=p(),ds=t("li"),fs=t("code"),vl=r("Sphere"),bl=p(),us=t("li"),ms=t("code"),gl=r("Capsule"),wl=p(),vs=t("li"),bs=t("code"),yl=r("Cylinder"),_l=p(),gs=t("li"),ws=t("code"),jl=r("Box"),El=p(),ys=t("li"),_s=t("code"),kl=r("Cone"),$l=p(),js=t("li"),Es=t("code"),Sl=r("Line"),Pl=p(),ks=t("li"),$s=t("code"),xl=r("MultipleLines"),Al=p(),Ss=t("li"),Ps=t("code"),Ll=r("Tube"),Cl=p(),xs=t("li"),As=t("code"),Ol=r("Polygon"),Il=p(),Ls=t("li"),Cs=t("code"),Tl=r("Ring"),Dl=p(),Os=t("li"),Is=t("code"),ql=r("Text3D"),Rl=p(),Ts=t("li"),Ds=t("code"),Bl=r("Triangle"),Ml=p(),qs=t("li"),Rs=t("code"),Nl=r("Rectangle"),Ul=p(),Bs=t("li"),Ms=t("code"),zl=r("Circle"),Gl=p(),Ns=t("li"),Us=t("code"),Hl=r("StructuredGrid"),Ca=p(),V=t("p"),Fl=r("Most of these objects can be visualized by running the following "),de=t("a"),Ql=r("example"),Kl=r(":"),Oa=p(),m(fe.$$.fragment),Ia=p(),De=t("p"),Vl=r("<p align=\u201Ccenter\u201D>"),Ta=p(),Da=t("br"),qa=p(),ue=t("img"),Ra=p(),Ba=t("br"),Ma=r(`
&lt;p>
`),L=t("h3"),W=t("a"),zs=t("span"),m(me.$$.fragment),Wl=p(),Gs=t("span"),Yl=r("Objects are organized in a tree structure"),Na=p(),qe=t("p"),Jl=r("Adding/removing objects:"),Ua=p(),k=t("ul"),C=t("li"),Xl=r("Using the addition ("),Hs=t("code"),Zl=r("+"),en=r(") operator (or alternatively the method "),Fs=t("code"),sn=r(".add(object)"),an=r(") will add an object as a child of a previous object."),tn=p(),O=t("li"),ln=r("Objects can be removed with the subtraction ("),Qs=t("code"),nn=r("-"),rn=r(") operator or the "),Ks=t("code"),on=r(".remove(object)"),cn=r(" command."),pn=p(),ve=t("li"),hn=r("The whole scene can be cleared with "),Vs=t("code"),dn=r(".clear()"),fn=r("."),za=p(),Re=t("p"),un=r("Accessing objects:"),Ga=p(),Y=t("ul"),be=t("li"),mn=r("Objects can be directly accessed as attributes of their parents using their names (given with  "),Ws=t("code"),vn=r("name"),bn=r(" attribute at creation or automatically generated from the class name + creation counter)."),gn=p(),I=t("li"),wn=r("Objects can also be accessed from their names with "),Ys=t("code"),yn=r(".get(name)"),_n=r(" or by navigating in the tree using the various "),Js=t("code"),jn=r("tree_*"),En=r(" attributes available on any node."),Ha=p(),Be=t("p"),kn=r("Here are a couple of examples of manipulations:"),Fa=p(),m(ge.$$.fragment),Qa=p(),T=t("h3"),J=t("a"),Xs=t("span"),m(we.$$.fragment),$n=p(),Zs=t("span"),Sn=r("Objects can be translated, rotated, scaled"),Ka=r(`

Here are a couple of examples:
\`\`\`
# Let's translate our floor (with the first sphere, it's child)
scene.plane_01.translate_x(1)
`),D=t("h1"),X=t("a"),ea=t("span"),m(ye.$$.fragment),Pn=p(),sa=t("span"),xn=r("Let\u2019s scale the second sphere uniformly"),Va=p(),Me=t("p"),An=r("scene.sphere_03.scale(0.1)"),Wa=p(),q=t("h1"),Z=t("a"),aa=t("span"),m(_e.$$.fragment),Ln=p(),ta=t("span"),Cn=r("Inspect the current position and scaling values"),Ya=p(),Ne=t("p"),On=r("print(scene.plane_01.position)"),Ja=p(),Ue=t("blockquote"),la=t("blockquote"),na=t("blockquote"),ra=t("p"),In=r(`array([1., 0., 0.])
print(scene.sphere_03.scaling)
array([0.1, 0.1, 0.1])`),Xa=p(),R=t("h1"),ee=t("a"),oa=t("span"),m(je.$$.fragment),Tn=p(),ia=t("span"),Dn=r("We can also translate from a vector and rotate from a quaternion or along the various axis"),Za=p(),m(Ee.$$.fragment),et=p(),ze=t("p"),qn=r("scene.show()"),st=p(),m(ke.$$.fragment),this.h()},l(e){const i=Io('[data-svelte="svelte-1phssyn"]',document.head);$=l(i,"META",{name:!0,content:!0}),i.forEach(a),pa=h(e),S=l(e,"H1",{class:!0});var tt=n(S);M=l(tt,"A",{id:!0,class:!0,href:!0});var Nn=n(M);Ve=l(Nn,"SPAN",{});var Un=n(Ve);v(te.$$.fragment,Un),Un.forEach(a),Nn.forEach(a),yt=h(tt),We=l(tt,"SPAN",{});var zn=n(We);_t=o(zn,"Quicktour"),zn.forEach(a),tt.forEach(a),ha=h(e),N=l(e,"P",{});var lt=n(N);jt=o(lt,"Simulate\u2019s API is inspired by the great "),le=l(lt,"A",{href:!0,rel:!0});var Gn=n(le);Et=o(Gn,"Kubric\u2019s API"),Gn.forEach(a),kt=o(lt,`.
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.`),lt.forEach(a),da=h(e),Se=l(e,"P",{});var Hn=n(Se);$t=o(Hn,"Let\u2019s do a quick exploration together."),Hn.forEach(a),fa=h(e),Pe=l(e,"P",{});var Fn=n(Pe);St=o(Fn,"We\u2019ll use the default backend which is a simple"),Fn.forEach(a),ua=h(e),U=l(e,"P",{});var nt=n(U);Pt=o(nt,"To install and contribute (from "),xe=l(nt,"A",{href:!0});var Qn=n(xe);xt=o(Qn,"CONTRIBUTING.md"),Qn.forEach(a),At=o(nt,")"),nt.forEach(a),ma=h(e),Ae=l(e,"P",{});var Kn=n(Ae);Lt=o(Kn,"Create a virtual env and then install the code style/quality tools as well as the code base locally"),Kn.forEach(a),va=h(e),v(ne.$$.fragment,e),ba=h(e),E=l(e,"P",{});var Ge=n(E);Ct=o(Ge,"Before you merge a PR, fix the style (we use "),Ye=l(Ge,"CODE",{});var Vn=n(Ye);Ot=o(Vn,"isort"),Vn.forEach(a),It=o(Ge," + "),Je=l(Ge,"CODE",{});var Wn=n(Je);Tt=o(Wn,"black"),Wn.forEach(a),Dt=o(Ge,")"),Ge.forEach(a),ga=h(e),v(re.$$.fragment,e),wa=h(e),P=l(e,"H2",{class:!0});var rt=n(P);z=l(rt,"A",{id:!0,class:!0,href:!0});var Yn=n(z);Xe=l(Yn,"SPAN",{});var Jn=n(Xe);v(oe.$$.fragment,Jn),Jn.forEach(a),Yn.forEach(a),qt=h(rt),Ze=l(rt,"SPAN",{});var Xn=n(Ze);Rt=o(Xn,"Project Structure"),Xn.forEach(a),rt.forEach(a),ya=h(e),Le=l(e,"P",{});var Zn=n(Le);Bt=o(Zn,"The Python API is located in src/simulate. It allows creation and loading of scenes, and sending commands to the backend."),Zn.forEach(a),_a=h(e),G=l(e,"P",{});var ot=n(G);Mt=o(ot,"The backend, currently just Unity, is located in "),Ce=l(ot,"A",{href:!0});var er=n(Ce);Nt=o(er,"integrations/Unity"),er.forEach(a),Ut=o(ot,`.
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.`),ot.forEach(a),ja=h(e),x=l(e,"H2",{class:!0});var it=n(x);H=l(it,"A",{id:!0,class:!0,href:!0});var sr=n(H);es=l(sr,"SPAN",{});var ar=n(es);v(ie.$$.fragment,ar),ar.forEach(a),sr.forEach(a),zt=h(it),ss=l(it,"SPAN",{});var tr=n(ss);Gt=o(tr,"Loading a scene from the hub or a local file"),tr.forEach(a),it.forEach(a),Ea=h(e),_=l(e,"P",{});var se=n(_);Ht=o(se,"Loading a scene from a local file or the hub is done with "),as=l(se,"CODE",{});var lr=n(as);Ft=o(lr,"Scene.create_from()"),lr.forEach(a),Qt=o(se,", saving or pushing to the hub with "),ts=l(se,"CODE",{});var nr=n(ts);Kt=o(nr,"scene.save()"),nr.forEach(a),Vt=o(se," or "),ls=l(se,"CODE",{});var rr=n(ls);Wt=o(rr,"scene.push_to_hub()"),rr.forEach(a),Yt=o(se,":"),se.forEach(a),ka=h(e),v(ce.$$.fragment,e),$a=h(e),j=l(e,"P",{align:!0});var $e=n(j);Jt=l($e,"BR",{}),Xt=h($e),Oe=l($e,"IMG",{src:!0,width:!0}),Zt=h($e),el=l($e,"BR",{}),sl=o($e,`
&lt;p>
`),$e.forEach(a),A=l(e,"H2",{class:!0});var ct=n(A);F=l(ct,"A",{id:!0,class:!0,href:!0});var or=n(F);ns=l(or,"SPAN",{});var ir=n(ns);v(pe.$$.fragment,ir),ir.forEach(a),or.forEach(a),al=h(ct),rs=l(ct,"SPAN",{});var cr=n(rs);tl=o(cr,"Creating a Scene and adding/managing Objects in the scene"),cr.forEach(a),ct.forEach(a),Sa=h(e),Ie=l(e,"P",{});var pr=n(Ie);ll=o(pr,"Basic example of creating a scene with a plane and a sphere above it:"),pr.forEach(a),Pa=h(e),v(he.$$.fragment,e),xa=h(e),Q=l(e,"P",{});var pt=n(Q);nl=o(pt,"An object (as well as the Scene) is just a node in a tree provided with optional mesh (as "),os=l(pt,"CODE",{});var hr=n(os);rl=o(hr,"pyvista.PolyData"),hr.forEach(a),ol=o(pt," structure) and material and/or light, camera, agents special objects."),pt.forEach(a),Aa=h(e),Te=l(e,"P",{});var dr=n(Te);il=o(dr,"The following objects creation helpers are currently provided:"),dr.forEach(a),La=h(e),f=l(e,"UL",{});var u=n(f);K=l(u,"LI",{});var ca=n(K);is=l(ca,"CODE",{});var fr=n(is);cl=o(fr,"Object3D"),fr.forEach(a),pl=o(ca," any object with a "),cs=l(ca,"CODE",{});var ur=n(cs);hl=o(ur,"pyvista.PolyData"),ur.forEach(a),dl=o(ca," mesh and/or material"),ca.forEach(a),fl=h(u),ps=l(u,"LI",{});var mr=n(ps);hs=l(mr,"CODE",{});var vr=n(hs);ul=o(vr,"Plane"),vr.forEach(a),mr.forEach(a),ml=h(u),ds=l(u,"LI",{});var br=n(ds);fs=l(br,"CODE",{});var gr=n(fs);vl=o(gr,"Sphere"),gr.forEach(a),br.forEach(a),bl=h(u),us=l(u,"LI",{});var wr=n(us);ms=l(wr,"CODE",{});var yr=n(ms);gl=o(yr,"Capsule"),yr.forEach(a),wr.forEach(a),wl=h(u),vs=l(u,"LI",{});var _r=n(vs);bs=l(_r,"CODE",{});var jr=n(bs);yl=o(jr,"Cylinder"),jr.forEach(a),_r.forEach(a),_l=h(u),gs=l(u,"LI",{});var Er=n(gs);ws=l(Er,"CODE",{});var kr=n(ws);jl=o(kr,"Box"),kr.forEach(a),Er.forEach(a),El=h(u),ys=l(u,"LI",{});var $r=n(ys);_s=l($r,"CODE",{});var Sr=n(_s);kl=o(Sr,"Cone"),Sr.forEach(a),$r.forEach(a),$l=h(u),js=l(u,"LI",{});var Pr=n(js);Es=l(Pr,"CODE",{});var xr=n(Es);Sl=o(xr,"Line"),xr.forEach(a),Pr.forEach(a),Pl=h(u),ks=l(u,"LI",{});var Ar=n(ks);$s=l(Ar,"CODE",{});var Lr=n($s);xl=o(Lr,"MultipleLines"),Lr.forEach(a),Ar.forEach(a),Al=h(u),Ss=l(u,"LI",{});var Cr=n(Ss);Ps=l(Cr,"CODE",{});var Or=n(Ps);Ll=o(Or,"Tube"),Or.forEach(a),Cr.forEach(a),Cl=h(u),xs=l(u,"LI",{});var Ir=n(xs);As=l(Ir,"CODE",{});var Tr=n(As);Ol=o(Tr,"Polygon"),Tr.forEach(a),Ir.forEach(a),Il=h(u),Ls=l(u,"LI",{});var Dr=n(Ls);Cs=l(Dr,"CODE",{});var qr=n(Cs);Tl=o(qr,"Ring"),qr.forEach(a),Dr.forEach(a),Dl=h(u),Os=l(u,"LI",{});var Rr=n(Os);Is=l(Rr,"CODE",{});var Br=n(Is);ql=o(Br,"Text3D"),Br.forEach(a),Rr.forEach(a),Rl=h(u),Ts=l(u,"LI",{});var Mr=n(Ts);Ds=l(Mr,"CODE",{});var Nr=n(Ds);Bl=o(Nr,"Triangle"),Nr.forEach(a),Mr.forEach(a),Ml=h(u),qs=l(u,"LI",{});var Ur=n(qs);Rs=l(Ur,"CODE",{});var zr=n(Rs);Nl=o(zr,"Rectangle"),zr.forEach(a),Ur.forEach(a),Ul=h(u),Bs=l(u,"LI",{});var Gr=n(Bs);Ms=l(Gr,"CODE",{});var Hr=n(Ms);zl=o(Hr,"Circle"),Hr.forEach(a),Gr.forEach(a),Gl=h(u),Ns=l(u,"LI",{});var Fr=n(Ns);Us=l(Fr,"CODE",{});var Qr=n(Us);Hl=o(Qr,"StructuredGrid"),Qr.forEach(a),Fr.forEach(a),u.forEach(a),Ca=h(e),V=l(e,"P",{});var ht=n(V);Fl=o(ht,"Most of these objects can be visualized by running the following "),de=l(ht,"A",{href:!0,rel:!0});var Kr=n(de);Ql=o(Kr,"example"),Kr.forEach(a),Kl=o(ht,":"),ht.forEach(a),Oa=h(e),v(fe.$$.fragment,e),Ia=h(e),De=l(e,"P",{});var Vr=n(De);Vl=o(Vr,"<p align=\u201Ccenter\u201D>"),Vr.forEach(a),Ta=h(e),Da=l(e,"BR",{}),qa=h(e),ue=l(e,"IMG",{src:!0,width:!0}),Ra=h(e),Ba=l(e,"BR",{}),Ma=o(e,`
&lt;p>
`),L=l(e,"H3",{class:!0});var dt=n(L);W=l(dt,"A",{id:!0,class:!0,href:!0});var Wr=n(W);zs=l(Wr,"SPAN",{});var Yr=n(zs);v(me.$$.fragment,Yr),Yr.forEach(a),Wr.forEach(a),Wl=h(dt),Gs=l(dt,"SPAN",{});var Jr=n(Gs);Yl=o(Jr,"Objects are organized in a tree structure"),Jr.forEach(a),dt.forEach(a),Na=h(e),qe=l(e,"P",{});var Xr=n(qe);Jl=o(Xr,"Adding/removing objects:"),Xr.forEach(a),Ua=h(e),k=l(e,"UL",{});var He=n(k);C=l(He,"LI",{});var Fe=n(C);Xl=o(Fe,"Using the addition ("),Hs=l(Fe,"CODE",{});var Zr=n(Hs);Zl=o(Zr,"+"),Zr.forEach(a),en=o(Fe,") operator (or alternatively the method "),Fs=l(Fe,"CODE",{});var eo=n(Fs);sn=o(eo,".add(object)"),eo.forEach(a),an=o(Fe,") will add an object as a child of a previous object."),Fe.forEach(a),tn=h(He),O=l(He,"LI",{});var Qe=n(O);ln=o(Qe,"Objects can be removed with the subtraction ("),Qs=l(Qe,"CODE",{});var so=n(Qs);nn=o(so,"-"),so.forEach(a),rn=o(Qe,") operator or the "),Ks=l(Qe,"CODE",{});var ao=n(Ks);on=o(ao,".remove(object)"),ao.forEach(a),cn=o(Qe," command."),Qe.forEach(a),pn=h(He),ve=l(He,"LI",{});var ft=n(ve);hn=o(ft,"The whole scene can be cleared with "),Vs=l(ft,"CODE",{});var to=n(Vs);dn=o(to,".clear()"),to.forEach(a),fn=o(ft,"."),ft.forEach(a),He.forEach(a),za=h(e),Re=l(e,"P",{});var lo=n(Re);un=o(lo,"Accessing objects:"),lo.forEach(a),Ga=h(e),Y=l(e,"UL",{});var ut=n(Y);be=l(ut,"LI",{});var mt=n(be);mn=o(mt,"Objects can be directly accessed as attributes of their parents using their names (given with  "),Ws=l(mt,"CODE",{});var no=n(Ws);vn=o(no,"name"),no.forEach(a),bn=o(mt," attribute at creation or automatically generated from the class name + creation counter)."),mt.forEach(a),gn=h(ut),I=l(ut,"LI",{});var Ke=n(I);wn=o(Ke,"Objects can also be accessed from their names with "),Ys=l(Ke,"CODE",{});var ro=n(Ys);yn=o(ro,".get(name)"),ro.forEach(a),_n=o(Ke," or by navigating in the tree using the various "),Js=l(Ke,"CODE",{});var oo=n(Js);jn=o(oo,"tree_*"),oo.forEach(a),En=o(Ke," attributes available on any node."),Ke.forEach(a),ut.forEach(a),Ha=h(e),Be=l(e,"P",{});var io=n(Be);kn=o(io,"Here are a couple of examples of manipulations:"),io.forEach(a),Fa=h(e),v(ge.$$.fragment,e),Qa=h(e),T=l(e,"H3",{class:!0});var vt=n(T);J=l(vt,"A",{id:!0,class:!0,href:!0});var co=n(J);Xs=l(co,"SPAN",{});var po=n(Xs);v(we.$$.fragment,po),po.forEach(a),co.forEach(a),$n=h(vt),Zs=l(vt,"SPAN",{});var ho=n(Zs);Sn=o(ho,"Objects can be translated, rotated, scaled"),ho.forEach(a),vt.forEach(a),Ka=o(e,`

Here are a couple of examples:
\`\`\`
# Let's translate our floor (with the first sphere, it's child)
scene.plane_01.translate_x(1)
`),D=l(e,"H1",{class:!0});var bt=n(D);X=l(bt,"A",{id:!0,class:!0,href:!0});var fo=n(X);ea=l(fo,"SPAN",{});var uo=n(ea);v(ye.$$.fragment,uo),uo.forEach(a),fo.forEach(a),Pn=h(bt),sa=l(bt,"SPAN",{});var mo=n(sa);xn=o(mo,"Let\u2019s scale the second sphere uniformly"),mo.forEach(a),bt.forEach(a),Va=h(e),Me=l(e,"P",{});var vo=n(Me);An=o(vo,"scene.sphere_03.scale(0.1)"),vo.forEach(a),Wa=h(e),q=l(e,"H1",{class:!0});var gt=n(q);Z=l(gt,"A",{id:!0,class:!0,href:!0});var bo=n(Z);aa=l(bo,"SPAN",{});var go=n(aa);v(_e.$$.fragment,go),go.forEach(a),bo.forEach(a),Ln=h(gt),ta=l(gt,"SPAN",{});var wo=n(ta);Cn=o(wo,"Inspect the current position and scaling values"),wo.forEach(a),gt.forEach(a),Ya=h(e),Ne=l(e,"P",{});var yo=n(Ne);On=o(yo,"print(scene.plane_01.position)"),yo.forEach(a),Ja=h(e),Ue=l(e,"BLOCKQUOTE",{});var _o=n(Ue);la=l(_o,"BLOCKQUOTE",{});var jo=n(la);na=l(jo,"BLOCKQUOTE",{});var Eo=n(na);ra=l(Eo,"P",{});var ko=n(ra);In=o(ko,`array([1., 0., 0.])
print(scene.sphere_03.scaling)
array([0.1, 0.1, 0.1])`),ko.forEach(a),Eo.forEach(a),jo.forEach(a),_o.forEach(a),Xa=h(e),R=l(e,"H1",{class:!0});var wt=n(R);ee=l(wt,"A",{id:!0,class:!0,href:!0});var $o=n(ee);oa=l($o,"SPAN",{});var So=n(oa);v(je.$$.fragment,So),So.forEach(a),$o.forEach(a),Tn=h(wt),ia=l(wt,"SPAN",{});var Po=n(ia);Dn=o(Po,"We can also translate from a vector and rotate from a quaternion or along the various axis"),Po.forEach(a),wt.forEach(a),Za=h(e),v(Ee.$$.fragment,e),et=h(e),ze=l(e,"P",{});var xo=n(ze);qn=o(xo,"scene.show()"),xo.forEach(a),st=h(e),v(ke.$$.fragment,e),this.h()},h(){d($,"name","hf:doc:metadata"),d($,"content",JSON.stringify(Ro)),d(M,"id","quicktour"),d(M,"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"),d(M,"href","#quicktour"),d(S,"class","relative group"),d(le,"href","https://github.com/google-research/kubric"),d(le,"rel","nofollow"),d(xe,"href","CONTRIBUTING.md"),d(z,"id","project-structure"),d(z,"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"),d(z,"href","#project-structure"),d(P,"class","relative group"),d(Ce,"href","integrations/Unity"),d(H,"id","loading-a-scene-from-the-hub-or-a-local-file"),d(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"),d(H,"href","#loading-a-scene-from-the-hub-or-a-local-file"),d(x,"class","relative group"),Ao(Oe.src,Bn="https://user-images.githubusercontent.com/10695622/191554717-acba4764-a4f4-4609-834a-39ddb50b844a.png")||d(Oe,"src",Bn),d(Oe,"width","400"),d(j,"align","center"),d(F,"id","creating-a-scene-and-addingmanaging-objects-in-the-scene"),d(F,"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"),d(F,"href","#creating-a-scene-and-addingmanaging-objects-in-the-scene"),d(A,"class","relative group"),d(de,"href","https://github.com/huggingface/simulate/tree/main/examples/objects.py"),d(de,"rel","nofollow"),Ao(ue.src,Mn="https://user-images.githubusercontent.com/10695622/191562825-49d4c692-a1ed-44e9-bdb9-da5f0bfb9828.png")||d(ue,"src",Mn),d(ue,"width","400"),d(W,"id","objects-are-organized-in-a-tree-structure"),d(W,"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"),d(W,"href","#objects-are-organized-in-a-tree-structure"),d(L,"class","relative group"),d(J,"id","objects-can-be-translated-rotated-scaled"),d(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"),d(J,"href","#objects-can-be-translated-rotated-scaled"),d(T,"class","relative group"),d(X,"id","let\u2019s-scale-the-second-sphere-uniformly"),d(X,"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"),d(X,"href","#let\u2019s-scale-the-second-sphere-uniformly"),d(D,"class","relative group"),d(Z,"id","inspect-the-current-position-and-scaling-values"),d(Z,"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"),d(Z,"href","#inspect-the-current-position-and-scaling-values"),d(q,"class","relative group"),d(ee,"id","we-can-also-translate-from-a-vector-and-rotate-from-a-quaternion-or-along-the-various-axis"),d(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"),d(ee,"href","#we-can-also-translate-from-a-vector-and-rotate-from-a-quaternion-or-along-the-various-axis"),d(R,"class","relative group")},m(e,i){s(document.head,$),c(e,pa,i),c(e,S,i),s(S,M),s(M,Ve),b(te,Ve,null),s(S,yt),s(S,We),s(We,_t),c(e,ha,i),c(e,N,i),s(N,jt),s(N,le),s(le,Et),s(N,kt),c(e,da,i),c(e,Se,i),s(Se,$t),c(e,fa,i),c(e,Pe,i),s(Pe,St),c(e,ua,i),c(e,U,i),s(U,Pt),s(U,xe),s(xe,xt),s(U,At),c(e,ma,i),c(e,Ae,i),s(Ae,Lt),c(e,va,i),b(ne,e,i),c(e,ba,i),c(e,E,i),s(E,Ct),s(E,Ye),s(Ye,Ot),s(E,It),s(E,Je),s(Je,Tt),s(E,Dt),c(e,ga,i),b(re,e,i),c(e,wa,i),c(e,P,i),s(P,z),s(z,Xe),b(oe,Xe,null),s(P,qt),s(P,Ze),s(Ze,Rt),c(e,ya,i),c(e,Le,i),s(Le,Bt),c(e,_a,i),c(e,G,i),s(G,Mt),s(G,Ce),s(Ce,Nt),s(G,Ut),c(e,ja,i),c(e,x,i),s(x,H),s(H,es),b(ie,es,null),s(x,zt),s(x,ss),s(ss,Gt),c(e,Ea,i),c(e,_,i),s(_,Ht),s(_,as),s(as,Ft),s(_,Qt),s(_,ts),s(ts,Kt),s(_,Vt),s(_,ls),s(ls,Wt),s(_,Yt),c(e,ka,i),b(ce,e,i),c(e,$a,i),c(e,j,i),s(j,Jt),s(j,Xt),s(j,Oe),s(j,Zt),s(j,el),s(j,sl),c(e,A,i),s(A,F),s(F,ns),b(pe,ns,null),s(A,al),s(A,rs),s(rs,tl),c(e,Sa,i),c(e,Ie,i),s(Ie,ll),c(e,Pa,i),b(he,e,i),c(e,xa,i),c(e,Q,i),s(Q,nl),s(Q,os),s(os,rl),s(Q,ol),c(e,Aa,i),c(e,Te,i),s(Te,il),c(e,La,i),c(e,f,i),s(f,K),s(K,is),s(is,cl),s(K,pl),s(K,cs),s(cs,hl),s(K,dl),s(f,fl),s(f,ps),s(ps,hs),s(hs,ul),s(f,ml),s(f,ds),s(ds,fs),s(fs,vl),s(f,bl),s(f,us),s(us,ms),s(ms,gl),s(f,wl),s(f,vs),s(vs,bs),s(bs,yl),s(f,_l),s(f,gs),s(gs,ws),s(ws,jl),s(f,El),s(f,ys),s(ys,_s),s(_s,kl),s(f,$l),s(f,js),s(js,Es),s(Es,Sl),s(f,Pl),s(f,ks),s(ks,$s),s($s,xl),s(f,Al),s(f,Ss),s(Ss,Ps),s(Ps,Ll),s(f,Cl),s(f,xs),s(xs,As),s(As,Ol),s(f,Il),s(f,Ls),s(Ls,Cs),s(Cs,Tl),s(f,Dl),s(f,Os),s(Os,Is),s(Is,ql),s(f,Rl),s(f,Ts),s(Ts,Ds),s(Ds,Bl),s(f,Ml),s(f,qs),s(qs,Rs),s(Rs,Nl),s(f,Ul),s(f,Bs),s(Bs,Ms),s(Ms,zl),s(f,Gl),s(f,Ns),s(Ns,Us),s(Us,Hl),c(e,Ca,i),c(e,V,i),s(V,Fl),s(V,de),s(de,Ql),s(V,Kl),c(e,Oa,i),b(fe,e,i),c(e,Ia,i),c(e,De,i),s(De,Vl),c(e,Ta,i),c(e,Da,i),c(e,qa,i),c(e,ue,i),c(e,Ra,i),c(e,Ba,i),c(e,Ma,i),c(e,L,i),s(L,W),s(W,zs),b(me,zs,null),s(L,Wl),s(L,Gs),s(Gs,Yl),c(e,Na,i),c(e,qe,i),s(qe,Jl),c(e,Ua,i),c(e,k,i),s(k,C),s(C,Xl),s(C,Hs),s(Hs,Zl),s(C,en),s(C,Fs),s(Fs,sn),s(C,an),s(k,tn),s(k,O),s(O,ln),s(O,Qs),s(Qs,nn),s(O,rn),s(O,Ks),s(Ks,on),s(O,cn),s(k,pn),s(k,ve),s(ve,hn),s(ve,Vs),s(Vs,dn),s(ve,fn),c(e,za,i),c(e,Re,i),s(Re,un),c(e,Ga,i),c(e,Y,i),s(Y,be),s(be,mn),s(be,Ws),s(Ws,vn),s(be,bn),s(Y,gn),s(Y,I),s(I,wn),s(I,Ys),s(Ys,yn),s(I,_n),s(I,Js),s(Js,jn),s(I,En),c(e,Ha,i),c(e,Be,i),s(Be,kn),c(e,Fa,i),b(ge,e,i),c(e,Qa,i),c(e,T,i),s(T,J),s(J,Xs),b(we,Xs,null),s(T,$n),s(T,Zs),s(Zs,Sn),c(e,Ka,i),c(e,D,i),s(D,X),s(X,ea),b(ye,ea,null),s(D,Pn),s(D,sa),s(sa,xn),c(e,Va,i),c(e,Me,i),s(Me,An),c(e,Wa,i),c(e,q,i),s(q,Z),s(Z,aa),b(_e,aa,null),s(q,Ln),s(q,ta),s(ta,Cn),c(e,Ya,i),c(e,Ne,i),s(Ne,On),c(e,Ja,i),c(e,Ue,i),s(Ue,la),s(la,na),s(na,ra),s(ra,In),c(e,Xa,i),c(e,R,i),s(R,ee),s(ee,oa),b(je,oa,null),s(R,Tn),s(R,ia),s(ia,Dn),c(e,Za,i),b(Ee,e,i),c(e,et,i),c(e,ze,i),s(ze,qn),c(e,st,i),b(ke,e,i),at=!0},p:To,i(e){at||(g(te.$$.fragment,e),g(ne.$$.fragment,e),g(re.$$.fragment,e),g(oe.$$.fragment,e),g(ie.$$.fragment,e),g(ce.$$.fragment,e),g(pe.$$.fragment,e),g(he.$$.fragment,e),g(fe.$$.fragment,e),g(me.$$.fragment,e),g(ge.$$.fragment,e),g(we.$$.fragment,e),g(ye.$$.fragment,e),g(_e.$$.fragment,e),g(je.$$.fragment,e),g(Ee.$$.fragment,e),g(ke.$$.fragment,e),at=!0)},o(e){w(te.$$.fragment,e),w(ne.$$.fragment,e),w(re.$$.fragment,e),w(oe.$$.fragment,e),w(ie.$$.fragment,e),w(ce.$$.fragment,e),w(pe.$$.fragment,e),w(he.$$.fragment,e),w(fe.$$.fragment,e),w(me.$$.fragment,e),w(ge.$$.fragment,e),w(we.$$.fragment,e),w(ye.$$.fragment,e),w(_e.$$.fragment,e),w(je.$$.fragment,e),w(Ee.$$.fragment,e),w(ke.$$.fragment,e),at=!1},d(e){a($),e&&a(pa),e&&a(S),y(te),e&&a(ha),e&&a(N),e&&a(da),e&&a(Se),e&&a(fa),e&&a(Pe),e&&a(ua),e&&a(U),e&&a(ma),e&&a(Ae),e&&a(va),y(ne,e),e&&a(ba),e&&a(E),e&&a(ga),y(re,e),e&&a(wa),e&&a(P),y(oe),e&&a(ya),e&&a(Le),e&&a(_a),e&&a(G),e&&a(ja),e&&a(x),y(ie),e&&a(Ea),e&&a(_),e&&a(ka),y(ce,e),e&&a($a),e&&a(j),e&&a(A),y(pe),e&&a(Sa),e&&a(Ie),e&&a(Pa),y(he,e),e&&a(xa),e&&a(Q),e&&a(Aa),e&&a(Te),e&&a(La),e&&a(f),e&&a(Ca),e&&a(V),e&&a(Oa),y(fe,e),e&&a(Ia),e&&a(De),e&&a(Ta),e&&a(Da),e&&a(qa),e&&a(ue),e&&a(Ra),e&&a(Ba),e&&a(Ma),e&&a(L),y(me),e&&a(Na),e&&a(qe),e&&a(Ua),e&&a(k),e&&a(za),e&&a(Re),e&&a(Ga),e&&a(Y),e&&a(Ha),e&&a(Be),e&&a(Fa),y(ge,e),e&&a(Qa),e&&a(T),y(we),e&&a(Ka),e&&a(D),y(ye),e&&a(Va),e&&a(Me),e&&a(Wa),e&&a(q),y(_e),e&&a(Ya),e&&a(Ne),e&&a(Ja),e&&a(Ue),e&&a(Xa),e&&a(R),y(je),e&&a(Za),y(Ee,e),e&&a(et),e&&a(ze),e&&a(st),y(ke,e)}}}const Ro={local:"reinforcement-learning-rl-with-simulate",sections:[{local:"tips",title:"Tips"}],title:"Reinforcement Learning (RL) with Simulate"};function Bo(Rn){return Do(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class zo extends Lo{constructor($){super();Co(this,$,Bo,qo,Oo,{})}}export{zo as default,Ro as metadata};
