import{s as Ve,o as qe,n as Ct}from"../chunks/scheduler.4048030c.js";import{S as Pe,i as Ke,e as $,s as i,c as f,h as Oe,a as w,d as s,b as l,f as He,g as d,j as y,k as ve,l as ta,m as n,n as h,t as u,o as g,p as b}from"../chunks/index.30ed9803.js";import{C as ea,H as U,E as aa}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.53ab31a6.js";import{C as jt}from"../chunks/CodeBlock.83e15d23.js";import{Q as J}from"../chunks/Question.99129fcf.js";import{H as De,a as xt}from"../chunks/HfOption.ebe1243c.js";function sa(j){let o,M="<strong>Basic Behavioral Cloning</strong> (learn current action from current observation):",c,m,r;return m=new jt({props:{code:"JTIzJTIwU2ltcGxlJTNBJTIwY3VycmVudCUyMG9ic2VydmF0aW9uJTIwJUUyJTg2JTkyJTIwY3VycmVudCUyMGFjdGlvbiUwQWRlbHRhX3RpbWVzdGFtcHMlMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJvYnNlcnZhdGlvbi5pbWFnZXMud3Jpc3RfY2FtZXJhJTIyJTNBJTIwJTVCMC4wJTVEJTJDJTIwJTIwJTIzJTIwSnVzdCUyMGN1cnJlbnQlMjBmcmFtZSUwQSUyMCUyMCUyMCUyMCUyMmFjdGlvbiUyMiUzQSUyMCU1QjAuMCU1RCUyMCUyMCUyMyUyMEp1c3QlMjBjdXJyZW50JTIwYWN0aW9uJTBBJTdEJTBBJTBBZGF0YXNldCUyMCUzRCUyMExlUm9ib3REYXRhc2V0KCUwQSUyMCUyMCUyMCUyMCUyMmxlcm9ib3QlMkZzdmxhX3NvMTAxX3BpY2twbGFjZSUyMiUyQyUyMCUwQSUyMCUyMCUyMCUyMGRlbHRhX3RpbWVzdGFtcHMlM0RkZWx0YV90aW1lc3RhbXBzJTBBKQ==",highlighted:`<span class="hljs-comment"># Simple: current observation → current action</span>
delta_timestamps = {
    <span class="hljs-string">&quot;observation.images.wrist_camera&quot;</span>: [<span class="hljs-number">0.0</span>],  <span class="hljs-comment"># Just current frame</span>
    <span class="hljs-string">&quot;action&quot;</span>: [<span class="hljs-number">0.0</span>]  <span class="hljs-comment"># Just current action</span>
}

dataset = LeRobotDataset(
    <span class="hljs-string">&quot;lerobot/svla_so101_pickplace&quot;</span>, 
    delta_timestamps=delta_timestamps
)`,wrap:!1}}),{c(){o=$("p"),o.innerHTML=M,c=i(),f(m.$$.fragment)},l(a){o=w(a,"P",{"data-svelte-h":!0}),y(o)!=="svelte-1fjvi9j"&&(o.innerHTML=M),c=l(a),d(m.$$.fragment,a)},m(a,p){n(a,o,p),n(a,c,p),h(m,a,p),r=!0},p:Ct,i(a){r||(u(m.$$.fragment,a),r=!0)},o(a){g(m.$$.fragment,a),r=!1},d(a){a&&(s(o),s(c)),b(m,a)}}}function na(j){let o,M="<strong>History-Based BC</strong> (use observation history for better decisions):",c,m,r;return m=new jt({props:{code:"JTIzJTIwVXNlJTIwb2JzZXJ2YXRpb24lMjBoaXN0b3J5JTIwZm9yJTIwY29udGV4dCUwQWRlbHRhX3RpbWVzdGFtcHMlMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJvYnNlcnZhdGlvbi5pbWFnZXMud3Jpc3RfY2FtZXJhJTIyJTNBJTIwJTVCLTAuMiUyQyUyMC0wLjElMkMlMjAwLjAlNUQlMkMlMjAlMjAlMjMlMjAyMDBtcyUyMGhpc3RvcnklMEElMjAlMjAlMjAlMjAlMjJhY3Rpb24lMjIlM0ElMjAlNUIwLjAlNUQlMjAlMjAlMjMlMjBDdXJyZW50JTIwYWN0aW9uJTBBJTdEJTBBJTBBZGF0YXNldCUyMCUzRCUyMExlUm9ib3REYXRhc2V0KCUwQSUyMCUyMCUyMCUyMCUyMmxlcm9ib3QlMkZzdmxhX3NvMTAxX3BpY2twbGFjZSUyMiUyQyUwQSUyMCUyMCUyMCUyMGRlbHRhX3RpbWVzdGFtcHMlM0RkZWx0YV90aW1lc3RhbXBzJTBBKSUwQSUwQXNhbXBsZSUyMCUzRCUyMGRhdGFzZXQlNUIxMDAlNUQlMEElMjMlMjBJbWFnZXMlMjBzaGFwZSUzQSUyMCU1QjMlMkMlMjBDJTJDJTIwSCUyQyUyMFclNUQlMjAtJTIwMyUyMGhpc3RvcmljYWwlMjBmcmFtZXMlMEElMjMlMjBBY3Rpb24lMjBzaGFwZSUzQSUyMCU1QmFjdGlvbl9kaW0lNUQlMjAtJTIwc2luZ2xlJTIwY3VycmVudCUyMGFjdGlvbg==",highlighted:`<span class="hljs-comment"># Use observation history for context</span>
delta_timestamps = {
    <span class="hljs-string">&quot;observation.images.wrist_camera&quot;</span>: [-<span class="hljs-number">0.2</span>, -<span class="hljs-number">0.1</span>, <span class="hljs-number">0.0</span>],  <span class="hljs-comment"># 200ms history</span>
    <span class="hljs-string">&quot;action&quot;</span>: [<span class="hljs-number">0.0</span>]  <span class="hljs-comment"># Current action</span>
}

dataset = LeRobotDataset(
    <span class="hljs-string">&quot;lerobot/svla_so101_pickplace&quot;</span>,
    delta_timestamps=delta_timestamps
)

sample = dataset[<span class="hljs-number">100</span>]
<span class="hljs-comment"># Images shape: [3, C, H, W] - 3 historical frames</span>
<span class="hljs-comment"># Action shape: [action_dim] - single current action</span>`,wrap:!1}}),{c(){o=$("p"),o.innerHTML=M,c=i(),f(m.$$.fragment)},l(a){o=w(a,"P",{"data-svelte-h":!0}),y(o)!=="svelte-1vzsa0u"&&(o.innerHTML=M),c=l(a),d(m.$$.fragment,a)},m(a,p){n(a,o,p),n(a,c,p),h(m,a,p),r=!0},p:Ct,i(a){r||(u(m.$$.fragment,a),r=!0)},o(a){g(m.$$.fragment,a),r=!1},d(a){a&&(s(o),s(c)),b(m,a)}}}function oa(j){let o,M="<strong>Action Chunking</strong> (predict action sequences for smoother control):",c,m,r;return m=new jt({props:{code:"JTIzJTIwUHJlZGljdCUyMG11bHRpcGxlJTIwZnV0dXJlJTIwYWN0aW9ucyUyMGF0JTIwb25jZSUwQWRlbHRhX3RpbWVzdGFtcHMlMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJvYnNlcnZhdGlvbi5pbWFnZXMud3Jpc3RfY2FtZXJhJTIyJTNBJTIwJTVCLTAuMSUyQyUyMDAuMCU1RCUyQyUyMCUyMCUyMyUyMFJlY2VudCUyMCUyQiUyMGN1cnJlbnQlMEElMjAlMjAlMjAlMjAlMjJhY3Rpb24lMjIlM0ElMjAlNUIwLjAlMkMlMjAwLjElMkMlMjAwLjIlMkMlMjAwLjMlNUQlMjAlMjAlMjMlMjBDdXJyZW50JTIwJTJCJTIwMyUyMGZ1dHVyZSUyMGFjdGlvbnMlMEElN0QlMEElMEFkYXRhc2V0JTIwJTNEJTIwTGVSb2JvdERhdGFzZXQoJTBBJTIwJTIwJTIwJTIwJTIybGVyb2JvdCUyRnN2bGFfc28xMDFfcGlja3BsYWNlJTIyJTJDJTBBJTIwJTIwJTIwJTIwZGVsdGFfdGltZXN0YW1wcyUzRGRlbHRhX3RpbWVzdGFtcHMlMEEpJTBBJTBBc2FtcGxlJTIwJTNEJTIwZGF0YXNldCU1QjEwMCU1RCUyMCUwQSUyMyUyMEltYWdlcyUyMHNoYXBlJTNBJTIwJTVCMiUyQyUyMEMlMkMlMjBIJTJDJTIwVyU1RCUyMC0lMjAyJTIwb2JzZXJ2YXRpb24lMjBmcmFtZXMlMEElMjMlMjBBY3Rpb24lMjBzaGFwZSUzQSUyMCU1QjQlMkMlMjBhY3Rpb25fZGltJTVEJTIwLSUyMDQlMjBhY3Rpb24lMjBwcmVkaWN0aW9ucw==",highlighted:`<span class="hljs-comment"># Predict multiple future actions at once</span>
delta_timestamps = {
    <span class="hljs-string">&quot;observation.images.wrist_camera&quot;</span>: [-<span class="hljs-number">0.1</span>, <span class="hljs-number">0.0</span>],  <span class="hljs-comment"># Recent + current</span>
    <span class="hljs-string">&quot;action&quot;</span>: [<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>, <span class="hljs-number">0.2</span>, <span class="hljs-number">0.3</span>]  <span class="hljs-comment"># Current + 3 future actions</span>
}

dataset = LeRobotDataset(
    <span class="hljs-string">&quot;lerobot/svla_so101_pickplace&quot;</span>,
    delta_timestamps=delta_timestamps
)

sample = dataset[<span class="hljs-number">100</span>] 
<span class="hljs-comment"># Images shape: [2, C, H, W] - 2 observation frames</span>
<span class="hljs-comment"># Action shape: [4, action_dim] - 4 action predictions</span>`,wrap:!1}}),{c(){o=$("p"),o.innerHTML=M,c=i(),f(m.$$.fragment)},l(a){o=w(a,"P",{"data-svelte-h":!0}),y(o)!=="svelte-euuptz"&&(o.innerHTML=M),c=l(a),d(m.$$.fragment,a)},m(a,p){n(a,o,p),n(a,c,p),h(m,a,p),r=!0},p:Ct,i(a){r||(u(m.$$.fragment,a),r=!0)},o(a){g(m.$$.fragment,a),r=!1},d(a){a&&(s(o),s(c)),b(m,a)}}}function ia(j){let o,M,c,m,r,a;return o=new xt({props:{id:"temporal-windows",option:"basic-bc",$$slots:{default:[sa]},$$scope:{ctx:j}}}),c=new xt({props:{id:"temporal-windows",option:"history-bc",$$slots:{default:[na]},$$scope:{ctx:j}}}),r=new xt({props:{id:"temporal-windows",option:"action-chunking",$$slots:{default:[oa]},$$scope:{ctx:j}}}),{c(){f(o.$$.fragment),M=i(),f(c.$$.fragment),m=i(),f(r.$$.fragment)},l(p){d(o.$$.fragment,p),M=l(p),d(c.$$.fragment,p),m=l(p),d(r.$$.fragment,p)},m(p,T){h(o,p,T),n(p,M,T),h(c,p,T),n(p,m,T),h(r,p,T),a=!0},p(p,T){const v={};T&2&&(v.$$scope={dirty:T,ctx:p}),o.$set(v);const Jt={};T&2&&(Jt.$$scope={dirty:T,ctx:p}),c.$set(Jt);const k={};T&2&&(k.$$scope={dirty:T,ctx:p}),r.$set(k)},i(p){a||(u(o.$$.fragment,p),u(c.$$.fragment,p),u(r.$$.fragment,p),a=!0)},o(p){g(o.$$.fragment,p),g(c.$$.fragment,p),g(r.$$.fragment,p),a=!1},d(p){p&&(s(M),s(m)),b(o,p),b(c,p),b(r,p)}}}function la(j){let o,M="<strong>Download Dataset</strong> (faster training, requires storage):",c,m,r;return m=new jt({props:{code:"ZnJvbSUyMGxlcm9ib3QuZGF0YXNldHMubGVyb2JvdF9kYXRhc2V0JTIwaW1wb3J0JTIwTGVSb2JvdERhdGFzZXQlMEElMEElMjMlMjBEb3dubG9hZHMlMjBkYXRhc2V0JTIwdG8lMjBsb2NhbCUyMGNhY2hlJTBBZGF0YXNldCUyMCUzRCUyMExlUm9ib3REYXRhc2V0KCUyMmxlcm9ib3QlMkZzdmxhX3NvMTAxX3BpY2twbGFjZSUyMiklMEElMEElMjMlMjBGYXN0ZXN0JTIwYWNjZXNzJTIwYWZ0ZXIlMjBkb3dubG9hZCUwQXNhbXBsZSUyMCUzRCUyMGRhdGFzZXQlNUIxMDAlNUQ=",highlighted:`<span class="hljs-keyword">from</span> lerobot.datasets.lerobot_dataset <span class="hljs-keyword">import</span> LeRobotDataset

<span class="hljs-comment"># Downloads dataset to local cache</span>
dataset = LeRobotDataset(<span class="hljs-string">&quot;lerobot/svla_so101_pickplace&quot;</span>)

<span class="hljs-comment"># Fastest access after download</span>
sample = dataset[<span class="hljs-number">100</span>]`,wrap:!1}}),{c(){o=$("p"),o.innerHTML=M,c=i(),f(m.$$.fragment)},l(a){o=w(a,"P",{"data-svelte-h":!0}),y(o)!=="svelte-15sgzp4"&&(o.innerHTML=M),c=l(a),d(m.$$.fragment,a)},m(a,p){n(a,o,p),n(a,c,p),h(m,a,p),r=!0},p:Ct,i(a){r||(u(m.$$.fragment,a),r=!0)},o(a){g(m.$$.fragment,a),r=!1},d(a){a&&(s(o),s(c)),b(m,a)}}}function ra(j){let o,M="<strong>Stream Dataset</strong> (no storage needed, requires internet):",c,m,r;return m=new jt({props:{code:"ZnJvbSUyMGxlcm9ib3QuZGF0YXNldHMuc3RyZWFtaW5nX2RhdGFzZXQlMjBpbXBvcnQlMjBTdHJlYW1pbmdMZVJvYm90RGF0YXNldCUwQSUwQSUyMyUyMFN0cmVhbSUyMGRhdGElMjB3aXRob3V0JTIwZG93bmxvYWRpbmclMEFzdHJlYW1pbmdfZGF0YXNldCUyMCUzRCUyMFN0cmVhbWluZ0xlUm9ib3REYXRhc2V0KCUwQSUyMCUyMCUyMCUyMCUyMmxlcm9ib3QlMkZzdmxhX3NvMTAxX3BpY2twbGFjZSUyMiUyQyUwQSUyMCUyMCUyMCUyMGRlbHRhX3RpbWVzdGFtcHMlM0RkZWx0YV90aW1lc3RhbXBzJTBBKSUwQSUwQSUyMyUyMFdvcmtzJTIwZXhhY3RseSUyMGxpa2UlMjByZWd1bGFyJTIwZGF0YXNldCUwQXNhbXBsZSUyMCUzRCUyMHN0cmVhbWluZ19kYXRhc2V0JTVCMTAwJTVE",highlighted:`<span class="hljs-keyword">from</span> lerobot.datasets.streaming_dataset <span class="hljs-keyword">import</span> StreamingLeRobotDataset

<span class="hljs-comment"># Stream data without downloading</span>
streaming_dataset = StreamingLeRobotDataset(
    <span class="hljs-string">&quot;lerobot/svla_so101_pickplace&quot;</span>,
    delta_timestamps=delta_timestamps
)

<span class="hljs-comment"># Works exactly like regular dataset</span>
sample = streaming_dataset[<span class="hljs-number">100</span>]`,wrap:!1}}),{c(){o=$("p"),o.innerHTML=M,c=i(),f(m.$$.fragment)},l(a){o=w(a,"P",{"data-svelte-h":!0}),y(o)!=="svelte-yrm5vi"&&(o.innerHTML=M),c=l(a),d(m.$$.fragment,a)},m(a,p){n(a,o,p),n(a,c,p),h(m,a,p),r=!0},p:Ct,i(a){r||(u(m.$$.fragment,a),r=!0)},o(a){g(m.$$.fragment,a),r=!1},d(a){a&&(s(o),s(c)),b(m,a)}}}function pa(j){let o,M,c,m;return o=new xt({props:{id:"dataset-loading",option:"download",$$slots:{default:[la]},$$scope:{ctx:j}}}),c=new xt({props:{id:"dataset-loading",option:"streaming",$$slots:{default:[ra]},$$scope:{ctx:j}}}),{c(){f(o.$$.fragment),M=i(),f(c.$$.fragment)},l(r){d(o.$$.fragment,r),M=l(r),d(c.$$.fragment,r)},m(r,a){h(o,r,a),n(r,M,a),h(c,r,a),m=!0},p(r,a){const p={};a&2&&(p.$$scope={dirty:a,ctx:r}),o.$set(p);const T={};a&2&&(T.$$scope={dirty:a,ctx:r}),c.$set(T)},i(r){m||(u(o.$$.fragment,r),u(c.$$.fragment,r),m=!0)},o(r){g(o.$$.fragment,r),g(c.$$.fragment,r),m=!1},d(r){r&&s(M),b(o,r),b(c,r)}}}function ma(j){let o,M,c,m,r,a,p,T,v,Jt="This section shows you how to work with robotics datasets from Hugging Face using the LeRobotDataset class. We’ll start with simple examples and gradually add complexity, so you can copy and adapt the approach that best fits your project.",k,B,xe="The key thing to understand is that any dataset on the Hub that follows LeRobot’s format (with tabular data, visual data, and metadata included) can be loaded with just one line of code.",Rt,L,Ce="When working with robotics data, you often need to look at multiple time steps at once rather than single data points. Why? Most robot learning algorithms need to see how things change over time. For example, to pick up an object, a robot might need to see what happened in the last few moments to understand the current situation better. Similarly, many algorithms work better when they can plan several actions ahead rather than just deciding what to do right now.",It,G,Re="LeRobotDataset makes this easy with “temporal windowing.” You simply declare which time offsets you want (i.e. current frame plus the two previous ones), and it automatically handles the complexity of getting those frames, even when some might be missing at the beginning or end of an episode.",kt,W,Ie='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobotdataset-v3/streaming-multiple-frames.png" alt="streaming-multiple-frames"/>',Bt,x,ke="<p><strong>Temporal Windows Explained:</strong></p> <ul><li><strong>Observation history</strong>: <code>[-0.2, -0.1, 0.0]</code> gives you 200ms, 100ms, and current observations</li> <li><strong>Action sequences</strong>: <code>[0.0, 0.1, 0.2]</code> provides current and next 2 actions (100ms apart)</li> <li><strong>Automatic padding</strong>: Missing frames at episode boundaries are handled automatically. The datasets always returns the requested number of frames, and it applies padding where necessary.</li> <li><strong>Mask included</strong>: Know which frames are real vs. padded for proper training</li></ul>",Lt,Z,Be="Conveniently, by using LeRobotDataset with a PyTorch <code>DataLoader</code> one can automatically collate the individual sample dictionaries from the dataset into a single dictionary of batched tensors for downstream training or inference. LeRobotDataset also natively supports streaming mode for datasets. Users can stream data of a large dataset hosted on the Hugging Face Hub, with a one-line change in their implementation. Streaming datasets supports high-performance batch processing (ca. 80-100 it/s, varying on connectivity) and high levels of frames randomization, key features for practical BC algorithms which otherwise may be slow or operating on highly non-i.i.d. data. This feature is designed to improve on accessibility so that large datasets can be processed by users without requiring large amounts of memory and storage.",Gt,_,Le="Here are different ways to set up temporal windows depending on your use case. Skim the options and pick one to start—switching later is just a change to the dictionary.",Wt,C,Zt,E,_t,R,Ge="<p><strong>When to use streaming:</strong></p> <ul><li><strong>Dataset &gt; available storage</strong> - Stream datasets that don’t fit on your disk</li> <li><strong>Experimentation</strong> - Quickly try different datasets without downloading</li> <li><strong>Cloud training</strong> - Reduce startup time by streaming from Hugging Face Hub</li> <li><strong>Network available</strong> - Requires stable internet connection during training</li></ul> <p><strong>Performance:</strong> Streaming achieves 80-100 it/s with good connectivity! That is (on average) comparable with locally-stored datasets, factoring out initialization overhead.</p>",Et,I,Xt,X,Yt,Y,We="You can easily integrate regular and streaming datasets with torch data loaders. This makes integrating any LeRobotDataset with your own (<code>torch</code>) training loop rather convenient. Because we fetch all frames from the datasets as a tensor, wrapping iterating over a dataset with training is particularly straightforward.",St,S,Nt,N,Ze="You can easily integrate regular and streaming datasets with torch data loaders. This makes integrating any LeRobotDataset with your own (<code>torch</code>) training loop rather convenient. Because we fetch all frames from the datasets as a tensor, wrapping iterating over a dataset with training is particularly straightforward.",Qt,Q,Ft,F,zt,z,_e="This simple API hides significant complexity:",At,A,Ee="<li>✅ <strong>Multi-modal synchronization</strong> - Images and sensors perfectly aligned</li> <li>✅ <strong>Efficient storage</strong> - Compressed videos, memory-mapped arrays</li> <li>✅ <strong>Temporal handling</strong> - Easy access to observation/action sequences</li> <li>✅ <strong>Scalability</strong> - Same code works for small and massive datasets</li>",Ht,H,Xe="Compare this to traditional robotics data handling, which often requires:",Dt,D,Ye="<li>Custom parsers for each data format</li> <li>Manual synchronization across modalities</li> <li>Complex buffering for temporal windows</li> <li>Platform-specific loading code</li>",Vt,V,Se="LeRobotDataset <strong>standardizes and simplifies</strong> all of this!",qt,q,Pt,P,Ne="Test your understanding of LeRobot and its role in robot learning:",Kt,K,Ot,O,te,tt,ee,et,ae,at,se,st,ne,nt,oe,ot,ie,it,le,lt,re,rt,pe,pt,me,mt,ce,ct,fe,ft,de,dt,he,ht,ue,ut,ge,gt,be,bt,Me,Mt,$e,$t,we,wt,ye,yt,Qe='For a full list of references, check out the <a href="https://huggingface.co/spaces/lerobot/robot-learning-tutorial" rel="nofollow">tutorial</a>.',Te,Tt,Fe=`<li><p><strong>Diffusion Policy: Visuomotor Policy Learning via Action Diffusion</strong> (2024)<br/>
Cheng Chi et al.<br/>
This paper introduces diffusion models for robot policy learning and discusses how temporal windowing and action chunking enable smooth visuomotor control.<br/> <a href="https://huggingface.co/papers/2303.04137" rel="nofollow">arXiv:2303.04137</a></p></li> <li><p><strong>RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control</strong> (2023)<br/>
Anthony Brohan et al.<br/>
Demonstrates how vision-language models can be fine-tuned for robotic control, including discussion of temporal context windows and action prediction horizons.<br/> <a href="https://huggingface.co/papers/2307.15818" rel="nofollow">arXiv:2307.15818</a></p></li>`,Ue,Ut,je,vt,Je;return r=new ea({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),p=new U({props:{title:"Code Example: Datasets, in practice",local:"code-example-datasets-in-practice",headingTag:"h1"}}),C=new De({props:{id:"temporal-windows",options:["basic-bc","history-bc","action-chunking"],$$slots:{default:[ia]},$$scope:{ctx:j}}}),E=new U({props:{title:"Streaming Large Datasets",local:"streaming-large-datasets",headingTag:"h3"}}),I=new De({props:{id:"dataset-loading",options:["download","streaming"],$$slots:{default:[pa]},$$scope:{ctx:j}}}),X=new U({props:{title:"Training Integration",local:"training-integration",headingTag:"h2"}}),S=new U({props:{title:"PyTorch DataLoader",local:"pytorch-dataloader",headingTag:"h3"}}),Q=new jt({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdG9yY2gudXRpbHMuZGF0YSUyMGltcG9ydCUyMERhdGFMb2FkZXIlMEElMjMlMjBDcmVhdGUlMjBEYXRhTG9hZGVyJTIwZm9yJTIwdHJhaW5pbmclMEFkYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjBkYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBudW1fd29ya2VycyUzRDQlMEEpJTBBJTBBJTIzJTIwVHJhaW5pbmclMjBsb29wJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIlMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwJTIyY3B1JTIyKSUwQSUwQWZvciUyMGJhdGNoJTIwaW4lMjBkYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwTW92ZSUyMHRvJTIwZGV2aWNlJTBBJTIwJTIwJTIwJTIwb2JzZXJ2YXRpb25zJTIwJTNEJTIwYmF0Y2glNUIlMjJvYnNlcnZhdGlvbi5zdGF0ZSUyMiU1RC50byhkZXZpY2UpJTBBJTIwJTIwJTIwJTIwYWN0aW9ucyUyMCUzRCUyMGJhdGNoJTVCJTIyYWN0aW9uJTIyJTVELnRvKGRldmljZSklMEElMjAlMjAlMjAlMjBpbWFnZXMlMjAlM0QlMjBiYXRjaCU1QiUyMm9ic2VydmF0aW9uLmltYWdlcy53cmlzdF9jYW1lcmElMjIlNUQudG8oZGV2aWNlKSUwQSUyMCUyMCUyMCUyMCUwQSUyMCUyMCUyMCUyMCUyMyUyMFlvdXIlMjBtb2RlbCUyMHRyYWluaW5nJTIwaGVyZSUwQSUyMCUyMCUyMCUyMCUyMyUyMGxvc3MlMjAlM0QlMjBtb2RlbChvYnNlcnZhdGlvbnMlMkMlMjBpbWFnZXMlMkMlMjBhY3Rpb25zKSUwQSUyMCUyMCUyMCUyMCUyMyUyMGxvc3MuYmFja3dhcmQoKSUwQSUyMCUyMCUyMCUyMCUyMyUyMG9wdGltaXplci5zdGVwKCk=",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
<span class="hljs-comment"># Create DataLoader for training</span>
dataloader = DataLoader(
    dataset,
    batch_size=<span class="hljs-number">16</span>,
    shuffle=<span class="hljs-literal">True</span>,
    num_workers=<span class="hljs-number">4</span>
)

<span class="hljs-comment"># Training loop</span>
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span> <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">&quot;cpu&quot;</span>)

<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> dataloader:
    <span class="hljs-comment"># Move to device</span>
    observations = batch[<span class="hljs-string">&quot;observation.state&quot;</span>].to(device)
    actions = batch[<span class="hljs-string">&quot;action&quot;</span>].to(device)
    images = batch[<span class="hljs-string">&quot;observation.images.wrist_camera&quot;</span>].to(device)
    
    <span class="hljs-comment"># Your model training here</span>
    <span class="hljs-comment"># loss = model(observations, images, actions)</span>
    <span class="hljs-comment"># loss.backward()</span>
    <span class="hljs-comment"># optimizer.step()</span>`,wrap:!1}}),F=new U({props:{title:"Why This Matters",local:"why-this-matters",headingTag:"h2"}}),q=new U({props:{title:"Section Quiz",local:"section-quiz",headingTag:"h2"}}),K=new U({props:{title:"1. What makes LeRobot different from traditional robotics libraries?",local:"1-what-makes-lerobot-different-from-traditional-robotics-libraries",headingTag:"h3"}}),O=new J({props:{choices:[{text:"It only works with simulation environments.",explain:"LeRobot actually focuses on real-world robots and supports many physical platforms."},{text:"It provides end-to-end integration across the entire robotics stack with state-of-the-art learning algorithms.",explain:"LeRobot's key innovation is combining hardware control, data handling, and learning algorithms in one unified library.",correct:!0},{text:"It requires expensive industrial robots to function.",explain:"LeRobot focuses on accessible, low-cost robots to democratize robotics."},{text:"It only supports classical control methods.",explain:"LeRobot specifically focuses on learning-based approaches, not classical control."}]}}),tt=new U({props:{title:"2. Which of the following is NOT a key component of LeRobot’s approach?",local:"2-which-of-the-following-is-not-a-key-component-of-lerobots-approach",headingTag:"h3"}}),et=new J({props:{choices:[{text:"Unified low-level robot configuration handling",explain:"This is indeed a key component that enables cross-platform compatibility."},{text:"Native robotics dataset format (LeRobotDataset)",explain:"LeRobotDataset is a central innovation of the library."},{text:"Requiring expert knowledge for each new robot platform",explain:"This is actually what LeRobot aims to eliminate - it reduces the expertise barrier.",correct:!0},{text:"State-of-the-art learning algorithms with PyTorch implementations",explain:"SOTA algorithms are a core feature of LeRobot."}]}}),at=new U({props:{title:"3. What is the main advantage of LeRobot’s optimized inference stack?",local:"3-what-is-the-main-advantage-of-lerobots-optimized-inference-stack",headingTag:"h3"}}),st=new J({props:{choices:[{text:"It makes training faster on GPUs.",explain:"The inference stack is about deployment, not training speed."},{text:"It reduces the memory requirements for storing datasets.",explain:"Memory reduction is handled by the dataset format, not the inference stack."},{text:"It decouples action planning from action execution for better real-time performance.",explain:"This separation is crucial for real-time robot control where millisecond delays matter.",correct:!0},{text:"It automatically generates training data from robot interactions.",explain:"Data generation is not handled by the inference stack."}]}}),nt=new U({props:{title:"4. Which types of robotic platforms does LeRobot support?",local:"4-which-types-of-robotic-platforms-does-lerobot-support",headingTag:"h3"}}),ot=new J({props:{choices:[{text:"Only manipulation robots like robotic arms.",explain:"LeRobot supports much more than just manipulation platforms."},{text:"Manipulation, locomotion, and whole-body control platforms.",explain:"LeRobot supports the full spectrum of robotic platforms, from simple arms to complex humanoids.",correct:!0},{text:"Only robots that cost more than $10,000.",explain:"LeRobot focuses on accessible, low-cost platforms to democratize robotics."},{text:"Only robots manufactured by specific companies.",explain:"LeRobot supports open-source and accessible robots from various sources."}]}}),it=new U({props:{title:"5. What does “end-to-end integration with the robotics stack” mean in the context of LeRobot?",local:"5-what-does-end-to-end-integration-with-the-robotics-stack-mean-in-the-context-of-lerobot",headingTag:"h3"}}),lt=new J({props:{choices:[{text:"It only handles high-level planning, not low-level control.",explain:"End-to-end means it covers everything from low-level control to high-level algorithms."},{text:"It covers everything from low-level hardware control to high-level learning algorithms.",explain:"This comprehensive coverage eliminates the need to integrate multiple separate tools.",correct:!0},{text:"It requires separate tools for data handling and model training.",explain:"End-to-end integration means you don't need separate tools - everything is unified."},{text:"It only works with specific operating systems.",explain:"Platform integration refers to robotics components, not operating systems."}]}}),rt=new U({props:{title:"6. What is the primary purpose of the delta_timestamps parameter in LeRobotDataset?",local:"6-what-is-the-primary-purpose-of-the-deltatimestamps-parameter-in-lerobotdataset",headingTag:"h3"}}),pt=new J({props:{choices:[{text:"It sets the frame rate for video recording.",explain:"Frame rates are stored in metadata, not controlled by delta_timestamps."},{text:"It defines temporal windows to access observation histories and action sequences.",explain:"delta_timestamps allows you to specify which time offsets to include, enabling access to past observations and future actions.",correct:!0},{text:"It synchronizes data across different robots.",explain:"Synchronization across robots is not handled by delta_timestamps."},{text:"It compresses video data for storage efficiency.",explain:"Video compression is handled separately in the dataset storage format."}]}}),mt=new U({props:{title:"7. Which of the following best describes the three main components of LeRobotDataset?",local:"7-which-of-the-following-best-describes-the-three-main-components-of-lerobotdataset",headingTag:"h3"}}),ct=new J({props:{choices:[{text:"Images, Actions, and Rewards",explain:"While these are important data types, they don't describe the architectural components."},{text:"Tabular Data, Visual Data, and Metadata",explain:"These are the three architectural pillars: efficient storage for sensor data, compressed videos, and JSON metadata files.",correct:!0},{text:"Training, Validation, and Test sets",explain:"These are data splits, not the architectural components of the format."},{text:"Simulation, Real Robot, and Hybrid data",explain:"These describe data sources, not the storage architecture."}]}}),ft=new U({props:{title:"8. What happens when you use StreamingLeRobotDataset instead of LeRobotDataset ?",local:"8-what-happens-when-you-use-streaminglerobotdataset-instead-of-lerobotdataset-",headingTag:"h3"}}),dt=new J({props:{choices:[{text:"The data is automatically augmented for better training.",explain:"Streaming doesn't involve data augmentation - that's a separate preprocessing step."},{text:"The dataset is downloaded faster to your local machine.",explain:"Streaming actually avoids downloading the dataset entirely."},{text:"Data is streamed from the Hugging Face Hub without downloading, saving storage space.",explain:"StreamingLeRobotDataset allows you to process large datasets without downloading them locally.",correct:!0},{text:"The dataset is automatically split into train/validation sets.",explain:"Data splitting is independent of the streaming vs download choice."}]}}),ht=new U({props:{title:"9. In the context of robot learning, what does “temporal windowing” refer to?",local:"9-in-the-context-of-robot-learning-what-does-temporal-windowing-refer-to",headingTag:"h3"}}),ut=new J({props:{choices:[{text:"The time it takes to train a robot learning model.",explain:"Training time is not what temporal windowing refers to."},{text:"Accessing multiple time steps of observations and actions around a given frame.",explain:"Temporal windowing allows algorithms to use observation history and action sequences, crucial for robot learning.",correct:!0},{text:"The frequency at which robot sensors collect data.",explain:"Sensor frequency is separate from temporal windowing in datasets."},{text:"The duration of each robot episode or trajectory.",explain:"Episode duration is different from temporal windowing within episodes."}]}}),gt=new U({props:{title:"10. What is the main advantage of LeRobotDataset’s approach to storing video data?",local:"10-what-is-the-main-advantage-of-lerobotdatasets-approach-to-storing-video-data",headingTag:"h3"}}),bt=new J({props:{choices:[{text:"Videos are stored in the highest possible quality.",explain:"Quality isn't the main focus - efficiency and scalability are."},{text:"Each frame is stored as a separate file for easy access.",explain:"This would actually be inefficient - LeRobotDataset does the opposite."},{text:"Multiple episodes are concatenated into larger MP4 files to reduce file system stress.",explain:"This approach dramatically reduces the number of files, making storage more efficient for large datasets.",correct:!0},{text:"Videos are automatically compressed using AI algorithms.",explain:"Standard video compression is used, not AI-based compression."}]}}),Mt=new U({props:{title:"11. Which statement about LeRobotDataset’s compatibility is correct?",local:"11-which-statement-about-lerobotdatasets-compatibility-is-correct",headingTag:"h3"}}),$t=new J({props:{choices:[{text:"It only works with specific robot brands like SO-100.",explain:"LeRobotDataset is designed to work across many different robot platforms."},{text:"It requires custom code for each new robot platform.",explain:"The unified format reduces the need for custom code per platform."},{text:"It integrates seamlessly with PyTorch DataLoader and Hugging Face ecosystems.",explain:"This integration makes it easy to use robotics data with existing ML workflows.",correct:!0},{text:"It only supports simulation data, not real robot data.",explain:"LeRobotDataset supports both simulation and real robot data."}]}}),wt=new U({props:{title:"References",local:"references",headingTag:"h2"}}),Ut=new aa({props:{source:"https://github.com/huggingface/robotics-course/blob/main/units/en/unit1/4.mdx"}}),{c(){o=$("meta"),M=i(),c=$("p"),m=i(),f(r.$$.fragment),a=i(),f(p.$$.fragment),T=i(),v=$("p"),v.textContent=Jt,k=i(),B=$("p"),B.textContent=xe,Rt=i(),L=$("p"),L.textContent=Ce,It=i(),G=$("p"),G.textContent=Re,kt=i(),W=$("p"),W.innerHTML=Ie,Bt=i(),x=$("blockquote"),x.innerHTML=ke,Lt=i(),Z=$("p"),Z.innerHTML=Be,Gt=i(),_=$("p"),_.textContent=Le,Wt=i(),f(C.$$.fragment),Zt=i(),f(E.$$.fragment),_t=i(),R=$("blockquote"),R.innerHTML=Ge,Et=i(),f(I.$$.fragment),Xt=i(),f(X.$$.fragment),Yt=i(),Y=$("p"),Y.innerHTML=We,St=i(),f(S.$$.fragment),Nt=i(),N=$("p"),N.innerHTML=Ze,Qt=i(),f(Q.$$.fragment),Ft=i(),f(F.$$.fragment),zt=i(),z=$("p"),z.textContent=_e,At=i(),A=$("ul"),A.innerHTML=Ee,Ht=i(),H=$("p"),H.textContent=Xe,Dt=i(),D=$("ul"),D.innerHTML=Ye,Vt=i(),V=$("p"),V.innerHTML=Se,qt=i(),f(q.$$.fragment),Pt=i(),P=$("p"),P.textContent=Ne,Kt=i(),f(K.$$.fragment),Ot=i(),f(O.$$.fragment),te=i(),f(tt.$$.fragment),ee=i(),f(et.$$.fragment),ae=i(),f(at.$$.fragment),se=i(),f(st.$$.fragment),ne=i(),f(nt.$$.fragment),oe=i(),f(ot.$$.fragment),ie=i(),f(it.$$.fragment),le=i(),f(lt.$$.fragment),re=i(),f(rt.$$.fragment),pe=i(),f(pt.$$.fragment),me=i(),f(mt.$$.fragment),ce=i(),f(ct.$$.fragment),fe=i(),f(ft.$$.fragment),de=i(),f(dt.$$.fragment),he=i(),f(ht.$$.fragment),ue=i(),f(ut.$$.fragment),ge=i(),f(gt.$$.fragment),be=i(),f(bt.$$.fragment),Me=i(),f(Mt.$$.fragment),$e=i(),f($t.$$.fragment),we=i(),f(wt.$$.fragment),ye=i(),yt=$("p"),yt.innerHTML=Qe,Te=i(),Tt=$("ul"),Tt.innerHTML=Fe,Ue=i(),f(Ut.$$.fragment),je=i(),vt=$("p"),this.h()},l(t){const e=Oe("svelte-u9bgzb",document.head);o=w(e,"META",{name:!0,content:!0}),e.forEach(s),M=l(t),c=w(t,"P",{}),He(c).forEach(s),m=l(t),d(r.$$.fragment,t),a=l(t),d(p.$$.fragment,t),T=l(t),v=w(t,"P",{"data-svelte-h":!0}),y(v)!=="svelte-smct06"&&(v.textContent=Jt),k=l(t),B=w(t,"P",{"data-svelte-h":!0}),y(B)!=="svelte-1bbrj1q"&&(B.textContent=xe),Rt=l(t),L=w(t,"P",{"data-svelte-h":!0}),y(L)!=="svelte-kt18oi"&&(L.textContent=Ce),It=l(t),G=w(t,"P",{"data-svelte-h":!0}),y(G)!=="svelte-1ub581g"&&(G.textContent=Re),kt=l(t),W=w(t,"P",{"data-svelte-h":!0}),y(W)!=="svelte-9hadu7"&&(W.innerHTML=Ie),Bt=l(t),x=w(t,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(x)!=="svelte-1j6ce3e"&&(x.innerHTML=ke),Lt=l(t),Z=w(t,"P",{"data-svelte-h":!0}),y(Z)!=="svelte-it421t"&&(Z.innerHTML=Be),Gt=l(t),_=w(t,"P",{"data-svelte-h":!0}),y(_)!=="svelte-12j5tg"&&(_.textContent=Le),Wt=l(t),d(C.$$.fragment,t),Zt=l(t),d(E.$$.fragment,t),_t=l(t),R=w(t,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(R)!=="svelte-2bao43"&&(R.innerHTML=Ge),Et=l(t),d(I.$$.fragment,t),Xt=l(t),d(X.$$.fragment,t),Yt=l(t),Y=w(t,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-dsjor9"&&(Y.innerHTML=We),St=l(t),d(S.$$.fragment,t),Nt=l(t),N=w(t,"P",{"data-svelte-h":!0}),y(N)!=="svelte-19wd5lh"&&(N.innerHTML=Ze),Qt=l(t),d(Q.$$.fragment,t),Ft=l(t),d(F.$$.fragment,t),zt=l(t),z=w(t,"P",{"data-svelte-h":!0}),y(z)!=="svelte-13g30ke"&&(z.textContent=_e),At=l(t),A=w(t,"UL",{"data-svelte-h":!0}),y(A)!=="svelte-grkgdm"&&(A.innerHTML=Ee),Ht=l(t),H=w(t,"P",{"data-svelte-h":!0}),y(H)!=="svelte-b73vro"&&(H.textContent=Xe),Dt=l(t),D=w(t,"UL",{"data-svelte-h":!0}),y(D)!=="svelte-11xetiz"&&(D.innerHTML=Ye),Vt=l(t),V=w(t,"P",{"data-svelte-h":!0}),y(V)!=="svelte-1dusnnt"&&(V.innerHTML=Se),qt=l(t),d(q.$$.fragment,t),Pt=l(t),P=w(t,"P",{"data-svelte-h":!0}),y(P)!=="svelte-1drt45h"&&(P.textContent=Ne),Kt=l(t),d(K.$$.fragment,t),Ot=l(t),d(O.$$.fragment,t),te=l(t),d(tt.$$.fragment,t),ee=l(t),d(et.$$.fragment,t),ae=l(t),d(at.$$.fragment,t),se=l(t),d(st.$$.fragment,t),ne=l(t),d(nt.$$.fragment,t),oe=l(t),d(ot.$$.fragment,t),ie=l(t),d(it.$$.fragment,t),le=l(t),d(lt.$$.fragment,t),re=l(t),d(rt.$$.fragment,t),pe=l(t),d(pt.$$.fragment,t),me=l(t),d(mt.$$.fragment,t),ce=l(t),d(ct.$$.fragment,t),fe=l(t),d(ft.$$.fragment,t),de=l(t),d(dt.$$.fragment,t),he=l(t),d(ht.$$.fragment,t),ue=l(t),d(ut.$$.fragment,t),ge=l(t),d(gt.$$.fragment,t),be=l(t),d(bt.$$.fragment,t),Me=l(t),d(Mt.$$.fragment,t),$e=l(t),d($t.$$.fragment,t),we=l(t),d(wt.$$.fragment,t),ye=l(t),yt=w(t,"P",{"data-svelte-h":!0}),y(yt)!=="svelte-12jfyok"&&(yt.innerHTML=Qe),Te=l(t),Tt=w(t,"UL",{"data-svelte-h":!0}),y(Tt)!=="svelte-1bxyi0q"&&(Tt.innerHTML=Fe),Ue=l(t),d(Ut.$$.fragment,t),je=l(t),vt=w(t,"P",{}),He(vt).forEach(s),this.h()},h(){ve(o,"name","hf:doc:metadata"),ve(o,"content",ca),ve(x,"class","tip"),ve(R,"class","tip")},m(t,e){ta(document.head,o),n(t,M,e),n(t,c,e),n(t,m,e),h(r,t,e),n(t,a,e),h(p,t,e),n(t,T,e),n(t,v,e),n(t,k,e),n(t,B,e),n(t,Rt,e),n(t,L,e),n(t,It,e),n(t,G,e),n(t,kt,e),n(t,W,e),n(t,Bt,e),n(t,x,e),n(t,Lt,e),n(t,Z,e),n(t,Gt,e),n(t,_,e),n(t,Wt,e),h(C,t,e),n(t,Zt,e),h(E,t,e),n(t,_t,e),n(t,R,e),n(t,Et,e),h(I,t,e),n(t,Xt,e),h(X,t,e),n(t,Yt,e),n(t,Y,e),n(t,St,e),h(S,t,e),n(t,Nt,e),n(t,N,e),n(t,Qt,e),h(Q,t,e),n(t,Ft,e),h(F,t,e),n(t,zt,e),n(t,z,e),n(t,At,e),n(t,A,e),n(t,Ht,e),n(t,H,e),n(t,Dt,e),n(t,D,e),n(t,Vt,e),n(t,V,e),n(t,qt,e),h(q,t,e),n(t,Pt,e),n(t,P,e),n(t,Kt,e),h(K,t,e),n(t,Ot,e),h(O,t,e),n(t,te,e),h(tt,t,e),n(t,ee,e),h(et,t,e),n(t,ae,e),h(at,t,e),n(t,se,e),h(st,t,e),n(t,ne,e),h(nt,t,e),n(t,oe,e),h(ot,t,e),n(t,ie,e),h(it,t,e),n(t,le,e),h(lt,t,e),n(t,re,e),h(rt,t,e),n(t,pe,e),h(pt,t,e),n(t,me,e),h(mt,t,e),n(t,ce,e),h(ct,t,e),n(t,fe,e),h(ft,t,e),n(t,de,e),h(dt,t,e),n(t,he,e),h(ht,t,e),n(t,ue,e),h(ut,t,e),n(t,ge,e),h(gt,t,e),n(t,be,e),h(bt,t,e),n(t,Me,e),h(Mt,t,e),n(t,$e,e),h($t,t,e),n(t,we,e),h(wt,t,e),n(t,ye,e),n(t,yt,e),n(t,Te,e),n(t,Tt,e),n(t,Ue,e),h(Ut,t,e),n(t,je,e),n(t,vt,e),Je=!0},p(t,[e]){const ze={};e&2&&(ze.$$scope={dirty:e,ctx:t}),C.$set(ze);const Ae={};e&2&&(Ae.$$scope={dirty:e,ctx:t}),I.$set(Ae)},i(t){Je||(u(r.$$.fragment,t),u(p.$$.fragment,t),u(C.$$.fragment,t),u(E.$$.fragment,t),u(I.$$.fragment,t),u(X.$$.fragment,t),u(S.$$.fragment,t),u(Q.$$.fragment,t),u(F.$$.fragment,t),u(q.$$.fragment,t),u(K.$$.fragment,t),u(O.$$.fragment,t),u(tt.$$.fragment,t),u(et.$$.fragment,t),u(at.$$.fragment,t),u(st.$$.fragment,t),u(nt.$$.fragment,t),u(ot.$$.fragment,t),u(it.$$.fragment,t),u(lt.$$.fragment,t),u(rt.$$.fragment,t),u(pt.$$.fragment,t),u(mt.$$.fragment,t),u(ct.$$.fragment,t),u(ft.$$.fragment,t),u(dt.$$.fragment,t),u(ht.$$.fragment,t),u(ut.$$.fragment,t),u(gt.$$.fragment,t),u(bt.$$.fragment,t),u(Mt.$$.fragment,t),u($t.$$.fragment,t),u(wt.$$.fragment,t),u(Ut.$$.fragment,t),Je=!0)},o(t){g(r.$$.fragment,t),g(p.$$.fragment,t),g(C.$$.fragment,t),g(E.$$.fragment,t),g(I.$$.fragment,t),g(X.$$.fragment,t),g(S.$$.fragment,t),g(Q.$$.fragment,t),g(F.$$.fragment,t),g(q.$$.fragment,t),g(K.$$.fragment,t),g(O.$$.fragment,t),g(tt.$$.fragment,t),g(et.$$.fragment,t),g(at.$$.fragment,t),g(st.$$.fragment,t),g(nt.$$.fragment,t),g(ot.$$.fragment,t),g(it.$$.fragment,t),g(lt.$$.fragment,t),g(rt.$$.fragment,t),g(pt.$$.fragment,t),g(mt.$$.fragment,t),g(ct.$$.fragment,t),g(ft.$$.fragment,t),g(dt.$$.fragment,t),g(ht.$$.fragment,t),g(ut.$$.fragment,t),g(gt.$$.fragment,t),g(bt.$$.fragment,t),g(Mt.$$.fragment,t),g($t.$$.fragment,t),g(wt.$$.fragment,t),g(Ut.$$.fragment,t),Je=!1},d(t){t&&(s(M),s(c),s(m),s(a),s(T),s(v),s(k),s(B),s(Rt),s(L),s(It),s(G),s(kt),s(W),s(Bt),s(x),s(Lt),s(Z),s(Gt),s(_),s(Wt),s(Zt),s(_t),s(R),s(Et),s(Xt),s(Yt),s(Y),s(St),s(Nt),s(N),s(Qt),s(Ft),s(zt),s(z),s(At),s(A),s(Ht),s(H),s(Dt),s(D),s(Vt),s(V),s(qt),s(Pt),s(P),s(Kt),s(Ot),s(te),s(ee),s(ae),s(se),s(ne),s(oe),s(ie),s(le),s(re),s(pe),s(me),s(ce),s(fe),s(de),s(he),s(ue),s(ge),s(be),s(Me),s($e),s(we),s(ye),s(yt),s(Te),s(Tt),s(Ue),s(je),s(vt)),s(o),b(r,t),b(p,t),b(C,t),b(E,t),b(I,t),b(X,t),b(S,t),b(Q,t),b(F,t),b(q,t),b(K,t),b(O,t),b(tt,t),b(et,t),b(at,t),b(st,t),b(nt,t),b(ot,t),b(it,t),b(lt,t),b(rt,t),b(pt,t),b(mt,t),b(ct,t),b(ft,t),b(dt,t),b(ht,t),b(ut,t),b(gt,t),b(bt,t),b(Mt,t),b($t,t),b(wt,t),b(Ut,t)}}}const ca='{"title":"Code Example: Datasets, in practice","local":"code-example-datasets-in-practice","sections":[{"title":"Streaming Large Datasets","local":"streaming-large-datasets","sections":[],"depth":3},{"title":"Training Integration","local":"training-integration","sections":[{"title":"PyTorch DataLoader","local":"pytorch-dataloader","sections":[],"depth":3}],"depth":2},{"title":"Why This Matters","local":"why-this-matters","sections":[],"depth":2},{"title":"Section Quiz","local":"section-quiz","sections":[{"title":"1. What makes LeRobot different from traditional robotics libraries?","local":"1-what-makes-lerobot-different-from-traditional-robotics-libraries","sections":[],"depth":3},{"title":"2. Which of the following is NOT a key component of LeRobot’s approach?","local":"2-which-of-the-following-is-not-a-key-component-of-lerobots-approach","sections":[],"depth":3},{"title":"3. What is the main advantage of LeRobot’s optimized inference stack?","local":"3-what-is-the-main-advantage-of-lerobots-optimized-inference-stack","sections":[],"depth":3},{"title":"4. Which types of robotic platforms does LeRobot support?","local":"4-which-types-of-robotic-platforms-does-lerobot-support","sections":[],"depth":3},{"title":"5. What does “end-to-end integration with the robotics stack” mean in the context of LeRobot?","local":"5-what-does-end-to-end-integration-with-the-robotics-stack-mean-in-the-context-of-lerobot","sections":[],"depth":3},{"title":"6. What is the primary purpose of the delta_timestamps parameter in LeRobotDataset?","local":"6-what-is-the-primary-purpose-of-the-deltatimestamps-parameter-in-lerobotdataset","sections":[],"depth":3},{"title":"7. Which of the following best describes the three main components of LeRobotDataset?","local":"7-which-of-the-following-best-describes-the-three-main-components-of-lerobotdataset","sections":[],"depth":3},{"title":"8. What happens when you use StreamingLeRobotDataset instead of LeRobotDataset ?","local":"8-what-happens-when-you-use-streaminglerobotdataset-instead-of-lerobotdataset-","sections":[],"depth":3},{"title":"9. In the context of robot learning, what does “temporal windowing” refer to?","local":"9-in-the-context-of-robot-learning-what-does-temporal-windowing-refer-to","sections":[],"depth":3},{"title":"10. What is the main advantage of LeRobotDataset’s approach to storing video data?","local":"10-what-is-the-main-advantage-of-lerobotdatasets-approach-to-storing-video-data","sections":[],"depth":3},{"title":"11. Which statement about LeRobotDataset’s compatibility is correct?","local":"11-which-statement-about-lerobotdatasets-compatibility-is-correct","sections":[],"depth":3}],"depth":2},{"title":"References","local":"references","sections":[],"depth":2}],"depth":1}';function fa(j){return qe(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class $a extends Pe{constructor(o){super(),Ke(this,o,fa,ma,Ve,{})}}export{$a as component};
