import{s as ye,n as fe,o as he}from"../chunks/scheduler.eb244325.js";import{S as we,i as Me,e as o,s,c as n,h as ge,a as r,d as i,b as a,f as me,g as d,j as f,k as ce,l as ue,m as l,n as p,t as m,o as c,p as y}from"../chunks/index.3fe63ad3.js";import{C as be}from"../chunks/CopyLLMTxtMenu.88bde5f2.js";import{C as M}from"../chunks/CodeBlock.934d290d.js";import{H as h,E as Te}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.341974a5.js";function $e(Et){let w,st,it,at,g,ot,u,nt,b,rt,T,Pt="<strong>Breaking Change</strong>: LeRobot policies no longer have built-in normalization layers embedded in their weights. Normalization is now handled by external <code>PolicyProcessorPipeline</code> components.",dt,$,pt,J,Ft="<thead><tr><th></th> <th>Before PR #1452</th> <th>After PR #1452</th></tr></thead> <tbody><tr><td><strong>Normalization Location</strong></td> <td>Embedded in model weights (<code>normalize_inputs.*</code>)</td> <td>External <code>PolicyProcessorPipeline</code> components</td></tr> <tr><td><strong>Model State Dict</strong></td> <td>Contains normalization statistics</td> <td><strong>Clean weights only</strong> - no normalization parameters</td></tr> <tr><td><strong>Usage</strong></td> <td><code>policy(batch)</code> handles everything</td> <td><code>preprocessor(batch)</code> → <code>policy(...)</code> → <code>postprocessor(...)</code></td></tr></tbody>",mt,U,ct,v,qt="<li>Models trained <strong>before</strong> PR #1452 have normalization embedded in their weights</li> <li>These models need migration to work with the new <code>PolicyProcessorPipeline</code> system</li> <li>The migration extracts normalization statistics and creates separate processor pipelines</li>",yt,j,ft,C,Dt="Use the migration script to convert models with embedded normalization:",ht,_,wt,I,Kt="The script:",Mt,G,Ot="<li><strong>Extracts</strong> normalization statistics from model weights</li> <li><strong>Creates</strong> external preprocessor and postprocessor pipelines</li> <li><strong>Removes</strong> normalization layers from model weights</li> <li><strong>Saves</strong> clean model + processor pipelines</li> <li><strong>Pushes</strong> to Hub with automatic PR creation</li>",gt,Z,ut,x,bt,k,Tt,B,te='PR <a href="https://github.com/huggingface/lerobot/pull/777" rel="nofollow">#777</a> improves the LeRobot calibration but is <strong>not backward-compatible</strong>. Below is a overview of what changed and how you can continue to work with datasets created before this pull request.',$t,W,Jt,X,ee="<thead><tr><th></th> <th>Before PR #777</th> <th>After PR #777</th></tr></thead> <tbody><tr><td><strong>Joint range</strong></td> <td>Degrees <code>-180...180°</code></td> <td><strong>Normalised range</strong> Joints: <code>–100...100</code> Gripper: <code>0...100</code></td></tr> <tr><td><strong>Zero position (SO100 / SO101)</strong></td> <td>Arm fully extended horizontally</td> <td><strong>In middle of the range for each joint</strong></td></tr> <tr><td><strong>Boundary handling</strong></td> <td>Software safeguards to detect ±180 ° wrap-arounds</td> <td>No wrap-around logic needed due to mid-range zero</td></tr></tbody>",Ut,vt,jt,N,Ct,z,ie=`<li>Recorded trajectories created <strong>before</strong> PR #777 will replay incorrectly if loaded directly:
<ul><li>Joint angles are offset and incorrectly normalized.</li></ul></li> <li>Any models directly finetuned or trained on the old data will need their inputs and outputs converted.</li>`,_t,L,It,R,le=`We provide a migration example script for replaying an episode recorded with the previous calibration here: <code>examples/backward_compatibility/replay.py</code>.
Below we take you through the modifications that are done in the example script to make the previous calibration datasets work.`,Gt,V,Zt,H,se=`Let’s break this down.
New codebase uses <code>.pos</code> suffix for the position observations and we have removed <code>main_</code> prefix:`,xt,Q,kt,Y,ae="For <code>&quot;shoulder_lift&quot;</code> (id = 2), the 0 position is changed by -90 degrees and the direction is reversed compared to old calibration/code.",Bt,S,Wt,A,oe="For <code>&quot;elbow_flex&quot;</code> (id = 3), the 0 position is changed by -90 degrees compared to old calibration/code.",Xt,E,Nt,P,ne="To use degrees normalization we then set the <code>--robot.use_degrees</code> option to <code>true</code>.",zt,F,Lt,q,Rt,D,re="Policies output actions in the same format as the datasets (<code>torch.Tensors</code>). Therefore, the same transformations should be applied.",Vt,K,de=`To find these transformations, we recommend to first try and and replay an episode of the dataset your policy was trained on using the section above.
Then, add these same transformations on your inference script (shown here in the <code>record.py</code> script):`,Ht,O,Qt,tt,pe='If you have questions or run into migration issues, feel free to ask them on <a href="https://discord.gg/s3KuuzsPFb" rel="nofollow">Discord</a>',Yt,et,St,lt,At;return g=new be({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),u=new h({props:{title:"Backward compatibility",local:"backward-compatibility",headingTag:"h1"}}),b=new h({props:{title:"Policy Normalization Migration (PR #1452)",local:"policy-normalization-migration-pr-1452",headingTag:"h2"}}),$=new h({props:{title:"What changed?",local:"what-changed",headingTag:"h3"}}),U=new h({props:{title:"Impact on existing models",local:"impact-on-existing-models",headingTag:"h3"}}),j=new h({props:{title:"Migrating old models",local:"migrating-old-models",headingTag:"h3"}}),_=new M({props:{code:"cHl0aG9uJTIwc3JjJTJGbGVyb2JvdCUyRnByb2Nlc3NvciUyRm1pZ3JhdGVfcG9saWN5X25vcm1hbGl6YXRpb24ucHklMjAlNUMlMEElMjAlMjAlMjAlMjAtLXByZXRyYWluZWQtcGF0aCUyMGxlcm9ib3QlMkZhY3RfYWxvaGFfc2ltX3RyYW5zZmVyX2N1YmVfaHVtYW4lMjAlNUMlMEElMjAlMjAlMjAlMjAtLXB1c2gtdG8taHViJTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1icmFuY2glMjBtaWdyYXRlZA==",highlighted:`python src/lerobot/processor/migrate_policy_normalization.py \\
    --pretrained-path lerobot/act_aloha_sim_transfer_cube_human \\
    --push-to-hub \\
    --branch migrated`,wrap:!1}}),Z=new h({props:{title:"Using migrated models",local:"using-migrated-models",headingTag:"h3"}}),x=new M({props:{code:"JTIzJTIwTmV3JTIwdXNhZ2UlMjBwYXR0ZXJuJTIwKGFmdGVyJTIwbWlncmF0aW9uKSUwQWZyb20lMjBsZXJvYm90LnBvbGljaWVzJTIwaW1wb3J0JTIwbWFrZV9wb2xpY3klMkMlMjBtYWtlX3ByZV9wb3N0X3Byb2Nlc3NvcnMlMEElMEElMjMlMjBMb2FkJTIwbW9kZWwlMjBhbmQlMjBwcm9jZXNzb3JzJTIwc2VwYXJhdGVseSUwQXBvbGljeSUyMCUzRCUyMG1ha2VfcG9saWN5KGNvbmZpZyUyQyUyMGRzX21ldGElM0RkYXRhc2V0Lm1ldGEpJTBBcHJlcHJvY2Vzc29yJTJDJTIwcG9zdHByb2Nlc3NvciUyMCUzRCUyMG1ha2VfcHJlX3Bvc3RfcHJvY2Vzc29ycyglMEElMjAlMjAlMjAlMjBwb2xpY3lfY2ZnJTNEY29uZmlnJTJDJTBBJTIwJTIwJTIwJTIwZGF0YXNldF9zdGF0cyUzRGRhdGFzZXQubWV0YS5zdGF0cyUwQSklMEElMEElMjMlMjBQcm9jZXNzJTIwZGF0YSUyMHRocm91Z2glMjBwaXBlbGluZSUwQXByb2Nlc3NlZF9iYXRjaCUyMCUzRCUyMHByZXByb2Nlc3NvcihyYXdfYmF0Y2gpJTBBYWN0aW9uJTIwJTNEJTIwcG9saWN5LnNlbGVjdF9hY3Rpb24ocHJvY2Vzc2VkX2JhdGNoKSUwQWZpbmFsX2FjdGlvbiUyMCUzRCUyMHBvc3Rwcm9jZXNzb3IoYWN0aW9uKQ==",highlighted:`<span class="hljs-comment"># New usage pattern (after migration)</span>
<span class="hljs-keyword">from</span> lerobot.policies <span class="hljs-keyword">import</span> make_policy, make_pre_post_processors

<span class="hljs-comment"># Load model and processors separately</span>
policy = make_policy(config, ds_meta=dataset.meta)
preprocessor, postprocessor = make_pre_post_processors(
    policy_cfg=config,
    dataset_stats=dataset.meta.stats
)

<span class="hljs-comment"># Process data through pipeline</span>
processed_batch = preprocessor(raw_batch)
action = policy.select_action(processed_batch)
final_action = postprocessor(action)`,wrap:!1}}),k=new h({props:{title:"Hardware API redesign",local:"hardware-api-redesign",headingTag:"h2"}}),W=new h({props:{title:"What changed?",local:"what-changed",headingTag:"h3"}}),N=new h({props:{title:"Impact on existing datasets",local:"impact-on-existing-datasets",headingTag:"h3"}}),L=new h({props:{title:"Using datasets made with the previous calibration system",local:"using-datasets-made-with-the-previous-calibration-system",headingTag:"h3"}}),V=new M({props:{code:"JTJCJTIwJTIwJTIwa2V5JTIwJTNEJTIwZiUyMiU3Qm5hbWUucmVtb3ZlcHJlZml4KCdtYWluXycpJTdELnBvcyUyMiUwQSUyMCUyMCUyMCUyMGFjdGlvbiU1QmtleSU1RCUyMCUzRCUyMGFjdGlvbl9hcnJheSU1QmklNUQuaXRlbSgpJTBBJTJCJTIwJTIwJTIwYWN0aW9uJTVCJTIyc2hvdWxkZXJfbGlmdC5wb3MlMjIlNUQlMjAlM0QlMjAtKGFjdGlvbiU1QiUyMnNob3VsZGVyX2xpZnQucG9zJTIyJTVEJTIwLSUyMDkwKSUwQSUyQiUyMCUyMCUyMGFjdGlvbiU1QiUyMmVsYm93X2ZsZXgucG9zJTIyJTVEJTIwLSUzRCUyMDkw",highlighted:`<span class="hljs-addition">+   key = f&quot;{name.removeprefix(&#x27;main_&#x27;)}.pos&quot;</span>
    action[key] = action_array[i].item()
<span class="hljs-addition">+   action[&quot;shoulder_lift.pos&quot;] = -(action[&quot;shoulder_lift.pos&quot;] - 90)</span>
<span class="hljs-addition">+   action[&quot;elbow_flex.pos&quot;] -= 90</span>`,wrap:!1}}),Q=new M({props:{code:"a2V5JTIwJTNEJTIwZiUyMiU3Qm5hbWUucmVtb3ZlcHJlZml4KCdtYWluXycpJTdELnBvcyUyMg==",highlighted:'key = <span class="hljs-string">f&quot;<span class="hljs-subst">{name.removeprefix(<span class="hljs-string">&#x27;main_&#x27;</span>)}</span>.pos&quot;</span>',wrap:!1}}),S=new M({props:{code:"YWN0aW9uJTVCJTIyc2hvdWxkZXJfbGlmdC5wb3MlMjIlNUQlMjAlM0QlMjAtKGFjdGlvbiU1QiUyMnNob3VsZGVyX2xpZnQucG9zJTIyJTVEJTIwLSUyMDkwKQ==",highlighted:'action[<span class="hljs-string">&quot;shoulder_lift.pos&quot;</span>] = -(action[<span class="hljs-string">&quot;shoulder_lift.pos&quot;</span>] - <span class="hljs-number">90</span>)',wrap:!1}}),E=new M({props:{code:"YWN0aW9uJTVCJTIyZWxib3dfZmxleC5wb3MlMjIlNUQlMjAtJTNEJTIwOTA=",highlighted:'action[<span class="hljs-string">&quot;elbow_flex.pos&quot;</span>] -= <span class="hljs-number">90</span>',wrap:!1}}),F=new M({props:{code:"cHl0aG9uJTIwZXhhbXBsZXMlMkZiYWNrd2FyZF9jb21wYXRpYmlsaXR5JTJGcmVwbGF5LnB5JTIwJTVDJTBBJTIwJTIwJTIwJTIwLS1yb2JvdC50eXBlJTNEc28xMDFfZm9sbG93ZXIlMjAlNUMlMEElMjAlMjAlMjAlMjAtLXJvYm90LnBvcnQlM0QlMkZkZXYlMkZ0dHkudXNibW9kZW01QTQ2MDgxNDQxMSUyMCU1QyUwQSUyMCUyMCUyMCUyMC0tcm9ib3QuaWQlM0RibHVlJTIwJTVDJTBBJTJCJTIwJTIwJTIwLS1yb2JvdC51c2VfZGVncmVlcyUzRHRydWUlMjAlNUMlMEElMjAlMjAlMjAlMjAtLWRhdGFzZXQucmVwb19pZCUzRG15X2RhdGFzZXRfaWQlMjAlNUMlMEElMjAlMjAlMjAlMjAtLWRhdGFzZXQuZXBpc29kZSUzRDA=",highlighted:`python examples/backward_compatibility/replay.py \\
    --robot.type=so101_follower \\
    --robot.port=/dev/tty.usbmodem5A460814411 \\
    --robot.id=blue \\
<span class="hljs-addition">+   --robot.use_degrees=true \\</span>
    --dataset.repo_id=my_dataset_id \\
    --dataset.episode=0`,wrap:!1}}),q=new h({props:{title:"Using policies trained with the previous calibration system",local:"using-policies-trained-with-the-previous-calibration-system",headingTag:"h3"}}),O=new M({props:{code:"YWN0aW9uX3ZhbHVlcyUyMCUzRCUyMHByZWRpY3RfYWN0aW9uKCUwQSUyMCUyMCUyMCUyMG9ic2VydmF0aW9uX2ZyYW1lJTJDJTBBJTIwJTIwJTIwJTIwcG9saWN5JTJDJTBBJTIwJTIwJTIwJTIwZ2V0X3NhZmVfdG9yY2hfZGV2aWNlKHBvbGljeS5jb25maWcuZGV2aWNlKSUyQyUwQSUyMCUyMCUyMCUyMHBvbGljeS5jb25maWcudXNlX2FtcCUyQyUwQSUyMCUyMCUyMCUyMHRhc2slM0RzaW5nbGVfdGFzayUyQyUwQSUyMCUyMCUyMCUyMHJvYm90X3R5cGUlM0Ryb2JvdC5yb2JvdF90eXBlJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMGFjdGlvbiUyMCUzRCUyMCU3QmtleSUzQSUyMGFjdGlvbl92YWx1ZXMlNUJpJTVELml0ZW0oKSUyMGZvciUyMGklMkMlMjBrZXklMjBpbiUyMGVudW1lcmF0ZShyb2JvdC5hY3Rpb25fZmVhdHVyZXMpJTdEJTBBJTBBJTJCJTIwJTIwJTIwYWN0aW9uJTVCJTIyc2hvdWxkZXJfbGlmdC5wb3MlMjIlNUQlMjAlM0QlMjAtKGFjdGlvbiU1QiUyMnNob3VsZGVyX2xpZnQucG9zJTIyJTVEJTIwLSUyMDkwKSUwQSUyQiUyMCUyMCUyMGFjdGlvbiU1QiUyMmVsYm93X2ZsZXgucG9zJTIyJTVEJTIwLSUzRCUyMDkwJTBBJTIwJTIwJTIwJTIwcm9ib3Quc2VuZF9hY3Rpb24oYWN0aW9uKQ==",highlighted:`action_values = predict_action(
    observation_frame,
    policy,
    get_safe_torch_device(policy.config.device),
    policy.config.use_amp,
    task=single_task,
    robot_type=robot.robot_type,
    )
    action = {key: action_values[i].item() for i, key in enumerate(robot.action_features)}

<span class="hljs-addition">+   action[&quot;shoulder_lift.pos&quot;] = -(action[&quot;shoulder_lift.pos&quot;] - 90)</span>
<span class="hljs-addition">+   action[&quot;elbow_flex.pos&quot;] -= 90</span>
    robot.send_action(action)`,wrap:!1}}),et=new Te({props:{source:"https://github.com/huggingface/lerobot/blob/main/docs/source/backwardcomp.mdx"}}),{c(){w=o("meta"),st=s(),it=o("p"),at=s(),n(g.$$.fragment),ot=s(),n(u.$$.fragment),nt=s(),n(b.$$.fragment),rt=s(),T=o("p"),T.innerHTML=Pt,dt=s(),n($.$$.fragment),pt=s(),J=o("table"),J.innerHTML=Ft,mt=s(),n(U.$$.fragment),ct=s(),v=o("ul"),v.innerHTML=qt,yt=s(),n(j.$$.fragment),ft=s(),C=o("p"),C.textContent=Dt,ht=s(),n(_.$$.fragment),wt=s(),I=o("p"),I.textContent=Kt,Mt=s(),G=o("ol"),G.innerHTML=Ot,gt=s(),n(Z.$$.fragment),ut=s(),n(x.$$.fragment),bt=s(),n(k.$$.fragment),Tt=s(),B=o("p"),B.innerHTML=te,$t=s(),n(W.$$.fragment),Jt=s(),X=o("table"),X.innerHTML=ee,Ut=s(),vt=o("hr"),jt=s(),n(N.$$.fragment),Ct=s(),z=o("ul"),z.innerHTML=ie,_t=s(),n(L.$$.fragment),It=s(),R=o("p"),R.innerHTML=le,Gt=s(),n(V.$$.fragment),Zt=s(),H=o("p"),H.innerHTML=se,xt=s(),n(Q.$$.fragment),kt=s(),Y=o("p"),Y.innerHTML=ae,Bt=s(),n(S.$$.fragment),Wt=s(),A=o("p"),A.innerHTML=oe,Xt=s(),n(E.$$.fragment),Nt=s(),P=o("p"),P.innerHTML=ne,zt=s(),n(F.$$.fragment),Lt=s(),n(q.$$.fragment),Rt=s(),D=o("p"),D.innerHTML=re,Vt=s(),K=o("p"),K.innerHTML=de,Ht=s(),n(O.$$.fragment),Qt=s(),tt=o("p"),tt.innerHTML=pe,Yt=s(),n(et.$$.fragment),St=s(),lt=o("p"),this.h()},l(t){const e=ge("svelte-u9bgzb",document.head);w=r(e,"META",{name:!0,content:!0}),e.forEach(i),st=a(t),it=r(t,"P",{}),me(it).forEach(i),at=a(t),d(g.$$.fragment,t),ot=a(t),d(u.$$.fragment,t),nt=a(t),d(b.$$.fragment,t),rt=a(t),T=r(t,"P",{"data-svelte-h":!0}),f(T)!=="svelte-1fvk5l0"&&(T.innerHTML=Pt),dt=a(t),d($.$$.fragment,t),pt=a(t),J=r(t,"TABLE",{"data-svelte-h":!0}),f(J)!=="svelte-1m3jvvd"&&(J.innerHTML=Ft),mt=a(t),d(U.$$.fragment,t),ct=a(t),v=r(t,"UL",{"data-svelte-h":!0}),f(v)!=="svelte-gduag3"&&(v.innerHTML=qt),yt=a(t),d(j.$$.fragment,t),ft=a(t),C=r(t,"P",{"data-svelte-h":!0}),f(C)!=="svelte-4kpqga"&&(C.textContent=Dt),ht=a(t),d(_.$$.fragment,t),wt=a(t),I=r(t,"P",{"data-svelte-h":!0}),f(I)!=="svelte-k6zx1o"&&(I.textContent=Kt),Mt=a(t),G=r(t,"OL",{"data-svelte-h":!0}),f(G)!=="svelte-1wopb63"&&(G.innerHTML=Ot),gt=a(t),d(Z.$$.fragment,t),ut=a(t),d(x.$$.fragment,t),bt=a(t),d(k.$$.fragment,t),Tt=a(t),B=r(t,"P",{"data-svelte-h":!0}),f(B)!=="svelte-17tiy1w"&&(B.innerHTML=te),$t=a(t),d(W.$$.fragment,t),Jt=a(t),X=r(t,"TABLE",{"data-svelte-h":!0}),f(X)!=="svelte-1404rgd"&&(X.innerHTML=ee),Ut=a(t),vt=r(t,"HR",{}),jt=a(t),d(N.$$.fragment,t),Ct=a(t),z=r(t,"UL",{"data-svelte-h":!0}),f(z)!=="svelte-tnj5u6"&&(z.innerHTML=ie),_t=a(t),d(L.$$.fragment,t),It=a(t),R=r(t,"P",{"data-svelte-h":!0}),f(R)!=="svelte-1szr8ts"&&(R.innerHTML=le),Gt=a(t),d(V.$$.fragment,t),Zt=a(t),H=r(t,"P",{"data-svelte-h":!0}),f(H)!=="svelte-4qzqbq"&&(H.innerHTML=se),xt=a(t),d(Q.$$.fragment,t),kt=a(t),Y=r(t,"P",{"data-svelte-h":!0}),f(Y)!=="svelte-10kr9hx"&&(Y.innerHTML=ae),Bt=a(t),d(S.$$.fragment,t),Wt=a(t),A=r(t,"P",{"data-svelte-h":!0}),f(A)!=="svelte-889d4s"&&(A.innerHTML=oe),Xt=a(t),d(E.$$.fragment,t),Nt=a(t),P=r(t,"P",{"data-svelte-h":!0}),f(P)!=="svelte-vkkttv"&&(P.innerHTML=ne),zt=a(t),d(F.$$.fragment,t),Lt=a(t),d(q.$$.fragment,t),Rt=a(t),D=r(t,"P",{"data-svelte-h":!0}),f(D)!=="svelte-1q7w343"&&(D.innerHTML=re),Vt=a(t),K=r(t,"P",{"data-svelte-h":!0}),f(K)!=="svelte-15md14c"&&(K.innerHTML=de),Ht=a(t),d(O.$$.fragment,t),Qt=a(t),tt=r(t,"P",{"data-svelte-h":!0}),f(tt)!=="svelte-okcd11"&&(tt.innerHTML=pe),Yt=a(t),d(et.$$.fragment,t),St=a(t),lt=r(t,"P",{}),me(lt).forEach(i),this.h()},h(){ce(w,"name","hf:doc:metadata"),ce(w,"content",Je)},m(t,e){ue(document.head,w),l(t,st,e),l(t,it,e),l(t,at,e),p(g,t,e),l(t,ot,e),p(u,t,e),l(t,nt,e),p(b,t,e),l(t,rt,e),l(t,T,e),l(t,dt,e),p($,t,e),l(t,pt,e),l(t,J,e),l(t,mt,e),p(U,t,e),l(t,ct,e),l(t,v,e),l(t,yt,e),p(j,t,e),l(t,ft,e),l(t,C,e),l(t,ht,e),p(_,t,e),l(t,wt,e),l(t,I,e),l(t,Mt,e),l(t,G,e),l(t,gt,e),p(Z,t,e),l(t,ut,e),p(x,t,e),l(t,bt,e),p(k,t,e),l(t,Tt,e),l(t,B,e),l(t,$t,e),p(W,t,e),l(t,Jt,e),l(t,X,e),l(t,Ut,e),l(t,vt,e),l(t,jt,e),p(N,t,e),l(t,Ct,e),l(t,z,e),l(t,_t,e),p(L,t,e),l(t,It,e),l(t,R,e),l(t,Gt,e),p(V,t,e),l(t,Zt,e),l(t,H,e),l(t,xt,e),p(Q,t,e),l(t,kt,e),l(t,Y,e),l(t,Bt,e),p(S,t,e),l(t,Wt,e),l(t,A,e),l(t,Xt,e),p(E,t,e),l(t,Nt,e),l(t,P,e),l(t,zt,e),p(F,t,e),l(t,Lt,e),p(q,t,e),l(t,Rt,e),l(t,D,e),l(t,Vt,e),l(t,K,e),l(t,Ht,e),p(O,t,e),l(t,Qt,e),l(t,tt,e),l(t,Yt,e),p(et,t,e),l(t,St,e),l(t,lt,e),At=!0},p:fe,i(t){At||(m(g.$$.fragment,t),m(u.$$.fragment,t),m(b.$$.fragment,t),m($.$$.fragment,t),m(U.$$.fragment,t),m(j.$$.fragment,t),m(_.$$.fragment,t),m(Z.$$.fragment,t),m(x.$$.fragment,t),m(k.$$.fragment,t),m(W.$$.fragment,t),m(N.$$.fragment,t),m(L.$$.fragment,t),m(V.$$.fragment,t),m(Q.$$.fragment,t),m(S.$$.fragment,t),m(E.$$.fragment,t),m(F.$$.fragment,t),m(q.$$.fragment,t),m(O.$$.fragment,t),m(et.$$.fragment,t),At=!0)},o(t){c(g.$$.fragment,t),c(u.$$.fragment,t),c(b.$$.fragment,t),c($.$$.fragment,t),c(U.$$.fragment,t),c(j.$$.fragment,t),c(_.$$.fragment,t),c(Z.$$.fragment,t),c(x.$$.fragment,t),c(k.$$.fragment,t),c(W.$$.fragment,t),c(N.$$.fragment,t),c(L.$$.fragment,t),c(V.$$.fragment,t),c(Q.$$.fragment,t),c(S.$$.fragment,t),c(E.$$.fragment,t),c(F.$$.fragment,t),c(q.$$.fragment,t),c(O.$$.fragment,t),c(et.$$.fragment,t),At=!1},d(t){t&&(i(st),i(it),i(at),i(ot),i(nt),i(rt),i(T),i(dt),i(pt),i(J),i(mt),i(ct),i(v),i(yt),i(ft),i(C),i(ht),i(wt),i(I),i(Mt),i(G),i(gt),i(ut),i(bt),i(Tt),i(B),i($t),i(Jt),i(X),i(Ut),i(vt),i(jt),i(Ct),i(z),i(_t),i(It),i(R),i(Gt),i(Zt),i(H),i(xt),i(kt),i(Y),i(Bt),i(Wt),i(A),i(Xt),i(Nt),i(P),i(zt),i(Lt),i(Rt),i(D),i(Vt),i(K),i(Ht),i(Qt),i(tt),i(Yt),i(St),i(lt)),i(w),y(g,t),y(u,t),y(b,t),y($,t),y(U,t),y(j,t),y(_,t),y(Z,t),y(x,t),y(k,t),y(W,t),y(N,t),y(L,t),y(V,t),y(Q,t),y(S,t),y(E,t),y(F,t),y(q,t),y(O,t),y(et,t)}}}const Je='{"title":"Backward compatibility","local":"backward-compatibility","sections":[{"title":"Policy Normalization Migration (PR #1452)","local":"policy-normalization-migration-pr-1452","sections":[{"title":"What changed?","local":"what-changed","sections":[],"depth":3},{"title":"Impact on existing models","local":"impact-on-existing-models","sections":[],"depth":3},{"title":"Migrating old models","local":"migrating-old-models","sections":[],"depth":3},{"title":"Using migrated models","local":"using-migrated-models","sections":[],"depth":3}],"depth":2},{"title":"Hardware API redesign","local":"hardware-api-redesign","sections":[{"title":"What changed?","local":"what-changed","sections":[],"depth":3},{"title":"Impact on existing datasets","local":"impact-on-existing-datasets","sections":[],"depth":3},{"title":"Using datasets made with the previous calibration system","local":"using-datasets-made-with-the-previous-calibration-system","sections":[],"depth":3},{"title":"Using policies trained with the previous calibration system","local":"using-policies-trained-with-the-previous-calibration-system","sections":[],"depth":3}],"depth":2}],"depth":1}';function Ue(Et){return he(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ge extends we{constructor(w){super(),Me(this,w,Ue,$e,ye,{})}}export{Ge as component};
