[{"data":1,"prerenderedAt":408},["ShallowReactive",2],{"navigation":3,"\u002Falgorithms\u002Ftransport\u002Ftutorials":174,"\u002Falgorithms\u002Ftransport\u002Ftutorials-surround":403},[4,8,101,165,170],{"title":5,"path":6,"stem":7},"Getting started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12},"Algorithms","\u002Falgorithms","2.algorithms",[13,15,58],{"title":9,"path":10,"stem":14},"2.algorithms\u002Findex",{"title":16,"path":17,"stem":18,"children":19},"Assignment","\u002Falgorithms\u002Fassignment","2.algorithms\u002F1.assignment\u002Findex",[20,21,25,29,32,36,40],{"title":16,"path":17,"stem":18},{"title":22,"path":23,"stem":24},"Quickstart","\u002Falgorithms\u002Fassignment\u002Fquickstart","2.algorithms\u002F1.assignment\u002F1.quickstart",{"title":26,"path":27,"stem":28},"Tracking","\u002Falgorithms\u002Fassignment\u002Ftracking","2.algorithms\u002F1.assignment\u002F2.tracking",{"title":9,"path":30,"stem":31},"\u002Falgorithms\u002Fassignment\u002Falgorithms","2.algorithms\u002F1.assignment\u002F3.algorithms",{"title":33,"path":34,"stem":35},"Reference","\u002Falgorithms\u002Fassignment\u002Freference","2.algorithms\u002F1.assignment\u002F4.reference",{"title":37,"path":38,"stem":39},"Choosing","\u002Falgorithms\u002Fassignment\u002Fchoosing","2.algorithms\u002F1.assignment\u002F5.choosing",{"title":41,"path":42,"stem":43,"children":44},"Tutorials","\u002Falgorithms\u002Fassignment\u002Ftutorials","2.algorithms\u002F1.assignment\u002F6.tutorials\u002Findex",[45,46,50,54],{"title":41,"path":42,"stem":43},{"title":47,"path":48,"stem":49},"Fundamentals","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Ffundamentals","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F1.fundamentals",{"title":51,"path":52,"stem":53},"Backends","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Fbackends","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F2.backends",{"title":55,"path":56,"stem":57},"Object tracking","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Ftracking","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F3.tracking",{"title":59,"path":60,"stem":61,"children":62},"Transport","\u002Falgorithms\u002Ftransport","2.algorithms\u002F2.transport\u002Findex",[63,64,67,71,74,77,80,84],{"title":59,"path":60,"stem":61},{"title":22,"path":65,"stem":66},"\u002Falgorithms\u002Ftransport\u002Fquickstart","2.algorithms\u002F2.transport\u002F1.quickstart",{"title":68,"path":69,"stem":70},"Point-cloud tutorial","\u002Falgorithms\u002Ftransport\u002Fpoint-clouds","2.algorithms\u002F2.transport\u002F2.point-clouds",{"title":9,"path":72,"stem":73},"\u002Falgorithms\u002Ftransport\u002Falgorithms","2.algorithms\u002F2.transport\u002F3.algorithms",{"title":33,"path":75,"stem":76},"\u002Falgorithms\u002Ftransport\u002Freference","2.algorithms\u002F2.transport\u002F4.reference",{"title":37,"path":78,"stem":79},"\u002Falgorithms\u002Ftransport\u002Fchoosing","2.algorithms\u002F2.transport\u002F5.choosing",{"title":81,"path":82,"stem":83},"Building","\u002Falgorithms\u002Ftransport\u002Fbuilding","2.algorithms\u002F2.transport\u002F6.building",{"title":41,"path":85,"stem":86,"children":87},"\u002Falgorithms\u002Ftransport\u002Ftutorials","2.algorithms\u002F2.transport\u002F7.tutorials\u002Findex",[88,89,93,97],{"title":41,"path":85,"stem":86},{"title":90,"path":91,"stem":92},"Optimal transport","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Foptimal-transport","2.algorithms\u002F2.transport\u002F7.tutorials\u002F1.optimal-transport",{"title":94,"path":95,"stem":96},"Sinkhorn","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Fsinkhorn","2.algorithms\u002F2.transport\u002F7.tutorials\u002F2.sinkhorn",{"title":98,"path":99,"stem":100},"Point clouds","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Fpoint-clouds","2.algorithms\u002F2.transport\u002F7.tutorials\u002F3.point-clouds",{"title":102,"path":103,"stem":104,"children":105},"Resources","\u002Fresources","3.resources",[106,108,147,151,155],{"title":102,"path":103,"stem":107},"3.resources\u002Findex",{"title":41,"path":109,"stem":110,"children":111},"\u002Fresources\u002Ftutorials","3.resources\u002F1.tutorials\u002Findex",[112,113,131],{"title":41,"path":109,"stem":110},{"title":16,"path":114,"stem":115,"children":116,"page":130},"\u002Fresources\u002Ftutorials\u002Fassignment","3.resources\u002F1.tutorials\u002Fassignment",[117,122,126],{"title":118,"path":119,"stem":120,"icon":121},"Tutorial 1 — The Assignment Problem","\u002Fresources\u002Ftutorials\u002Fassignment\u002F01_the_assignment_problem","3.resources\u002F1.tutorials\u002Fassignment\u002F01_the_assignment_problem","i-lucide-notebook",{"title":123,"path":124,"stem":125,"icon":121},"Tutorial 2 — Backends and Batching","\u002Fresources\u002Ftutorials\u002Fassignment\u002F02_backends_and_batching","3.resources\u002F1.tutorials\u002Fassignment\u002F02_backends_and_batching",{"title":127,"path":128,"stem":129,"icon":121},"Tutorial 3 — Object Tracking with the Assignment Problem","\u002Fresources\u002Ftutorials\u002Fassignment\u002F03_object_tracking","3.resources\u002F1.tutorials\u002Fassignment\u002F03_object_tracking",false,{"title":59,"path":132,"stem":133,"children":134,"page":130},"\u002Fresources\u002Ftutorials\u002Ftransport","3.resources\u002F1.tutorials\u002Ftransport",[135,139,143],{"title":136,"path":137,"stem":138,"icon":121},"Tutorial 1 — What Is Optimal Transport?","\u002Fresources\u002Ftutorials\u002Ftransport\u002F01_optimal_transport","3.resources\u002F1.tutorials\u002Ftransport\u002F01_optimal_transport",{"title":140,"path":141,"stem":142,"icon":121},"Tutorial 2 — The Sinkhorn Algorithm","\u002Fresources\u002Ftutorials\u002Ftransport\u002F02_sinkhorn_algorithm","3.resources\u002F1.tutorials\u002Ftransport\u002F02_sinkhorn_algorithm",{"title":144,"path":145,"stem":146,"icon":121},"Tutorial 3 — Point-Cloud OT and Shape Learning","\u002Fresources\u002Ftutorials\u002Ftransport\u002F03_point_clouds","3.resources\u002F1.tutorials\u002Ftransport\u002F03_point_clouds",{"title":148,"path":149,"stem":150},"Assignment applications","\u002Fresources\u002Fassignment-applications","3.resources\u002F2.assignment-applications",{"title":152,"path":153,"stem":154},"Transport applications","\u002Fresources\u002Ftransport-applications","3.resources\u002F3.transport-applications",{"title":156,"path":157,"stem":158,"children":159},"Benchmarks","\u002Fresources\u002Fbenchmarks","3.resources\u002F4.benchmarks\u002Findex",[160,161],{"title":156,"path":157,"stem":158},{"title":162,"path":163,"stem":164},"Contributing benchmarks","\u002Fresources\u002Fbenchmarks\u002Fcontributing","3.resources\u002F4.benchmarks\u002Fcontributing",{"title":166,"path":167,"stem":168,"icon":169},"API Reference","\u002Fapi","4.api","i-lucide-package",{"title":171,"path":172,"stem":173},"References","\u002Freferences","5.references",{"id":175,"title":176,"api":177,"body":178,"description":397,"extension":398,"links":177,"meta":399,"navigation":400,"path":85,"seo":401,"stem":86,"__hash__":402},"docs\u002F2.algorithms\u002F2.transport\u002F7.tutorials\u002Findex.md","Transport tutorials",null,{"type":179,"value":180,"toc":394},"minimark",[181,190,262,267,366,379,390],[182,183,184,185,189],"p",{},"Three progressive tutorials on the ",[186,187,188],"strong",{},"transport"," family, targeting readers\nwith Python\u002FPyTorch experience but no prior knowledge of optimal transport.",[191,192,193,209],"table",{},[194,195,196],"thead",{},[197,198,199,203,206],"tr",{},[200,201,202],"th",{},"Tutorial",[200,204,205],{},"Topic",[200,207,208],{},"Notebook",[210,211,212,229,244],"tbody",{},[197,213,214,220,223],{},[215,216,217],"td",{},[218,219,90],"a",{"href":91},[215,221,222],{},"Earth-mover intuition, transport plans, Wasserstein distance",[215,224,225],{},[226,227,228],"code",{},"transport\u002F01_optimal_transport.py",[197,230,231,236,239],{},[215,232,233],{},[218,234,235],{"href":95},"Sinkhorn algorithm",[215,237,238],{},"Entropic regularisation, iterations, divergence",[215,240,241],{},[226,242,243],{},"transport\u002F02_sinkhorn_algorithm.py",[197,245,246,251,257],{},[215,247,248],{},[218,249,250],{"href":99},"Point clouds and shapes",[215,252,253,256],{},[226,254,255],{},"samples.loss",", shape generation, unbalanced OT",[215,258,259],{},[226,260,261],{},"transport\u002F03_point_clouds.py",[263,264,266],"h2",{"id":265},"running-the-notebooks-locally","Running the notebooks locally",[268,269,274],"pre",{"className":270,"code":271,"language":272,"meta":273,"style":273},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# Install the notebooks dependency group\nuv sync --extra cu128 --group notebooks\n\n# Launch Jupyter Lab\njupyter lab notebooks\u002F\n\n# Re-render the docs pages from executed notebooks\nnix run .#nb-render -- --family transport\n","bash","",[226,275,276,285,309,316,322,334,339,345],{"__ignoreMap":273},[277,278,281],"span",{"class":279,"line":280},"line",1,[277,282,284],{"class":283},"sutJx","# Install the notebooks dependency group\n",[277,286,288,292,296,300,303,306],{"class":279,"line":287},2,[277,289,291],{"class":290},"sbgvK","uv",[277,293,295],{"class":294},"s_sjI"," sync",[277,297,299],{"class":298},"stzsN"," --extra",[277,301,302],{"class":294}," cu128",[277,304,305],{"class":298}," --group",[277,307,308],{"class":294}," notebooks\n",[277,310,312],{"class":279,"line":311},3,[277,313,315],{"emptyLinePlaceholder":314},true,"\n",[277,317,319],{"class":279,"line":318},4,[277,320,321],{"class":283},"# Launch Jupyter Lab\n",[277,323,325,328,331],{"class":279,"line":324},5,[277,326,327],{"class":290},"jupyter",[277,329,330],{"class":294}," lab",[277,332,333],{"class":294}," notebooks\u002F\n",[277,335,337],{"class":279,"line":336},6,[277,338,315],{"emptyLinePlaceholder":314},[277,340,342],{"class":279,"line":341},7,[277,343,344],{"class":283},"# Re-render the docs pages from executed notebooks\n",[277,346,348,351,354,357,360,363],{"class":279,"line":347},8,[277,349,350],{"class":290},"nix",[277,352,353],{"class":294}," run",[277,355,356],{"class":294}," .#nb-render",[277,358,359],{"class":298}," --",[277,361,362],{"class":298}," --family",[277,364,365],{"class":294}," transport\n",[182,367,368,370,371,374,375,378],{},[226,369,261],{}," uses ",[226,372,373],{},"torchmatch.transport.samples.loss",", which\nrequires a CUDA GPU.  A CPU fallback via ",[226,376,377],{},"transport.matrix.solve"," is provided\nfor environments without a GPU.",[182,380,381,382,385,386,389],{},"Notebooks are stored as jupytext percent-format ",[226,383,384],{},".py"," files under\n",[226,387,388],{},"notebooks\u002Ftransport\u002F",".",[391,392,393],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":273,"searchDepth":311,"depth":311,"links":395},[396],{"id":265,"depth":287,"text":266},"Hands-on Jupyter notebooks covering optimal transport — from earth-mover intuition through Sinkhorn and point-cloud Wasserstein losses.","md",{},{"title":41},{"title":176,"description":397},"dQ8xv0aUWE4YQBX1St5_qfjHb7u0fIyptdawGAxm6AA",[404,406],{"title":81,"path":82,"stem":83,"description":405,"children":-1},"Wheel vs JIT runtime paths, build-time and runtime environment variables, CPU SIMD flags, and source layout.",{"title":90,"path":91,"stem":92,"description":407,"children":-1},"Earth-mover intuition, transport plans, marginal constraints, and Wasserstein distance — from scratch using torchmatch.transport.matrix.solve.",1785218165938]