[{"data":1,"prerenderedAt":5056},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Ftutorials\u002Fstates_and_lifecycle":328,"docyard:crossref-index":5055},[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":111,"body":330,"description":5049,"extension":5050,"meta":5051,"navigation":5052,"path":112,"seo":5053,"stem":113,"__hash__":5054},"content\u002F5.notebooks\u002Ftutorials\u002F5.states_and_lifecycle.md",{"type":331,"value":332,"toc":5042},"minimark",[333,337,346,388,391,728,733,738,741,795,798,840,844,855,858,1592,1596,1803,1809,1812,3065,3070,3074,3080,3122,3125,4115,4118,4960,4965,4968,4993,4997,5003,5022,5028,5032,5038],[334,335,111],"h1",{"id":336},"_5-state-evolution-and-lifecycle",[338,339,340,341,345],"p",{},"Two pieces let unitrack maintain ",[342,343,344],"em",{},"coherent"," identities across\ntime, even when detections are noisy or missing for a few frames:",[347,348,349,370],"ol",{},[350,351,352,356,357,361,362,365,366,369],"li",{},[353,354,355],"strong",{},"State"," — a pair of pure functions ",[358,359,360],"code",{},"(Process, Observation)"," plus an\n",[358,363,364],{},"Initializer",". Each tracklet field has its own state. The\nProcess advances the field by ",[358,367,368],{},"δt","; the Observation fuses\na measurement when the tracklet matches a detection.",[350,371,372,375,376,379,380,383,384,387],{},[353,373,374],{},"Lifecycle"," — ",[358,377,378],{},"Tentative → Active → Lost → Removed","\ntransitions driven by ",[358,381,382],{},"min_hits"," and ",[358,385,386],{},"max_age",".",[338,389,390],{},"This notebook visualizes both on a synthetic clip with\nocclusion-style gaps.",[392,393,398],"pre",{"className":394,"code":395,"language":396,"meta":397,"style":397},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import torch\nimport matplotlib.pyplot as plt\n\nimport unitrack\nfrom unitrack.assignment import Associate, Jonker\nfrom unitrack.costs import Cosine\nfrom unitrack.data import Detections, FrameContext, TensorSpec, Tracklets\nfrom unitrack.lifecycle import (\n    ConfirmedOnly,\n    IncludeAll,\n    IncludeTentative,\n    NoLifecycle,\n    StandardLifecycle,\n    TrackletStatus,\n)\nfrom unitrack.pipeline import Pipe\nfrom unitrack.states import (\n    EMADecay,\n    EMAFuse,\n    FromDetectionField,\n    Identity,\n    Replace,\n    State,\n)\nfrom unitrack.states.kalman import KalmanCentroid2D\n\ntorch.manual_seed(0)\n\n","python","",[358,399,400,413,434,441,449,474,491,523,540,549,557,565,573,581,589,595,612,628,636,644,652,660,668,676,681,702,707],{"__ignoreMap":397},[401,402,405,409],"span",{"class":403,"line":404},"line",1,[401,406,408],{"class":407},"sVHd0","import",[401,410,412],{"class":411},"su5hD"," torch\n",[401,414,416,418,421,424,428,431],{"class":403,"line":415},2,[401,417,408],{"class":407},[401,419,420],{"class":411}," matplotlib",[401,422,387],{"class":423},"sP7_E",[401,425,427],{"class":426},"skxfh","pyplot",[401,429,430],{"class":407}," as",[401,432,433],{"class":411}," plt\n",[401,435,437],{"class":403,"line":436},3,[401,438,440],{"emptyLinePlaceholder":439},true,"\n",[401,442,444,446],{"class":403,"line":443},4,[401,445,408],{"class":407},[401,447,448],{"class":411}," unitrack\n",[401,450,452,455,458,460,463,465,468,471],{"class":403,"line":451},5,[401,453,454],{"class":407},"from",[401,456,457],{"class":411}," unitrack",[401,459,387],{"class":423},[401,461,462],{"class":411},"assignment ",[401,464,408],{"class":407},[401,466,467],{"class":411}," Associate",[401,469,470],{"class":423},",",[401,472,473],{"class":411}," Jonker\n",[401,475,477,479,481,483,486,488],{"class":403,"line":476},6,[401,478,454],{"class":407},[401,480,457],{"class":411},[401,482,387],{"class":423},[401,484,485],{"class":411},"costs ",[401,487,408],{"class":407},[401,489,490],{"class":411}," Cosine\n",[401,492,494,496,498,500,503,505,508,510,513,515,518,520],{"class":403,"line":493},7,[401,495,454],{"class":407},[401,497,457],{"class":411},[401,499,387],{"class":423},[401,501,502],{"class":411},"data ",[401,504,408],{"class":407},[401,506,507],{"class":411}," Detections",[401,509,470],{"class":423},[401,511,512],{"class":411}," FrameContext",[401,514,470],{"class":423},[401,516,517],{"class":411}," TensorSpec",[401,519,470],{"class":423},[401,521,522],{"class":411}," Tracklets\n",[401,524,526,528,530,532,535,537],{"class":403,"line":525},8,[401,527,454],{"class":407},[401,529,457],{"class":411},[401,531,387],{"class":423},[401,533,534],{"class":411},"lifecycle ",[401,536,408],{"class":407},[401,538,539],{"class":423}," (\n",[401,541,543,546],{"class":403,"line":542},9,[401,544,545],{"class":411},"    ConfirmedOnly",[401,547,548],{"class":423},",\n",[401,550,552,555],{"class":403,"line":551},10,[401,553,554],{"class":411},"    IncludeAll",[401,556,548],{"class":423},[401,558,560,563],{"class":403,"line":559},11,[401,561,562],{"class":411},"    IncludeTentative",[401,564,548],{"class":423},[401,566,568,571],{"class":403,"line":567},12,[401,569,570],{"class":411},"    NoLifecycle",[401,572,548],{"class":423},[401,574,576,579],{"class":403,"line":575},13,[401,577,578],{"class":411},"    StandardLifecycle",[401,580,548],{"class":423},[401,582,584,587],{"class":403,"line":583},14,[401,585,586],{"class":411},"    TrackletStatus",[401,588,548],{"class":423},[401,590,592],{"class":403,"line":591},15,[401,593,594],{"class":423},")\n",[401,596,598,600,602,604,607,609],{"class":403,"line":597},16,[401,599,454],{"class":407},[401,601,457],{"class":411},[401,603,387],{"class":423},[401,605,606],{"class":411},"pipeline ",[401,608,408],{"class":407},[401,610,611],{"class":411}," Pipe\n",[401,613,615,617,619,621,624,626],{"class":403,"line":614},17,[401,616,454],{"class":407},[401,618,457],{"class":411},[401,620,387],{"class":423},[401,622,623],{"class":411},"states ",[401,625,408],{"class":407},[401,627,539],{"class":423},[401,629,631,634],{"class":403,"line":630},18,[401,632,633],{"class":411},"    EMADecay",[401,635,548],{"class":423},[401,637,639,642],{"class":403,"line":638},19,[401,640,641],{"class":411},"    EMAFuse",[401,643,548],{"class":423},[401,645,647,650],{"class":403,"line":646},20,[401,648,649],{"class":411},"    FromDetectionField",[401,651,548],{"class":423},[401,653,655,658],{"class":403,"line":654},21,[401,656,657],{"class":411},"    Identity",[401,659,548],{"class":423},[401,661,663,666],{"class":403,"line":662},22,[401,664,665],{"class":411},"    Replace",[401,667,548],{"class":423},[401,669,671,674],{"class":403,"line":670},23,[401,672,673],{"class":411},"    State",[401,675,548],{"class":423},[401,677,679],{"class":403,"line":678},24,[401,680,594],{"class":423},[401,682,684,686,688,690,692,694,697,699],{"class":403,"line":683},25,[401,685,454],{"class":407},[401,687,457],{"class":411},[401,689,387],{"class":423},[401,691,270],{"class":411},[401,693,387],{"class":423},[401,695,696],{"class":411},"kalman ",[401,698,408],{"class":407},[401,700,701],{"class":411}," KalmanCentroid2D\n",[401,703,705],{"class":403,"line":704},26,[401,706,440],{"emptyLinePlaceholder":439},[401,708,710,713,715,719,722,726],{"class":403,"line":709},27,[401,711,712],{"class":411},"torch",[401,714,387],{"class":423},[401,716,718],{"class":717},"slqww","manual_seed",[401,720,721],{"class":423},"(",[401,723,725],{"class":724},"srdBf","0",[401,727,594],{"class":423},[729,730],"docyard-notebook-output",{"data":731,"kind":732},"PHRvcmNoLl9DLkdlbmVyYXRvciBhdCAweDcyYzA3MDNhYzk1MD4=","result",[734,735,737],"h2",{"id":736},"state-catalogue","State catalogue",[338,739,740],{},"The two halves of a State have different signatures:",[742,743,744,759],"table",{},[745,746,747],"thead",{},[748,749,750,753,756],"tr",{},[751,752],"th",{},[751,754,755],{},"Signature",[751,757,758],{},"What it does",[760,761,762,780],"tbody",{},[748,763,764,770,775],{},[765,766,767],"td",{},[353,768,769],{},"Process",[765,771,772],{},[358,773,774],{},"(cs, ctx) → cs'",[765,776,777,778],{},"advance the field by ",[358,779,368],{},[748,781,782,787,792],{},[765,783,784],{},[353,785,786],{},"Observation",[765,788,789],{},[358,790,791],{},"(cs, ds, match, ctx) → cs'",[765,793,794],{},"fuse measurements for matched, apply miss-rule for unmatched",[338,796,797],{},"Built-in catalogue:",[799,800,801,811,816,822,828,834],"ul",{},[350,802,803,806,807,810],{},[353,804,805],{},"Identity"," (Process): no-op. Pair with ",[358,808,809],{},"Replace"," for fields like kernel embeddings or class labels.",[350,812,813,815],{},[353,814,809],{}," (Observation): matched tracklets adopt the new detection's value verbatim.",[350,817,818,821],{},[353,819,820],{},"EMADecay(field, half_life)"," (Process): exponential decay toward zero.",[350,823,824,827],{},[353,825,826],{},"EMAFuse(field, rho)"," (Observation): EMA blend of old\u002Fnew values for matched.",[350,829,830,833],{},[353,831,832],{},"KalmanLinear \u002F KalmanBBox \u002F KalmanCentroid2D \u002F KalmanCentroid3D"," (Process): linear-Gaussian predict.",[350,835,836,839],{},[353,837,838],{},"KalmanUpdate"," (Observation): Joseph-form update.",[734,841,843],{"id":842},"visualizing-a-kalman-state","Visualizing a Kalman state",[338,845,846,847,850,851,854],{},"A 2D constant-velocity Kalman filter carries a 4D state\n",[358,848,849],{},"[x, y, vx, vy]"," and a 4×4 covariance. The Process advances\n",[358,852,853],{},"x ← x + vx·δt"," (likewise y) and grows the covariance by Q.\nThe Observation fuses a 2D position measurement.",[338,856,857],{},"We'll watch the predicted mean drift forward each frame, then\nsnap toward the measurement when fused.",[392,859,861],{"className":394,"code":860,"language":396,"meta":397,"style":397},"proc = KalmanCentroid2D(\"centroid\", q=0.1, r=0.5)\n\n\n# Construct a single-tracklet Tracklets snapshot manually.\ndef _tracklets_one(mean, cov, *, age=1):\n    return Tracklets(\n        id=torch.tensor([1], dtype=torch.int64),\n        status=torch.tensor([int(TrackletStatus.Active)], dtype=torch.int8),\n        hits=torch.tensor([5], dtype=torch.int32),\n        time_since_update=torch.zeros(1, dtype=torch.int32),\n        age=torch.tensor([age], dtype=torch.int32),\n        frame_started=torch.zeros(1, dtype=torch.int32),\n        frame_last_seen=torch.zeros(1, dtype=torch.int32),\n        centroid=mean.unsqueeze(0),\n        centroid_cov=cov.unsqueeze(0),\n        batch_size=[1],\n    )\n\n\n# Initial state: at origin, moving (3, 1) px\u002Fframe, identity covariance.\nmean = torch.tensor([0.0, 0.0, 3.0, 1.0])\ncov = torch.eye(4) * 0.5\nsnap = _tracklets_one(mean, cov)\n\n# Step the Process forward 5 frames; record the predicted positions.\nctx = FrameContext.make(frame_idx=0, delta=1.0, fps=1.0)\ntraj = [snap.centroid[0].clone()]\nfor k in range(5):\n    snap = proc(snap, ctx)\n    traj.append(snap.centroid[0].clone())\ntraj = torch.stack(traj)\nprint(\"predicted (x, y, vx, vy) over time:\")\nprint(traj.round(decimals=2))\n\n",[358,862,863,909,913,917,923,963,974,1011,1056,1089,1121,1152,1183,1214,1234,1254,1269,1274,1278,1282,1287,1324,1351,1370,1374,1379,1423,1453,1475,1497,1527,1548,1565],{"__ignoreMap":397},[401,864,865,868,872,875,877,881,884,886,888,892,894,897,899,902,904,907],{"class":403,"line":404},[401,866,867],{"class":411},"proc ",[401,869,871],{"class":870},"smGrS","=",[401,873,874],{"class":717}," KalmanCentroid2D",[401,876,721],{"class":423},[401,878,880],{"class":879},"sjJ54","\"",[401,882,294],{"class":883},"s_sjI",[401,885,880],{"class":879},[401,887,470],{"class":423},[401,889,891],{"class":890},"s99_P"," q",[401,893,871],{"class":870},[401,895,896],{"class":724},"0.1",[401,898,470],{"class":423},[401,900,901],{"class":890}," r",[401,903,871],{"class":870},[401,905,906],{"class":724},"0.5",[401,908,594],{"class":423},[401,910,911],{"class":403,"line":415},[401,912,440],{"emptyLinePlaceholder":439},[401,914,915],{"class":403,"line":436},[401,916,440],{"emptyLinePlaceholder":439},[401,918,919],{"class":403,"line":443},[401,920,922],{"class":921},"sutJx","# Construct a single-tracklet Tracklets snapshot manually.\n",[401,924,925,929,933,935,939,941,944,946,949,952,955,957,960],{"class":403,"line":451},[401,926,928],{"class":927},"sbsja","def",[401,930,932],{"class":931},"sGLFI"," _tracklets_one",[401,934,721],{"class":423},[401,936,938],{"class":937},"sFwrP","mean",[401,940,470],{"class":423},[401,942,943],{"class":937}," cov",[401,945,470],{"class":423},[401,947,948],{"class":870}," *",[401,950,951],{"class":411},", ",[401,953,954],{"class":937},"age",[401,956,871],{"class":870},[401,958,959],{"class":724},"1",[401,961,962],{"class":423},"):\n",[401,964,965,968,971],{"class":403,"line":476},[401,966,967],{"class":407},"    return",[401,969,970],{"class":717}," Tracklets",[401,972,973],{"class":423},"(\n",[401,975,976,979,981,983,985,988,991,993,996,999,1001,1003,1005,1008],{"class":403,"line":493},[401,977,978],{"class":890},"        id",[401,980,871],{"class":870},[401,982,712],{"class":717},[401,984,387],{"class":423},[401,986,987],{"class":717},"tensor",[401,989,990],{"class":423},"([",[401,992,959],{"class":724},[401,994,995],{"class":423},"],",[401,997,998],{"class":890}," dtype",[401,1000,871],{"class":870},[401,1002,712],{"class":717},[401,1004,387],{"class":423},[401,1006,1007],{"class":426},"int64",[401,1009,1010],{"class":423},"),\n",[401,1012,1013,1016,1018,1020,1022,1024,1026,1030,1032,1035,1037,1040,1043,1045,1047,1049,1051,1054],{"class":403,"line":525},[401,1014,1015],{"class":890},"        status",[401,1017,871],{"class":870},[401,1019,712],{"class":717},[401,1021,387],{"class":423},[401,1023,987],{"class":717},[401,1025,990],{"class":423},[401,1027,1029],{"class":1028},"sZMiF","int",[401,1031,721],{"class":423},[401,1033,1034],{"class":717},"TrackletStatus",[401,1036,387],{"class":423},[401,1038,1039],{"class":426},"Active",[401,1041,1042],{"class":423},")],",[401,1044,998],{"class":890},[401,1046,871],{"class":870},[401,1048,712],{"class":717},[401,1050,387],{"class":423},[401,1052,1053],{"class":426},"int8",[401,1055,1010],{"class":423},[401,1057,1058,1061,1063,1065,1067,1069,1071,1074,1076,1078,1080,1082,1084,1087],{"class":403,"line":542},[401,1059,1060],{"class":890},"        hits",[401,1062,871],{"class":870},[401,1064,712],{"class":717},[401,1066,387],{"class":423},[401,1068,987],{"class":717},[401,1070,990],{"class":423},[401,1072,1073],{"class":724},"5",[401,1075,995],{"class":423},[401,1077,998],{"class":890},[401,1079,871],{"class":870},[401,1081,712],{"class":717},[401,1083,387],{"class":423},[401,1085,1086],{"class":426},"int32",[401,1088,1010],{"class":423},[401,1090,1091,1094,1096,1098,1100,1103,1105,1107,1109,1111,1113,1115,1117,1119],{"class":403,"line":551},[401,1092,1093],{"class":890},"        time_since_update",[401,1095,871],{"class":870},[401,1097,712],{"class":717},[401,1099,387],{"class":423},[401,1101,1102],{"class":717},"zeros",[401,1104,721],{"class":423},[401,1106,959],{"class":724},[401,1108,470],{"class":423},[401,1110,998],{"class":890},[401,1112,871],{"class":870},[401,1114,712],{"class":717},[401,1116,387],{"class":423},[401,1118,1086],{"class":426},[401,1120,1010],{"class":423},[401,1122,1123,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":403,"line":559},[401,1124,1125],{"class":890},"        age",[401,1127,871],{"class":870},[401,1129,712],{"class":717},[401,1131,387],{"class":423},[401,1133,987],{"class":717},[401,1135,990],{"class":423},[401,1137,954],{"class":717},[401,1139,995],{"class":423},[401,1141,998],{"class":890},[401,1143,871],{"class":870},[401,1145,712],{"class":717},[401,1147,387],{"class":423},[401,1149,1086],{"class":426},[401,1151,1010],{"class":423},[401,1153,1154,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181],{"class":403,"line":567},[401,1155,1156],{"class":890},"        frame_started",[401,1158,871],{"class":870},[401,1160,712],{"class":717},[401,1162,387],{"class":423},[401,1164,1102],{"class":717},[401,1166,721],{"class":423},[401,1168,959],{"class":724},[401,1170,470],{"class":423},[401,1172,998],{"class":890},[401,1174,871],{"class":870},[401,1176,712],{"class":717},[401,1178,387],{"class":423},[401,1180,1086],{"class":426},[401,1182,1010],{"class":423},[401,1184,1185,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212],{"class":403,"line":575},[401,1186,1187],{"class":890},"        frame_last_seen",[401,1189,871],{"class":870},[401,1191,712],{"class":717},[401,1193,387],{"class":423},[401,1195,1102],{"class":717},[401,1197,721],{"class":423},[401,1199,959],{"class":724},[401,1201,470],{"class":423},[401,1203,998],{"class":890},[401,1205,871],{"class":870},[401,1207,712],{"class":717},[401,1209,387],{"class":423},[401,1211,1086],{"class":426},[401,1213,1010],{"class":423},[401,1215,1216,1219,1221,1223,1225,1228,1230,1232],{"class":403,"line":583},[401,1217,1218],{"class":890},"        centroid",[401,1220,871],{"class":870},[401,1222,938],{"class":717},[401,1224,387],{"class":423},[401,1226,1227],{"class":717},"unsqueeze",[401,1229,721],{"class":423},[401,1231,725],{"class":724},[401,1233,1010],{"class":423},[401,1235,1236,1239,1241,1244,1246,1248,1250,1252],{"class":403,"line":591},[401,1237,1238],{"class":890},"        centroid_cov",[401,1240,871],{"class":870},[401,1242,1243],{"class":717},"cov",[401,1245,387],{"class":423},[401,1247,1227],{"class":717},[401,1249,721],{"class":423},[401,1251,725],{"class":724},[401,1253,1010],{"class":423},[401,1255,1256,1259,1261,1264,1266],{"class":403,"line":597},[401,1257,1258],{"class":890},"        batch_size",[401,1260,871],{"class":870},[401,1262,1263],{"class":423},"[",[401,1265,959],{"class":724},[401,1267,1268],{"class":423},"],\n",[401,1270,1271],{"class":403,"line":614},[401,1272,1273],{"class":423},"    )\n",[401,1275,1276],{"class":403,"line":630},[401,1277,440],{"emptyLinePlaceholder":439},[401,1279,1280],{"class":403,"line":638},[401,1281,440],{"emptyLinePlaceholder":439},[401,1283,1284],{"class":403,"line":646},[401,1285,1286],{"class":921},"# Initial state: at origin, moving (3, 1) px\u002Fframe, identity covariance.\n",[401,1288,1289,1292,1294,1297,1299,1301,1303,1306,1308,1311,1313,1316,1318,1321],{"class":403,"line":654},[401,1290,1291],{"class":411},"mean ",[401,1293,871],{"class":870},[401,1295,1296],{"class":411}," torch",[401,1298,387],{"class":423},[401,1300,987],{"class":717},[401,1302,990],{"class":423},[401,1304,1305],{"class":724},"0.0",[401,1307,470],{"class":423},[401,1309,1310],{"class":724}," 0.0",[401,1312,470],{"class":423},[401,1314,1315],{"class":724}," 3.0",[401,1317,470],{"class":423},[401,1319,1320],{"class":724}," 1.0",[401,1322,1323],{"class":423},"])\n",[401,1325,1326,1329,1331,1333,1335,1338,1340,1343,1346,1348],{"class":403,"line":662},[401,1327,1328],{"class":411},"cov ",[401,1330,871],{"class":870},[401,1332,1296],{"class":411},[401,1334,387],{"class":423},[401,1336,1337],{"class":717},"eye",[401,1339,721],{"class":423},[401,1341,1342],{"class":724},"4",[401,1344,1345],{"class":423},")",[401,1347,948],{"class":870},[401,1349,1350],{"class":724}," 0.5\n",[401,1352,1353,1356,1358,1360,1362,1364,1366,1368],{"class":403,"line":670},[401,1354,1355],{"class":411},"snap ",[401,1357,871],{"class":870},[401,1359,932],{"class":717},[401,1361,721],{"class":423},[401,1363,938],{"class":717},[401,1365,470],{"class":423},[401,1367,943],{"class":717},[401,1369,594],{"class":423},[401,1371,1372],{"class":403,"line":678},[401,1373,440],{"emptyLinePlaceholder":439},[401,1375,1376],{"class":403,"line":683},[401,1377,1378],{"class":921},"# Step the Process forward 5 frames; record the predicted positions.\n",[401,1380,1381,1384,1386,1388,1390,1393,1395,1398,1400,1402,1404,1407,1409,1412,1414,1417,1419,1421],{"class":403,"line":704},[401,1382,1383],{"class":411},"ctx ",[401,1385,871],{"class":870},[401,1387,512],{"class":411},[401,1389,387],{"class":423},[401,1391,1392],{"class":717},"make",[401,1394,721],{"class":423},[401,1396,1397],{"class":890},"frame_idx",[401,1399,871],{"class":870},[401,1401,725],{"class":724},[401,1403,470],{"class":423},[401,1405,1406],{"class":890}," delta",[401,1408,871],{"class":870},[401,1410,1411],{"class":724},"1.0",[401,1413,470],{"class":423},[401,1415,1416],{"class":890}," fps",[401,1418,871],{"class":870},[401,1420,1411],{"class":724},[401,1422,594],{"class":423},[401,1424,1425,1428,1430,1433,1436,1438,1440,1442,1444,1447,1450],{"class":403,"line":709},[401,1426,1427],{"class":411},"traj ",[401,1429,871],{"class":870},[401,1431,1432],{"class":423}," [",[401,1434,1435],{"class":411},"snap",[401,1437,387],{"class":423},[401,1439,294],{"class":426},[401,1441,1263],{"class":423},[401,1443,725],{"class":724},[401,1445,1446],{"class":423},"].",[401,1448,1449],{"class":717},"clone",[401,1451,1452],{"class":423},"()]\n",[401,1454,1456,1459,1462,1465,1469,1471,1473],{"class":403,"line":1455},28,[401,1457,1458],{"class":407},"for",[401,1460,1461],{"class":411}," k ",[401,1463,1464],{"class":407},"in",[401,1466,1468],{"class":1467},"sptTA"," range",[401,1470,721],{"class":423},[401,1472,1073],{"class":724},[401,1474,962],{"class":423},[401,1476,1478,1481,1483,1486,1488,1490,1492,1495],{"class":403,"line":1477},29,[401,1479,1480],{"class":411},"    snap ",[401,1482,871],{"class":870},[401,1484,1485],{"class":717}," proc",[401,1487,721],{"class":423},[401,1489,1435],{"class":717},[401,1491,470],{"class":423},[401,1493,1494],{"class":717}," ctx",[401,1496,594],{"class":423},[401,1498,1500,1503,1505,1508,1510,1512,1514,1516,1518,1520,1522,1524],{"class":403,"line":1499},30,[401,1501,1502],{"class":411},"    traj",[401,1504,387],{"class":423},[401,1506,1507],{"class":717},"append",[401,1509,721],{"class":423},[401,1511,1435],{"class":717},[401,1513,387],{"class":423},[401,1515,294],{"class":426},[401,1517,1263],{"class":423},[401,1519,725],{"class":724},[401,1521,1446],{"class":423},[401,1523,1449],{"class":717},[401,1525,1526],{"class":423},"())\n",[401,1528,1530,1532,1534,1536,1538,1541,1543,1546],{"class":403,"line":1529},31,[401,1531,1427],{"class":411},[401,1533,871],{"class":870},[401,1535,1296],{"class":411},[401,1537,387],{"class":423},[401,1539,1540],{"class":717},"stack",[401,1542,721],{"class":423},[401,1544,1545],{"class":717},"traj",[401,1547,594],{"class":423},[401,1549,1551,1554,1556,1558,1561,1563],{"class":403,"line":1550},32,[401,1552,1553],{"class":1467},"print",[401,1555,721],{"class":423},[401,1557,880],{"class":879},[401,1559,1560],{"class":883},"predicted (x, y, vx, vy) over time:",[401,1562,880],{"class":879},[401,1564,594],{"class":423},[401,1566,1568,1570,1572,1574,1576,1579,1581,1584,1586,1589],{"class":403,"line":1567},33,[401,1569,1553],{"class":1467},[401,1571,721],{"class":423},[401,1573,1545],{"class":717},[401,1575,387],{"class":423},[401,1577,1578],{"class":717},"round",[401,1580,721],{"class":423},[401,1582,1583],{"class":890},"decimals",[401,1585,871],{"class":870},[401,1587,1588],{"class":724},"2",[401,1590,1591],{"class":423},"))\n",[729,1593],{"data":1594,"kind":1595},"cHJlZGljdGVkICh4LCB5LCB2eCwgdnkpIG92ZXIgdGltZToKdGVuc29yKFtbIDAuLCAgMC4sICAzLiwgIDEuXSwKICAgICAgICBbIDMuLCAgMS4sICAzLiwgIDEuXSwKICAgICAgICBbIDYuLCAgMi4sICAzLiwgIDEuXSwKICAgICAgICBbIDkuLCAgMy4sICAzLiwgIDEuXSwKICAgICAgICBbMTIuLCAgNC4sICAzLiwgIDEuXSwKICAgICAgICBbMTUuLCAgNS4sICAzLiwgIDEuXV0pCg==","stream",[392,1597,1599],{"className":394,"code":1598,"language":396,"meta":397,"style":397},"fig, ax = plt.subplots(figsize=(6, 4))\nax.plot(traj[:, 0], traj[:, 1], \"o-\", label=\"predicted position\")\nax.set_xlabel(\"x\")\nax.set_ylabel(\"y\")\nax.set_title(\n    \"KalmanCentroid2D — pure prediction over 5 frames\\n(no measurement updates)\"\n)\nax.grid(alpha=0.3)\nplt.show()\n\n",[358,1600,1601,1640,1696,1716,1736,1747,1765,1769,1790],{"__ignoreMap":397},[401,1602,1603,1606,1608,1611,1613,1616,1618,1621,1623,1626,1628,1630,1633,1635,1638],{"class":403,"line":404},[401,1604,1605],{"class":411},"fig",[401,1607,470],{"class":423},[401,1609,1610],{"class":411}," ax ",[401,1612,871],{"class":870},[401,1614,1615],{"class":411}," plt",[401,1617,387],{"class":423},[401,1619,1620],{"class":717},"subplots",[401,1622,721],{"class":423},[401,1624,1625],{"class":890},"figsize",[401,1627,871],{"class":870},[401,1629,721],{"class":423},[401,1631,1632],{"class":724},"6",[401,1634,470],{"class":423},[401,1636,1637],{"class":724}," 4",[401,1639,1591],{"class":423},[401,1641,1642,1645,1647,1650,1652,1654,1657,1660,1662,1665,1667,1670,1672,1675,1678,1680,1682,1685,1687,1689,1692,1694],{"class":403,"line":415},[401,1643,1644],{"class":411},"ax",[401,1646,387],{"class":423},[401,1648,1649],{"class":717},"plot",[401,1651,721],{"class":423},[401,1653,1545],{"class":717},[401,1655,1656],{"class":423},"[:,",[401,1658,1659],{"class":724}," 0",[401,1661,995],{"class":423},[401,1663,1664],{"class":717}," traj",[401,1666,1656],{"class":423},[401,1668,1669],{"class":724}," 1",[401,1671,995],{"class":423},[401,1673,1674],{"class":879}," \"",[401,1676,1677],{"class":883},"o-",[401,1679,880],{"class":879},[401,1681,470],{"class":423},[401,1683,1684],{"class":890}," label",[401,1686,871],{"class":870},[401,1688,880],{"class":879},[401,1690,1691],{"class":883},"predicted position",[401,1693,880],{"class":879},[401,1695,594],{"class":423},[401,1697,1698,1700,1702,1705,1707,1709,1712,1714],{"class":403,"line":436},[401,1699,1644],{"class":411},[401,1701,387],{"class":423},[401,1703,1704],{"class":717},"set_xlabel",[401,1706,721],{"class":423},[401,1708,880],{"class":879},[401,1710,1711],{"class":883},"x",[401,1713,880],{"class":879},[401,1715,594],{"class":423},[401,1717,1718,1720,1722,1725,1727,1729,1732,1734],{"class":403,"line":443},[401,1719,1644],{"class":411},[401,1721,387],{"class":423},[401,1723,1724],{"class":717},"set_ylabel",[401,1726,721],{"class":423},[401,1728,880],{"class":879},[401,1730,1731],{"class":883},"y",[401,1733,880],{"class":879},[401,1735,594],{"class":423},[401,1737,1738,1740,1742,1745],{"class":403,"line":451},[401,1739,1644],{"class":411},[401,1741,387],{"class":423},[401,1743,1744],{"class":717},"set_title",[401,1746,973],{"class":423},[401,1748,1749,1752,1755,1759,1762],{"class":403,"line":476},[401,1750,1751],{"class":879},"    \"",[401,1753,1754],{"class":883},"KalmanCentroid2D — pure prediction over 5 frames",[401,1756,1758],{"class":1757},"s_hVV","\\n",[401,1760,1761],{"class":883},"(no measurement updates)",[401,1763,1764],{"class":879},"\"\n",[401,1766,1767],{"class":403,"line":493},[401,1768,594],{"class":423},[401,1770,1771,1773,1775,1778,1780,1783,1785,1788],{"class":403,"line":525},[401,1772,1644],{"class":411},[401,1774,387],{"class":423},[401,1776,1777],{"class":717},"grid",[401,1779,721],{"class":423},[401,1781,1782],{"class":890},"alpha",[401,1784,871],{"class":870},[401,1786,1787],{"class":724},"0.3",[401,1789,594],{"class":423},[401,1791,1792,1795,1797,1800],{"class":403,"line":542},[401,1793,1794],{"class":411},"plt",[401,1796,387],{"class":423},[401,1798,1799],{"class":717},"show",[401,1801,1802],{"class":423},"()\n",[338,1804,1805],{},[1806,1807],"img",{"alt":397,"src":1808},"\u002F_nb\u002F0da515a7fa9fd856.png",[338,1810,1811],{},"Now let's add measurement updates. We'll match the tracklet\nagainst a detection that sits 0.5px off the prediction every\nframe. The Joseph-form update tightens the covariance and\nnudges the mean toward the measurement.",[392,1813,1815],{"className":394,"code":1814,"language":396,"meta":397,"style":397},"update = proc.make_update()\nsnap = _tracklets_one(mean.clone(), cov.clone())\n\ntraj = [snap.centroid[0].clone()]\ncov_traces = [snap.centroid_cov[0].diagonal().clone()]\nmeas = []\nfor k in range(5):\n    ctx = FrameContext.make(frame_idx=k + 1, delta=1.0, fps=1.0)\n    # 1. Predict\n    snap = proc(snap, ctx)\n    # 2. Build a fake measurement (offset by 0.5px from prediction).\n    true_pos = snap.centroid[0, :2] + torch.tensor([0.5, 0.5])\n    meas.append(true_pos.clone())\n    ds = Detections(\n        index=torch.tensor([0], dtype=torch.int64),\n        centroid=true_pos.unsqueeze(0),\n        batch_size=[1],\n    )\n    from unitrack.data import MatchOutcome\n\n    match = MatchOutcome(\n        matched_pairs=torch.tensor([[0, 0]], dtype=torch.int64),\n        tracklets_residual_index=torch.zeros(0, dtype=torch.int64),\n        detections_residual_index=torch.zeros(0, dtype=torch.int64),\n        per_match_cost=torch.zeros(1),\n        batch_size=[],\n    )\n    # 3. Fuse measurement\n    snap = update(snap, ds, match, ctx)\n    traj.append(snap.centroid[0].clone())\n    cov_traces.append(snap.centroid_cov[0].diagonal().clone())\ntraj = torch.stack(traj)\ncov_traces = torch.stack(cov_traces)\nmeas = torch.stack(meas)\n\nfig, axes = plt.subplots(1, 2, figsize=(10, 3.5))\naxes[0].plot(traj[:, 0], traj[:, 1], \"o-\", label=\"fused mean\")\naxes[0].scatter(\n    meas[:, 0],\n    meas[:, 1],\n    marker=\"x\",\n    color=\"tab:red\",\n    s=60,\n    label=\"measurement\",\n    zorder=3,\n)\naxes[0].legend(fontsize=8)\naxes[0].set_title(\"Kalman with measurement fusion\")\naxes[0].set_xlabel(\"x\")\naxes[0].set_ylabel(\"y\")\naxes[0].grid(alpha=0.3)\nfor i, lbl in enumerate([\"Var(x)\", \"Var(y)\", \"Var(vx)\", \"Var(vy)\"]):\n    axes[1].plot(cov_traces[:, i].numpy(), label=lbl, marker=\"o\")\naxes[1].set_xlabel(\"frame\")\naxes[1].set_ylabel(\"variance (diagonal)\")\naxes[1].set_title(\"Covariance shrinks under measurement fusion\")\naxes[1].legend(fontsize=8)\naxes[1].grid(alpha=0.3)\nplt.tight_layout()\nplt.show()\n\n",[358,1816,1817,1833,1860,1864,1888,1920,1930,1946,1991,1996,2014,2019,2067,2087,2098,2129,2147,2159,2163,2179,2183,2195,2232,2263,2294,2313,2322,2326,2331,2360,2386,2417,2435,2454,2474,2479,2525,2578,2594,2605,2616,2632,2649,2662,2679,2692,2697,2723,2747,2770,2793,2816,2873,2925,2948,2972,2996,3019,3042,3054],{"__ignoreMap":397},[401,1818,1819,1822,1824,1826,1828,1831],{"class":403,"line":404},[401,1820,1821],{"class":411},"update ",[401,1823,871],{"class":870},[401,1825,1485],{"class":411},[401,1827,387],{"class":423},[401,1829,1830],{"class":717},"make_update",[401,1832,1802],{"class":423},[401,1834,1835,1837,1839,1841,1843,1845,1847,1849,1852,1854,1856,1858],{"class":403,"line":415},[401,1836,1355],{"class":411},[401,1838,871],{"class":870},[401,1840,932],{"class":717},[401,1842,721],{"class":423},[401,1844,938],{"class":717},[401,1846,387],{"class":423},[401,1848,1449],{"class":717},[401,1850,1851],{"class":423},"(),",[401,1853,943],{"class":717},[401,1855,387],{"class":423},[401,1857,1449],{"class":717},[401,1859,1526],{"class":423},[401,1861,1862],{"class":403,"line":436},[401,1863,440],{"emptyLinePlaceholder":439},[401,1865,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886],{"class":403,"line":443},[401,1867,1427],{"class":411},[401,1869,871],{"class":870},[401,1871,1432],{"class":423},[401,1873,1435],{"class":411},[401,1875,387],{"class":423},[401,1877,294],{"class":426},[401,1879,1263],{"class":423},[401,1881,725],{"class":724},[401,1883,1446],{"class":423},[401,1885,1449],{"class":717},[401,1887,1452],{"class":423},[401,1889,1890,1893,1895,1897,1899,1901,1904,1906,1908,1910,1913,1916,1918],{"class":403,"line":451},[401,1891,1892],{"class":411},"cov_traces ",[401,1894,871],{"class":870},[401,1896,1432],{"class":423},[401,1898,1435],{"class":411},[401,1900,387],{"class":423},[401,1902,1903],{"class":426},"centroid_cov",[401,1905,1263],{"class":423},[401,1907,725],{"class":724},[401,1909,1446],{"class":423},[401,1911,1912],{"class":717},"diagonal",[401,1914,1915],{"class":423},"().",[401,1917,1449],{"class":717},[401,1919,1452],{"class":423},[401,1921,1922,1925,1927],{"class":403,"line":476},[401,1923,1924],{"class":411},"meas ",[401,1926,871],{"class":870},[401,1928,1929],{"class":423}," []\n",[401,1931,1932,1934,1936,1938,1940,1942,1944],{"class":403,"line":493},[401,1933,1458],{"class":407},[401,1935,1461],{"class":411},[401,1937,1464],{"class":407},[401,1939,1468],{"class":1467},[401,1941,721],{"class":423},[401,1943,1073],{"class":724},[401,1945,962],{"class":423},[401,1947,1948,1951,1953,1955,1957,1959,1961,1963,1965,1968,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989],{"class":403,"line":525},[401,1949,1950],{"class":411},"    ctx ",[401,1952,871],{"class":870},[401,1954,512],{"class":411},[401,1956,387],{"class":423},[401,1958,1392],{"class":717},[401,1960,721],{"class":423},[401,1962,1397],{"class":890},[401,1964,871],{"class":870},[401,1966,1967],{"class":717},"k ",[401,1969,1970],{"class":870},"+",[401,1972,1669],{"class":724},[401,1974,470],{"class":423},[401,1976,1406],{"class":890},[401,1978,871],{"class":870},[401,1980,1411],{"class":724},[401,1982,470],{"class":423},[401,1984,1416],{"class":890},[401,1986,871],{"class":870},[401,1988,1411],{"class":724},[401,1990,594],{"class":423},[401,1992,1993],{"class":403,"line":542},[401,1994,1995],{"class":921},"    # 1. Predict\n",[401,1997,1998,2000,2002,2004,2006,2008,2010,2012],{"class":403,"line":551},[401,1999,1480],{"class":411},[401,2001,871],{"class":870},[401,2003,1485],{"class":717},[401,2005,721],{"class":423},[401,2007,1435],{"class":717},[401,2009,470],{"class":423},[401,2011,1494],{"class":717},[401,2013,594],{"class":423},[401,2015,2016],{"class":403,"line":559},[401,2017,2018],{"class":921},"    # 2. Build a fake measurement (offset by 0.5px from prediction).\n",[401,2020,2021,2024,2026,2029,2031,2033,2035,2037,2039,2042,2044,2047,2050,2052,2054,2056,2058,2060,2062,2065],{"class":403,"line":567},[401,2022,2023],{"class":411},"    true_pos ",[401,2025,871],{"class":870},[401,2027,2028],{"class":411}," snap",[401,2030,387],{"class":423},[401,2032,294],{"class":426},[401,2034,1263],{"class":423},[401,2036,725],{"class":724},[401,2038,470],{"class":423},[401,2040,2041],{"class":423}," :",[401,2043,1588],{"class":724},[401,2045,2046],{"class":423},"]",[401,2048,2049],{"class":870}," +",[401,2051,1296],{"class":411},[401,2053,387],{"class":423},[401,2055,987],{"class":717},[401,2057,990],{"class":423},[401,2059,906],{"class":724},[401,2061,470],{"class":423},[401,2063,2064],{"class":724}," 0.5",[401,2066,1323],{"class":423},[401,2068,2069,2072,2074,2076,2078,2081,2083,2085],{"class":403,"line":575},[401,2070,2071],{"class":411},"    meas",[401,2073,387],{"class":423},[401,2075,1507],{"class":717},[401,2077,721],{"class":423},[401,2079,2080],{"class":717},"true_pos",[401,2082,387],{"class":423},[401,2084,1449],{"class":717},[401,2086,1526],{"class":423},[401,2088,2089,2092,2094,2096],{"class":403,"line":583},[401,2090,2091],{"class":411},"    ds ",[401,2093,871],{"class":870},[401,2095,507],{"class":717},[401,2097,973],{"class":423},[401,2099,2100,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127],{"class":403,"line":591},[401,2101,2102],{"class":890},"        index",[401,2104,871],{"class":870},[401,2106,712],{"class":717},[401,2108,387],{"class":423},[401,2110,987],{"class":717},[401,2112,990],{"class":423},[401,2114,725],{"class":724},[401,2116,995],{"class":423},[401,2118,998],{"class":890},[401,2120,871],{"class":870},[401,2122,712],{"class":717},[401,2124,387],{"class":423},[401,2126,1007],{"class":426},[401,2128,1010],{"class":423},[401,2130,2131,2133,2135,2137,2139,2141,2143,2145],{"class":403,"line":597},[401,2132,1218],{"class":890},[401,2134,871],{"class":870},[401,2136,2080],{"class":717},[401,2138,387],{"class":423},[401,2140,1227],{"class":717},[401,2142,721],{"class":423},[401,2144,725],{"class":724},[401,2146,1010],{"class":423},[401,2148,2149,2151,2153,2155,2157],{"class":403,"line":614},[401,2150,1258],{"class":890},[401,2152,871],{"class":870},[401,2154,1263],{"class":423},[401,2156,959],{"class":724},[401,2158,1268],{"class":423},[401,2160,2161],{"class":403,"line":630},[401,2162,1273],{"class":423},[401,2164,2165,2168,2170,2172,2174,2176],{"class":403,"line":638},[401,2166,2167],{"class":407},"    from",[401,2169,457],{"class":411},[401,2171,387],{"class":423},[401,2173,502],{"class":411},[401,2175,408],{"class":407},[401,2177,2178],{"class":411}," MatchOutcome\n",[401,2180,2181],{"class":403,"line":646},[401,2182,440],{"emptyLinePlaceholder":439},[401,2184,2185,2188,2190,2193],{"class":403,"line":654},[401,2186,2187],{"class":411},"    match ",[401,2189,871],{"class":870},[401,2191,2192],{"class":717}," MatchOutcome",[401,2194,973],{"class":423},[401,2196,2197,2200,2202,2204,2206,2208,2211,2213,2215,2217,2220,2222,2224,2226,2228,2230],{"class":403,"line":662},[401,2198,2199],{"class":890},"        matched_pairs",[401,2201,871],{"class":870},[401,2203,712],{"class":717},[401,2205,387],{"class":423},[401,2207,987],{"class":717},[401,2209,2210],{"class":423},"([[",[401,2212,725],{"class":724},[401,2214,470],{"class":423},[401,2216,1659],{"class":724},[401,2218,2219],{"class":423},"]],",[401,2221,998],{"class":890},[401,2223,871],{"class":870},[401,2225,712],{"class":717},[401,2227,387],{"class":423},[401,2229,1007],{"class":426},[401,2231,1010],{"class":423},[401,2233,2234,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261],{"class":403,"line":670},[401,2235,2236],{"class":890},"        tracklets_residual_index",[401,2238,871],{"class":870},[401,2240,712],{"class":717},[401,2242,387],{"class":423},[401,2244,1102],{"class":717},[401,2246,721],{"class":423},[401,2248,725],{"class":724},[401,2250,470],{"class":423},[401,2252,998],{"class":890},[401,2254,871],{"class":870},[401,2256,712],{"class":717},[401,2258,387],{"class":423},[401,2260,1007],{"class":426},[401,2262,1010],{"class":423},[401,2264,2265,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292],{"class":403,"line":678},[401,2266,2267],{"class":890},"        detections_residual_index",[401,2269,871],{"class":870},[401,2271,712],{"class":717},[401,2273,387],{"class":423},[401,2275,1102],{"class":717},[401,2277,721],{"class":423},[401,2279,725],{"class":724},[401,2281,470],{"class":423},[401,2283,998],{"class":890},[401,2285,871],{"class":870},[401,2287,712],{"class":717},[401,2289,387],{"class":423},[401,2291,1007],{"class":426},[401,2293,1010],{"class":423},[401,2295,2296,2299,2301,2303,2305,2307,2309,2311],{"class":403,"line":683},[401,2297,2298],{"class":890},"        per_match_cost",[401,2300,871],{"class":870},[401,2302,712],{"class":717},[401,2304,387],{"class":423},[401,2306,1102],{"class":717},[401,2308,721],{"class":423},[401,2310,959],{"class":724},[401,2312,1010],{"class":423},[401,2314,2315,2317,2319],{"class":403,"line":704},[401,2316,1258],{"class":890},[401,2318,871],{"class":870},[401,2320,2321],{"class":423},"[],\n",[401,2323,2324],{"class":403,"line":709},[401,2325,1273],{"class":423},[401,2327,2328],{"class":403,"line":1455},[401,2329,2330],{"class":921},"    # 3. Fuse measurement\n",[401,2332,2333,2335,2337,2340,2342,2344,2346,2349,2351,2354,2356,2358],{"class":403,"line":1477},[401,2334,1480],{"class":411},[401,2336,871],{"class":870},[401,2338,2339],{"class":717}," update",[401,2341,721],{"class":423},[401,2343,1435],{"class":717},[401,2345,470],{"class":423},[401,2347,2348],{"class":717}," ds",[401,2350,470],{"class":423},[401,2352,2353],{"class":717}," match",[401,2355,470],{"class":423},[401,2357,1494],{"class":717},[401,2359,594],{"class":423},[401,2361,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384],{"class":403,"line":1499},[401,2363,1502],{"class":411},[401,2365,387],{"class":423},[401,2367,1507],{"class":717},[401,2369,721],{"class":423},[401,2371,1435],{"class":717},[401,2373,387],{"class":423},[401,2375,294],{"class":426},[401,2377,1263],{"class":423},[401,2379,725],{"class":724},[401,2381,1446],{"class":423},[401,2383,1449],{"class":717},[401,2385,1526],{"class":423},[401,2387,2388,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415],{"class":403,"line":1529},[401,2389,2390],{"class":411},"    cov_traces",[401,2392,387],{"class":423},[401,2394,1507],{"class":717},[401,2396,721],{"class":423},[401,2398,1435],{"class":717},[401,2400,387],{"class":423},[401,2402,1903],{"class":426},[401,2404,1263],{"class":423},[401,2406,725],{"class":724},[401,2408,1446],{"class":423},[401,2410,1912],{"class":717},[401,2412,1915],{"class":423},[401,2414,1449],{"class":717},[401,2416,1526],{"class":423},[401,2418,2419,2421,2423,2425,2427,2429,2431,2433],{"class":403,"line":1550},[401,2420,1427],{"class":411},[401,2422,871],{"class":870},[401,2424,1296],{"class":411},[401,2426,387],{"class":423},[401,2428,1540],{"class":717},[401,2430,721],{"class":423},[401,2432,1545],{"class":717},[401,2434,594],{"class":423},[401,2436,2437,2439,2441,2443,2445,2447,2449,2452],{"class":403,"line":1567},[401,2438,1892],{"class":411},[401,2440,871],{"class":870},[401,2442,1296],{"class":411},[401,2444,387],{"class":423},[401,2446,1540],{"class":717},[401,2448,721],{"class":423},[401,2450,2451],{"class":717},"cov_traces",[401,2453,594],{"class":423},[401,2455,2457,2459,2461,2463,2465,2467,2469,2472],{"class":403,"line":2456},34,[401,2458,1924],{"class":411},[401,2460,871],{"class":870},[401,2462,1296],{"class":411},[401,2464,387],{"class":423},[401,2466,1540],{"class":717},[401,2468,721],{"class":423},[401,2470,2471],{"class":717},"meas",[401,2473,594],{"class":423},[401,2475,2477],{"class":403,"line":2476},35,[401,2478,440],{"emptyLinePlaceholder":439},[401,2480,2482,2484,2486,2489,2491,2493,2495,2497,2499,2501,2503,2506,2508,2511,2513,2515,2518,2520,2523],{"class":403,"line":2481},36,[401,2483,1605],{"class":411},[401,2485,470],{"class":423},[401,2487,2488],{"class":411}," axes ",[401,2490,871],{"class":870},[401,2492,1615],{"class":411},[401,2494,387],{"class":423},[401,2496,1620],{"class":717},[401,2498,721],{"class":423},[401,2500,959],{"class":724},[401,2502,470],{"class":423},[401,2504,2505],{"class":724}," 2",[401,2507,470],{"class":423},[401,2509,2510],{"class":890}," figsize",[401,2512,871],{"class":870},[401,2514,721],{"class":423},[401,2516,2517],{"class":724},"10",[401,2519,470],{"class":423},[401,2521,2522],{"class":724}," 3.5",[401,2524,1591],{"class":423},[401,2526,2528,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2574,2576],{"class":403,"line":2527},37,[401,2529,2530],{"class":411},"axes",[401,2532,1263],{"class":423},[401,2534,725],{"class":724},[401,2536,1446],{"class":423},[401,2538,1649],{"class":717},[401,2540,721],{"class":423},[401,2542,1545],{"class":717},[401,2544,1656],{"class":423},[401,2546,1659],{"class":724},[401,2548,995],{"class":423},[401,2550,1664],{"class":717},[401,2552,1656],{"class":423},[401,2554,1669],{"class":724},[401,2556,995],{"class":423},[401,2558,1674],{"class":879},[401,2560,1677],{"class":883},[401,2562,880],{"class":879},[401,2564,470],{"class":423},[401,2566,1684],{"class":890},[401,2568,871],{"class":870},[401,2570,880],{"class":879},[401,2572,2573],{"class":883},"fused mean",[401,2575,880],{"class":879},[401,2577,594],{"class":423},[401,2579,2581,2583,2585,2587,2589,2592],{"class":403,"line":2580},38,[401,2582,2530],{"class":411},[401,2584,1263],{"class":423},[401,2586,725],{"class":724},[401,2588,1446],{"class":423},[401,2590,2591],{"class":717},"scatter",[401,2593,973],{"class":423},[401,2595,2597,2599,2601,2603],{"class":403,"line":2596},39,[401,2598,2071],{"class":717},[401,2600,1656],{"class":423},[401,2602,1659],{"class":724},[401,2604,1268],{"class":423},[401,2606,2608,2610,2612,2614],{"class":403,"line":2607},40,[401,2609,2071],{"class":717},[401,2611,1656],{"class":423},[401,2613,1669],{"class":724},[401,2615,1268],{"class":423},[401,2617,2619,2622,2624,2626,2628,2630],{"class":403,"line":2618},41,[401,2620,2621],{"class":890},"    marker",[401,2623,871],{"class":870},[401,2625,880],{"class":879},[401,2627,1711],{"class":883},[401,2629,880],{"class":879},[401,2631,548],{"class":423},[401,2633,2635,2638,2640,2642,2645,2647],{"class":403,"line":2634},42,[401,2636,2637],{"class":890},"    color",[401,2639,871],{"class":870},[401,2641,880],{"class":879},[401,2643,2644],{"class":883},"tab:red",[401,2646,880],{"class":879},[401,2648,548],{"class":423},[401,2650,2652,2655,2657,2660],{"class":403,"line":2651},43,[401,2653,2654],{"class":890},"    s",[401,2656,871],{"class":870},[401,2658,2659],{"class":724},"60",[401,2661,548],{"class":423},[401,2663,2665,2668,2670,2672,2675,2677],{"class":403,"line":2664},44,[401,2666,2667],{"class":890},"    label",[401,2669,871],{"class":870},[401,2671,880],{"class":879},[401,2673,2674],{"class":883},"measurement",[401,2676,880],{"class":879},[401,2678,548],{"class":423},[401,2680,2682,2685,2687,2690],{"class":403,"line":2681},45,[401,2683,2684],{"class":890},"    zorder",[401,2686,871],{"class":870},[401,2688,2689],{"class":724},"3",[401,2691,548],{"class":423},[401,2693,2695],{"class":403,"line":2694},46,[401,2696,594],{"class":423},[401,2698,2700,2702,2704,2706,2708,2711,2713,2716,2718,2721],{"class":403,"line":2699},47,[401,2701,2530],{"class":411},[401,2703,1263],{"class":423},[401,2705,725],{"class":724},[401,2707,1446],{"class":423},[401,2709,2710],{"class":717},"legend",[401,2712,721],{"class":423},[401,2714,2715],{"class":890},"fontsize",[401,2717,871],{"class":870},[401,2719,2720],{"class":724},"8",[401,2722,594],{"class":423},[401,2724,2726,2728,2730,2732,2734,2736,2738,2740,2743,2745],{"class":403,"line":2725},48,[401,2727,2530],{"class":411},[401,2729,1263],{"class":423},[401,2731,725],{"class":724},[401,2733,1446],{"class":423},[401,2735,1744],{"class":717},[401,2737,721],{"class":423},[401,2739,880],{"class":879},[401,2741,2742],{"class":883},"Kalman with measurement fusion",[401,2744,880],{"class":879},[401,2746,594],{"class":423},[401,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768],{"class":403,"line":2749},49,[401,2751,2530],{"class":411},[401,2753,1263],{"class":423},[401,2755,725],{"class":724},[401,2757,1446],{"class":423},[401,2759,1704],{"class":717},[401,2761,721],{"class":423},[401,2763,880],{"class":879},[401,2765,1711],{"class":883},[401,2767,880],{"class":879},[401,2769,594],{"class":423},[401,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791],{"class":403,"line":2772},50,[401,2774,2530],{"class":411},[401,2776,1263],{"class":423},[401,2778,725],{"class":724},[401,2780,1446],{"class":423},[401,2782,1724],{"class":717},[401,2784,721],{"class":423},[401,2786,880],{"class":879},[401,2788,1731],{"class":883},[401,2790,880],{"class":879},[401,2792,594],{"class":423},[401,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814],{"class":403,"line":2795},51,[401,2797,2530],{"class":411},[401,2799,1263],{"class":423},[401,2801,725],{"class":724},[401,2803,1446],{"class":423},[401,2805,1777],{"class":717},[401,2807,721],{"class":423},[401,2809,1782],{"class":890},[401,2811,871],{"class":870},[401,2813,1787],{"class":724},[401,2815,594],{"class":423},[401,2817,2819,2821,2824,2826,2829,2831,2834,2836,2838,2841,2843,2845,2847,2850,2852,2854,2856,2859,2861,2863,2865,2868,2870],{"class":403,"line":2818},52,[401,2820,1458],{"class":407},[401,2822,2823],{"class":411}," i",[401,2825,470],{"class":423},[401,2827,2828],{"class":411}," lbl ",[401,2830,1464],{"class":407},[401,2832,2833],{"class":1467}," enumerate",[401,2835,990],{"class":423},[401,2837,880],{"class":879},[401,2839,2840],{"class":883},"Var(x)",[401,2842,880],{"class":879},[401,2844,470],{"class":423},[401,2846,1674],{"class":879},[401,2848,2849],{"class":883},"Var(y)",[401,2851,880],{"class":879},[401,2853,470],{"class":423},[401,2855,1674],{"class":879},[401,2857,2858],{"class":883},"Var(vx)",[401,2860,880],{"class":879},[401,2862,470],{"class":423},[401,2864,1674],{"class":879},[401,2866,2867],{"class":883},"Var(vy)",[401,2869,880],{"class":879},[401,2871,2872],{"class":423},"]):\n",[401,2874,2876,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2900,2902,2904,2906,2909,2911,2914,2916,2918,2921,2923],{"class":403,"line":2875},53,[401,2877,2878],{"class":411},"    axes",[401,2880,1263],{"class":423},[401,2882,959],{"class":724},[401,2884,1446],{"class":423},[401,2886,1649],{"class":717},[401,2888,721],{"class":423},[401,2890,2451],{"class":717},[401,2892,1656],{"class":423},[401,2894,2823],{"class":717},[401,2896,1446],{"class":423},[401,2898,2899],{"class":717},"numpy",[401,2901,1851],{"class":423},[401,2903,1684],{"class":890},[401,2905,871],{"class":870},[401,2907,2908],{"class":717},"lbl",[401,2910,470],{"class":423},[401,2912,2913],{"class":890}," marker",[401,2915,871],{"class":870},[401,2917,880],{"class":879},[401,2919,2920],{"class":883},"o",[401,2922,880],{"class":879},[401,2924,594],{"class":423},[401,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946],{"class":403,"line":2927},54,[401,2929,2530],{"class":411},[401,2931,1263],{"class":423},[401,2933,959],{"class":724},[401,2935,1446],{"class":423},[401,2937,1704],{"class":717},[401,2939,721],{"class":423},[401,2941,880],{"class":879},[401,2943,209],{"class":883},[401,2945,880],{"class":879},[401,2947,594],{"class":423},[401,2949,2951,2953,2955,2957,2959,2961,2963,2965,2968,2970],{"class":403,"line":2950},55,[401,2952,2530],{"class":411},[401,2954,1263],{"class":423},[401,2956,959],{"class":724},[401,2958,1446],{"class":423},[401,2960,1724],{"class":717},[401,2962,721],{"class":423},[401,2964,880],{"class":879},[401,2966,2967],{"class":883},"variance (diagonal)",[401,2969,880],{"class":879},[401,2971,594],{"class":423},[401,2973,2975,2977,2979,2981,2983,2985,2987,2989,2992,2994],{"class":403,"line":2974},56,[401,2976,2530],{"class":411},[401,2978,1263],{"class":423},[401,2980,959],{"class":724},[401,2982,1446],{"class":423},[401,2984,1744],{"class":717},[401,2986,721],{"class":423},[401,2988,880],{"class":879},[401,2990,2991],{"class":883},"Covariance shrinks under measurement fusion",[401,2993,880],{"class":879},[401,2995,594],{"class":423},[401,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017],{"class":403,"line":2998},57,[401,3000,2530],{"class":411},[401,3002,1263],{"class":423},[401,3004,959],{"class":724},[401,3006,1446],{"class":423},[401,3008,2710],{"class":717},[401,3010,721],{"class":423},[401,3012,2715],{"class":890},[401,3014,871],{"class":870},[401,3016,2720],{"class":724},[401,3018,594],{"class":423},[401,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040],{"class":403,"line":3021},58,[401,3023,2530],{"class":411},[401,3025,1263],{"class":423},[401,3027,959],{"class":724},[401,3029,1446],{"class":423},[401,3031,1777],{"class":717},[401,3033,721],{"class":423},[401,3035,1782],{"class":890},[401,3037,871],{"class":870},[401,3039,1787],{"class":724},[401,3041,594],{"class":423},[401,3043,3045,3047,3049,3052],{"class":403,"line":3044},59,[401,3046,1794],{"class":411},[401,3048,387],{"class":423},[401,3050,3051],{"class":717},"tight_layout",[401,3053,1802],{"class":423},[401,3055,3057,3059,3061,3063],{"class":403,"line":3056},60,[401,3058,1794],{"class":411},[401,3060,387],{"class":423},[401,3062,1799],{"class":717},[401,3064,1802],{"class":423},[338,3066,3067],{},[1806,3068],{"alt":397,"src":3069},"\u002F_nb\u002F53e9b35103b489b5.png",[734,3071,3073],{"id":3072},"lifecycle-tentative-active-lost-removed","Lifecycle — Tentative → Active → Lost → Removed",[338,3075,3076,3079],{},[358,3077,3078],{},"StandardLifecycle(min_hits, max_age, allow_reid)"," is unitrack's\ndefault state machine:",[799,3081,3082,3088,3097,3104,3114],{},[350,3083,3084,3085,387],{},"New tracklet enters as ",[353,3086,3087],{},"Tentative",[350,3089,3090,3091,3093,3094,387],{},"Tentative + matched on consecutive frames → ",[353,3092,1039],{}," when\n",[358,3095,3096],{},"hits >= min_hits",[350,3098,3099,3100,3103],{},"Tentative + missed → ",[353,3101,3102],{},"Removed"," (if past grace period).",[350,3105,3106,3107,3110,3111,387],{},"Active + missed for ",[358,3108,3109],{},"> max_age"," frames → ",[353,3112,3113],{},"Lost",[350,3115,3116,3117,3110,3120,387],{},"Lost + missed for another ",[358,3118,3119],{},"allow_reid",[353,3121,3102],{},[338,3123,3124],{},"We'll trace the lifecycle on a 12-frame clip with one tracklet\nthat gets occluded for 4 frames (no detections).",[392,3126,3128],{"className":394,"code":3127,"language":396,"meta":397,"style":397},"# Build a tracker with a 2-stage min_hits + 3-frame max_age policy.\ntracker = unitrack.Tracker(\n    root=Pipe(cost=Cosine(\"kernel\"), assoc=Associate(Jonker(threshold=0.5))),\n    states={\n        \"kernel\": State(\n            schema=TensorSpec(shape=(4,), dtype=torch.float32),\n            process=Identity(\"kernel\"),\n            observation=Replace(\"kernel\"),\n            init=FromDetectionField(\"kernel\"),\n        ),\n    },\n    lifecycle=StandardLifecycle(min_hits=2, max_age=3, allow_reid=2),\n    visibility=IncludeAll(),\n)\nms = unitrack.MultiStream(tracker)\n\n# 12 frames: present, present, present, present (occluded x4), present, present, present, present.\nappearance = torch.tensor([1.0, 0, 0, 0])\npresent = [True, True, True, True, False, False, False, False, True, True, True, True]\n\nhistory = []  # list of (status, hits, tsu, age) per frame for tracklet 1\nfor k, p in enumerate(present):\n    if p:\n        ds = Detections(\n            index=torch.tensor([0], dtype=torch.int64),\n            kernel=appearance.unsqueeze(0),\n            batch_size=[1],\n        )\n    else:\n        ds = Detections(\n            index=torch.zeros(0, dtype=torch.int64),\n            kernel=torch.zeros((0, 4), dtype=torch.float32),\n            batch_size=[0],\n        )\n    ctx = FrameContext.make(frame_idx=k, delta=1.0, fps=1.0, stream_key=0)\n    res = ms.step(stream_key=0, detections=ds, ctx=ctx)\n    # Find tracklet 1 in the snapshot (might be filtered out by Removed).\n    snap = res.snapshot\n    mask = snap.id == 1\n    if mask.any():\n        history.append(\n            (\n                int(snap.status[mask].item()),\n                int(snap.hits[mask].item()),\n                int(snap.time_since_update[mask].item()),\n                int(snap.age[mask].item()),\n            )\n        )\n    else:\n        history.append(None)  # was removed\nfor k, h in enumerate(history):\n    print(f\"frame {k:2d}  present={int(present[k])}  →  {h}\")\n\n",[358,3129,3130,3135,3151,3207,3217,3234,3271,3290,3309,3329,3334,3339,3377,3390,3394,3414,3418,3423,3454,3516,3520,3533,3556,3567,3578,3609,3629,3642,3647,3654,3664,3694,3729,3741,3745,3793,3838,3843,3857,3877,3892,3903,3908,3934,3957,3980,4002,4007,4011,4017,4035,4057],{"__ignoreMap":397},[401,3131,3132],{"class":403,"line":404},[401,3133,3134],{"class":921},"# Build a tracker with a 2-stage min_hits + 3-frame max_age policy.\n",[401,3136,3137,3140,3142,3144,3146,3149],{"class":403,"line":415},[401,3138,3139],{"class":411},"tracker ",[401,3141,871],{"class":870},[401,3143,457],{"class":411},[401,3145,387],{"class":423},[401,3147,3148],{"class":717},"Tracker",[401,3150,973],{"class":423},[401,3152,3153,3156,3158,3161,3163,3165,3167,3170,3172,3174,3177,3179,3182,3185,3187,3190,3192,3195,3197,3200,3202,3204],{"class":403,"line":436},[401,3154,3155],{"class":890},"    root",[401,3157,871],{"class":870},[401,3159,3160],{"class":717},"Pipe",[401,3162,721],{"class":423},[401,3164,203],{"class":890},[401,3166,871],{"class":870},[401,3168,3169],{"class":717},"Cosine",[401,3171,721],{"class":423},[401,3173,880],{"class":879},[401,3175,3176],{"class":883},"kernel",[401,3178,880],{"class":879},[401,3180,3181],{"class":423},"),",[401,3183,3184],{"class":890}," assoc",[401,3186,871],{"class":870},[401,3188,3189],{"class":717},"Associate",[401,3191,721],{"class":423},[401,3193,3194],{"class":717},"Jonker",[401,3196,721],{"class":423},[401,3198,3199],{"class":890},"threshold",[401,3201,871],{"class":870},[401,3203,906],{"class":724},[401,3205,3206],{"class":423},"))),\n",[401,3208,3209,3212,3214],{"class":403,"line":443},[401,3210,3211],{"class":890},"    states",[401,3213,871],{"class":870},[401,3215,3216],{"class":423},"{\n",[401,3218,3219,3222,3224,3226,3229,3232],{"class":403,"line":451},[401,3220,3221],{"class":879},"        \"",[401,3223,3176],{"class":883},[401,3225,880],{"class":879},[401,3227,3228],{"class":423},":",[401,3230,3231],{"class":717}," State",[401,3233,973],{"class":423},[401,3235,3236,3239,3241,3244,3246,3249,3251,3253,3255,3258,3260,3262,3264,3266,3269],{"class":403,"line":476},[401,3237,3238],{"class":890},"            schema",[401,3240,871],{"class":870},[401,3242,3243],{"class":717},"TensorSpec",[401,3245,721],{"class":423},[401,3247,3248],{"class":890},"shape",[401,3250,871],{"class":870},[401,3252,721],{"class":423},[401,3254,1342],{"class":724},[401,3256,3257],{"class":423},",),",[401,3259,998],{"class":890},[401,3261,871],{"class":870},[401,3263,712],{"class":717},[401,3265,387],{"class":423},[401,3267,3268],{"class":426},"float32",[401,3270,1010],{"class":423},[401,3272,3273,3276,3278,3280,3282,3284,3286,3288],{"class":403,"line":493},[401,3274,3275],{"class":890},"            process",[401,3277,871],{"class":870},[401,3279,805],{"class":717},[401,3281,721],{"class":423},[401,3283,880],{"class":879},[401,3285,3176],{"class":883},[401,3287,880],{"class":879},[401,3289,1010],{"class":423},[401,3291,3292,3295,3297,3299,3301,3303,3305,3307],{"class":403,"line":525},[401,3293,3294],{"class":890},"            observation",[401,3296,871],{"class":870},[401,3298,809],{"class":717},[401,3300,721],{"class":423},[401,3302,880],{"class":879},[401,3304,3176],{"class":883},[401,3306,880],{"class":879},[401,3308,1010],{"class":423},[401,3310,3311,3314,3316,3319,3321,3323,3325,3327],{"class":403,"line":542},[401,3312,3313],{"class":890},"            init",[401,3315,871],{"class":870},[401,3317,3318],{"class":717},"FromDetectionField",[401,3320,721],{"class":423},[401,3322,880],{"class":879},[401,3324,3176],{"class":883},[401,3326,880],{"class":879},[401,3328,1010],{"class":423},[401,3330,3331],{"class":403,"line":551},[401,3332,3333],{"class":423},"        ),\n",[401,3335,3336],{"class":403,"line":559},[401,3337,3338],{"class":423},"    },\n",[401,3340,3341,3344,3346,3349,3351,3353,3355,3357,3359,3362,3364,3366,3368,3371,3373,3375],{"class":403,"line":567},[401,3342,3343],{"class":890},"    lifecycle",[401,3345,871],{"class":870},[401,3347,3348],{"class":717},"StandardLifecycle",[401,3350,721],{"class":423},[401,3352,382],{"class":890},[401,3354,871],{"class":870},[401,3356,1588],{"class":724},[401,3358,470],{"class":423},[401,3360,3361],{"class":890}," max_age",[401,3363,871],{"class":870},[401,3365,2689],{"class":724},[401,3367,470],{"class":423},[401,3369,3370],{"class":890}," allow_reid",[401,3372,871],{"class":870},[401,3374,1588],{"class":724},[401,3376,1010],{"class":423},[401,3378,3379,3382,3384,3387],{"class":403,"line":575},[401,3380,3381],{"class":890},"    visibility",[401,3383,871],{"class":870},[401,3385,3386],{"class":717},"IncludeAll",[401,3388,3389],{"class":423},"(),\n",[401,3391,3392],{"class":403,"line":583},[401,3393,594],{"class":423},[401,3395,3396,3399,3401,3403,3405,3408,3410,3412],{"class":403,"line":591},[401,3397,3398],{"class":411},"ms ",[401,3400,871],{"class":870},[401,3402,457],{"class":411},[401,3404,387],{"class":423},[401,3406,3407],{"class":717},"MultiStream",[401,3409,721],{"class":423},[401,3411,173],{"class":717},[401,3413,594],{"class":423},[401,3415,3416],{"class":403,"line":597},[401,3417,440],{"emptyLinePlaceholder":439},[401,3419,3420],{"class":403,"line":614},[401,3421,3422],{"class":921},"# 12 frames: present, present, present, present (occluded x4), present, present, present, present.\n",[401,3424,3425,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452],{"class":403,"line":630},[401,3426,3427],{"class":411},"appearance ",[401,3429,871],{"class":870},[401,3431,1296],{"class":411},[401,3433,387],{"class":423},[401,3435,987],{"class":717},[401,3437,990],{"class":423},[401,3439,1411],{"class":724},[401,3441,470],{"class":423},[401,3443,1659],{"class":724},[401,3445,470],{"class":423},[401,3447,1659],{"class":724},[401,3449,470],{"class":423},[401,3451,1659],{"class":724},[401,3453,1323],{"class":423},[401,3455,3456,3459,3461,3463,3467,3469,3472,3474,3476,3478,3480,3482,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513],{"class":403,"line":638},[401,3457,3458],{"class":411},"present ",[401,3460,871],{"class":870},[401,3462,1432],{"class":423},[401,3464,3466],{"class":3465},"s39Yj","True",[401,3468,470],{"class":423},[401,3470,3471],{"class":3465}," True",[401,3473,470],{"class":423},[401,3475,3471],{"class":3465},[401,3477,470],{"class":423},[401,3479,3471],{"class":3465},[401,3481,470],{"class":423},[401,3483,3484],{"class":3465}," False",[401,3486,470],{"class":423},[401,3488,3484],{"class":3465},[401,3490,470],{"class":423},[401,3492,3484],{"class":3465},[401,3494,470],{"class":423},[401,3496,3484],{"class":3465},[401,3498,470],{"class":423},[401,3500,3471],{"class":3465},[401,3502,470],{"class":423},[401,3504,3471],{"class":3465},[401,3506,470],{"class":423},[401,3508,3471],{"class":3465},[401,3510,470],{"class":423},[401,3512,3471],{"class":3465},[401,3514,3515],{"class":423},"]\n",[401,3517,3518],{"class":403,"line":646},[401,3519,440],{"emptyLinePlaceholder":439},[401,3521,3522,3525,3527,3530],{"class":403,"line":654},[401,3523,3524],{"class":411},"history ",[401,3526,871],{"class":870},[401,3528,3529],{"class":423}," []",[401,3531,3532],{"class":921},"  # list of (status, hits, tsu, age) per frame for tracklet 1\n",[401,3534,3535,3537,3540,3542,3545,3547,3549,3551,3554],{"class":403,"line":662},[401,3536,1458],{"class":407},[401,3538,3539],{"class":411}," k",[401,3541,470],{"class":423},[401,3543,3544],{"class":411}," p ",[401,3546,1464],{"class":407},[401,3548,2833],{"class":1467},[401,3550,721],{"class":423},[401,3552,3553],{"class":717},"present",[401,3555,962],{"class":423},[401,3557,3558,3561,3564],{"class":403,"line":670},[401,3559,3560],{"class":407},"    if",[401,3562,3563],{"class":411}," p",[401,3565,3566],{"class":423},":\n",[401,3568,3569,3572,3574,3576],{"class":403,"line":678},[401,3570,3571],{"class":411},"        ds ",[401,3573,871],{"class":870},[401,3575,507],{"class":717},[401,3577,973],{"class":423},[401,3579,3580,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607],{"class":403,"line":683},[401,3581,3582],{"class":890},"            index",[401,3584,871],{"class":870},[401,3586,712],{"class":717},[401,3588,387],{"class":423},[401,3590,987],{"class":717},[401,3592,990],{"class":423},[401,3594,725],{"class":724},[401,3596,995],{"class":423},[401,3598,998],{"class":890},[401,3600,871],{"class":870},[401,3602,712],{"class":717},[401,3604,387],{"class":423},[401,3606,1007],{"class":426},[401,3608,1010],{"class":423},[401,3610,3611,3614,3616,3619,3621,3623,3625,3627],{"class":403,"line":704},[401,3612,3613],{"class":890},"            kernel",[401,3615,871],{"class":870},[401,3617,3618],{"class":717},"appearance",[401,3620,387],{"class":423},[401,3622,1227],{"class":717},[401,3624,721],{"class":423},[401,3626,725],{"class":724},[401,3628,1010],{"class":423},[401,3630,3631,3634,3636,3638,3640],{"class":403,"line":709},[401,3632,3633],{"class":890},"            batch_size",[401,3635,871],{"class":870},[401,3637,1263],{"class":423},[401,3639,959],{"class":724},[401,3641,1268],{"class":423},[401,3643,3644],{"class":403,"line":1455},[401,3645,3646],{"class":423},"        )\n",[401,3648,3649,3652],{"class":403,"line":1477},[401,3650,3651],{"class":407},"    else",[401,3653,3566],{"class":423},[401,3655,3656,3658,3660,3662],{"class":403,"line":1499},[401,3657,3571],{"class":411},[401,3659,871],{"class":870},[401,3661,507],{"class":717},[401,3663,973],{"class":423},[401,3665,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692],{"class":403,"line":1529},[401,3667,3582],{"class":890},[401,3669,871],{"class":870},[401,3671,712],{"class":717},[401,3673,387],{"class":423},[401,3675,1102],{"class":717},[401,3677,721],{"class":423},[401,3679,725],{"class":724},[401,3681,470],{"class":423},[401,3683,998],{"class":890},[401,3685,871],{"class":870},[401,3687,712],{"class":717},[401,3689,387],{"class":423},[401,3691,1007],{"class":426},[401,3693,1010],{"class":423},[401,3695,3696,3698,3700,3702,3704,3706,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727],{"class":403,"line":1550},[401,3697,3613],{"class":890},[401,3699,871],{"class":870},[401,3701,712],{"class":717},[401,3703,387],{"class":423},[401,3705,1102],{"class":717},[401,3707,3708],{"class":423},"((",[401,3710,725],{"class":724},[401,3712,470],{"class":423},[401,3714,1637],{"class":724},[401,3716,3181],{"class":423},[401,3718,998],{"class":890},[401,3720,871],{"class":870},[401,3722,712],{"class":717},[401,3724,387],{"class":423},[401,3726,3268],{"class":426},[401,3728,1010],{"class":423},[401,3730,3731,3733,3735,3737,3739],{"class":403,"line":1567},[401,3732,3633],{"class":890},[401,3734,871],{"class":870},[401,3736,1263],{"class":423},[401,3738,725],{"class":724},[401,3740,1268],{"class":423},[401,3742,3743],{"class":403,"line":2456},[401,3744,3646],{"class":423},[401,3746,3747,3749,3751,3753,3755,3757,3759,3761,3763,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3787,3789,3791],{"class":403,"line":2476},[401,3748,1950],{"class":411},[401,3750,871],{"class":870},[401,3752,512],{"class":411},[401,3754,387],{"class":423},[401,3756,1392],{"class":717},[401,3758,721],{"class":423},[401,3760,1397],{"class":890},[401,3762,871],{"class":870},[401,3764,3765],{"class":717},"k",[401,3767,470],{"class":423},[401,3769,1406],{"class":890},[401,3771,871],{"class":870},[401,3773,1411],{"class":724},[401,3775,470],{"class":423},[401,3777,1416],{"class":890},[401,3779,871],{"class":870},[401,3781,1411],{"class":724},[401,3783,470],{"class":423},[401,3785,3786],{"class":890}," stream_key",[401,3788,871],{"class":870},[401,3790,725],{"class":724},[401,3792,594],{"class":423},[401,3794,3795,3798,3800,3803,3805,3808,3810,3813,3815,3817,3819,3822,3824,3827,3829,3831,3833,3836],{"class":403,"line":2481},[401,3796,3797],{"class":411},"    res ",[401,3799,871],{"class":870},[401,3801,3802],{"class":411}," ms",[401,3804,387],{"class":423},[401,3806,3807],{"class":717},"step",[401,3809,721],{"class":423},[401,3811,3812],{"class":890},"stream_key",[401,3814,871],{"class":870},[401,3816,725],{"class":724},[401,3818,470],{"class":423},[401,3820,3821],{"class":890}," detections",[401,3823,871],{"class":870},[401,3825,3826],{"class":717},"ds",[401,3828,470],{"class":423},[401,3830,1494],{"class":890},[401,3832,871],{"class":870},[401,3834,3835],{"class":717},"ctx",[401,3837,594],{"class":423},[401,3839,3840],{"class":403,"line":2527},[401,3841,3842],{"class":921},"    # Find tracklet 1 in the snapshot (might be filtered out by Removed).\n",[401,3844,3845,3847,3849,3852,3854],{"class":403,"line":2580},[401,3846,1480],{"class":411},[401,3848,871],{"class":870},[401,3850,3851],{"class":411}," res",[401,3853,387],{"class":423},[401,3855,3856],{"class":426},"snapshot\n",[401,3858,3859,3862,3864,3866,3868,3871,3874],{"class":403,"line":2596},[401,3860,3861],{"class":411},"    mask ",[401,3863,871],{"class":870},[401,3865,2028],{"class":411},[401,3867,387],{"class":423},[401,3869,3870],{"class":426},"id",[401,3872,3873],{"class":870}," ==",[401,3875,3876],{"class":724}," 1\n",[401,3878,3879,3881,3884,3886,3889],{"class":403,"line":2607},[401,3880,3560],{"class":407},[401,3882,3883],{"class":411}," mask",[401,3885,387],{"class":423},[401,3887,3888],{"class":717},"any",[401,3890,3891],{"class":423},"():\n",[401,3893,3894,3897,3899,3901],{"class":403,"line":2618},[401,3895,3896],{"class":411},"        history",[401,3898,387],{"class":423},[401,3900,1507],{"class":717},[401,3902,973],{"class":423},[401,3904,3905],{"class":403,"line":2634},[401,3906,3907],{"class":423},"            (\n",[401,3909,3910,3913,3915,3917,3919,3921,3923,3926,3928,3931],{"class":403,"line":2651},[401,3911,3912],{"class":1028},"                int",[401,3914,721],{"class":423},[401,3916,1435],{"class":717},[401,3918,387],{"class":423},[401,3920,250],{"class":426},[401,3922,1263],{"class":423},[401,3924,3925],{"class":426},"mask",[401,3927,1446],{"class":423},[401,3929,3930],{"class":717},"item",[401,3932,3933],{"class":423},"()),\n",[401,3935,3936,3938,3940,3942,3944,3947,3949,3951,3953,3955],{"class":403,"line":2664},[401,3937,3912],{"class":1028},[401,3939,721],{"class":423},[401,3941,1435],{"class":717},[401,3943,387],{"class":423},[401,3945,3946],{"class":426},"hits",[401,3948,1263],{"class":423},[401,3950,3925],{"class":426},[401,3952,1446],{"class":423},[401,3954,3930],{"class":717},[401,3956,3933],{"class":423},[401,3958,3959,3961,3963,3965,3967,3970,3972,3974,3976,3978],{"class":403,"line":2681},[401,3960,3912],{"class":1028},[401,3962,721],{"class":423},[401,3964,1435],{"class":717},[401,3966,387],{"class":423},[401,3968,3969],{"class":426},"time_since_update",[401,3971,1263],{"class":423},[401,3973,3925],{"class":426},[401,3975,1446],{"class":423},[401,3977,3930],{"class":717},[401,3979,3933],{"class":423},[401,3981,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000],{"class":403,"line":2694},[401,3983,3912],{"class":1028},[401,3985,721],{"class":423},[401,3987,1435],{"class":717},[401,3989,387],{"class":423},[401,3991,954],{"class":426},[401,3993,1263],{"class":423},[401,3995,3925],{"class":426},[401,3997,1446],{"class":423},[401,3999,3930],{"class":717},[401,4001,3933],{"class":423},[401,4003,4004],{"class":403,"line":2699},[401,4005,4006],{"class":423},"            )\n",[401,4008,4009],{"class":403,"line":2725},[401,4010,3646],{"class":423},[401,4012,4013,4015],{"class":403,"line":2749},[401,4014,3651],{"class":407},[401,4016,3566],{"class":423},[401,4018,4019,4021,4023,4025,4027,4030,4032],{"class":403,"line":2772},[401,4020,3896],{"class":411},[401,4022,387],{"class":423},[401,4024,1507],{"class":717},[401,4026,721],{"class":423},[401,4028,4029],{"class":3465},"None",[401,4031,1345],{"class":423},[401,4033,4034],{"class":921},"  # was removed\n",[401,4036,4037,4039,4041,4043,4046,4048,4050,4052,4055],{"class":403,"line":2795},[401,4038,1458],{"class":407},[401,4040,3539],{"class":411},[401,4042,470],{"class":423},[401,4044,4045],{"class":411}," h ",[401,4047,1464],{"class":407},[401,4049,2833],{"class":1467},[401,4051,721],{"class":423},[401,4053,4054],{"class":717},"history",[401,4056,962],{"class":423},[401,4058,4059,4062,4064,4067,4070,4073,4075,4078,4081,4084,4086,4088,4090,4092,4094,4096,4099,4101,4104,4106,4109,4111,4113],{"class":403,"line":2818},[401,4060,4061],{"class":1467},"    print",[401,4063,721],{"class":423},[401,4065,4066],{"class":927},"f",[401,4068,4069],{"class":883},"\"frame ",[401,4071,4072],{"class":724},"{",[401,4074,3765],{"class":717},[401,4076,4077],{"class":927},":2d",[401,4079,4080],{"class":724},"}",[401,4082,4083],{"class":883},"  present=",[401,4085,4072],{"class":724},[401,4087,1029],{"class":1028},[401,4089,721],{"class":423},[401,4091,3553],{"class":717},[401,4093,1263],{"class":423},[401,4095,3765],{"class":717},[401,4097,4098],{"class":423},"])",[401,4100,4080],{"class":724},[401,4102,4103],{"class":883},"  →  ",[401,4105,4072],{"class":724},[401,4107,4108],{"class":717},"h",[401,4110,4080],{"class":724},[401,4112,880],{"class":883},[401,4114,594],{"class":423},[729,4116],{"data":4117,"kind":1595},"ZnJhbWUgIDAgIHByZXNlbnQ9MSAg4oaSICAoMCwgMSwgMCwgMSkKZnJhbWUgIDEgIHByZXNlbnQ9MSAg4oaSICAoMSwgMiwgMCwgMikKZnJhbWUgIDIgIHByZXNlbnQ9MSAg4oaSICAoMSwgMywgMCwgMykKZnJhbWUgIDMgIHByZXNlbnQ9MSAg4oaSICAoMSwgNCwgMCwgNCkKZnJhbWUgIDQgIHByZXNlbnQ9MCAg4oaSICAoMSwgNCwgMSwgNSkKZnJhbWUgIDUgIHByZXNlbnQ9MCAg4oaSICAoMSwgNCwgMiwgNikKZnJhbWUgIDYgIHByZXNlbnQ9MCAg4oaSICAoMSwgNCwgMywgNykKZnJhbWUgIDcgIHByZXNlbnQ9MCAg4oaSICAoMiwgNCwgNCwgOCkKZnJhbWUgIDggIHByZXNlbnQ9MSAg4oaSICAoMSwgNSwgMCwgOSkKZnJhbWUgIDkgIHByZXNlbnQ9MSAg4oaSICAoMSwgNiwgMCwgMTApCmZyYW1lIDEwICBwcmVzZW50PTEgIOKGkiAgKDEsIDcsIDAsIDExKQpmcmFtZSAxMSAgcHJlc2VudD0xICDihpIgICgxLCA4LCAwLCAxMikK",[392,4119,4121],{"className":394,"code":4120,"language":396,"meta":397,"style":397},"status_names = [\"Tentative\", \"Active\", \"Lost\", \"Removed\"]\nstatuses = [(h[0] if h is not None else 3) for h in history]\n\nfig, ax = plt.subplots(figsize=(8, 3))\nfor k, (s, p) in enumerate(zip(statuses, present)):\n    color = [\"#ffcc66\", \"#66cc66\", \"#aabbff\", \"#cccccc\"][s]\n    ax.barh(0, 1, left=k, color=color, edgecolor=\"white\")\n    ax.text(\n        k + 0.5,\n        0,\n        status_names[s][0],\n        ha=\"center\",\n        va=\"center\",\n        fontsize=8,\n        color=\"black\",\n    )\n    if not p:\n        ax.text(\n            k + 0.5, -0.6, \"miss\", ha=\"center\", va=\"center\", fontsize=7, color=\"#aa0000\"\n        )\nax.set_yticks([])\nax.set_xticks(range(len(history) + 1))\nax.set_xlim(0, len(history))\nax.set_ylim(-1.0, 1.5)\nax.set_xlabel(\"frame\")\nax.set_title(\n    \"Lifecycle: T=Tentative, A=Active, L=Lost, R=Removed\\n(min_hits=2, max_age=3, allow_reid=2)\"\n)\n\nfrom matplotlib.patches import Patch\n\nlegend = [\n    Patch(color=\"#ffcc66\", label=\"Tentative\"),\n    Patch(color=\"#66cc66\", label=\"Active\"),\n    Patch(color=\"#aabbff\", label=\"Lost\"),\n    Patch(color=\"#cccccc\", label=\"Removed\"),\n]\nax.legend(handles=legend, loc=\"upper right\", fontsize=8)\nplt.tight_layout()\nplt.show()\n\n",[358,4122,4123,4164,4216,4220,4252,4295,4345,4398,4409,4420,4427,4442,4458,4473,4484,4500,4504,4514,4525,4600,4604,4616,4647,4671,4694,4712,4722,4736,4740,4744,4760,4764,4774,4805,4835,4865,4895,4899,4940,4950],{"__ignoreMap":397},[401,4124,4125,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162],{"class":403,"line":404},[401,4126,4127],{"class":411},"status_names ",[401,4129,871],{"class":870},[401,4131,1432],{"class":423},[401,4133,880],{"class":879},[401,4135,3087],{"class":883},[401,4137,880],{"class":879},[401,4139,470],{"class":423},[401,4141,1674],{"class":879},[401,4143,1039],{"class":883},[401,4145,880],{"class":879},[401,4147,470],{"class":423},[401,4149,1674],{"class":879},[401,4151,3113],{"class":883},[401,4153,880],{"class":879},[401,4155,470],{"class":423},[401,4157,1674],{"class":879},[401,4159,3102],{"class":883},[401,4161,880],{"class":879},[401,4163,3515],{"class":423},[401,4165,4166,4169,4171,4174,4176,4178,4180,4182,4185,4187,4190,4193,4196,4199,4202,4204,4207,4209,4211,4214],{"class":403,"line":415},[401,4167,4168],{"class":411},"statuses ",[401,4170,871],{"class":870},[401,4172,4173],{"class":423}," [(",[401,4175,4108],{"class":411},[401,4177,1263],{"class":423},[401,4179,725],{"class":724},[401,4181,2046],{"class":423},[401,4183,4184],{"class":407}," if",[401,4186,4045],{"class":411},[401,4188,4189],{"class":870},"is",[401,4191,4192],{"class":870}," not",[401,4194,4195],{"class":3465}," None",[401,4197,4198],{"class":407}," else",[401,4200,4201],{"class":724}," 3",[401,4203,1345],{"class":423},[401,4205,4206],{"class":407}," for",[401,4208,4045],{"class":411},[401,4210,1464],{"class":407},[401,4212,4213],{"class":411}," history",[401,4215,3515],{"class":423},[401,4217,4218],{"class":403,"line":436},[401,4219,440],{"emptyLinePlaceholder":439},[401,4221,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250],{"class":403,"line":443},[401,4223,1605],{"class":411},[401,4225,470],{"class":423},[401,4227,1610],{"class":411},[401,4229,871],{"class":870},[401,4231,1615],{"class":411},[401,4233,387],{"class":423},[401,4235,1620],{"class":717},[401,4237,721],{"class":423},[401,4239,1625],{"class":890},[401,4241,871],{"class":870},[401,4243,721],{"class":423},[401,4245,2720],{"class":724},[401,4247,470],{"class":423},[401,4249,4201],{"class":724},[401,4251,1591],{"class":423},[401,4253,4254,4256,4258,4260,4263,4266,4268,4270,4272,4275,4277,4279,4282,4284,4287,4289,4292],{"class":403,"line":451},[401,4255,1458],{"class":407},[401,4257,3539],{"class":411},[401,4259,470],{"class":423},[401,4261,4262],{"class":423}," (",[401,4264,4265],{"class":411},"s",[401,4267,470],{"class":423},[401,4269,3563],{"class":411},[401,4271,1345],{"class":423},[401,4273,4274],{"class":407}," in",[401,4276,2833],{"class":1467},[401,4278,721],{"class":423},[401,4280,4281],{"class":1467},"zip",[401,4283,721],{"class":423},[401,4285,4286],{"class":717},"statuses",[401,4288,470],{"class":423},[401,4290,4291],{"class":717}," present",[401,4293,4294],{"class":423},")):\n",[401,4296,4297,4300,4302,4304,4306,4309,4311,4313,4315,4318,4320,4322,4324,4327,4329,4331,4333,4336,4338,4341,4343],{"class":403,"line":476},[401,4298,4299],{"class":411},"    color ",[401,4301,871],{"class":870},[401,4303,1432],{"class":423},[401,4305,880],{"class":879},[401,4307,4308],{"class":883},"#ffcc66",[401,4310,880],{"class":879},[401,4312,470],{"class":423},[401,4314,1674],{"class":879},[401,4316,4317],{"class":883},"#66cc66",[401,4319,880],{"class":879},[401,4321,470],{"class":423},[401,4323,1674],{"class":879},[401,4325,4326],{"class":883},"#aabbff",[401,4328,880],{"class":879},[401,4330,470],{"class":423},[401,4332,1674],{"class":879},[401,4334,4335],{"class":883},"#cccccc",[401,4337,880],{"class":879},[401,4339,4340],{"class":423},"][",[401,4342,4265],{"class":411},[401,4344,3515],{"class":423},[401,4346,4347,4350,4352,4355,4357,4359,4361,4363,4365,4368,4370,4372,4374,4377,4379,4382,4384,4387,4389,4391,4394,4396],{"class":403,"line":493},[401,4348,4349],{"class":411},"    ax",[401,4351,387],{"class":423},[401,4353,4354],{"class":717},"barh",[401,4356,721],{"class":423},[401,4358,725],{"class":724},[401,4360,470],{"class":423},[401,4362,1669],{"class":724},[401,4364,470],{"class":423},[401,4366,4367],{"class":890}," left",[401,4369,871],{"class":870},[401,4371,3765],{"class":717},[401,4373,470],{"class":423},[401,4375,4376],{"class":890}," color",[401,4378,871],{"class":870},[401,4380,4381],{"class":717},"color",[401,4383,470],{"class":423},[401,4385,4386],{"class":890}," edgecolor",[401,4388,871],{"class":870},[401,4390,880],{"class":879},[401,4392,4393],{"class":883},"white",[401,4395,880],{"class":879},[401,4397,594],{"class":423},[401,4399,4400,4402,4404,4407],{"class":403,"line":525},[401,4401,4349],{"class":411},[401,4403,387],{"class":423},[401,4405,4406],{"class":717},"text",[401,4408,973],{"class":423},[401,4410,4411,4414,4416,4418],{"class":403,"line":542},[401,4412,4413],{"class":717},"        k ",[401,4415,1970],{"class":870},[401,4417,2064],{"class":724},[401,4419,548],{"class":423},[401,4421,4422,4425],{"class":403,"line":551},[401,4423,4424],{"class":724},"        0",[401,4426,548],{"class":423},[401,4428,4429,4432,4434,4436,4438,4440],{"class":403,"line":559},[401,4430,4431],{"class":717},"        status_names",[401,4433,1263],{"class":423},[401,4435,4265],{"class":717},[401,4437,4340],{"class":423},[401,4439,725],{"class":724},[401,4441,1268],{"class":423},[401,4443,4444,4447,4449,4451,4454,4456],{"class":403,"line":567},[401,4445,4446],{"class":890},"        ha",[401,4448,871],{"class":870},[401,4450,880],{"class":879},[401,4452,4453],{"class":883},"center",[401,4455,880],{"class":879},[401,4457,548],{"class":423},[401,4459,4460,4463,4465,4467,4469,4471],{"class":403,"line":575},[401,4461,4462],{"class":890},"        va",[401,4464,871],{"class":870},[401,4466,880],{"class":879},[401,4468,4453],{"class":883},[401,4470,880],{"class":879},[401,4472,548],{"class":423},[401,4474,4475,4478,4480,4482],{"class":403,"line":583},[401,4476,4477],{"class":890},"        fontsize",[401,4479,871],{"class":870},[401,4481,2720],{"class":724},[401,4483,548],{"class":423},[401,4485,4486,4489,4491,4493,4496,4498],{"class":403,"line":591},[401,4487,4488],{"class":890},"        color",[401,4490,871],{"class":870},[401,4492,880],{"class":879},[401,4494,4495],{"class":883},"black",[401,4497,880],{"class":879},[401,4499,548],{"class":423},[401,4501,4502],{"class":403,"line":597},[401,4503,1273],{"class":423},[401,4505,4506,4508,4510,4512],{"class":403,"line":614},[401,4507,3560],{"class":407},[401,4509,4192],{"class":870},[401,4511,3563],{"class":411},[401,4513,3566],{"class":423},[401,4515,4516,4519,4521,4523],{"class":403,"line":630},[401,4517,4518],{"class":411},"        ax",[401,4520,387],{"class":423},[401,4522,4406],{"class":717},[401,4524,973],{"class":423},[401,4526,4527,4530,4532,4534,4536,4539,4542,4544,4546,4549,4551,4553,4556,4558,4560,4562,4564,4566,4569,4571,4573,4575,4577,4579,4582,4584,4587,4589,4591,4593,4595,4598],{"class":403,"line":638},[401,4528,4529],{"class":717},"            k ",[401,4531,1970],{"class":870},[401,4533,2064],{"class":724},[401,4535,470],{"class":423},[401,4537,4538],{"class":870}," -",[401,4540,4541],{"class":724},"0.6",[401,4543,470],{"class":423},[401,4545,1674],{"class":879},[401,4547,4548],{"class":883},"miss",[401,4550,880],{"class":879},[401,4552,470],{"class":423},[401,4554,4555],{"class":890}," ha",[401,4557,871],{"class":870},[401,4559,880],{"class":879},[401,4561,4453],{"class":883},[401,4563,880],{"class":879},[401,4565,470],{"class":423},[401,4567,4568],{"class":890}," va",[401,4570,871],{"class":870},[401,4572,880],{"class":879},[401,4574,4453],{"class":883},[401,4576,880],{"class":879},[401,4578,470],{"class":423},[401,4580,4581],{"class":890}," fontsize",[401,4583,871],{"class":870},[401,4585,4586],{"class":724},"7",[401,4588,470],{"class":423},[401,4590,4376],{"class":890},[401,4592,871],{"class":870},[401,4594,880],{"class":879},[401,4596,4597],{"class":883},"#aa0000",[401,4599,1764],{"class":879},[401,4601,4602],{"class":403,"line":646},[401,4603,3646],{"class":423},[401,4605,4606,4608,4610,4613],{"class":403,"line":654},[401,4607,1644],{"class":411},[401,4609,387],{"class":423},[401,4611,4612],{"class":717},"set_yticks",[401,4614,4615],{"class":423},"([])\n",[401,4617,4618,4620,4622,4625,4627,4630,4632,4635,4637,4639,4641,4643,4645],{"class":403,"line":662},[401,4619,1644],{"class":411},[401,4621,387],{"class":423},[401,4623,4624],{"class":717},"set_xticks",[401,4626,721],{"class":423},[401,4628,4629],{"class":1467},"range",[401,4631,721],{"class":423},[401,4633,4634],{"class":1467},"len",[401,4636,721],{"class":423},[401,4638,4054],{"class":717},[401,4640,1345],{"class":423},[401,4642,2049],{"class":870},[401,4644,1669],{"class":724},[401,4646,1591],{"class":423},[401,4648,4649,4651,4653,4656,4658,4660,4662,4665,4667,4669],{"class":403,"line":670},[401,4650,1644],{"class":411},[401,4652,387],{"class":423},[401,4654,4655],{"class":717},"set_xlim",[401,4657,721],{"class":423},[401,4659,725],{"class":724},[401,4661,470],{"class":423},[401,4663,4664],{"class":1467}," len",[401,4666,721],{"class":423},[401,4668,4054],{"class":717},[401,4670,1591],{"class":423},[401,4672,4673,4675,4677,4680,4682,4685,4687,4689,4692],{"class":403,"line":678},[401,4674,1644],{"class":411},[401,4676,387],{"class":423},[401,4678,4679],{"class":717},"set_ylim",[401,4681,721],{"class":423},[401,4683,4684],{"class":870},"-",[401,4686,1411],{"class":724},[401,4688,470],{"class":423},[401,4690,4691],{"class":724}," 1.5",[401,4693,594],{"class":423},[401,4695,4696,4698,4700,4702,4704,4706,4708,4710],{"class":403,"line":683},[401,4697,1644],{"class":411},[401,4699,387],{"class":423},[401,4701,1704],{"class":717},[401,4703,721],{"class":423},[401,4705,880],{"class":879},[401,4707,209],{"class":883},[401,4709,880],{"class":879},[401,4711,594],{"class":423},[401,4713,4714,4716,4718,4720],{"class":403,"line":704},[401,4715,1644],{"class":411},[401,4717,387],{"class":423},[401,4719,1744],{"class":717},[401,4721,973],{"class":423},[401,4723,4724,4726,4729,4731,4734],{"class":403,"line":709},[401,4725,1751],{"class":879},[401,4727,4728],{"class":883},"Lifecycle: T=Tentative, A=Active, L=Lost, R=Removed",[401,4730,1758],{"class":1757},[401,4732,4733],{"class":883},"(min_hits=2, max_age=3, allow_reid=2)",[401,4735,1764],{"class":879},[401,4737,4738],{"class":403,"line":1455},[401,4739,594],{"class":423},[401,4741,4742],{"class":403,"line":1477},[401,4743,440],{"emptyLinePlaceholder":439},[401,4745,4746,4748,4750,4752,4755,4757],{"class":403,"line":1499},[401,4747,454],{"class":407},[401,4749,420],{"class":411},[401,4751,387],{"class":423},[401,4753,4754],{"class":411},"patches ",[401,4756,408],{"class":407},[401,4758,4759],{"class":411}," Patch\n",[401,4761,4762],{"class":403,"line":1529},[401,4763,440],{"emptyLinePlaceholder":439},[401,4765,4766,4769,4771],{"class":403,"line":1550},[401,4767,4768],{"class":411},"legend ",[401,4770,871],{"class":870},[401,4772,4773],{"class":423}," [\n",[401,4775,4776,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803],{"class":403,"line":1567},[401,4777,4778],{"class":717},"    Patch",[401,4780,721],{"class":423},[401,4782,4381],{"class":890},[401,4784,871],{"class":870},[401,4786,880],{"class":879},[401,4788,4308],{"class":883},[401,4790,880],{"class":879},[401,4792,470],{"class":423},[401,4794,1684],{"class":890},[401,4796,871],{"class":870},[401,4798,880],{"class":879},[401,4800,3087],{"class":883},[401,4802,880],{"class":879},[401,4804,1010],{"class":423},[401,4806,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":403,"line":2456},[401,4808,4778],{"class":717},[401,4810,721],{"class":423},[401,4812,4381],{"class":890},[401,4814,871],{"class":870},[401,4816,880],{"class":879},[401,4818,4317],{"class":883},[401,4820,880],{"class":879},[401,4822,470],{"class":423},[401,4824,1684],{"class":890},[401,4826,871],{"class":870},[401,4828,880],{"class":879},[401,4830,1039],{"class":883},[401,4832,880],{"class":879},[401,4834,1010],{"class":423},[401,4836,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863],{"class":403,"line":2476},[401,4838,4778],{"class":717},[401,4840,721],{"class":423},[401,4842,4381],{"class":890},[401,4844,871],{"class":870},[401,4846,880],{"class":879},[401,4848,4326],{"class":883},[401,4850,880],{"class":879},[401,4852,470],{"class":423},[401,4854,1684],{"class":890},[401,4856,871],{"class":870},[401,4858,880],{"class":879},[401,4860,3113],{"class":883},[401,4862,880],{"class":879},[401,4864,1010],{"class":423},[401,4866,4867,4869,4871,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893],{"class":403,"line":2481},[401,4868,4778],{"class":717},[401,4870,721],{"class":423},[401,4872,4381],{"class":890},[401,4874,871],{"class":870},[401,4876,880],{"class":879},[401,4878,4335],{"class":883},[401,4880,880],{"class":879},[401,4882,470],{"class":423},[401,4884,1684],{"class":890},[401,4886,871],{"class":870},[401,4888,880],{"class":879},[401,4890,3102],{"class":883},[401,4892,880],{"class":879},[401,4894,1010],{"class":423},[401,4896,4897],{"class":403,"line":2527},[401,4898,3515],{"class":423},[401,4900,4901,4903,4905,4907,4909,4912,4914,4916,4918,4921,4923,4925,4928,4930,4932,4934,4936,4938],{"class":403,"line":2580},[401,4902,1644],{"class":411},[401,4904,387],{"class":423},[401,4906,2710],{"class":717},[401,4908,721],{"class":423},[401,4910,4911],{"class":890},"handles",[401,4913,871],{"class":870},[401,4915,2710],{"class":717},[401,4917,470],{"class":423},[401,4919,4920],{"class":890}," loc",[401,4922,871],{"class":870},[401,4924,880],{"class":879},[401,4926,4927],{"class":883},"upper right",[401,4929,880],{"class":879},[401,4931,470],{"class":423},[401,4933,4581],{"class":890},[401,4935,871],{"class":870},[401,4937,2720],{"class":724},[401,4939,594],{"class":423},[401,4941,4942,4944,4946,4948],{"class":403,"line":2596},[401,4943,1794],{"class":411},[401,4945,387],{"class":423},[401,4947,3051],{"class":717},[401,4949,1802],{"class":423},[401,4951,4952,4954,4956,4958],{"class":403,"line":2607},[401,4953,1794],{"class":411},[401,4955,387],{"class":423},[401,4957,1799],{"class":717},[401,4959,1802],{"class":423},[338,4961,4962],{},[1806,4963],{"alt":397,"src":4964},"\u002F_nb\u002F09a7498c28468978.png",[338,4966,4967],{},"Reading the timeline:",[799,4969,4970,4973,4980,4990],{},[350,4971,4972],{},"Frames 0–1: Tentative. The tracklet is being established.",[350,4974,4975,4976,4979],{},"Frame 2 onwards: Active (",[358,4977,4978],{},"hits >= 2",").",[350,4981,4982,4983,4985,4986,4989],{},"Frames 4–7: detection misses. ",[358,4984,3969],{}," grows.\nWhen it exceeds ",[358,4987,4988],{},"max_age=3"," the tracklet transitions to Lost.",[350,4991,4992],{},"Frames 8 onwards: detection re-appears, the Lost tracklet\nre-acquires the same identity and goes back to Active.",[734,4994,4996],{"id":4995},"visibility-what-does-the-caller-see","Visibility — what does the caller see?",[338,4998,4999,5000,3228],{},"Three policies decide which IDs are visible to the caller of\n",[358,5001,5002],{},"Tracker.step",[799,5004,5005,5011,5017],{},[350,5006,5007,5010],{},[358,5008,5009],{},"ConfirmedOnly",": only Active tracklets that matched this frame.",[350,5012,5013,5016],{},[358,5014,5015],{},"IncludeTentative",": also expose Tentative IDs.",[350,5018,5019,5021],{},[358,5020,3386],{},": every live tracklet.",[338,5023,5024,5025,5027],{},"Most production trackers use ",[358,5026,5009],{}," to suppress\nflicker from unconfirmed detections.",[734,5029,5031],{"id":5030},"whats-next","What's next",[338,5033,5034,5035,5037],{},"Notebook ",[353,5036,1632],{}," assembles everything you've seen — costs,\ngates, combinators, states, lifecycle — into a K=2 cascaded\ncanonical configuration, runs it on a synthetic\nclip with known ground truth, and visualizes the resulting\nID assignments.",[5039,5040,5041],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--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);}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":397,"searchDepth":436,"depth":436,"links":5043},[5044,5045,5046,5047,5048],{"id":736,"depth":415,"text":737},{"id":842,"depth":415,"text":843},{"id":3072,"depth":415,"text":3073},{"id":4995,"depth":415,"text":4996},{"id":5030,"depth":415,"text":5031},"Two pieces let unitrack maintain coherent identities across\ntime, even when detections are noisy or missing for a few frames:","md",{"notebook":439},{"icon":63},{"title":111,"description":5049},"MU6IKvmhSwHERTEtgPWcmC-It6voAGcoQ7QiCZzcnqc",{},1785139889742]