[{"data":1,"prerenderedAt":941},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fgetting-started":328,"docyard:crossref-index":940},[4,8,38,44,48,122],{"title":5,"path":6,"stem":7},"Getting Started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12,"page":37},"Recipes","\u002Frecipes","2.recipes",[13,17,21,25,29,33],{"title":14,"path":15,"stem":16},"Recipe: two-stage cascade tracker","\u002Frecipes\u002Fcascade_tracker","2.recipes\u002Fcascade_tracker",{"title":18,"path":19,"stem":20},"Recipe: cosine appearance tracker","\u002Frecipes\u002Fcosine_tracker","2.recipes\u002Fcosine_tracker",{"title":22,"path":23,"stem":24},"Recipe: Kalman motion tracker","\u002Frecipes\u002Fkalman_motion_tracker","2.recipes\u002Fkalman_motion_tracker",{"title":26,"path":27,"stem":28},"Recipe: learned MOTR-style appearance tracker","\u002Frecipes\u002Flearned_motr_tracker","2.recipes\u002Flearned_motr_tracker",{"title":30,"path":31,"stem":32},"Recipe: overlap-IoU tracker (port of 1.x models.overlap)","\u002Frecipes\u002Foverlap_tracker","2.recipes\u002Foverlap_tracker",{"title":34,"path":35,"stem":36},"Recipe: SORT-style tracker on unitrack 2.0","\u002Frecipes\u002Fsort","2.recipes\u002Fsort",false,{"title":39,"path":40,"stem":41,"children":42},"API reference","\u002Fapi","3.api\u002Findex",[43],{"title":39,"path":40,"stem":41},{"title":45,"path":46,"stem":47},"Migrating from 1.x to 2.0","\u002Fmigration","4.migration",{"title":49,"path":50,"stem":51,"children":52,"page":37},"Notebooks","\u002Fnotebooks","5.notebooks",[53,84,88],{"title":54,"path":55,"stem":56,"children":57},"Embedding \u002F appearance filters","\u002Fnotebooks\u002Fembedding_filters","5.notebooks\u002Fembedding_filters\u002Findex",[58,59,64,68,72,76,80],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"icon":63},"Embedding filters 1 — Exponential moving average (EMA)","\u002Fnotebooks\u002Fembedding_filters\u002Fema","5.notebooks\u002Fembedding_filters\u002F1.ema","i-lucide-notebook",{"title":65,"path":66,"stem":67,"icon":63},"Embedding filters 2 — Diagonal Kalman","\u002Fnotebooks\u002Fembedding_filters\u002Fkalman_diagonal","5.notebooks\u002Fembedding_filters\u002F2.kalman_diagonal",{"title":69,"path":70,"stem":71,"icon":63},"Embedding filters 3 — von Mises-Fisher (directional)","\u002Fnotebooks\u002Fembedding_filters\u002Fvmf_directional","5.notebooks\u002Fembedding_filters\u002F3.vmf_directional",{"title":73,"path":74,"stem":75,"icon":63},"Embedding filters 4 — Ensemble Kalman & information filters","\u002Fnotebooks\u002Fembedding_filters\u002Fenkf_information","5.notebooks\u002Fembedding_filters\u002F4.enkf_information",{"title":77,"path":78,"stem":79,"icon":63},"Embedding filters 5 — Memory bank & learned propagation","\u002Fnotebooks\u002Fembedding_filters\u002Fgallery_and_learned","5.notebooks\u002Fembedding_filters\u002F5.gallery_and_learned",{"title":81,"path":82,"stem":83,"icon":63},"Embedding filters 6 — summary & benchmark","\u002Fnotebooks\u002Fembedding_filters\u002Fsummary_benchmark","5.notebooks\u002Fembedding_filters\u002F6.summary_benchmark",{"title":85,"path":86,"stem":87,"icon":63},"Kalman filters for motion prediction in tracking","\u002Fnotebooks\u002Fkalman","5.notebooks\u002Fkalman",{"title":89,"path":90,"stem":91,"children":92},"Tutorial notebooks","\u002Fnotebooks\u002Ftutorials","5.notebooks\u002Ftutorials\u002Findex",[93,94,98,102,106,110,114,118],{"title":89,"path":90,"stem":91},{"title":95,"path":96,"stem":97,"icon":63},"1. Quickstart — your first tracker","\u002Fnotebooks\u002Ftutorials\u002Fquickstart","5.notebooks\u002Ftutorials\u002F1.quickstart",{"title":99,"path":100,"stem":101,"icon":63},"2. The data model — typed records that flow through a tracker","\u002Fnotebooks\u002Ftutorials\u002Fdata_model","5.notebooks\u002Ftutorials\u002F2.data_model",{"title":103,"path":104,"stem":105,"icon":63},"3. The cost & gate zoos","\u002Fnotebooks\u002Ftutorials\u002Fcosts_and_gates","5.notebooks\u002Ftutorials\u002F3.costs_and_gates",{"title":107,"path":108,"stem":109,"icon":63},"4. The composable pipeline tree","\u002Fnotebooks\u002Ftutorials\u002Fpipeline_tree","5.notebooks\u002Ftutorials\u002F4.pipeline_tree",{"title":111,"path":112,"stem":113,"icon":63},"5. State evolution and lifecycle","\u002Fnotebooks\u002Ftutorials\u002Fstates_and_lifecycle","5.notebooks\u002Ftutorials\u002F5.states_and_lifecycle",{"title":115,"path":116,"stem":117,"icon":63},"6. End-to-end: K=2 cascaded and parallel fusion","\u002Fnotebooks\u002Ftutorials\u002Fcascaded_and_parallel","5.notebooks\u002Ftutorials\u002F6.cascaded_and_parallel",{"title":119,"path":120,"stem":121,"icon":63},"7. Migration & new possibilities — driven by a real detector","\u002Fnotebooks\u002Ftutorials\u002Fmigration","5.notebooks\u002Ftutorials\u002F7.migration",{"title":123,"path":124,"stem":125},"Unitrack","\u002F","index",[127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,249,252,255,258,261,263,266,269,272,274,277,280,282,285,288,290,293,296,299,302,305,308,311,313,315,318,320,323,326],{"title":128,"path":129},"assignment","\u002Fapi\u002Fassignment",{"title":131,"path":132},"associate","\u002Fapi\u002Fassignment\u002Fassociate",{"title":134,"path":135},"clip_associate","\u002Fapi\u002Fassignment\u002Fclip_associate",{"title":137,"path":138},"lap","\u002Fapi\u002Fassignment\u002Flap",{"title":140,"path":141},"lapjv","\u002Fapi\u002Fassignment\u002Flapjv",{"title":143,"path":144},"benchmarks","\u002Fapi\u002Fbenchmarks",{"title":146,"path":147},"hota","\u002Fapi\u002Fbenchmarks\u002Fhota",{"title":149,"path":150},"datasets","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fdatasets",{"title":152,"path":153},"learned_modules","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Flearned_modules",{"title":155,"path":156},"metric","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmetric",{"title":158,"path":159},"models","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmodels",{"title":161,"path":162},"protocols","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fprotocols",{"title":164,"path":165},"render","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frender",{"title":167,"path":168},"report","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Freport",{"title":170,"path":171},"runner","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frunner",{"title":173,"path":174},"tracker","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftracker",{"title":176,"path":177},"train_learned","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftrain_learned",{"title":179,"path":180},"types","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftypes",{"title":182,"path":183},"costs","\u002Fapi\u002Fcosts",{"title":185,"path":186},"combinators","\u002Fapi\u002Fcosts\u002Fcombinators",{"title":188,"path":189},"distance","\u002Fapi\u002Fcosts\u002Fdistance",{"title":191,"path":192},"gallery","\u002Fapi\u002Fcosts\u002Fgallery",{"title":194,"path":195},"overlap","\u002Fapi\u002Fcosts\u002Foverlap",{"title":197,"path":198},"data","\u002Fapi\u002Fdata",{"title":200,"path":201},"clip","\u002Fapi\u002Fdata\u002Fclip",{"title":203,"path":204},"cost","\u002Fapi\u002Fdata\u002Fcost",{"title":206,"path":207},"detections","\u002Fapi\u002Fdata\u002Fdetections",{"title":209,"path":210},"frame","\u002Fapi\u002Fdata\u002Fframe",{"title":212,"path":213},"gate","\u002Fapi\u002Fdata\u002Fgate",{"title":215,"path":216},"match","\u002Fapi\u002Fdata\u002Fmatch",{"title":218,"path":219},"tensor_spec","\u002Fapi\u002Fdata\u002Ftensor_spec",{"title":221,"path":222},"tracklets","\u002Fapi\u002Fdata\u002Ftracklets",{"title":224,"path":225},"gates","\u002Fapi\u002Fgates",{"title":227,"path":228},"motion","\u002Fapi\u002Fgates\u002Fmotion",{"title":230,"path":231},"simple","\u002Fapi\u002Fgates\u002Fsimple",{"title":233,"path":234},"soft","\u002Fapi\u002Fgates\u002Fsoft",{"title":236,"path":237},"spatial","\u002Fapi\u002Fgates\u002Fspatial",{"title":239,"path":240},"lifecycle","\u002Fapi\u002Flifecycle",{"title":242,"path":243},"filters","\u002Fapi\u002Flifecycle\u002Ffilters",{"title":245,"path":246},"policies","\u002Fapi\u002Flifecycle\u002Fpolicies",{"title":233,"path":248},"\u002Fapi\u002Flifecycle\u002Fsoft",{"title":250,"path":251},"status","\u002Fapi\u002Flifecycle\u002Fstatus",{"title":253,"path":254},"visibility","\u002Fapi\u002Flifecycle\u002Fvisibility",{"title":256,"path":257},"pipeline","\u002Fapi\u002Fpipeline",{"title":259,"path":260},"base","\u002Fapi\u002Fpipeline\u002Fbase",{"title":185,"path":262},"\u002Fapi\u002Fpipeline\u002Fcombinators",{"title":264,"path":265},"diff","\u002Fapi\u002Fpipeline\u002Fdiff",{"title":267,"path":268},"merge","\u002Fapi\u002Fpipeline\u002Fmerge",{"title":270,"path":271},"states","\u002Fapi\u002Fstates",{"title":259,"path":273},"\u002Fapi\u002Fstates\u002Fbase",{"title":275,"path":276},"directional","\u002Fapi\u002Fstates\u002Fdirectional",{"title":278,"path":279},"ema","\u002Fapi\u002Fstates\u002Fema",{"title":191,"path":281},"\u002Fapi\u002Fstates\u002Fgallery",{"title":283,"path":284},"identity","\u002Fapi\u002Fstates\u002Fidentity",{"title":286,"path":287},"kalman","\u002Fapi\u002Fstates\u002Fkalman",{"title":259,"path":289},"\u002Fapi\u002Fstates\u002Fkalman\u002Fbase",{"title":291,"path":292},"bbox","\u002Fapi\u002Fstates\u002Fkalman\u002Fbbox",{"title":294,"path":295},"centroid","\u002Fapi\u002Fstates\u002Fkalman\u002Fcentroid",{"title":297,"path":298},"ensemble","\u002Fapi\u002Fstates\u002Fkalman\u002Fensemble",{"title":300,"path":301},"information","\u002Fapi\u002Fstates\u002Fkalman\u002Finformation",{"title":303,"path":304},"project","\u002Fapi\u002Fstates\u002Fkalman\u002Fproject",{"title":306,"path":307},"update","\u002Fapi\u002Fstates\u002Fkalman\u002Fupdate",{"title":309,"path":310},"learned","\u002Fapi\u002Fstates\u002Flearned",{"title":233,"path":312},"\u002Fapi\u002Fstates\u002Fsoft",{"title":173,"path":314},"\u002Fapi\u002Ftracker",{"title":316,"path":317},"batch","\u002Fapi\u002Ftracker\u002Fbatch",{"title":200,"path":319},"\u002Fapi\u002Ftracker\u002Fclip",{"title":321,"path":322},"memory","\u002Fapi\u002Ftracker\u002Fmemory",{"title":324,"path":325},"multistream","\u002Fapi\u002Ftracker\u002Fmultistream",{"title":173,"path":327},"\u002Fapi\u002Ftracker\u002Ftracker",{"id":329,"title":5,"body":330,"description":934,"extension":935,"meta":936,"navigation":937,"path":6,"seo":938,"stem":7,"__hash__":939},"content\u002F1.getting-started.md",{"type":331,"value":332,"toc":919},"minimark",[333,337,345,350,355,380,384,389,427,431,438,482,486,517,533,537,548,649,660,672,676,700,704,711,762,765,818,821,824,830,904,907,910,915],[334,335,5],"h1",{"id":336},"getting-started",[338,339,340,344],"p",{},[341,342,343],"code",{},"unitrack"," requires Python 3.13 and PyTorch 2.7 or newer.",[346,347,349],"h2",{"id":348},"installation","Installation",[351,352,354],"h3",{"id":353},"from-pypi","From PyPI",[356,357,362],"pre",{"className":358,"code":359,"language":360,"meta":361,"style":361},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","pip install unitrack\n","bash","",[341,363,364],{"__ignoreMap":361},[365,366,369,373,377],"span",{"class":367,"line":368},"line",1,[365,370,372],{"class":371},"sbgvK","pip",[365,374,376],{"class":375},"s_sjI"," install",[365,378,379],{"class":375}," unitrack\n",[351,381,383],{"id":382},"optional-dependencies","Optional dependencies",[385,386,388],"h4",{"id":387},"solvers-built-in","Solvers (built-in)",[338,390,391,392,395,396,399,400,395,403,406,407,410,411,414,415,418,419,422,423,426],{},"All solvers ship in-tree and need no extras: ",[341,393,394],{},"unitrack.assignment.Hungarian",",\n",[341,397,398],{},"unitrack.assignment.Greedy",", ",[341,401,402],{},"unitrack.assignment.Auction",[341,404,405],{},"unitrack.assignment.lap.LAP",", and the C++ Jonker-Volgenant family\n",[341,408,409],{},"unitrack.assignment.Jonker"," \u002F\n",[341,412,413],{},"unitrack.assignment.LAPJVS"," \u002F ",[341,416,417],{},"unitrack.assignment.LAPJVX",".\n",[341,420,421],{},"Jonker"," is an alias for the AVX2-vectorized in-tree LAPJVX solver. See the\n",[424,425,39],"a",{"href":40}," for the full signature of each.",[385,428,430],{"id":429},"benchmark-comparisons","Benchmark comparisons",[338,432,433,434,437],{},"To include the external ",[341,435,436],{},"lapx"," reference solver when running benchmarks:",[356,439,441],{"className":358,"code":440,"language":360,"meta":361,"style":361},"pip install \"unitrack[bench]\"\n# or, from source:\nuv sync --extra bench\n",[341,442,443,459,466],{"__ignoreMap":361},[365,444,445,447,449,453,456],{"class":367,"line":368},[365,446,372],{"class":371},[365,448,376],{"class":375},[365,450,452],{"class":451},"sjJ54"," \"",[365,454,455],{"class":375},"unitrack[bench]",[365,457,458],{"class":451},"\"\n",[365,460,462],{"class":367,"line":461},2,[365,463,465],{"class":464},"sutJx","# or, from source:\n",[365,467,469,472,475,479],{"class":367,"line":468},3,[365,470,471],{"class":371},"uv",[365,473,474],{"class":375}," sync",[365,476,478],{"class":477},"stzsN"," --extra",[365,480,481],{"class":375}," bench\n",[351,483,485],{"id":484},"from-source","From source",[356,487,489],{"className":358,"code":488,"language":360,"meta":361,"style":361},"git clone https:\u002F\u002Fgithub.com\u002Ftue-p8n\u002Funitrack\ncd unitrack\nuv sync\n",[341,490,491,502,510],{"__ignoreMap":361},[365,492,493,496,499],{"class":367,"line":368},[365,494,495],{"class":371},"git",[365,497,498],{"class":375}," clone",[365,500,501],{"class":375}," https:\u002F\u002Fgithub.com\u002Ftue-p8n\u002Funitrack\n",[365,503,504,508],{"class":367,"line":461},[365,505,507],{"class":506},"sptTA","cd",[365,509,379],{"class":375},[365,511,512,514],{"class":367,"line":468},[365,513,471],{"class":371},[365,515,516],{"class":375}," sync\n",[338,518,519,522,523,399,525,528,529,532],{},[341,520,521],{},"torch.utils.cpp_extension"," JIT-compiles the CPU assignment extensions\n(",[341,524,140],{},[341,526,527],{},"lapjvx",") on first import. The build needs a C++17-capable compiler\nand reads AVX2\u002FFMA flags from ",[341,530,531],{},"\u002Fproc\u002Fcpuinfo"," automatically.",[351,534,536],{"id":535},"development-workflow","Development workflow",[338,538,539,547],{},[424,540,544],{"href":541,"rel":542},"https:\u002F\u002Fgithub.com\u002Fcasey\u002Fjust",[543],"nofollow",[341,545,546],{},"just"," serves as the task runner. Common recipes:",[356,549,551],{"className":358,"code":550,"language":360,"meta":361,"style":361},"just test            # full test suite (parallel)\njust coverage        # tests + HTML coverage report\njust bench           # both assignment benchmarks, refreshes assets\u002Fbenchmarks\u002F\njust bench-batched   # batched benchmark only\njust lint            # ruff + clang-format check\njust format          # ruff + clang-format fix\njust docs            # build the docyard documentation site\njust info            # print CUDA availability and nvcc version\njust clangd          # regenerate compile_flags.txt for clangd\n",[341,552,553,563,573,583,594,605,616,627,638],{"__ignoreMap":361},[365,554,555,557,560],{"class":367,"line":368},[365,556,546],{"class":371},[365,558,559],{"class":375}," test",[365,561,562],{"class":464},"            # full test suite (parallel)\n",[365,564,565,567,570],{"class":367,"line":461},[365,566,546],{"class":371},[365,568,569],{"class":375}," coverage",[365,571,572],{"class":464},"        # tests + HTML coverage report\n",[365,574,575,577,580],{"class":367,"line":468},[365,576,546],{"class":371},[365,578,579],{"class":375}," bench",[365,581,582],{"class":464},"           # both assignment benchmarks, refreshes assets\u002Fbenchmarks\u002F\n",[365,584,586,588,591],{"class":367,"line":585},4,[365,587,546],{"class":371},[365,589,590],{"class":375}," bench-batched",[365,592,593],{"class":464},"   # batched benchmark only\n",[365,595,597,599,602],{"class":367,"line":596},5,[365,598,546],{"class":371},[365,600,601],{"class":375}," lint",[365,603,604],{"class":464},"            # ruff + clang-format check\n",[365,606,608,610,613],{"class":367,"line":607},6,[365,609,546],{"class":371},[365,611,612],{"class":375}," format",[365,614,615],{"class":464},"          # ruff + clang-format fix\n",[365,617,619,621,624],{"class":367,"line":618},7,[365,620,546],{"class":371},[365,622,623],{"class":375}," docs",[365,625,626],{"class":464},"            # build the docyard documentation site\n",[365,628,630,632,635],{"class":367,"line":629},8,[365,631,546],{"class":371},[365,633,634],{"class":375}," info",[365,636,637],{"class":464},"            # print CUDA availability and nvcc version\n",[365,639,641,643,646],{"class":367,"line":640},9,[365,642,546],{"class":371},[365,644,645],{"class":375}," clangd",[365,647,648],{"class":464},"          # regenerate compile_flags.txt for clangd\n",[338,650,651,652,659],{},"Install pre-commit hooks via ",[424,653,656],{"href":654,"rel":655},"https:\u002F\u002Fprek.j178.dev\u002F",[543],[341,657,658],{},"prek",":",[356,661,663],{"className":358,"code":662,"language":360,"meta":361,"style":361},"prek install\n",[341,664,665],{"__ignoreMap":361},[365,666,667,669],{"class":367,"line":368},[365,668,658],{"class":371},[365,670,671],{"class":375}," install\n",[346,673,675],{"id":674},"quick-example","Quick example",[338,677,678,679,684,685,399,688,691,692,695,696,699],{},"The ",[424,680,683],{"href":681,"rel":682},"https:\u002F\u002Fgithub.com\u002Ftue-p8n\u002Funitrack#usage",[543],"project README"," contains a\nrunnable three-frame example that wires ",[341,686,687],{},"Detections",[341,689,690],{},"Pipe",", the Jonker\nsolver, and a single position state into a ",[341,693,694],{},"Tracker"," and a ",[341,697,698],{},"MultiStream","\nwrapper. Run it first to confirm the install before reaching for the more\nelaborate recipes.",[346,701,703],{"id":702},"tracker-recipes","Tracker recipes",[338,705,706,707,710],{},"Self-contained recipes live under ",[341,708,709],{},"docs\u002F6.recipes\u002F",". Two port 1.x trackers:",[712,713,714,742],"ul",{},[715,716,717,722,723,725,726,729,730,733,734,737,738,741],"li",{},[424,718,719],{"href":35},[341,720,721],{},"recipes\u002Fsort"," — SORT (Bewley et al., 2016) as one ",[341,724,690],{}," with\n",[341,727,728],{},"BoxIoU"," cost and a ",[341,731,732],{},"KalmanBBox"," state. Shows how to combine an\nIoU cost on ",[341,735,736],{},"bbox_xyxy"," with a ",[341,739,740],{},"bbox_xyah"," Kalman update via a\nprojection state.",[715,743,744,749,750,753,754,757,758,761],{},[424,745,746],{"href":31},[341,747,748],{},"recipes\u002Foverlap_tracker"," — the 1.x ",[341,751,752],{},"models.overlap"," tracker:\nclass- and score-gated IoU matching with ",[341,755,756],{},"Gated"," and ",[341,759,760],{},"Sequential",".",[338,763,764],{},"Four more assemble appearance and motion trackers from the same primitives\n(these mirror the HOTA benchmark's tracker registry):",[712,766,767,775,789,803],{},[715,768,769,774],{},[424,770,771],{"href":19},[341,772,773],{},"recipes\u002Fcosine_tracker"," — match instances by embedding cosine\ndistance, gated by class.",[715,776,777,782,783,786,787,761],{},[424,778,779],{"href":15},[341,780,781],{},"recipes\u002Fcascade_tracker"," — a two-stage cascade: appearance for\nhigh-score detections, mask-IoU for the rest, via ",[341,784,785],{},"Filter"," + ",[341,788,760],{},[715,790,791,796,797,729,800,761],{},[424,792,793],{"href":23},[341,794,795],{},"recipes\u002Fkalman_motion_tracker"," — a constant-velocity centroid Kalman\nfilter with a ",[341,798,799],{},"Mahalanobis",[341,801,802],{},"MotionGate",[715,804,805,810,811,414,814,817],{},[424,806,807],{"href":27},[341,808,809],{},"recipes\u002Flearned_motr_tracker"," — the cosine tracker with a learned\nMOTR-style predict\u002Fupdate filter (",[341,812,813],{},"LearnedProcess",[341,815,816],{},"LearnedObservation",").",[338,819,820],{},"Read the recipes as the canonical worked examples of \"stage tree plus\nstate dictionary plus lifecycle policy\".",[346,822,89],{"id":823},"tutorial-notebooks",[338,825,678,826,829],{},[424,827,828],{"href":90},"seven-notebook tour"," covers the library at a\nhigher resolution than the recipes:",[831,832,833,839,849,855,876,892,898],"ol",{},[715,834,835,838],{},[424,836,837],{"href":96},"Quickstart"," — build and run a minimal tracker; visualize trajectories.",[715,840,841,844,845,848],{},[424,842,843],{"href":100},"Data model"," — the typed records and the ",[341,846,847],{},"Gate"," algebra.",[715,850,851,854],{},[424,852,853],{"href":104},"Costs and gates"," — the cost zoo (Cosine, CDist, BiSoftmax, RBF,\nIoU family, Mahalanobis) and the gate zoo (Class, Score, Spatial, Motion).",[715,856,857,860,861,399,863,399,865,399,868,395,870,399,872,875],{},[424,858,859],{"href":108},"Pipeline tree"," — ",[341,862,690],{},[341,864,760],{},[341,866,867],{},"Parallel",[341,869,756],{},[341,871,785],{},[341,873,874],{},"Iterate","; cascaded versus parallel fusion.",[715,877,878,860,881,884,885,888,889,761],{},[424,879,880],{"href":112},"States and lifecycle",[341,882,883],{},"Process"," × ",[341,886,887],{},"Observation",", Kalman, EMA;\n",[341,890,891],{},"Tentative → Active → Lost → Removed",[715,893,894,897],{},[424,895,896],{"href":116},"Cascaded and parallel"," — K=2 configurations compared end-to-end on\nsynthetic data with known ground truth.",[715,899,900,903],{},[424,901,902],{"href":120},"Migration"," — migrate a 1.x tracker to 2.0 and showcase the new\npossibilities (parallel fusion, cascaded matching, lifecycle, differentiable\nmatching), driven by a real lightweight Hugging Face detector.",[338,905,906],{},"Each notebook is self-contained; read in order if new to the library, or jump\nstraight to the topic you need.",[346,908,39],{"id":909},"api-reference",[338,911,678,912,914],{},[424,913,39],{"href":40}," lists every public symbol grouped by subpackage. Use it as\nthe lookup surface once the recipes and tutorials have made the shape of the\nlibrary familiar.",[916,917,918],"style",{},"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 .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);}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":361,"searchDepth":468,"depth":468,"links":920},[921,930,931,932,933],{"id":348,"depth":461,"text":349,"children":922},[923,924,928,929],{"id":353,"depth":468,"text":354},{"id":382,"depth":468,"text":383,"children":925},[926,927],{"id":387,"depth":585,"text":388},{"id":429,"depth":585,"text":430},{"id":484,"depth":468,"text":485},{"id":535,"depth":468,"text":536},{"id":674,"depth":461,"text":675},{"id":702,"depth":461,"text":703},{"id":823,"depth":461,"text":89},{"id":909,"depth":461,"text":39},"unitrack requires Python 3.13 and PyTorch 2.7 or newer.","md",{},true,{"title":5,"description":934},"9YBoCm-HiDv6v9jt-w8WvRQo8UltPT1XbdjgFVCQLrc",{},1785139881971]