[{"data":1,"prerenderedAt":3058},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fembedding_filters\u002Fvmf_directional":328,"docyard:crossref-index":3057},[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":69,"body":330,"description":3051,"extension":3052,"meta":3053,"navigation":3054,"path":70,"seo":3055,"stem":71,"__hash__":3056},"content\u002F5.notebooks\u002Fembedding_filters\u002F3.vmf_directional.md",{"type":331,"value":332,"toc":3048},"minimark",[333,337,355,371,1755,1760,1989,2742,2748,2751,2756,2764,3023,3028,3031,3044],[334,335,69],"h1",{"id":336},"embedding-filters-3-von-mises-fisher-directional",[338,339,340,341,345,346,350,351,354],"p",{},"ReID embeddings are compared by cosine similarity, so they really\nlive on the unit ",[342,343,344],"strong",{},"sphere",", not in flat space — a Euclidean Kalman\nfilter is the wrong geometry. The von Mises-Fisher distribution is\nthe sphere's Gaussian: a mean direction ",[347,348,349],"code",{},"mu"," (unit) and a\nconcentration ",[347,352,353],{},"kappa"," (certainty). Its mean direction has a conjugate\nvMF prior, so fusing an observation is an exact, closed-form update —\nthe resultant of the concentration-weighted directions.",[338,356,357,360,361,363,364,367,368,370],{},[347,358,359],{},"vmf_state_entries"," wires this up: match on ",[347,362,349],{}," with the ordinary\n",[347,365,366],{},"Cosine"," cost, and read ",[347,369,353],{}," as a live confidence.",[372,373,378],"pre",{"className":374,"code":375,"language":376,"meta":377,"style":377},"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\nfrom unitrack.lifecycle import IncludeAll, NoLifecycle\nfrom unitrack.pipeline import Pipe\n\ntorch.manual_seed(0)\n\nD = 16          # embedding dimensionality (256+ in practice; 16 plots fast)\nT = 44          # frames\n\ndef make_clip(noise=0.15, seed=0, switch=None):\n    \"\"\"\n    A unit embedding that rotates slowly in the (e0, e1) plane plus\n    per-frame noise in all D dims. Rotating in a known plane means\n    projecting onto dims (0, 1) shows the true path as a circle arc.\n    `switch` optionally rotates the plane mid-clip (an appearance change).\n    \"\"\"\n    g = torch.Generator().manual_seed(seed)\n    t = torch.arange(T).float()\n    theta = 0.10 * t\n    truth = torch.zeros(T, D)\n    truth[:, 0] = torch.cos(theta)\n    truth[:, 1] = torch.sin(theta)\n    if switch is not None:\n        # after `switch`, swap appearance into the (e2, e3) plane.\n        truth[switch:, :] = 0.0\n        truth[switch:, 2] = torch.cos(theta[switch:])\n        truth[switch:, 3] = torch.sin(theta[switch:])\n    obs = truth + noise * torch.randn(T, D, generator=g)\n    obs = torch.nn.functional.normalize(obs, dim=-1)\n    dets = [Detections(index=torch.tensor([0]), emb=obs[k:k + 1].clone(),\n                       batch_size=[1]) for k in range(T)]\n    return t, truth, obs, dets\n\ndef run(tracker, dets, fields=(\"emb\",)):\n    \"\"\"Run a single-object clip through a real Tracker; collect snapshot fields.\"\"\"\n    ms = unitrack.MultiStream(tracker)\n    rec = {f: [] for f in fields}\n    for k, d in enumerate(dets):\n        ctx = FrameContext.make(frame_idx=k, delta=1.0, fps=1.0, stream_key=0)\n        res = ms.step(stream_key=0, detections=d, ctx=ctx)\n        for f in fields:\n            rec[f].append(getattr(res.snapshot, f)[0].clone())\n    return {f: torch.stack(v) for f, v in rec.items()}\n\ndef cos_to_truth(est, truth):\n    e = torch.nn.functional.normalize(est, dim=-1)\n    u = torch.nn.functional.normalize(truth, dim=-1)\n    return (e * u).sum(-1)\n\nt, truth, obs, dets = make_clip()\nprint(f\"clip: {T} frames, D={D}; raw-detection mean cosine-to-truth \"\n      f\"= {cos_to_truth(obs, truth).mean():.3f}\")\n\n","python","",[347,379,380,393,415,422,430,455,472,499,521,538,543,565,570,587,601,606,651,658,665,671,677,683,688,716,745,762,788,820,847,868,874,897,932,966,1014,1056,1122,1157,1181,1186,1225,1237,1258,1289,1315,1369,1416,1430,1477,1525,1530,1549,1585,1622,1652,1657,1682,1716],{"__ignoreMap":377},[381,382,385,389],"span",{"class":383,"line":384},"line",1,[381,386,388],{"class":387},"sVHd0","import",[381,390,392],{"class":391},"su5hD"," torch\n",[381,394,396,398,401,405,409,412],{"class":383,"line":395},2,[381,397,388],{"class":387},[381,399,400],{"class":391}," matplotlib",[381,402,404],{"class":403},"sP7_E",".",[381,406,408],{"class":407},"skxfh","pyplot",[381,410,411],{"class":387}," as",[381,413,414],{"class":391}," plt\n",[381,416,418],{"class":383,"line":417},3,[381,419,421],{"emptyLinePlaceholder":420},true,"\n",[381,423,425,427],{"class":383,"line":424},4,[381,426,388],{"class":387},[381,428,429],{"class":391}," unitrack\n",[381,431,433,436,439,441,444,446,449,452],{"class":383,"line":432},5,[381,434,435],{"class":387},"from",[381,437,438],{"class":391}," unitrack",[381,440,404],{"class":403},[381,442,443],{"class":391},"assignment ",[381,445,388],{"class":387},[381,447,448],{"class":391}," Associate",[381,450,451],{"class":403},",",[381,453,454],{"class":391}," Jonker\n",[381,456,458,460,462,464,467,469],{"class":383,"line":457},6,[381,459,435],{"class":387},[381,461,438],{"class":391},[381,463,404],{"class":403},[381,465,466],{"class":391},"costs ",[381,468,388],{"class":387},[381,470,471],{"class":391}," Cosine\n",[381,473,475,477,479,481,484,486,489,491,494,496],{"class":383,"line":474},7,[381,476,435],{"class":387},[381,478,438],{"class":391},[381,480,404],{"class":403},[381,482,483],{"class":391},"data ",[381,485,388],{"class":387},[381,487,488],{"class":391}," Detections",[381,490,451],{"class":403},[381,492,493],{"class":391}," FrameContext",[381,495,451],{"class":403},[381,497,498],{"class":391}," TensorSpec\n",[381,500,502,504,506,508,511,513,516,518],{"class":383,"line":501},8,[381,503,435],{"class":387},[381,505,438],{"class":391},[381,507,404],{"class":403},[381,509,510],{"class":391},"lifecycle ",[381,512,388],{"class":387},[381,514,515],{"class":391}," IncludeAll",[381,517,451],{"class":403},[381,519,520],{"class":391}," NoLifecycle\n",[381,522,524,526,528,530,533,535],{"class":383,"line":523},9,[381,525,435],{"class":387},[381,527,438],{"class":391},[381,529,404],{"class":403},[381,531,532],{"class":391},"pipeline ",[381,534,388],{"class":387},[381,536,537],{"class":391}," Pipe\n",[381,539,541],{"class":383,"line":540},10,[381,542,421],{"emptyLinePlaceholder":420},[381,544,546,549,551,555,558,562],{"class":383,"line":545},11,[381,547,548],{"class":391},"torch",[381,550,404],{"class":403},[381,552,554],{"class":553},"slqww","manual_seed",[381,556,557],{"class":403},"(",[381,559,561],{"class":560},"srdBf","0",[381,563,564],{"class":403},")\n",[381,566,568],{"class":383,"line":567},12,[381,569,421],{"emptyLinePlaceholder":420},[381,571,573,576,580,583],{"class":383,"line":572},13,[381,574,575],{"class":391},"D ",[381,577,579],{"class":578},"smGrS","=",[381,581,582],{"class":560}," 16",[381,584,586],{"class":585},"sutJx","          # embedding dimensionality (256+ in practice; 16 plots fast)\n",[381,588,590,593,595,598],{"class":383,"line":589},14,[381,591,592],{"class":391},"T ",[381,594,579],{"class":578},[381,596,597],{"class":560}," 44",[381,599,600],{"class":585},"          # frames\n",[381,602,604],{"class":383,"line":603},15,[381,605,421],{"emptyLinePlaceholder":420},[381,607,609,613,617,619,623,625,628,630,633,635,637,639,642,644,648],{"class":383,"line":608},16,[381,610,612],{"class":611},"sbsja","def",[381,614,616],{"class":615},"sGLFI"," make_clip",[381,618,557],{"class":403},[381,620,622],{"class":621},"sFwrP","noise",[381,624,579],{"class":578},[381,626,627],{"class":560},"0.15",[381,629,451],{"class":403},[381,631,632],{"class":621}," seed",[381,634,579],{"class":578},[381,636,561],{"class":560},[381,638,451],{"class":403},[381,640,641],{"class":621}," switch",[381,643,579],{"class":578},[381,645,647],{"class":646},"s39Yj","None",[381,649,650],{"class":403},"):\n",[381,652,654],{"class":383,"line":653},17,[381,655,657],{"class":656},"s2W-s","    \"\"\"\n",[381,659,661],{"class":383,"line":660},18,[381,662,664],{"class":663},"sithA","    A unit embedding that rotates slowly in the (e0, e1) plane plus\n",[381,666,668],{"class":383,"line":667},19,[381,669,670],{"class":663},"    per-frame noise in all D dims. Rotating in a known plane means\n",[381,672,674],{"class":383,"line":673},20,[381,675,676],{"class":663},"    projecting onto dims (0, 1) shows the true path as a circle arc.\n",[381,678,680],{"class":383,"line":679},21,[381,681,682],{"class":663},"    `switch` optionally rotates the plane mid-clip (an appearance change).\n",[381,684,686],{"class":383,"line":685},22,[381,687,657],{"class":656},[381,689,691,694,696,699,701,704,707,709,711,714],{"class":383,"line":690},23,[381,692,693],{"class":391},"    g ",[381,695,579],{"class":578},[381,697,698],{"class":391}," torch",[381,700,404],{"class":403},[381,702,703],{"class":553},"Generator",[381,705,706],{"class":403},"().",[381,708,554],{"class":553},[381,710,557],{"class":403},[381,712,713],{"class":553},"seed",[381,715,564],{"class":403},[381,717,719,722,724,726,728,731,733,736,739,742],{"class":383,"line":718},24,[381,720,721],{"class":391},"    t ",[381,723,579],{"class":578},[381,725,698],{"class":391},[381,727,404],{"class":403},[381,729,730],{"class":553},"arange",[381,732,557],{"class":403},[381,734,735],{"class":553},"T",[381,737,738],{"class":403},").",[381,740,741],{"class":553},"float",[381,743,744],{"class":403},"()\n",[381,746,748,751,753,756,759],{"class":383,"line":747},25,[381,749,750],{"class":391},"    theta ",[381,752,579],{"class":578},[381,754,755],{"class":560}," 0.10",[381,757,758],{"class":578}," *",[381,760,761],{"class":391}," t\n",[381,763,765,768,770,772,774,777,779,781,783,786],{"class":383,"line":764},26,[381,766,767],{"class":391},"    truth ",[381,769,579],{"class":578},[381,771,698],{"class":391},[381,773,404],{"class":403},[381,775,776],{"class":553},"zeros",[381,778,557],{"class":403},[381,780,735],{"class":553},[381,782,451],{"class":403},[381,784,785],{"class":553}," D",[381,787,564],{"class":403},[381,789,791,794,797,800,803,806,808,810,813,815,818],{"class":383,"line":790},27,[381,792,793],{"class":391},"    truth",[381,795,796],{"class":403},"[:,",[381,798,799],{"class":560}," 0",[381,801,802],{"class":403},"]",[381,804,805],{"class":578}," =",[381,807,698],{"class":391},[381,809,404],{"class":403},[381,811,812],{"class":553},"cos",[381,814,557],{"class":403},[381,816,817],{"class":553},"theta",[381,819,564],{"class":403},[381,821,823,825,827,830,832,834,836,838,841,843,845],{"class":383,"line":822},28,[381,824,793],{"class":391},[381,826,796],{"class":403},[381,828,829],{"class":560}," 1",[381,831,802],{"class":403},[381,833,805],{"class":578},[381,835,698],{"class":391},[381,837,404],{"class":403},[381,839,840],{"class":553},"sin",[381,842,557],{"class":403},[381,844,817],{"class":553},[381,846,564],{"class":403},[381,848,850,853,856,859,862,865],{"class":383,"line":849},29,[381,851,852],{"class":387},"    if",[381,854,855],{"class":391}," switch ",[381,857,858],{"class":578},"is",[381,860,861],{"class":578}," not",[381,863,864],{"class":646}," None",[381,866,867],{"class":403},":\n",[381,869,871],{"class":383,"line":870},30,[381,872,873],{"class":585},"        # after `switch`, swap appearance into the (e2, e3) plane.\n",[381,875,877,880,883,886,889,892,894],{"class":383,"line":876},31,[381,878,879],{"class":391},"        truth",[381,881,882],{"class":403},"[",[381,884,885],{"class":391},"switch",[381,887,888],{"class":403},":,",[381,890,891],{"class":403}," :]",[381,893,805],{"class":578},[381,895,896],{"class":560}," 0.0\n",[381,898,900,902,904,906,908,911,913,915,917,919,921,923,925,927,929],{"class":383,"line":899},32,[381,901,879],{"class":391},[381,903,882],{"class":403},[381,905,885],{"class":391},[381,907,888],{"class":403},[381,909,910],{"class":560}," 2",[381,912,802],{"class":403},[381,914,805],{"class":578},[381,916,698],{"class":391},[381,918,404],{"class":403},[381,920,812],{"class":553},[381,922,557],{"class":403},[381,924,817],{"class":553},[381,926,882],{"class":403},[381,928,885],{"class":553},[381,930,931],{"class":403},":])\n",[381,933,935,937,939,941,943,946,948,950,952,954,956,958,960,962,964],{"class":383,"line":934},33,[381,936,879],{"class":391},[381,938,882],{"class":403},[381,940,885],{"class":391},[381,942,888],{"class":403},[381,944,945],{"class":560}," 3",[381,947,802],{"class":403},[381,949,805],{"class":578},[381,951,698],{"class":391},[381,953,404],{"class":403},[381,955,840],{"class":553},[381,957,557],{"class":403},[381,959,817],{"class":553},[381,961,882],{"class":403},[381,963,885],{"class":553},[381,965,931],{"class":403},[381,967,969,972,974,977,980,983,986,988,990,993,995,997,999,1001,1003,1007,1009,1012],{"class":383,"line":968},34,[381,970,971],{"class":391},"    obs ",[381,973,579],{"class":578},[381,975,976],{"class":391}," truth ",[381,978,979],{"class":578},"+",[381,981,982],{"class":391}," noise ",[381,984,985],{"class":578},"*",[381,987,698],{"class":391},[381,989,404],{"class":403},[381,991,992],{"class":553},"randn",[381,994,557],{"class":403},[381,996,735],{"class":553},[381,998,451],{"class":403},[381,1000,785],{"class":553},[381,1002,451],{"class":403},[381,1004,1006],{"class":1005},"s99_P"," generator",[381,1008,579],{"class":578},[381,1010,1011],{"class":553},"g",[381,1013,564],{"class":403},[381,1015,1017,1019,1021,1023,1025,1028,1030,1033,1035,1038,1040,1043,1045,1048,1051,1054],{"class":383,"line":1016},35,[381,1018,971],{"class":391},[381,1020,579],{"class":578},[381,1022,698],{"class":391},[381,1024,404],{"class":403},[381,1026,1027],{"class":407},"nn",[381,1029,404],{"class":403},[381,1031,1032],{"class":407},"functional",[381,1034,404],{"class":403},[381,1036,1037],{"class":553},"normalize",[381,1039,557],{"class":403},[381,1041,1042],{"class":553},"obs",[381,1044,451],{"class":403},[381,1046,1047],{"class":1005}," dim",[381,1049,1050],{"class":578},"=-",[381,1052,1053],{"class":560},"1",[381,1055,564],{"class":403},[381,1057,1059,1062,1064,1067,1070,1072,1074,1076,1078,1080,1083,1086,1088,1091,1094,1096,1098,1100,1103,1106,1109,1111,1113,1116,1119],{"class":383,"line":1058},36,[381,1060,1061],{"class":391},"    dets ",[381,1063,579],{"class":578},[381,1065,1066],{"class":403}," [",[381,1068,1069],{"class":553},"Detections",[381,1071,557],{"class":403},[381,1073,125],{"class":1005},[381,1075,579],{"class":578},[381,1077,548],{"class":553},[381,1079,404],{"class":403},[381,1081,1082],{"class":553},"tensor",[381,1084,1085],{"class":403},"([",[381,1087,561],{"class":560},[381,1089,1090],{"class":403},"]),",[381,1092,1093],{"class":1005}," emb",[381,1095,579],{"class":578},[381,1097,1042],{"class":553},[381,1099,882],{"class":403},[381,1101,1102],{"class":553},"k",[381,1104,1105],{"class":403},":",[381,1107,1108],{"class":553},"k ",[381,1110,979],{"class":578},[381,1112,829],{"class":560},[381,1114,1115],{"class":403},"].",[381,1117,1118],{"class":553},"clone",[381,1120,1121],{"class":403},"(),\n",[381,1123,1125,1128,1130,1132,1134,1137,1140,1143,1146,1150,1152,1154],{"class":383,"line":1124},37,[381,1126,1127],{"class":1005},"                       batch_size",[381,1129,579],{"class":578},[381,1131,882],{"class":403},[381,1133,1053],{"class":560},[381,1135,1136],{"class":403},"])",[381,1138,1139],{"class":387}," for",[381,1141,1142],{"class":391}," k ",[381,1144,1145],{"class":387},"in",[381,1147,1149],{"class":1148},"sptTA"," range",[381,1151,557],{"class":403},[381,1153,735],{"class":553},[381,1155,1156],{"class":403},")]\n",[381,1158,1160,1163,1166,1168,1171,1173,1176,1178],{"class":383,"line":1159},38,[381,1161,1162],{"class":387},"    return",[381,1164,1165],{"class":391}," t",[381,1167,451],{"class":403},[381,1169,1170],{"class":391}," truth",[381,1172,451],{"class":403},[381,1174,1175],{"class":391}," obs",[381,1177,451],{"class":403},[381,1179,1180],{"class":391}," dets\n",[381,1182,1184],{"class":383,"line":1183},39,[381,1185,421],{"emptyLinePlaceholder":420},[381,1187,1189,1191,1194,1196,1198,1200,1203,1205,1208,1210,1212,1216,1220,1222],{"class":383,"line":1188},40,[381,1190,612],{"class":611},[381,1192,1193],{"class":615}," run",[381,1195,557],{"class":403},[381,1197,173],{"class":621},[381,1199,451],{"class":403},[381,1201,1202],{"class":621}," dets",[381,1204,451],{"class":403},[381,1206,1207],{"class":621}," fields",[381,1209,579],{"class":578},[381,1211,557],{"class":403},[381,1213,1215],{"class":1214},"sjJ54","\"",[381,1217,1219],{"class":1218},"s_sjI","emb",[381,1221,1215],{"class":1214},[381,1223,1224],{"class":403},",)):\n",[381,1226,1228,1231,1234],{"class":383,"line":1227},41,[381,1229,1230],{"class":656},"    \"\"\"",[381,1232,1233],{"class":663},"Run a single-object clip through a real Tracker; collect snapshot fields.",[381,1235,1236],{"class":656},"\"\"\"\n",[381,1238,1240,1243,1245,1247,1249,1252,1254,1256],{"class":383,"line":1239},42,[381,1241,1242],{"class":391},"    ms ",[381,1244,579],{"class":578},[381,1246,438],{"class":391},[381,1248,404],{"class":403},[381,1250,1251],{"class":553},"MultiStream",[381,1253,557],{"class":403},[381,1255,173],{"class":553},[381,1257,564],{"class":403},[381,1259,1261,1264,1266,1269,1272,1274,1277,1279,1282,1284,1286],{"class":383,"line":1260},43,[381,1262,1263],{"class":391},"    rec ",[381,1265,579],{"class":578},[381,1267,1268],{"class":403}," {",[381,1270,1271],{"class":391},"f",[381,1273,1105],{"class":403},[381,1275,1276],{"class":403}," []",[381,1278,1139],{"class":387},[381,1280,1281],{"class":391}," f ",[381,1283,1145],{"class":387},[381,1285,1207],{"class":391},[381,1287,1288],{"class":403},"}\n",[381,1290,1292,1295,1298,1300,1303,1305,1308,1310,1313],{"class":383,"line":1291},44,[381,1293,1294],{"class":387},"    for",[381,1296,1297],{"class":391}," k",[381,1299,451],{"class":403},[381,1301,1302],{"class":391}," d ",[381,1304,1145],{"class":387},[381,1306,1307],{"class":1148}," enumerate",[381,1309,557],{"class":403},[381,1311,1312],{"class":553},"dets",[381,1314,650],{"class":403},[381,1316,1318,1321,1323,1325,1327,1330,1332,1335,1337,1339,1341,1344,1346,1349,1351,1354,1356,1358,1360,1363,1365,1367],{"class":383,"line":1317},45,[381,1319,1320],{"class":391},"        ctx ",[381,1322,579],{"class":578},[381,1324,493],{"class":391},[381,1326,404],{"class":403},[381,1328,1329],{"class":553},"make",[381,1331,557],{"class":403},[381,1333,1334],{"class":1005},"frame_idx",[381,1336,579],{"class":578},[381,1338,1102],{"class":553},[381,1340,451],{"class":403},[381,1342,1343],{"class":1005}," delta",[381,1345,579],{"class":578},[381,1347,1348],{"class":560},"1.0",[381,1350,451],{"class":403},[381,1352,1353],{"class":1005}," fps",[381,1355,579],{"class":578},[381,1357,1348],{"class":560},[381,1359,451],{"class":403},[381,1361,1362],{"class":1005}," stream_key",[381,1364,579],{"class":578},[381,1366,561],{"class":560},[381,1368,564],{"class":403},[381,1370,1372,1375,1377,1380,1382,1385,1387,1390,1392,1394,1396,1399,1401,1404,1406,1409,1411,1414],{"class":383,"line":1371},46,[381,1373,1374],{"class":391},"        res ",[381,1376,579],{"class":578},[381,1378,1379],{"class":391}," ms",[381,1381,404],{"class":403},[381,1383,1384],{"class":553},"step",[381,1386,557],{"class":403},[381,1388,1389],{"class":1005},"stream_key",[381,1391,579],{"class":578},[381,1393,561],{"class":560},[381,1395,451],{"class":403},[381,1397,1398],{"class":1005}," detections",[381,1400,579],{"class":578},[381,1402,1403],{"class":553},"d",[381,1405,451],{"class":403},[381,1407,1408],{"class":1005}," ctx",[381,1410,579],{"class":578},[381,1412,1413],{"class":553},"ctx",[381,1415,564],{"class":403},[381,1417,1419,1422,1424,1426,1428],{"class":383,"line":1418},47,[381,1420,1421],{"class":387},"        for",[381,1423,1281],{"class":391},[381,1425,1145],{"class":387},[381,1427,1207],{"class":391},[381,1429,867],{"class":403},[381,1431,1433,1436,1438,1440,1442,1445,1447,1450,1452,1455,1457,1460,1462,1465,1468,1470,1472,1474],{"class":383,"line":1432},48,[381,1434,1435],{"class":391},"            rec",[381,1437,882],{"class":403},[381,1439,1271],{"class":391},[381,1441,1115],{"class":403},[381,1443,1444],{"class":553},"append",[381,1446,557],{"class":403},[381,1448,1449],{"class":1148},"getattr",[381,1451,557],{"class":403},[381,1453,1454],{"class":553},"res",[381,1456,404],{"class":403},[381,1458,1459],{"class":407},"snapshot",[381,1461,451],{"class":403},[381,1463,1464],{"class":553}," f",[381,1466,1467],{"class":403},")[",[381,1469,561],{"class":560},[381,1471,1115],{"class":403},[381,1473,1118],{"class":553},[381,1475,1476],{"class":403},"())\n",[381,1478,1480,1482,1484,1486,1488,1490,1492,1495,1497,1500,1503,1505,1507,1509,1512,1514,1517,1519,1522],{"class":383,"line":1479},49,[381,1481,1162],{"class":387},[381,1483,1268],{"class":403},[381,1485,1271],{"class":391},[381,1487,1105],{"class":403},[381,1489,698],{"class":391},[381,1491,404],{"class":403},[381,1493,1494],{"class":553},"stack",[381,1496,557],{"class":403},[381,1498,1499],{"class":553},"v",[381,1501,1502],{"class":403},")",[381,1504,1139],{"class":387},[381,1506,1464],{"class":391},[381,1508,451],{"class":403},[381,1510,1511],{"class":391}," v ",[381,1513,1145],{"class":387},[381,1515,1516],{"class":391}," rec",[381,1518,404],{"class":403},[381,1520,1521],{"class":553},"items",[381,1523,1524],{"class":403},"()}\n",[381,1526,1528],{"class":383,"line":1527},50,[381,1529,421],{"emptyLinePlaceholder":420},[381,1531,1533,1535,1538,1540,1543,1545,1547],{"class":383,"line":1532},51,[381,1534,612],{"class":611},[381,1536,1537],{"class":615}," cos_to_truth",[381,1539,557],{"class":403},[381,1541,1542],{"class":621},"est",[381,1544,451],{"class":403},[381,1546,1170],{"class":621},[381,1548,650],{"class":403},[381,1550,1552,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583],{"class":383,"line":1551},52,[381,1553,1554],{"class":391},"    e ",[381,1556,579],{"class":578},[381,1558,698],{"class":391},[381,1560,404],{"class":403},[381,1562,1027],{"class":407},[381,1564,404],{"class":403},[381,1566,1032],{"class":407},[381,1568,404],{"class":403},[381,1570,1037],{"class":553},[381,1572,557],{"class":403},[381,1574,1542],{"class":553},[381,1576,451],{"class":403},[381,1578,1047],{"class":1005},[381,1580,1050],{"class":578},[381,1582,1053],{"class":560},[381,1584,564],{"class":403},[381,1586,1588,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1612,1614,1616,1618,1620],{"class":383,"line":1587},53,[381,1589,1590],{"class":391},"    u ",[381,1592,579],{"class":578},[381,1594,698],{"class":391},[381,1596,404],{"class":403},[381,1598,1027],{"class":407},[381,1600,404],{"class":403},[381,1602,1032],{"class":407},[381,1604,404],{"class":403},[381,1606,1037],{"class":553},[381,1608,557],{"class":403},[381,1610,1611],{"class":553},"truth",[381,1613,451],{"class":403},[381,1615,1047],{"class":1005},[381,1617,1050],{"class":578},[381,1619,1053],{"class":560},[381,1621,564],{"class":403},[381,1623,1625,1627,1630,1633,1635,1638,1640,1643,1645,1648,1650],{"class":383,"line":1624},54,[381,1626,1162],{"class":387},[381,1628,1629],{"class":403}," (",[381,1631,1632],{"class":391},"e ",[381,1634,985],{"class":578},[381,1636,1637],{"class":391}," u",[381,1639,738],{"class":403},[381,1641,1642],{"class":553},"sum",[381,1644,557],{"class":403},[381,1646,1647],{"class":578},"-",[381,1649,1053],{"class":560},[381,1651,564],{"class":403},[381,1653,1655],{"class":383,"line":1654},55,[381,1656,421],{"emptyLinePlaceholder":420},[381,1658,1660,1663,1665,1667,1669,1671,1673,1676,1678,1680],{"class":383,"line":1659},56,[381,1661,1662],{"class":391},"t",[381,1664,451],{"class":403},[381,1666,1170],{"class":391},[381,1668,451],{"class":403},[381,1670,1175],{"class":391},[381,1672,451],{"class":403},[381,1674,1675],{"class":391}," dets ",[381,1677,579],{"class":578},[381,1679,616],{"class":553},[381,1681,744],{"class":403},[381,1683,1685,1688,1690,1692,1695,1698,1700,1703,1706,1708,1711,1713],{"class":383,"line":1684},57,[381,1686,1687],{"class":1148},"print",[381,1689,557],{"class":403},[381,1691,1271],{"class":611},[381,1693,1694],{"class":1218},"\"clip: ",[381,1696,1697],{"class":560},"{",[381,1699,735],{"class":553},[381,1701,1702],{"class":560},"}",[381,1704,1705],{"class":1218}," frames, D=",[381,1707,1697],{"class":560},[381,1709,1710],{"class":553},"D",[381,1712,1702],{"class":560},[381,1714,1715],{"class":1218},"; raw-detection mean cosine-to-truth \"\n",[381,1717,1719,1722,1725,1727,1730,1732,1734,1736,1738,1740,1743,1746,1749,1751,1753],{"class":383,"line":1718},58,[381,1720,1721],{"class":611},"      f",[381,1723,1724],{"class":1218},"\"= ",[381,1726,1697],{"class":560},[381,1728,1729],{"class":553},"cos_to_truth",[381,1731,557],{"class":403},[381,1733,1042],{"class":553},[381,1735,451],{"class":403},[381,1737,1170],{"class":553},[381,1739,738],{"class":403},[381,1741,1742],{"class":553},"mean",[381,1744,1745],{"class":403},"()",[381,1747,1748],{"class":611},":.3f",[381,1750,1702],{"class":560},[381,1752,1215],{"class":1218},[381,1754,564],{"class":403},[1756,1757],"docyard-notebook-output",{"data":1758,"kind":1759},"Y2xpcDogNDQgZnJhbWVzLCBEPTE2OyByYXctZGV0ZWN0aW9uIG1lYW4gY29zaW5lLXRvLXRydXRoID0gMC44NTUK","stream",[372,1761,1763],{"className":374,"code":1762,"language":376,"meta":377,"style":377},"from unitrack.states import vmf_state_entries\n\ntracker = unitrack.Tracker(\n    root=Pipe(cost=Cosine(\"emb\"), assoc=Associate(Jonker(threshold=0.6))),\n    states=vmf_state_entries(\"emb\", dim=D, init_kappa=5.0,\n                             kappa_obs=12.0, tau=8.0),\n    lifecycle=NoLifecycle(), visibility=IncludeAll(),\n)\nrec = run(tracker, dets, fields=(\"emb\", \"emb_kappa\"))\n\n",[347,1764,1765,1781,1785,1802,1857,1895,1918,1941,1945],{"__ignoreMap":377},[381,1766,1767,1769,1771,1773,1776,1778],{"class":383,"line":384},[381,1768,435],{"class":387},[381,1770,438],{"class":391},[381,1772,404],{"class":403},[381,1774,1775],{"class":391},"states ",[381,1777,388],{"class":387},[381,1779,1780],{"class":391}," vmf_state_entries\n",[381,1782,1783],{"class":383,"line":395},[381,1784,421],{"emptyLinePlaceholder":420},[381,1786,1787,1790,1792,1794,1796,1799],{"class":383,"line":417},[381,1788,1789],{"class":391},"tracker ",[381,1791,579],{"class":578},[381,1793,438],{"class":391},[381,1795,404],{"class":403},[381,1797,1798],{"class":553},"Tracker",[381,1800,1801],{"class":403},"(\n",[381,1803,1804,1807,1809,1812,1814,1816,1818,1820,1822,1824,1826,1828,1831,1834,1836,1839,1841,1844,1846,1849,1851,1854],{"class":383,"line":424},[381,1805,1806],{"class":1005},"    root",[381,1808,579],{"class":578},[381,1810,1811],{"class":553},"Pipe",[381,1813,557],{"class":403},[381,1815,203],{"class":1005},[381,1817,579],{"class":578},[381,1819,366],{"class":553},[381,1821,557],{"class":403},[381,1823,1215],{"class":1214},[381,1825,1219],{"class":1218},[381,1827,1215],{"class":1214},[381,1829,1830],{"class":403},"),",[381,1832,1833],{"class":1005}," assoc",[381,1835,579],{"class":578},[381,1837,1838],{"class":553},"Associate",[381,1840,557],{"class":403},[381,1842,1843],{"class":553},"Jonker",[381,1845,557],{"class":403},[381,1847,1848],{"class":1005},"threshold",[381,1850,579],{"class":578},[381,1852,1853],{"class":560},"0.6",[381,1855,1856],{"class":403},"))),\n",[381,1858,1859,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1887,1889,1892],{"class":383,"line":432},[381,1860,1861],{"class":1005},"    states",[381,1863,579],{"class":578},[381,1865,359],{"class":553},[381,1867,557],{"class":403},[381,1869,1215],{"class":1214},[381,1871,1219],{"class":1218},[381,1873,1215],{"class":1214},[381,1875,451],{"class":403},[381,1877,1047],{"class":1005},[381,1879,579],{"class":578},[381,1881,1710],{"class":553},[381,1883,451],{"class":403},[381,1885,1886],{"class":1005}," init_kappa",[381,1888,579],{"class":578},[381,1890,1891],{"class":560},"5.0",[381,1893,1894],{"class":403},",\n",[381,1896,1897,1900,1902,1905,1907,1910,1912,1915],{"class":383,"line":457},[381,1898,1899],{"class":1005},"                             kappa_obs",[381,1901,579],{"class":578},[381,1903,1904],{"class":560},"12.0",[381,1906,451],{"class":403},[381,1908,1909],{"class":1005}," tau",[381,1911,579],{"class":578},[381,1913,1914],{"class":560},"8.0",[381,1916,1917],{"class":403},"),\n",[381,1919,1920,1923,1925,1928,1931,1934,1936,1939],{"class":383,"line":474},[381,1921,1922],{"class":1005},"    lifecycle",[381,1924,579],{"class":578},[381,1926,1927],{"class":553},"NoLifecycle",[381,1929,1930],{"class":403},"(),",[381,1932,1933],{"class":1005}," visibility",[381,1935,579],{"class":578},[381,1937,1938],{"class":553},"IncludeAll",[381,1940,1121],{"class":403},[381,1942,1943],{"class":383,"line":501},[381,1944,564],{"class":403},[381,1946,1947,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1981,1984,1986],{"class":383,"line":523},[381,1948,1949],{"class":391},"rec ",[381,1951,579],{"class":578},[381,1953,1193],{"class":553},[381,1955,557],{"class":403},[381,1957,173],{"class":553},[381,1959,451],{"class":403},[381,1961,1202],{"class":553},[381,1963,451],{"class":403},[381,1965,1207],{"class":1005},[381,1967,579],{"class":578},[381,1969,557],{"class":403},[381,1971,1215],{"class":1214},[381,1973,1219],{"class":1218},[381,1975,1215],{"class":1214},[381,1977,451],{"class":403},[381,1979,1980],{"class":1214}," \"",[381,1982,1983],{"class":1218},"emb_kappa",[381,1985,1215],{"class":1214},[381,1987,1988],{"class":403},"))\n",[372,1990,1992],{"className":374,"code":1991,"language":376,"meta":377,"style":377},"fig, (axp, axc) = plt.subplots(1, 2, figsize=(12, 4))\naxp.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2, label=\"truth\")\naxp.scatter(obs[:, 0], obs[:, 1], marker=\"x\", color=\"tab:red\", s=22,\n            alpha=0.5, label=\"noisy detections\")\naxp.plot(rec[\"emb\"][:, 0], rec[\"emb\"][:, 1], \"o-\", color=\"tab:blue\",\n         ms=3, label=\"filtered estimate\")\naxp.set_title(\"Embedding trajectory, projected to (dim 0, dim 1)\")\naxp.set_xlabel(\"dim 0\"); axp.set_ylabel(\"dim 1\")\naxp.legend(fontsize=8); axp.grid(alpha=0.3); axp.set_aspect(\"equal\")\n\naxc.plot(t, cos_to_truth(obs, truth), color=\"tab:red\", alpha=0.6,\n         label=\"raw detections\")\naxc.plot(t, cos_to_truth(rec[\"emb\"], truth), color=\"tab:blue\",\n         label=\"filtered\")\naxc.set_title(\"Cosine similarity to ground truth (higher = better)\")\naxc.set_xlabel(\"frame\"); axc.set_ylabel(\"cosine\"); axc.legend(fontsize=8)\naxc.grid(alpha=0.3)\n\nplt.tight_layout(); plt.show()\nprint(f\"raw mean cos = {cos_to_truth(obs, truth).mean():.3f}   \"\n      f\"filtered mean cos = {cos_to_truth(rec['emb'], truth).mean():.3f}\")\n\n",[347,1993,1994,2050,2123,2187,2212,2278,2303,2323,2362,2420,2424,2472,2488,2534,2549,2568,2620,2638,2642,2664,2700],{"__ignoreMap":377},[381,1995,1996,1999,2001,2003,2006,2008,2011,2013,2015,2018,2020,2023,2025,2027,2029,2031,2033,2036,2038,2040,2043,2045,2048],{"class":383,"line":384},[381,1997,1998],{"class":391},"fig",[381,2000,451],{"class":403},[381,2002,1629],{"class":403},[381,2004,2005],{"class":391},"axp",[381,2007,451],{"class":403},[381,2009,2010],{"class":391}," axc",[381,2012,1502],{"class":403},[381,2014,805],{"class":578},[381,2016,2017],{"class":391}," plt",[381,2019,404],{"class":403},[381,2021,2022],{"class":553},"subplots",[381,2024,557],{"class":403},[381,2026,1053],{"class":560},[381,2028,451],{"class":403},[381,2030,910],{"class":560},[381,2032,451],{"class":403},[381,2034,2035],{"class":1005}," figsize",[381,2037,579],{"class":578},[381,2039,557],{"class":403},[381,2041,2042],{"class":560},"12",[381,2044,451],{"class":403},[381,2046,2047],{"class":560}," 4",[381,2049,1988],{"class":403},[381,2051,2052,2054,2056,2059,2061,2063,2065,2067,2070,2072,2074,2076,2078,2080,2082,2084,2086,2089,2091,2093,2096,2098,2100,2103,2105,2108,2110,2113,2115,2117,2119,2121],{"class":383,"line":395},[381,2053,2005],{"class":391},[381,2055,404],{"class":403},[381,2057,2058],{"class":553},"plot",[381,2060,557],{"class":403},[381,2062,1611],{"class":553},[381,2064,796],{"class":403},[381,2066,799],{"class":560},[381,2068,2069],{"class":403},"],",[381,2071,1170],{"class":553},[381,2073,796],{"class":403},[381,2075,829],{"class":560},[381,2077,2069],{"class":403},[381,2079,1980],{"class":1214},[381,2081,1647],{"class":1218},[381,2083,1215],{"class":1214},[381,2085,451],{"class":403},[381,2087,2088],{"class":1005}," color",[381,2090,579],{"class":578},[381,2092,1215],{"class":1214},[381,2094,2095],{"class":1218},"0.55",[381,2097,1215],{"class":1214},[381,2099,451],{"class":403},[381,2101,2102],{"class":1005}," lw",[381,2104,579],{"class":578},[381,2106,2107],{"class":560},"2",[381,2109,451],{"class":403},[381,2111,2112],{"class":1005}," label",[381,2114,579],{"class":578},[381,2116,1215],{"class":1214},[381,2118,1611],{"class":1218},[381,2120,1215],{"class":1214},[381,2122,564],{"class":403},[381,2124,2125,2127,2129,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2153,2155,2157,2160,2162,2164,2166,2168,2170,2173,2175,2177,2180,2182,2185],{"class":383,"line":417},[381,2126,2005],{"class":391},[381,2128,404],{"class":403},[381,2130,2131],{"class":553},"scatter",[381,2133,557],{"class":403},[381,2135,1042],{"class":553},[381,2137,796],{"class":403},[381,2139,799],{"class":560},[381,2141,2069],{"class":403},[381,2143,1175],{"class":553},[381,2145,796],{"class":403},[381,2147,829],{"class":560},[381,2149,2069],{"class":403},[381,2151,2152],{"class":1005}," marker",[381,2154,579],{"class":578},[381,2156,1215],{"class":1214},[381,2158,2159],{"class":1218},"x",[381,2161,1215],{"class":1214},[381,2163,451],{"class":403},[381,2165,2088],{"class":1005},[381,2167,579],{"class":578},[381,2169,1215],{"class":1214},[381,2171,2172],{"class":1218},"tab:red",[381,2174,1215],{"class":1214},[381,2176,451],{"class":403},[381,2178,2179],{"class":1005}," s",[381,2181,579],{"class":578},[381,2183,2184],{"class":560},"22",[381,2186,1894],{"class":403},[381,2188,2189,2192,2194,2197,2199,2201,2203,2205,2208,2210],{"class":383,"line":424},[381,2190,2191],{"class":1005},"            alpha",[381,2193,579],{"class":578},[381,2195,2196],{"class":560},"0.5",[381,2198,451],{"class":403},[381,2200,2112],{"class":1005},[381,2202,579],{"class":578},[381,2204,1215],{"class":1214},[381,2206,2207],{"class":1218},"noisy detections",[381,2209,1215],{"class":1214},[381,2211,564],{"class":403},[381,2213,2214,2216,2218,2220,2222,2225,2227,2229,2231,2233,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2261,2263,2265,2267,2269,2271,2274,2276],{"class":383,"line":432},[381,2215,2005],{"class":391},[381,2217,404],{"class":403},[381,2219,2058],{"class":553},[381,2221,557],{"class":403},[381,2223,2224],{"class":553},"rec",[381,2226,882],{"class":403},[381,2228,1215],{"class":1214},[381,2230,1219],{"class":1218},[381,2232,1215],{"class":1214},[381,2234,2235],{"class":403},"][:,",[381,2237,799],{"class":560},[381,2239,2069],{"class":403},[381,2241,1516],{"class":553},[381,2243,882],{"class":403},[381,2245,1215],{"class":1214},[381,2247,1219],{"class":1218},[381,2249,1215],{"class":1214},[381,2251,2235],{"class":403},[381,2253,829],{"class":560},[381,2255,2069],{"class":403},[381,2257,1980],{"class":1214},[381,2259,2260],{"class":1218},"o-",[381,2262,1215],{"class":1214},[381,2264,451],{"class":403},[381,2266,2088],{"class":1005},[381,2268,579],{"class":578},[381,2270,1215],{"class":1214},[381,2272,2273],{"class":1218},"tab:blue",[381,2275,1215],{"class":1214},[381,2277,1894],{"class":403},[381,2279,2280,2283,2285,2288,2290,2292,2294,2296,2299,2301],{"class":383,"line":457},[381,2281,2282],{"class":1005},"         ms",[381,2284,579],{"class":578},[381,2286,2287],{"class":560},"3",[381,2289,451],{"class":403},[381,2291,2112],{"class":1005},[381,2293,579],{"class":578},[381,2295,1215],{"class":1214},[381,2297,2298],{"class":1218},"filtered estimate",[381,2300,1215],{"class":1214},[381,2302,564],{"class":403},[381,2304,2305,2307,2309,2312,2314,2316,2319,2321],{"class":383,"line":474},[381,2306,2005],{"class":391},[381,2308,404],{"class":403},[381,2310,2311],{"class":553},"set_title",[381,2313,557],{"class":403},[381,2315,1215],{"class":1214},[381,2317,2318],{"class":1218},"Embedding trajectory, projected to (dim 0, dim 1)",[381,2320,1215],{"class":1214},[381,2322,564],{"class":403},[381,2324,2325,2327,2329,2332,2334,2336,2339,2341,2343,2346,2348,2351,2353,2355,2358,2360],{"class":383,"line":501},[381,2326,2005],{"class":391},[381,2328,404],{"class":403},[381,2330,2331],{"class":553},"set_xlabel",[381,2333,557],{"class":403},[381,2335,1215],{"class":1214},[381,2337,2338],{"class":1218},"dim 0",[381,2340,1215],{"class":1214},[381,2342,1502],{"class":403},[381,2344,2345],{"class":391},"; axp",[381,2347,404],{"class":403},[381,2349,2350],{"class":553},"set_ylabel",[381,2352,557],{"class":403},[381,2354,1215],{"class":1214},[381,2356,2357],{"class":1218},"dim 1",[381,2359,1215],{"class":1214},[381,2361,564],{"class":403},[381,2363,2364,2366,2368,2371,2373,2376,2378,2381,2383,2385,2387,2390,2392,2395,2397,2400,2402,2404,2406,2409,2411,2413,2416,2418],{"class":383,"line":523},[381,2365,2005],{"class":391},[381,2367,404],{"class":403},[381,2369,2370],{"class":553},"legend",[381,2372,557],{"class":403},[381,2374,2375],{"class":1005},"fontsize",[381,2377,579],{"class":578},[381,2379,2380],{"class":560},"8",[381,2382,1502],{"class":403},[381,2384,2345],{"class":391},[381,2386,404],{"class":403},[381,2388,2389],{"class":553},"grid",[381,2391,557],{"class":403},[381,2393,2394],{"class":1005},"alpha",[381,2396,579],{"class":578},[381,2398,2399],{"class":560},"0.3",[381,2401,1502],{"class":403},[381,2403,2345],{"class":391},[381,2405,404],{"class":403},[381,2407,2408],{"class":553},"set_aspect",[381,2410,557],{"class":403},[381,2412,1215],{"class":1214},[381,2414,2415],{"class":1218},"equal",[381,2417,1215],{"class":1214},[381,2419,564],{"class":403},[381,2421,2422],{"class":383,"line":540},[381,2423,421],{"emptyLinePlaceholder":420},[381,2425,2426,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2466,2468,2470],{"class":383,"line":545},[381,2427,2428],{"class":391},"axc",[381,2430,404],{"class":403},[381,2432,2058],{"class":553},[381,2434,557],{"class":403},[381,2436,1662],{"class":553},[381,2438,451],{"class":403},[381,2440,1537],{"class":553},[381,2442,557],{"class":403},[381,2444,1042],{"class":553},[381,2446,451],{"class":403},[381,2448,1170],{"class":553},[381,2450,1830],{"class":403},[381,2452,2088],{"class":1005},[381,2454,579],{"class":578},[381,2456,1215],{"class":1214},[381,2458,2172],{"class":1218},[381,2460,1215],{"class":1214},[381,2462,451],{"class":403},[381,2464,2465],{"class":1005}," alpha",[381,2467,579],{"class":578},[381,2469,1853],{"class":560},[381,2471,1894],{"class":403},[381,2473,2474,2477,2479,2481,2484,2486],{"class":383,"line":567},[381,2475,2476],{"class":1005},"         label",[381,2478,579],{"class":578},[381,2480,1215],{"class":1214},[381,2482,2483],{"class":1218},"raw detections",[381,2485,1215],{"class":1214},[381,2487,564],{"class":403},[381,2489,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532],{"class":383,"line":572},[381,2491,2428],{"class":391},[381,2493,404],{"class":403},[381,2495,2058],{"class":553},[381,2497,557],{"class":403},[381,2499,1662],{"class":553},[381,2501,451],{"class":403},[381,2503,1537],{"class":553},[381,2505,557],{"class":403},[381,2507,2224],{"class":553},[381,2509,882],{"class":403},[381,2511,1215],{"class":1214},[381,2513,1219],{"class":1218},[381,2515,1215],{"class":1214},[381,2517,2069],{"class":403},[381,2519,1170],{"class":553},[381,2521,1830],{"class":403},[381,2523,2088],{"class":1005},[381,2525,579],{"class":578},[381,2527,1215],{"class":1214},[381,2529,2273],{"class":1218},[381,2531,1215],{"class":1214},[381,2533,1894],{"class":403},[381,2535,2536,2538,2540,2542,2545,2547],{"class":383,"line":589},[381,2537,2476],{"class":1005},[381,2539,579],{"class":578},[381,2541,1215],{"class":1214},[381,2543,2544],{"class":1218},"filtered",[381,2546,1215],{"class":1214},[381,2548,564],{"class":403},[381,2550,2551,2553,2555,2557,2559,2561,2564,2566],{"class":383,"line":603},[381,2552,2428],{"class":391},[381,2554,404],{"class":403},[381,2556,2311],{"class":553},[381,2558,557],{"class":403},[381,2560,1215],{"class":1214},[381,2562,2563],{"class":1218},"Cosine similarity to ground truth (higher = better)",[381,2565,1215],{"class":1214},[381,2567,564],{"class":403},[381,2569,2570,2572,2574,2576,2578,2580,2582,2584,2586,2589,2591,2593,2595,2597,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618],{"class":383,"line":608},[381,2571,2428],{"class":391},[381,2573,404],{"class":403},[381,2575,2331],{"class":553},[381,2577,557],{"class":403},[381,2579,1215],{"class":1214},[381,2581,209],{"class":1218},[381,2583,1215],{"class":1214},[381,2585,1502],{"class":403},[381,2587,2588],{"class":391},"; axc",[381,2590,404],{"class":403},[381,2592,2350],{"class":553},[381,2594,557],{"class":403},[381,2596,1215],{"class":1214},[381,2598,2599],{"class":1218},"cosine",[381,2601,1215],{"class":1214},[381,2603,1502],{"class":403},[381,2605,2588],{"class":391},[381,2607,404],{"class":403},[381,2609,2370],{"class":553},[381,2611,557],{"class":403},[381,2613,2375],{"class":1005},[381,2615,579],{"class":578},[381,2617,2380],{"class":560},[381,2619,564],{"class":403},[381,2621,2622,2624,2626,2628,2630,2632,2634,2636],{"class":383,"line":653},[381,2623,2428],{"class":391},[381,2625,404],{"class":403},[381,2627,2389],{"class":553},[381,2629,557],{"class":403},[381,2631,2394],{"class":1005},[381,2633,579],{"class":578},[381,2635,2399],{"class":560},[381,2637,564],{"class":403},[381,2639,2640],{"class":383,"line":660},[381,2641,421],{"emptyLinePlaceholder":420},[381,2643,2644,2647,2649,2652,2654,2657,2659,2662],{"class":383,"line":667},[381,2645,2646],{"class":391},"plt",[381,2648,404],{"class":403},[381,2650,2651],{"class":553},"tight_layout",[381,2653,1745],{"class":403},[381,2655,2656],{"class":391},"; plt",[381,2658,404],{"class":403},[381,2660,2661],{"class":553},"show",[381,2663,744],{"class":403},[381,2665,2666,2668,2670,2672,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697],{"class":383,"line":673},[381,2667,1687],{"class":1148},[381,2669,557],{"class":403},[381,2671,1271],{"class":611},[381,2673,2674],{"class":1218},"\"raw mean cos = ",[381,2676,1697],{"class":560},[381,2678,1729],{"class":553},[381,2680,557],{"class":403},[381,2682,1042],{"class":553},[381,2684,451],{"class":403},[381,2686,1170],{"class":553},[381,2688,738],{"class":403},[381,2690,1742],{"class":553},[381,2692,1745],{"class":403},[381,2694,1748],{"class":611},[381,2696,1702],{"class":560},[381,2698,2699],{"class":1218},"   \"\n",[381,2701,2702,2704,2707,2709,2711,2713,2715,2717,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740],{"class":383,"line":679},[381,2703,1721],{"class":611},[381,2705,2706],{"class":1218},"\"filtered mean cos = ",[381,2708,1697],{"class":560},[381,2710,1729],{"class":553},[381,2712,557],{"class":403},[381,2714,2224],{"class":553},[381,2716,882],{"class":403},[381,2718,2719],{"class":1214},"'",[381,2721,1219],{"class":1218},[381,2723,2719],{"class":1214},[381,2725,2069],{"class":403},[381,2727,1170],{"class":553},[381,2729,738],{"class":403},[381,2731,1742],{"class":553},[381,2733,1745],{"class":403},[381,2735,1748],{"class":611},[381,2737,1702],{"class":560},[381,2739,1215],{"class":1218},[381,2741,564],{"class":403},[338,2743,2744],{},[2745,2746],"img",{"alt":377,"src":2747},"\u002F_nb\u002Faf4840abc83e8c6e.png",[1756,2749],{"data":2750,"kind":1759},"cmF3IG1lYW4gY29zID0gMC44NTUgICBmaWx0ZXJlZCBtZWFuIGNvcyA9IDAuODMyCg==",[2752,2753,2755],"h2",{"id":2754},"concentration-confidence","Concentration = confidence",[338,2757,2758,2759,2763],{},"The update sharpens the belief (kappa grows) as consistent\ndetections accumulate; the predict step lets it decay, so a track\nthat stops being seen becomes ",[2760,2761,2762],"em",{},"less"," certain of its appearance — a\nprincipled, geometry-aware confidence you can feed to a gate.",[372,2765,2767],{"className":374,"code":2766,"language":376,"meta":377,"style":377},"fig, ax = plt.subplots(figsize=(7, 4))\nax.plot(t, rec[\"emb_kappa\"], \"o-\", color=\"tab:green\", ms=3)\nax.set_title(\"vMF concentration kappa over the clip (rises as evidence builds)\")\nax.set_xlabel(\"frame\"); ax.set_ylabel(\"kappa\")\nax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\nprint(f\"mu stays unit: max |‖mu‖ - 1| = \"\n      f\"{(rec['emb'].norm(dim=-1) - 1).abs().max():.2e}\")\n\n",[347,2768,2769,2804,2860,2879,2914,2932,2950,2961],{"__ignoreMap":377},[381,2770,2771,2773,2775,2778,2780,2782,2784,2786,2788,2791,2793,2795,2798,2800,2802],{"class":383,"line":384},[381,2772,1998],{"class":391},[381,2774,451],{"class":403},[381,2776,2777],{"class":391}," ax ",[381,2779,579],{"class":578},[381,2781,2017],{"class":391},[381,2783,404],{"class":403},[381,2785,2022],{"class":553},[381,2787,557],{"class":403},[381,2789,2790],{"class":1005},"figsize",[381,2792,579],{"class":578},[381,2794,557],{"class":403},[381,2796,2797],{"class":560},"7",[381,2799,451],{"class":403},[381,2801,2047],{"class":560},[381,2803,1988],{"class":403},[381,2805,2806,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2848,2850,2852,2854,2856,2858],{"class":383,"line":395},[381,2807,2808],{"class":391},"ax",[381,2810,404],{"class":403},[381,2812,2058],{"class":553},[381,2814,557],{"class":403},[381,2816,1662],{"class":553},[381,2818,451],{"class":403},[381,2820,1516],{"class":553},[381,2822,882],{"class":403},[381,2824,1215],{"class":1214},[381,2826,1983],{"class":1218},[381,2828,1215],{"class":1214},[381,2830,2069],{"class":403},[381,2832,1980],{"class":1214},[381,2834,2260],{"class":1218},[381,2836,1215],{"class":1214},[381,2838,451],{"class":403},[381,2840,2088],{"class":1005},[381,2842,579],{"class":578},[381,2844,1215],{"class":1214},[381,2846,2847],{"class":1218},"tab:green",[381,2849,1215],{"class":1214},[381,2851,451],{"class":403},[381,2853,1379],{"class":1005},[381,2855,579],{"class":578},[381,2857,2287],{"class":560},[381,2859,564],{"class":403},[381,2861,2862,2864,2866,2868,2870,2872,2875,2877],{"class":383,"line":417},[381,2863,2808],{"class":391},[381,2865,404],{"class":403},[381,2867,2311],{"class":553},[381,2869,557],{"class":403},[381,2871,1215],{"class":1214},[381,2873,2874],{"class":1218},"vMF concentration kappa over the clip (rises as evidence builds)",[381,2876,1215],{"class":1214},[381,2878,564],{"class":403},[381,2880,2881,2883,2885,2887,2889,2891,2893,2895,2897,2900,2902,2904,2906,2908,2910,2912],{"class":383,"line":424},[381,2882,2808],{"class":391},[381,2884,404],{"class":403},[381,2886,2331],{"class":553},[381,2888,557],{"class":403},[381,2890,1215],{"class":1214},[381,2892,209],{"class":1218},[381,2894,1215],{"class":1214},[381,2896,1502],{"class":403},[381,2898,2899],{"class":391},"; ax",[381,2901,404],{"class":403},[381,2903,2350],{"class":553},[381,2905,557],{"class":403},[381,2907,1215],{"class":1214},[381,2909,353],{"class":1218},[381,2911,1215],{"class":1214},[381,2913,564],{"class":403},[381,2915,2916,2918,2920,2922,2924,2926,2928,2930],{"class":383,"line":432},[381,2917,2808],{"class":391},[381,2919,404],{"class":403},[381,2921,2389],{"class":553},[381,2923,557],{"class":403},[381,2925,2394],{"class":1005},[381,2927,579],{"class":578},[381,2929,2399],{"class":560},[381,2931,564],{"class":403},[381,2933,2934,2936,2938,2940,2942,2944,2946,2948],{"class":383,"line":457},[381,2935,2646],{"class":391},[381,2937,404],{"class":403},[381,2939,2651],{"class":553},[381,2941,1745],{"class":403},[381,2943,2656],{"class":391},[381,2945,404],{"class":403},[381,2947,2661],{"class":553},[381,2949,744],{"class":403},[381,2951,2952,2954,2956,2958],{"class":383,"line":474},[381,2953,1687],{"class":1148},[381,2955,557],{"class":403},[381,2957,1271],{"class":611},[381,2959,2960],{"class":1218},"\"mu stays unit: max |‖mu‖ - 1| = \"\n",[381,2962,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2986,2988,2991,2993,2995,2997,3000,3002,3004,3007,3009,3012,3014,3017,3019,3021],{"class":383,"line":501},[381,2964,1721],{"class":611},[381,2966,1215],{"class":1218},[381,2968,1697],{"class":560},[381,2970,557],{"class":403},[381,2972,2224],{"class":553},[381,2974,882],{"class":403},[381,2976,2719],{"class":1214},[381,2978,1219],{"class":1218},[381,2980,2719],{"class":1214},[381,2982,1115],{"class":403},[381,2984,2985],{"class":553},"norm",[381,2987,557],{"class":403},[381,2989,2990],{"class":1005},"dim",[381,2992,1050],{"class":578},[381,2994,1053],{"class":560},[381,2996,1502],{"class":403},[381,2998,2999],{"class":578}," -",[381,3001,829],{"class":560},[381,3003,738],{"class":403},[381,3005,3006],{"class":553},"abs",[381,3008,706],{"class":403},[381,3010,3011],{"class":553},"max",[381,3013,1745],{"class":403},[381,3015,3016],{"class":611},":.2e",[381,3018,1702],{"class":560},[381,3020,1215],{"class":1218},[381,3022,564],{"class":403},[338,3024,3025],{},[2745,3026],{"alt":377,"src":3027},"\u002F_nb\u002Fb6a7f7f9e5f7e41e.png",[1756,3029],{"data":3030,"kind":1759},"bXUgc3RheXMgdW5pdDogbWF4IHzigJZtdeKAliAtIDF8ID0gMS4xOWUtMDcK",[338,3032,3033,3036,3037,3040,3041,3043],{},[342,3034,3035],{},"Takeaway."," vMF is the ",[2760,3038,3039],{},"right"," filter for normalised embeddings:\nthe estimate provably stays on the sphere and ",[347,3042,353],{}," is an honest\ndirectional confidence. It is the directional analogue of the Kalman\nfilter in notebook 2.",[3045,3046,3047],"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 pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s2W-s, html code.shiki .s2W-s{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .sithA, html code.shiki .sithA{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}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 .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":377,"searchDepth":417,"depth":417,"links":3049},[3050],{"id":2754,"depth":395,"text":2755},"ReID embeddings are compared by cosine similarity, so they really\nlive on the unit sphere, not in flat space — a Euclidean Kalman\nfilter is the wrong geometry. The von Mises-Fisher distribution is\nthe sphere's Gaussian: a mean direction mu (unit) and a\nconcentration kappa (certainty). Its mean direction has a conjugate\nvMF prior, so fusing an observation is an exact, closed-form update —\nthe resultant of the concentration-weighted directions.","md",{"notebook":420},{"icon":63},{"title":69,"description":3051},"gxAjP8c7nOEbEFwQ9O3GmFfHnrgQLzj4bbU_a2e-OkI",{},1785139890250]