[{"data":1,"prerenderedAt":3624},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fembedding_filters\u002Fkalman_diagonal":328,"docyard:crossref-index":3623},[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":65,"body":330,"description":3617,"extension":3618,"meta":3619,"navigation":3620,"path":66,"seo":3621,"stem":67,"__hash__":3622},"content\u002F5.notebooks\u002Fembedding_filters\u002F2.kalman_diagonal.md",{"type":331,"value":332,"toc":3614},"minimark",[333,337,372,383,1767,1772,2398,3151,3157,3160,3165,3182,3592,3597,3610],[334,335,65],"h1",{"id":336},"embedding-filters-2-diagonal-kalman",[338,339,340,341,345,346,350,351,355,356,359,360,363,364,367,368,371],"p",{},"A Kalman filter on an embedding with a ",[342,343,344],"strong",{},"random-walk"," model\n(",[347,348,349],"code",{},"F = H = I",") and ",[352,353,354],"em",{},"diagonal"," process\u002Fmeasurement noise. With diagonal\n",[347,357,358],{},"Q",", ",[347,361,362],{},"R"," and a diagonal initial covariance the per-dimension filters\nare independent, so the cost stays ",[347,365,366],{},"O(D)"," while — unlike EMA — the\nfilter carries a real uncertainty that ",[352,369,370],{},"adapts"," the gain: it trusts\nmeasurements more while uncertain (early frames) and less once\nconfident.",[338,373,374,375,378,379,382],{},"We build it from ",[347,376,377],{},"KalmanLinear"," + ",[347,380,381],{},"KalmanUpdate"," (the same primitives\nas the motion Kalman, just with identity dynamics) and track the\nper-dimension variance shrinking.",[384,385,390],"pre",{"className":386,"code":387,"language":388,"meta":389,"style":389},"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,391,392,405,427,434,442,467,484,511,533,550,555,577,582,599,613,618,663,670,677,683,689,695,700,728,757,774,800,832,859,880,886,909,944,978,1026,1068,1134,1169,1193,1198,1237,1249,1270,1301,1327,1381,1428,1442,1489,1537,1542,1561,1597,1634,1664,1669,1694,1728],{"__ignoreMap":389},[393,394,397,401],"span",{"class":395,"line":396},"line",1,[393,398,400],{"class":399},"sVHd0","import",[393,402,404],{"class":403},"su5hD"," torch\n",[393,406,408,410,413,417,421,424],{"class":395,"line":407},2,[393,409,400],{"class":399},[393,411,412],{"class":403}," matplotlib",[393,414,416],{"class":415},"sP7_E",".",[393,418,420],{"class":419},"skxfh","pyplot",[393,422,423],{"class":399}," as",[393,425,426],{"class":403}," plt\n",[393,428,430],{"class":395,"line":429},3,[393,431,433],{"emptyLinePlaceholder":432},true,"\n",[393,435,437,439],{"class":395,"line":436},4,[393,438,400],{"class":399},[393,440,441],{"class":403}," unitrack\n",[393,443,445,448,451,453,456,458,461,464],{"class":395,"line":444},5,[393,446,447],{"class":399},"from",[393,449,450],{"class":403}," unitrack",[393,452,416],{"class":415},[393,454,455],{"class":403},"assignment ",[393,457,400],{"class":399},[393,459,460],{"class":403}," Associate",[393,462,463],{"class":415},",",[393,465,466],{"class":403}," Jonker\n",[393,468,470,472,474,476,479,481],{"class":395,"line":469},6,[393,471,447],{"class":399},[393,473,450],{"class":403},[393,475,416],{"class":415},[393,477,478],{"class":403},"costs ",[393,480,400],{"class":399},[393,482,483],{"class":403}," Cosine\n",[393,485,487,489,491,493,496,498,501,503,506,508],{"class":395,"line":486},7,[393,488,447],{"class":399},[393,490,450],{"class":403},[393,492,416],{"class":415},[393,494,495],{"class":403},"data ",[393,497,400],{"class":399},[393,499,500],{"class":403}," Detections",[393,502,463],{"class":415},[393,504,505],{"class":403}," FrameContext",[393,507,463],{"class":415},[393,509,510],{"class":403}," TensorSpec\n",[393,512,514,516,518,520,523,525,528,530],{"class":395,"line":513},8,[393,515,447],{"class":399},[393,517,450],{"class":403},[393,519,416],{"class":415},[393,521,522],{"class":403},"lifecycle ",[393,524,400],{"class":399},[393,526,527],{"class":403}," IncludeAll",[393,529,463],{"class":415},[393,531,532],{"class":403}," NoLifecycle\n",[393,534,536,538,540,542,545,547],{"class":395,"line":535},9,[393,537,447],{"class":399},[393,539,450],{"class":403},[393,541,416],{"class":415},[393,543,544],{"class":403},"pipeline ",[393,546,400],{"class":399},[393,548,549],{"class":403}," Pipe\n",[393,551,553],{"class":395,"line":552},10,[393,554,433],{"emptyLinePlaceholder":432},[393,556,558,561,563,567,570,574],{"class":395,"line":557},11,[393,559,560],{"class":403},"torch",[393,562,416],{"class":415},[393,564,566],{"class":565},"slqww","manual_seed",[393,568,569],{"class":415},"(",[393,571,573],{"class":572},"srdBf","0",[393,575,576],{"class":415},")\n",[393,578,580],{"class":395,"line":579},12,[393,581,433],{"emptyLinePlaceholder":432},[393,583,585,588,592,595],{"class":395,"line":584},13,[393,586,587],{"class":403},"D ",[393,589,591],{"class":590},"smGrS","=",[393,593,594],{"class":572}," 16",[393,596,598],{"class":597},"sutJx","          # embedding dimensionality (256+ in practice; 16 plots fast)\n",[393,600,602,605,607,610],{"class":395,"line":601},14,[393,603,604],{"class":403},"T ",[393,606,591],{"class":590},[393,608,609],{"class":572}," 44",[393,611,612],{"class":597},"          # frames\n",[393,614,616],{"class":395,"line":615},15,[393,617,433],{"emptyLinePlaceholder":432},[393,619,621,625,629,631,635,637,640,642,645,647,649,651,654,656,660],{"class":395,"line":620},16,[393,622,624],{"class":623},"sbsja","def",[393,626,628],{"class":627},"sGLFI"," make_clip",[393,630,569],{"class":415},[393,632,634],{"class":633},"sFwrP","noise",[393,636,591],{"class":590},[393,638,639],{"class":572},"0.15",[393,641,463],{"class":415},[393,643,644],{"class":633}," seed",[393,646,591],{"class":590},[393,648,573],{"class":572},[393,650,463],{"class":415},[393,652,653],{"class":633}," switch",[393,655,591],{"class":590},[393,657,659],{"class":658},"s39Yj","None",[393,661,662],{"class":415},"):\n",[393,664,666],{"class":395,"line":665},17,[393,667,669],{"class":668},"s2W-s","    \"\"\"\n",[393,671,673],{"class":395,"line":672},18,[393,674,676],{"class":675},"sithA","    A unit embedding that rotates slowly in the (e0, e1) plane plus\n",[393,678,680],{"class":395,"line":679},19,[393,681,682],{"class":675},"    per-frame noise in all D dims. Rotating in a known plane means\n",[393,684,686],{"class":395,"line":685},20,[393,687,688],{"class":675},"    projecting onto dims (0, 1) shows the true path as a circle arc.\n",[393,690,692],{"class":395,"line":691},21,[393,693,694],{"class":675},"    `switch` optionally rotates the plane mid-clip (an appearance change).\n",[393,696,698],{"class":395,"line":697},22,[393,699,669],{"class":668},[393,701,703,706,708,711,713,716,719,721,723,726],{"class":395,"line":702},23,[393,704,705],{"class":403},"    g ",[393,707,591],{"class":590},[393,709,710],{"class":403}," torch",[393,712,416],{"class":415},[393,714,715],{"class":565},"Generator",[393,717,718],{"class":415},"().",[393,720,566],{"class":565},[393,722,569],{"class":415},[393,724,725],{"class":565},"seed",[393,727,576],{"class":415},[393,729,731,734,736,738,740,743,745,748,751,754],{"class":395,"line":730},24,[393,732,733],{"class":403},"    t ",[393,735,591],{"class":590},[393,737,710],{"class":403},[393,739,416],{"class":415},[393,741,742],{"class":565},"arange",[393,744,569],{"class":415},[393,746,747],{"class":565},"T",[393,749,750],{"class":415},").",[393,752,753],{"class":565},"float",[393,755,756],{"class":415},"()\n",[393,758,760,763,765,768,771],{"class":395,"line":759},25,[393,761,762],{"class":403},"    theta ",[393,764,591],{"class":590},[393,766,767],{"class":572}," 0.10",[393,769,770],{"class":590}," *",[393,772,773],{"class":403}," t\n",[393,775,777,780,782,784,786,789,791,793,795,798],{"class":395,"line":776},26,[393,778,779],{"class":403},"    truth ",[393,781,591],{"class":590},[393,783,710],{"class":403},[393,785,416],{"class":415},[393,787,788],{"class":565},"zeros",[393,790,569],{"class":415},[393,792,747],{"class":565},[393,794,463],{"class":415},[393,796,797],{"class":565}," D",[393,799,576],{"class":415},[393,801,803,806,809,812,815,818,820,822,825,827,830],{"class":395,"line":802},27,[393,804,805],{"class":403},"    truth",[393,807,808],{"class":415},"[:,",[393,810,811],{"class":572}," 0",[393,813,814],{"class":415},"]",[393,816,817],{"class":590}," =",[393,819,710],{"class":403},[393,821,416],{"class":415},[393,823,824],{"class":565},"cos",[393,826,569],{"class":415},[393,828,829],{"class":565},"theta",[393,831,576],{"class":415},[393,833,835,837,839,842,844,846,848,850,853,855,857],{"class":395,"line":834},28,[393,836,805],{"class":403},[393,838,808],{"class":415},[393,840,841],{"class":572}," 1",[393,843,814],{"class":415},[393,845,817],{"class":590},[393,847,710],{"class":403},[393,849,416],{"class":415},[393,851,852],{"class":565},"sin",[393,854,569],{"class":415},[393,856,829],{"class":565},[393,858,576],{"class":415},[393,860,862,865,868,871,874,877],{"class":395,"line":861},29,[393,863,864],{"class":399},"    if",[393,866,867],{"class":403}," switch ",[393,869,870],{"class":590},"is",[393,872,873],{"class":590}," not",[393,875,876],{"class":658}," None",[393,878,879],{"class":415},":\n",[393,881,883],{"class":395,"line":882},30,[393,884,885],{"class":597},"        # after `switch`, swap appearance into the (e2, e3) plane.\n",[393,887,889,892,895,898,901,904,906],{"class":395,"line":888},31,[393,890,891],{"class":403},"        truth",[393,893,894],{"class":415},"[",[393,896,897],{"class":403},"switch",[393,899,900],{"class":415},":,",[393,902,903],{"class":415}," :]",[393,905,817],{"class":590},[393,907,908],{"class":572}," 0.0\n",[393,910,912,914,916,918,920,923,925,927,929,931,933,935,937,939,941],{"class":395,"line":911},32,[393,913,891],{"class":403},[393,915,894],{"class":415},[393,917,897],{"class":403},[393,919,900],{"class":415},[393,921,922],{"class":572}," 2",[393,924,814],{"class":415},[393,926,817],{"class":590},[393,928,710],{"class":403},[393,930,416],{"class":415},[393,932,824],{"class":565},[393,934,569],{"class":415},[393,936,829],{"class":565},[393,938,894],{"class":415},[393,940,897],{"class":565},[393,942,943],{"class":415},":])\n",[393,945,947,949,951,953,955,958,960,962,964,966,968,970,972,974,976],{"class":395,"line":946},33,[393,948,891],{"class":403},[393,950,894],{"class":415},[393,952,897],{"class":403},[393,954,900],{"class":415},[393,956,957],{"class":572}," 3",[393,959,814],{"class":415},[393,961,817],{"class":590},[393,963,710],{"class":403},[393,965,416],{"class":415},[393,967,852],{"class":565},[393,969,569],{"class":415},[393,971,829],{"class":565},[393,973,894],{"class":415},[393,975,897],{"class":565},[393,977,943],{"class":415},[393,979,981,984,986,989,992,995,998,1000,1002,1005,1007,1009,1011,1013,1015,1019,1021,1024],{"class":395,"line":980},34,[393,982,983],{"class":403},"    obs ",[393,985,591],{"class":590},[393,987,988],{"class":403}," truth ",[393,990,991],{"class":590},"+",[393,993,994],{"class":403}," noise ",[393,996,997],{"class":590},"*",[393,999,710],{"class":403},[393,1001,416],{"class":415},[393,1003,1004],{"class":565},"randn",[393,1006,569],{"class":415},[393,1008,747],{"class":565},[393,1010,463],{"class":415},[393,1012,797],{"class":565},[393,1014,463],{"class":415},[393,1016,1018],{"class":1017},"s99_P"," generator",[393,1020,591],{"class":590},[393,1022,1023],{"class":565},"g",[393,1025,576],{"class":415},[393,1027,1029,1031,1033,1035,1037,1040,1042,1045,1047,1050,1052,1055,1057,1060,1063,1066],{"class":395,"line":1028},35,[393,1030,983],{"class":403},[393,1032,591],{"class":590},[393,1034,710],{"class":403},[393,1036,416],{"class":415},[393,1038,1039],{"class":419},"nn",[393,1041,416],{"class":415},[393,1043,1044],{"class":419},"functional",[393,1046,416],{"class":415},[393,1048,1049],{"class":565},"normalize",[393,1051,569],{"class":415},[393,1053,1054],{"class":565},"obs",[393,1056,463],{"class":415},[393,1058,1059],{"class":1017}," dim",[393,1061,1062],{"class":590},"=-",[393,1064,1065],{"class":572},"1",[393,1067,576],{"class":415},[393,1069,1071,1074,1076,1079,1082,1084,1086,1088,1090,1092,1095,1098,1100,1103,1106,1108,1110,1112,1115,1118,1121,1123,1125,1128,1131],{"class":395,"line":1070},36,[393,1072,1073],{"class":403},"    dets ",[393,1075,591],{"class":590},[393,1077,1078],{"class":415}," [",[393,1080,1081],{"class":565},"Detections",[393,1083,569],{"class":415},[393,1085,125],{"class":1017},[393,1087,591],{"class":590},[393,1089,560],{"class":565},[393,1091,416],{"class":415},[393,1093,1094],{"class":565},"tensor",[393,1096,1097],{"class":415},"([",[393,1099,573],{"class":572},[393,1101,1102],{"class":415},"]),",[393,1104,1105],{"class":1017}," emb",[393,1107,591],{"class":590},[393,1109,1054],{"class":565},[393,1111,894],{"class":415},[393,1113,1114],{"class":565},"k",[393,1116,1117],{"class":415},":",[393,1119,1120],{"class":565},"k ",[393,1122,991],{"class":590},[393,1124,841],{"class":572},[393,1126,1127],{"class":415},"].",[393,1129,1130],{"class":565},"clone",[393,1132,1133],{"class":415},"(),\n",[393,1135,1137,1140,1142,1144,1146,1149,1152,1155,1158,1162,1164,1166],{"class":395,"line":1136},37,[393,1138,1139],{"class":1017},"                       batch_size",[393,1141,591],{"class":590},[393,1143,894],{"class":415},[393,1145,1065],{"class":572},[393,1147,1148],{"class":415},"])",[393,1150,1151],{"class":399}," for",[393,1153,1154],{"class":403}," k ",[393,1156,1157],{"class":399},"in",[393,1159,1161],{"class":1160},"sptTA"," range",[393,1163,569],{"class":415},[393,1165,747],{"class":565},[393,1167,1168],{"class":415},")]\n",[393,1170,1172,1175,1178,1180,1183,1185,1188,1190],{"class":395,"line":1171},38,[393,1173,1174],{"class":399},"    return",[393,1176,1177],{"class":403}," t",[393,1179,463],{"class":415},[393,1181,1182],{"class":403}," truth",[393,1184,463],{"class":415},[393,1186,1187],{"class":403}," obs",[393,1189,463],{"class":415},[393,1191,1192],{"class":403}," dets\n",[393,1194,1196],{"class":395,"line":1195},39,[393,1197,433],{"emptyLinePlaceholder":432},[393,1199,1201,1203,1206,1208,1210,1212,1215,1217,1220,1222,1224,1228,1232,1234],{"class":395,"line":1200},40,[393,1202,624],{"class":623},[393,1204,1205],{"class":627}," run",[393,1207,569],{"class":415},[393,1209,173],{"class":633},[393,1211,463],{"class":415},[393,1213,1214],{"class":633}," dets",[393,1216,463],{"class":415},[393,1218,1219],{"class":633}," fields",[393,1221,591],{"class":590},[393,1223,569],{"class":415},[393,1225,1227],{"class":1226},"sjJ54","\"",[393,1229,1231],{"class":1230},"s_sjI","emb",[393,1233,1227],{"class":1226},[393,1235,1236],{"class":415},",)):\n",[393,1238,1240,1243,1246],{"class":395,"line":1239},41,[393,1241,1242],{"class":668},"    \"\"\"",[393,1244,1245],{"class":675},"Run a single-object clip through a real Tracker; collect snapshot fields.",[393,1247,1248],{"class":668},"\"\"\"\n",[393,1250,1252,1255,1257,1259,1261,1264,1266,1268],{"class":395,"line":1251},42,[393,1253,1254],{"class":403},"    ms ",[393,1256,591],{"class":590},[393,1258,450],{"class":403},[393,1260,416],{"class":415},[393,1262,1263],{"class":565},"MultiStream",[393,1265,569],{"class":415},[393,1267,173],{"class":565},[393,1269,576],{"class":415},[393,1271,1273,1276,1278,1281,1284,1286,1289,1291,1294,1296,1298],{"class":395,"line":1272},43,[393,1274,1275],{"class":403},"    rec ",[393,1277,591],{"class":590},[393,1279,1280],{"class":415}," {",[393,1282,1283],{"class":403},"f",[393,1285,1117],{"class":415},[393,1287,1288],{"class":415}," []",[393,1290,1151],{"class":399},[393,1292,1293],{"class":403}," f ",[393,1295,1157],{"class":399},[393,1297,1219],{"class":403},[393,1299,1300],{"class":415},"}\n",[393,1302,1304,1307,1310,1312,1315,1317,1320,1322,1325],{"class":395,"line":1303},44,[393,1305,1306],{"class":399},"    for",[393,1308,1309],{"class":403}," k",[393,1311,463],{"class":415},[393,1313,1314],{"class":403}," d ",[393,1316,1157],{"class":399},[393,1318,1319],{"class":1160}," enumerate",[393,1321,569],{"class":415},[393,1323,1324],{"class":565},"dets",[393,1326,662],{"class":415},[393,1328,1330,1333,1335,1337,1339,1342,1344,1347,1349,1351,1353,1356,1358,1361,1363,1366,1368,1370,1372,1375,1377,1379],{"class":395,"line":1329},45,[393,1331,1332],{"class":403},"        ctx ",[393,1334,591],{"class":590},[393,1336,505],{"class":403},[393,1338,416],{"class":415},[393,1340,1341],{"class":565},"make",[393,1343,569],{"class":415},[393,1345,1346],{"class":1017},"frame_idx",[393,1348,591],{"class":590},[393,1350,1114],{"class":565},[393,1352,463],{"class":415},[393,1354,1355],{"class":1017}," delta",[393,1357,591],{"class":590},[393,1359,1360],{"class":572},"1.0",[393,1362,463],{"class":415},[393,1364,1365],{"class":1017}," fps",[393,1367,591],{"class":590},[393,1369,1360],{"class":572},[393,1371,463],{"class":415},[393,1373,1374],{"class":1017}," stream_key",[393,1376,591],{"class":590},[393,1378,573],{"class":572},[393,1380,576],{"class":415},[393,1382,1384,1387,1389,1392,1394,1397,1399,1402,1404,1406,1408,1411,1413,1416,1418,1421,1423,1426],{"class":395,"line":1383},46,[393,1385,1386],{"class":403},"        res ",[393,1388,591],{"class":590},[393,1390,1391],{"class":403}," ms",[393,1393,416],{"class":415},[393,1395,1396],{"class":565},"step",[393,1398,569],{"class":415},[393,1400,1401],{"class":1017},"stream_key",[393,1403,591],{"class":590},[393,1405,573],{"class":572},[393,1407,463],{"class":415},[393,1409,1410],{"class":1017}," detections",[393,1412,591],{"class":590},[393,1414,1415],{"class":565},"d",[393,1417,463],{"class":415},[393,1419,1420],{"class":1017}," ctx",[393,1422,591],{"class":590},[393,1424,1425],{"class":565},"ctx",[393,1427,576],{"class":415},[393,1429,1431,1434,1436,1438,1440],{"class":395,"line":1430},47,[393,1432,1433],{"class":399},"        for",[393,1435,1293],{"class":403},[393,1437,1157],{"class":399},[393,1439,1219],{"class":403},[393,1441,879],{"class":415},[393,1443,1445,1448,1450,1452,1454,1457,1459,1462,1464,1467,1469,1472,1474,1477,1480,1482,1484,1486],{"class":395,"line":1444},48,[393,1446,1447],{"class":403},"            rec",[393,1449,894],{"class":415},[393,1451,1283],{"class":403},[393,1453,1127],{"class":415},[393,1455,1456],{"class":565},"append",[393,1458,569],{"class":415},[393,1460,1461],{"class":1160},"getattr",[393,1463,569],{"class":415},[393,1465,1466],{"class":565},"res",[393,1468,416],{"class":415},[393,1470,1471],{"class":419},"snapshot",[393,1473,463],{"class":415},[393,1475,1476],{"class":565}," f",[393,1478,1479],{"class":415},")[",[393,1481,573],{"class":572},[393,1483,1127],{"class":415},[393,1485,1130],{"class":565},[393,1487,1488],{"class":415},"())\n",[393,1490,1492,1494,1496,1498,1500,1502,1504,1507,1509,1512,1515,1517,1519,1521,1524,1526,1529,1531,1534],{"class":395,"line":1491},49,[393,1493,1174],{"class":399},[393,1495,1280],{"class":415},[393,1497,1283],{"class":403},[393,1499,1117],{"class":415},[393,1501,710],{"class":403},[393,1503,416],{"class":415},[393,1505,1506],{"class":565},"stack",[393,1508,569],{"class":415},[393,1510,1511],{"class":565},"v",[393,1513,1514],{"class":415},")",[393,1516,1151],{"class":399},[393,1518,1476],{"class":403},[393,1520,463],{"class":415},[393,1522,1523],{"class":403}," v ",[393,1525,1157],{"class":399},[393,1527,1528],{"class":403}," rec",[393,1530,416],{"class":415},[393,1532,1533],{"class":565},"items",[393,1535,1536],{"class":415},"()}\n",[393,1538,1540],{"class":395,"line":1539},50,[393,1541,433],{"emptyLinePlaceholder":432},[393,1543,1545,1547,1550,1552,1555,1557,1559],{"class":395,"line":1544},51,[393,1546,624],{"class":623},[393,1548,1549],{"class":627}," cos_to_truth",[393,1551,569],{"class":415},[393,1553,1554],{"class":633},"est",[393,1556,463],{"class":415},[393,1558,1182],{"class":633},[393,1560,662],{"class":415},[393,1562,1564,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595],{"class":395,"line":1563},52,[393,1565,1566],{"class":403},"    e ",[393,1568,591],{"class":590},[393,1570,710],{"class":403},[393,1572,416],{"class":415},[393,1574,1039],{"class":419},[393,1576,416],{"class":415},[393,1578,1044],{"class":419},[393,1580,416],{"class":415},[393,1582,1049],{"class":565},[393,1584,569],{"class":415},[393,1586,1554],{"class":565},[393,1588,463],{"class":415},[393,1590,1059],{"class":1017},[393,1592,1062],{"class":590},[393,1594,1065],{"class":572},[393,1596,576],{"class":415},[393,1598,1600,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1624,1626,1628,1630,1632],{"class":395,"line":1599},53,[393,1601,1602],{"class":403},"    u ",[393,1604,591],{"class":590},[393,1606,710],{"class":403},[393,1608,416],{"class":415},[393,1610,1039],{"class":419},[393,1612,416],{"class":415},[393,1614,1044],{"class":419},[393,1616,416],{"class":415},[393,1618,1049],{"class":565},[393,1620,569],{"class":415},[393,1622,1623],{"class":565},"truth",[393,1625,463],{"class":415},[393,1627,1059],{"class":1017},[393,1629,1062],{"class":590},[393,1631,1065],{"class":572},[393,1633,576],{"class":415},[393,1635,1637,1639,1642,1645,1647,1650,1652,1655,1657,1660,1662],{"class":395,"line":1636},54,[393,1638,1174],{"class":399},[393,1640,1641],{"class":415}," (",[393,1643,1644],{"class":403},"e ",[393,1646,997],{"class":590},[393,1648,1649],{"class":403}," u",[393,1651,750],{"class":415},[393,1653,1654],{"class":565},"sum",[393,1656,569],{"class":415},[393,1658,1659],{"class":590},"-",[393,1661,1065],{"class":572},[393,1663,576],{"class":415},[393,1665,1667],{"class":395,"line":1666},55,[393,1668,433],{"emptyLinePlaceholder":432},[393,1670,1672,1675,1677,1679,1681,1683,1685,1688,1690,1692],{"class":395,"line":1671},56,[393,1673,1674],{"class":403},"t",[393,1676,463],{"class":415},[393,1678,1182],{"class":403},[393,1680,463],{"class":415},[393,1682,1187],{"class":403},[393,1684,463],{"class":415},[393,1686,1687],{"class":403}," dets ",[393,1689,591],{"class":590},[393,1691,628],{"class":565},[393,1693,756],{"class":415},[393,1695,1697,1700,1702,1704,1707,1710,1712,1715,1718,1720,1723,1725],{"class":395,"line":1696},57,[393,1698,1699],{"class":1160},"print",[393,1701,569],{"class":415},[393,1703,1283],{"class":623},[393,1705,1706],{"class":1230},"\"clip: ",[393,1708,1709],{"class":572},"{",[393,1711,747],{"class":565},[393,1713,1714],{"class":572},"}",[393,1716,1717],{"class":1230}," frames, D=",[393,1719,1709],{"class":572},[393,1721,1722],{"class":565},"D",[393,1724,1714],{"class":572},[393,1726,1727],{"class":1230},"; raw-detection mean cosine-to-truth \"\n",[393,1729,1731,1734,1737,1739,1742,1744,1746,1748,1750,1752,1755,1758,1761,1763,1765],{"class":395,"line":1730},58,[393,1732,1733],{"class":623},"      f",[393,1735,1736],{"class":1230},"\"= ",[393,1738,1709],{"class":572},[393,1740,1741],{"class":565},"cos_to_truth",[393,1743,569],{"class":415},[393,1745,1054],{"class":565},[393,1747,463],{"class":415},[393,1749,1182],{"class":565},[393,1751,750],{"class":415},[393,1753,1754],{"class":565},"mean",[393,1756,1757],{"class":415},"()",[393,1759,1760],{"class":623},":.3f",[393,1762,1714],{"class":572},[393,1764,1227],{"class":1230},[393,1766,576],{"class":415},[1768,1769],"docyard-notebook-output",{"data":1770,"kind":1771},"Y2xpcDogNDQgZnJhbWVzLCBEPTE2OyByYXctZGV0ZWN0aW9uIG1lYW4gY29zaW5lLXRvLXRydXRoID0gMC44NTUK","stream",[384,1773,1775],{"className":386,"code":1774,"language":388,"meta":389,"style":389},"from unitrack.states import FromDetectionField, State\nfrom unitrack.states import EyeInitializer, NoopObservation, NoopProcess\nfrom unitrack.states.kalman import KalmanLinear, KalmanUpdate\n\ndef diagonal_kalman_tracker(q=0.02, r=0.2, init_var=1.0):\n    eye = torch.eye(D)\n    states = {\n        \"emb\": State(\n            schema=TensorSpec(shape=(D,), dtype=torch.float32),\n            process=KalmanLinear(field=\"emb\", F=eye, H=eye,\n                                 Q=eye * q, R=eye * r),\n            observation=KalmanUpdate(field=\"emb\", cov_field=\"emb_cov\",\n                                     H=eye, R=eye * r),\n            init=FromDetectionField(\"emb\"),\n        ),\n        \"emb_cov\": State(\n            schema=TensorSpec(shape=(D, D), dtype=torch.float32),\n            process=NoopProcess(), observation=NoopObservation(),\n            init=EyeInitializer(dim=D, scale=init_var),\n        ),\n    }\n    return unitrack.Tracker(\n        root=Pipe(cost=Cosine(\"emb\"), assoc=Associate(Jonker(threshold=0.6))),\n        states=states, lifecycle=NoLifecycle(), visibility=IncludeAll(),\n    )\n\nrec = run(diagonal_kalman_tracker(), dets, fields=(\"emb\", \"emb_cov\"))\n\n",[347,1776,1777,1798,1823,1848,1852,1890,1910,1920,1937,1976,2019,2049,2086,2109,2129,2134,2148,2185,2207,2237,2241,2246,2259,2314,2345,2350,2354],{"__ignoreMap":389},[393,1778,1779,1781,1783,1785,1788,1790,1793,1795],{"class":395,"line":396},[393,1780,447],{"class":399},[393,1782,450],{"class":403},[393,1784,416],{"class":415},[393,1786,1787],{"class":403},"states ",[393,1789,400],{"class":399},[393,1791,1792],{"class":403}," FromDetectionField",[393,1794,463],{"class":415},[393,1796,1797],{"class":403}," State\n",[393,1799,1800,1802,1804,1806,1808,1810,1813,1815,1818,1820],{"class":395,"line":407},[393,1801,447],{"class":399},[393,1803,450],{"class":403},[393,1805,416],{"class":415},[393,1807,1787],{"class":403},[393,1809,400],{"class":399},[393,1811,1812],{"class":403}," EyeInitializer",[393,1814,463],{"class":415},[393,1816,1817],{"class":403}," NoopObservation",[393,1819,463],{"class":415},[393,1821,1822],{"class":403}," NoopProcess\n",[393,1824,1825,1827,1829,1831,1833,1835,1838,1840,1843,1845],{"class":395,"line":429},[393,1826,447],{"class":399},[393,1828,450],{"class":403},[393,1830,416],{"class":415},[393,1832,270],{"class":403},[393,1834,416],{"class":415},[393,1836,1837],{"class":403},"kalman ",[393,1839,400],{"class":399},[393,1841,1842],{"class":403}," KalmanLinear",[393,1844,463],{"class":415},[393,1846,1847],{"class":403}," KalmanUpdate\n",[393,1849,1850],{"class":395,"line":436},[393,1851,433],{"emptyLinePlaceholder":432},[393,1853,1854,1856,1859,1861,1864,1866,1869,1871,1874,1876,1879,1881,1884,1886,1888],{"class":395,"line":444},[393,1855,624],{"class":623},[393,1857,1858],{"class":627}," diagonal_kalman_tracker",[393,1860,569],{"class":415},[393,1862,1863],{"class":633},"q",[393,1865,591],{"class":590},[393,1867,1868],{"class":572},"0.02",[393,1870,463],{"class":415},[393,1872,1873],{"class":633}," r",[393,1875,591],{"class":590},[393,1877,1878],{"class":572},"0.2",[393,1880,463],{"class":415},[393,1882,1883],{"class":633}," init_var",[393,1885,591],{"class":590},[393,1887,1360],{"class":572},[393,1889,662],{"class":415},[393,1891,1892,1895,1897,1899,1901,1904,1906,1908],{"class":395,"line":469},[393,1893,1894],{"class":403},"    eye ",[393,1896,591],{"class":590},[393,1898,710],{"class":403},[393,1900,416],{"class":415},[393,1902,1903],{"class":565},"eye",[393,1905,569],{"class":415},[393,1907,1722],{"class":565},[393,1909,576],{"class":415},[393,1911,1912,1915,1917],{"class":395,"line":486},[393,1913,1914],{"class":403},"    states ",[393,1916,591],{"class":590},[393,1918,1919],{"class":415}," {\n",[393,1921,1922,1925,1927,1929,1931,1934],{"class":395,"line":513},[393,1923,1924],{"class":1226},"        \"",[393,1926,1231],{"class":1230},[393,1928,1227],{"class":1226},[393,1930,1117],{"class":415},[393,1932,1933],{"class":565}," State",[393,1935,1936],{"class":415},"(\n",[393,1938,1939,1942,1944,1947,1949,1952,1954,1956,1958,1961,1964,1966,1968,1970,1973],{"class":395,"line":535},[393,1940,1941],{"class":1017},"            schema",[393,1943,591],{"class":590},[393,1945,1946],{"class":565},"TensorSpec",[393,1948,569],{"class":415},[393,1950,1951],{"class":1017},"shape",[393,1953,591],{"class":590},[393,1955,569],{"class":415},[393,1957,1722],{"class":565},[393,1959,1960],{"class":415},",),",[393,1962,1963],{"class":1017}," dtype",[393,1965,591],{"class":590},[393,1967,560],{"class":565},[393,1969,416],{"class":415},[393,1971,1972],{"class":419},"float32",[393,1974,1975],{"class":415},"),\n",[393,1977,1978,1981,1983,1985,1987,1990,1992,1994,1996,1998,2000,2003,2005,2007,2009,2012,2014,2016],{"class":395,"line":552},[393,1979,1980],{"class":1017},"            process",[393,1982,591],{"class":590},[393,1984,377],{"class":565},[393,1986,569],{"class":415},[393,1988,1989],{"class":1017},"field",[393,1991,591],{"class":590},[393,1993,1227],{"class":1226},[393,1995,1231],{"class":1230},[393,1997,1227],{"class":1226},[393,1999,463],{"class":415},[393,2001,2002],{"class":1017}," F",[393,2004,591],{"class":590},[393,2006,1903],{"class":565},[393,2008,463],{"class":415},[393,2010,2011],{"class":1017}," H",[393,2013,591],{"class":590},[393,2015,1903],{"class":565},[393,2017,2018],{"class":415},",\n",[393,2020,2021,2024,2026,2029,2031,2034,2036,2039,2041,2043,2045,2047],{"class":395,"line":557},[393,2022,2023],{"class":1017},"                                 Q",[393,2025,591],{"class":590},[393,2027,2028],{"class":565},"eye ",[393,2030,997],{"class":590},[393,2032,2033],{"class":565}," q",[393,2035,463],{"class":415},[393,2037,2038],{"class":1017}," R",[393,2040,591],{"class":590},[393,2042,2028],{"class":565},[393,2044,997],{"class":590},[393,2046,1873],{"class":565},[393,2048,1975],{"class":415},[393,2050,2051,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2075,2077,2079,2082,2084],{"class":395,"line":579},[393,2052,2053],{"class":1017},"            observation",[393,2055,591],{"class":590},[393,2057,381],{"class":565},[393,2059,569],{"class":415},[393,2061,1989],{"class":1017},[393,2063,591],{"class":590},[393,2065,1227],{"class":1226},[393,2067,1231],{"class":1230},[393,2069,1227],{"class":1226},[393,2071,463],{"class":415},[393,2073,2074],{"class":1017}," cov_field",[393,2076,591],{"class":590},[393,2078,1227],{"class":1226},[393,2080,2081],{"class":1230},"emb_cov",[393,2083,1227],{"class":1226},[393,2085,2018],{"class":415},[393,2087,2088,2091,2093,2095,2097,2099,2101,2103,2105,2107],{"class":395,"line":584},[393,2089,2090],{"class":1017},"                                     H",[393,2092,591],{"class":590},[393,2094,1903],{"class":565},[393,2096,463],{"class":415},[393,2098,2038],{"class":1017},[393,2100,591],{"class":590},[393,2102,2028],{"class":565},[393,2104,997],{"class":590},[393,2106,1873],{"class":565},[393,2108,1975],{"class":415},[393,2110,2111,2114,2116,2119,2121,2123,2125,2127],{"class":395,"line":601},[393,2112,2113],{"class":1017},"            init",[393,2115,591],{"class":590},[393,2117,2118],{"class":565},"FromDetectionField",[393,2120,569],{"class":415},[393,2122,1227],{"class":1226},[393,2124,1231],{"class":1230},[393,2126,1227],{"class":1226},[393,2128,1975],{"class":415},[393,2130,2131],{"class":395,"line":615},[393,2132,2133],{"class":415},"        ),\n",[393,2135,2136,2138,2140,2142,2144,2146],{"class":395,"line":620},[393,2137,1924],{"class":1226},[393,2139,2081],{"class":1230},[393,2141,1227],{"class":1226},[393,2143,1117],{"class":415},[393,2145,1933],{"class":565},[393,2147,1936],{"class":415},[393,2149,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2173,2175,2177,2179,2181,2183],{"class":395,"line":665},[393,2151,1941],{"class":1017},[393,2153,591],{"class":590},[393,2155,1946],{"class":565},[393,2157,569],{"class":415},[393,2159,1951],{"class":1017},[393,2161,591],{"class":590},[393,2163,569],{"class":415},[393,2165,1722],{"class":565},[393,2167,463],{"class":415},[393,2169,797],{"class":565},[393,2171,2172],{"class":415},"),",[393,2174,1963],{"class":1017},[393,2176,591],{"class":590},[393,2178,560],{"class":565},[393,2180,416],{"class":415},[393,2182,1972],{"class":419},[393,2184,1975],{"class":415},[393,2186,2187,2189,2191,2194,2197,2200,2202,2205],{"class":395,"line":672},[393,2188,1980],{"class":1017},[393,2190,591],{"class":590},[393,2192,2193],{"class":565},"NoopProcess",[393,2195,2196],{"class":415},"(),",[393,2198,2199],{"class":1017}," observation",[393,2201,591],{"class":590},[393,2203,2204],{"class":565},"NoopObservation",[393,2206,1133],{"class":415},[393,2208,2209,2211,2213,2216,2218,2221,2223,2225,2227,2230,2232,2235],{"class":395,"line":679},[393,2210,2113],{"class":1017},[393,2212,591],{"class":590},[393,2214,2215],{"class":565},"EyeInitializer",[393,2217,569],{"class":415},[393,2219,2220],{"class":1017},"dim",[393,2222,591],{"class":590},[393,2224,1722],{"class":565},[393,2226,463],{"class":415},[393,2228,2229],{"class":1017}," scale",[393,2231,591],{"class":590},[393,2233,2234],{"class":565},"init_var",[393,2236,1975],{"class":415},[393,2238,2239],{"class":395,"line":685},[393,2240,2133],{"class":415},[393,2242,2243],{"class":395,"line":691},[393,2244,2245],{"class":415},"    }\n",[393,2247,2248,2250,2252,2254,2257],{"class":395,"line":697},[393,2249,1174],{"class":399},[393,2251,450],{"class":403},[393,2253,416],{"class":415},[393,2255,2256],{"class":565},"Tracker",[393,2258,1936],{"class":415},[393,2260,2261,2264,2266,2269,2271,2273,2275,2278,2280,2282,2284,2286,2288,2291,2293,2296,2298,2301,2303,2306,2308,2311],{"class":395,"line":702},[393,2262,2263],{"class":1017},"        root",[393,2265,591],{"class":590},[393,2267,2268],{"class":565},"Pipe",[393,2270,569],{"class":415},[393,2272,203],{"class":1017},[393,2274,591],{"class":590},[393,2276,2277],{"class":565},"Cosine",[393,2279,569],{"class":415},[393,2281,1227],{"class":1226},[393,2283,1231],{"class":1230},[393,2285,1227],{"class":1226},[393,2287,2172],{"class":415},[393,2289,2290],{"class":1017}," assoc",[393,2292,591],{"class":590},[393,2294,2295],{"class":565},"Associate",[393,2297,569],{"class":415},[393,2299,2300],{"class":565},"Jonker",[393,2302,569],{"class":415},[393,2304,2305],{"class":1017},"threshold",[393,2307,591],{"class":590},[393,2309,2310],{"class":572},"0.6",[393,2312,2313],{"class":415},"))),\n",[393,2315,2316,2319,2321,2323,2325,2328,2330,2333,2335,2338,2340,2343],{"class":395,"line":730},[393,2317,2318],{"class":1017},"        states",[393,2320,591],{"class":590},[393,2322,270],{"class":565},[393,2324,463],{"class":415},[393,2326,2327],{"class":1017}," lifecycle",[393,2329,591],{"class":590},[393,2331,2332],{"class":565},"NoLifecycle",[393,2334,2196],{"class":415},[393,2336,2337],{"class":1017}," visibility",[393,2339,591],{"class":590},[393,2341,2342],{"class":565},"IncludeAll",[393,2344,1133],{"class":415},[393,2346,2347],{"class":395,"line":759},[393,2348,2349],{"class":415},"    )\n",[393,2351,2352],{"class":395,"line":776},[393,2353,433],{"emptyLinePlaceholder":432},[393,2355,2356,2359,2361,2363,2365,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2391,2393,2395],{"class":395,"line":802},[393,2357,2358],{"class":403},"rec ",[393,2360,591],{"class":590},[393,2362,1205],{"class":565},[393,2364,569],{"class":415},[393,2366,2367],{"class":565},"diagonal_kalman_tracker",[393,2369,2196],{"class":415},[393,2371,1214],{"class":565},[393,2373,463],{"class":415},[393,2375,1219],{"class":1017},[393,2377,591],{"class":590},[393,2379,569],{"class":415},[393,2381,1227],{"class":1226},[393,2383,1231],{"class":1230},[393,2385,1227],{"class":1226},[393,2387,463],{"class":415},[393,2389,2390],{"class":1226}," \"",[393,2392,2081],{"class":1230},[393,2394,1227],{"class":1226},[393,2396,2397],{"class":415},"))\n",[384,2399,2401],{"className":386,"code":2400,"language":388,"meta":389,"style":389},"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,2402,2403,2459,2532,2596,2621,2687,2712,2732,2771,2829,2833,2881,2897,2943,2958,2977,3029,3047,3051,3073,3109],{"__ignoreMap":389},[393,2404,2405,2408,2410,2412,2415,2417,2420,2422,2424,2427,2429,2432,2434,2436,2438,2440,2442,2445,2447,2449,2452,2454,2457],{"class":395,"line":396},[393,2406,2407],{"class":403},"fig",[393,2409,463],{"class":415},[393,2411,1641],{"class":415},[393,2413,2414],{"class":403},"axp",[393,2416,463],{"class":415},[393,2418,2419],{"class":403}," axc",[393,2421,1514],{"class":415},[393,2423,817],{"class":590},[393,2425,2426],{"class":403}," plt",[393,2428,416],{"class":415},[393,2430,2431],{"class":565},"subplots",[393,2433,569],{"class":415},[393,2435,1065],{"class":572},[393,2437,463],{"class":415},[393,2439,922],{"class":572},[393,2441,463],{"class":415},[393,2443,2444],{"class":1017}," figsize",[393,2446,591],{"class":590},[393,2448,569],{"class":415},[393,2450,2451],{"class":572},"12",[393,2453,463],{"class":415},[393,2455,2456],{"class":572}," 4",[393,2458,2397],{"class":415},[393,2460,2461,2463,2465,2468,2470,2472,2474,2476,2479,2481,2483,2485,2487,2489,2491,2493,2495,2498,2500,2502,2505,2507,2509,2512,2514,2517,2519,2522,2524,2526,2528,2530],{"class":395,"line":407},[393,2462,2414],{"class":403},[393,2464,416],{"class":415},[393,2466,2467],{"class":565},"plot",[393,2469,569],{"class":415},[393,2471,1623],{"class":565},[393,2473,808],{"class":415},[393,2475,811],{"class":572},[393,2477,2478],{"class":415},"],",[393,2480,1182],{"class":565},[393,2482,808],{"class":415},[393,2484,841],{"class":572},[393,2486,2478],{"class":415},[393,2488,2390],{"class":1226},[393,2490,1659],{"class":1230},[393,2492,1227],{"class":1226},[393,2494,463],{"class":415},[393,2496,2497],{"class":1017}," color",[393,2499,591],{"class":590},[393,2501,1227],{"class":1226},[393,2503,2504],{"class":1230},"0.55",[393,2506,1227],{"class":1226},[393,2508,463],{"class":415},[393,2510,2511],{"class":1017}," lw",[393,2513,591],{"class":590},[393,2515,2516],{"class":572},"2",[393,2518,463],{"class":415},[393,2520,2521],{"class":1017}," label",[393,2523,591],{"class":590},[393,2525,1227],{"class":1226},[393,2527,1623],{"class":1230},[393,2529,1227],{"class":1226},[393,2531,576],{"class":415},[393,2533,2534,2536,2538,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2562,2564,2566,2569,2571,2573,2575,2577,2579,2582,2584,2586,2589,2591,2594],{"class":395,"line":429},[393,2535,2414],{"class":403},[393,2537,416],{"class":415},[393,2539,2540],{"class":565},"scatter",[393,2542,569],{"class":415},[393,2544,1054],{"class":565},[393,2546,808],{"class":415},[393,2548,811],{"class":572},[393,2550,2478],{"class":415},[393,2552,1187],{"class":565},[393,2554,808],{"class":415},[393,2556,841],{"class":572},[393,2558,2478],{"class":415},[393,2560,2561],{"class":1017}," marker",[393,2563,591],{"class":590},[393,2565,1227],{"class":1226},[393,2567,2568],{"class":1230},"x",[393,2570,1227],{"class":1226},[393,2572,463],{"class":415},[393,2574,2497],{"class":1017},[393,2576,591],{"class":590},[393,2578,1227],{"class":1226},[393,2580,2581],{"class":1230},"tab:red",[393,2583,1227],{"class":1226},[393,2585,463],{"class":415},[393,2587,2588],{"class":1017}," s",[393,2590,591],{"class":590},[393,2592,2593],{"class":572},"22",[393,2595,2018],{"class":415},[393,2597,2598,2601,2603,2606,2608,2610,2612,2614,2617,2619],{"class":395,"line":436},[393,2599,2600],{"class":1017},"            alpha",[393,2602,591],{"class":590},[393,2604,2605],{"class":572},"0.5",[393,2607,463],{"class":415},[393,2609,2521],{"class":1017},[393,2611,591],{"class":590},[393,2613,1227],{"class":1226},[393,2615,2616],{"class":1230},"noisy detections",[393,2618,1227],{"class":1226},[393,2620,576],{"class":415},[393,2622,2623,2625,2627,2629,2631,2634,2636,2638,2640,2642,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2670,2672,2674,2676,2678,2680,2683,2685],{"class":395,"line":444},[393,2624,2414],{"class":403},[393,2626,416],{"class":415},[393,2628,2467],{"class":565},[393,2630,569],{"class":415},[393,2632,2633],{"class":565},"rec",[393,2635,894],{"class":415},[393,2637,1227],{"class":1226},[393,2639,1231],{"class":1230},[393,2641,1227],{"class":1226},[393,2643,2644],{"class":415},"][:,",[393,2646,811],{"class":572},[393,2648,2478],{"class":415},[393,2650,1528],{"class":565},[393,2652,894],{"class":415},[393,2654,1227],{"class":1226},[393,2656,1231],{"class":1230},[393,2658,1227],{"class":1226},[393,2660,2644],{"class":415},[393,2662,841],{"class":572},[393,2664,2478],{"class":415},[393,2666,2390],{"class":1226},[393,2668,2669],{"class":1230},"o-",[393,2671,1227],{"class":1226},[393,2673,463],{"class":415},[393,2675,2497],{"class":1017},[393,2677,591],{"class":590},[393,2679,1227],{"class":1226},[393,2681,2682],{"class":1230},"tab:blue",[393,2684,1227],{"class":1226},[393,2686,2018],{"class":415},[393,2688,2689,2692,2694,2697,2699,2701,2703,2705,2708,2710],{"class":395,"line":469},[393,2690,2691],{"class":1017},"         ms",[393,2693,591],{"class":590},[393,2695,2696],{"class":572},"3",[393,2698,463],{"class":415},[393,2700,2521],{"class":1017},[393,2702,591],{"class":590},[393,2704,1227],{"class":1226},[393,2706,2707],{"class":1230},"filtered estimate",[393,2709,1227],{"class":1226},[393,2711,576],{"class":415},[393,2713,2714,2716,2718,2721,2723,2725,2728,2730],{"class":395,"line":486},[393,2715,2414],{"class":403},[393,2717,416],{"class":415},[393,2719,2720],{"class":565},"set_title",[393,2722,569],{"class":415},[393,2724,1227],{"class":1226},[393,2726,2727],{"class":1230},"Embedding trajectory, projected to (dim 0, dim 1)",[393,2729,1227],{"class":1226},[393,2731,576],{"class":415},[393,2733,2734,2736,2738,2741,2743,2745,2748,2750,2752,2755,2757,2760,2762,2764,2767,2769],{"class":395,"line":513},[393,2735,2414],{"class":403},[393,2737,416],{"class":415},[393,2739,2740],{"class":565},"set_xlabel",[393,2742,569],{"class":415},[393,2744,1227],{"class":1226},[393,2746,2747],{"class":1230},"dim 0",[393,2749,1227],{"class":1226},[393,2751,1514],{"class":415},[393,2753,2754],{"class":403},"; axp",[393,2756,416],{"class":415},[393,2758,2759],{"class":565},"set_ylabel",[393,2761,569],{"class":415},[393,2763,1227],{"class":1226},[393,2765,2766],{"class":1230},"dim 1",[393,2768,1227],{"class":1226},[393,2770,576],{"class":415},[393,2772,2773,2775,2777,2780,2782,2785,2787,2790,2792,2794,2796,2799,2801,2804,2806,2809,2811,2813,2815,2818,2820,2822,2825,2827],{"class":395,"line":535},[393,2774,2414],{"class":403},[393,2776,416],{"class":415},[393,2778,2779],{"class":565},"legend",[393,2781,569],{"class":415},[393,2783,2784],{"class":1017},"fontsize",[393,2786,591],{"class":590},[393,2788,2789],{"class":572},"8",[393,2791,1514],{"class":415},[393,2793,2754],{"class":403},[393,2795,416],{"class":415},[393,2797,2798],{"class":565},"grid",[393,2800,569],{"class":415},[393,2802,2803],{"class":1017},"alpha",[393,2805,591],{"class":590},[393,2807,2808],{"class":572},"0.3",[393,2810,1514],{"class":415},[393,2812,2754],{"class":403},[393,2814,416],{"class":415},[393,2816,2817],{"class":565},"set_aspect",[393,2819,569],{"class":415},[393,2821,1227],{"class":1226},[393,2823,2824],{"class":1230},"equal",[393,2826,1227],{"class":1226},[393,2828,576],{"class":415},[393,2830,2831],{"class":395,"line":552},[393,2832,433],{"emptyLinePlaceholder":432},[393,2834,2835,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2875,2877,2879],{"class":395,"line":557},[393,2836,2837],{"class":403},"axc",[393,2839,416],{"class":415},[393,2841,2467],{"class":565},[393,2843,569],{"class":415},[393,2845,1674],{"class":565},[393,2847,463],{"class":415},[393,2849,1549],{"class":565},[393,2851,569],{"class":415},[393,2853,1054],{"class":565},[393,2855,463],{"class":415},[393,2857,1182],{"class":565},[393,2859,2172],{"class":415},[393,2861,2497],{"class":1017},[393,2863,591],{"class":590},[393,2865,1227],{"class":1226},[393,2867,2581],{"class":1230},[393,2869,1227],{"class":1226},[393,2871,463],{"class":415},[393,2873,2874],{"class":1017}," alpha",[393,2876,591],{"class":590},[393,2878,2310],{"class":572},[393,2880,2018],{"class":415},[393,2882,2883,2886,2888,2890,2893,2895],{"class":395,"line":579},[393,2884,2885],{"class":1017},"         label",[393,2887,591],{"class":590},[393,2889,1227],{"class":1226},[393,2891,2892],{"class":1230},"raw detections",[393,2894,1227],{"class":1226},[393,2896,576],{"class":415},[393,2898,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941],{"class":395,"line":584},[393,2900,2837],{"class":403},[393,2902,416],{"class":415},[393,2904,2467],{"class":565},[393,2906,569],{"class":415},[393,2908,1674],{"class":565},[393,2910,463],{"class":415},[393,2912,1549],{"class":565},[393,2914,569],{"class":415},[393,2916,2633],{"class":565},[393,2918,894],{"class":415},[393,2920,1227],{"class":1226},[393,2922,1231],{"class":1230},[393,2924,1227],{"class":1226},[393,2926,2478],{"class":415},[393,2928,1182],{"class":565},[393,2930,2172],{"class":415},[393,2932,2497],{"class":1017},[393,2934,591],{"class":590},[393,2936,1227],{"class":1226},[393,2938,2682],{"class":1230},[393,2940,1227],{"class":1226},[393,2942,2018],{"class":415},[393,2944,2945,2947,2949,2951,2954,2956],{"class":395,"line":601},[393,2946,2885],{"class":1017},[393,2948,591],{"class":590},[393,2950,1227],{"class":1226},[393,2952,2953],{"class":1230},"filtered",[393,2955,1227],{"class":1226},[393,2957,576],{"class":415},[393,2959,2960,2962,2964,2966,2968,2970,2973,2975],{"class":395,"line":615},[393,2961,2837],{"class":403},[393,2963,416],{"class":415},[393,2965,2720],{"class":565},[393,2967,569],{"class":415},[393,2969,1227],{"class":1226},[393,2971,2972],{"class":1230},"Cosine similarity to ground truth (higher = better)",[393,2974,1227],{"class":1226},[393,2976,576],{"class":415},[393,2978,2979,2981,2983,2985,2987,2989,2991,2993,2995,2998,3000,3002,3004,3006,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027],{"class":395,"line":620},[393,2980,2837],{"class":403},[393,2982,416],{"class":415},[393,2984,2740],{"class":565},[393,2986,569],{"class":415},[393,2988,1227],{"class":1226},[393,2990,209],{"class":1230},[393,2992,1227],{"class":1226},[393,2994,1514],{"class":415},[393,2996,2997],{"class":403},"; axc",[393,2999,416],{"class":415},[393,3001,2759],{"class":565},[393,3003,569],{"class":415},[393,3005,1227],{"class":1226},[393,3007,3008],{"class":1230},"cosine",[393,3010,1227],{"class":1226},[393,3012,1514],{"class":415},[393,3014,2997],{"class":403},[393,3016,416],{"class":415},[393,3018,2779],{"class":565},[393,3020,569],{"class":415},[393,3022,2784],{"class":1017},[393,3024,591],{"class":590},[393,3026,2789],{"class":572},[393,3028,576],{"class":415},[393,3030,3031,3033,3035,3037,3039,3041,3043,3045],{"class":395,"line":665},[393,3032,2837],{"class":403},[393,3034,416],{"class":415},[393,3036,2798],{"class":565},[393,3038,569],{"class":415},[393,3040,2803],{"class":1017},[393,3042,591],{"class":590},[393,3044,2808],{"class":572},[393,3046,576],{"class":415},[393,3048,3049],{"class":395,"line":672},[393,3050,433],{"emptyLinePlaceholder":432},[393,3052,3053,3056,3058,3061,3063,3066,3068,3071],{"class":395,"line":679},[393,3054,3055],{"class":403},"plt",[393,3057,416],{"class":415},[393,3059,3060],{"class":565},"tight_layout",[393,3062,1757],{"class":415},[393,3064,3065],{"class":403},"; plt",[393,3067,416],{"class":415},[393,3069,3070],{"class":565},"show",[393,3072,756],{"class":415},[393,3074,3075,3077,3079,3081,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106],{"class":395,"line":685},[393,3076,1699],{"class":1160},[393,3078,569],{"class":415},[393,3080,1283],{"class":623},[393,3082,3083],{"class":1230},"\"raw mean cos = ",[393,3085,1709],{"class":572},[393,3087,1741],{"class":565},[393,3089,569],{"class":415},[393,3091,1054],{"class":565},[393,3093,463],{"class":415},[393,3095,1182],{"class":565},[393,3097,750],{"class":415},[393,3099,1754],{"class":565},[393,3101,1757],{"class":415},[393,3103,1760],{"class":623},[393,3105,1714],{"class":572},[393,3107,3108],{"class":1230},"   \"\n",[393,3110,3111,3113,3116,3118,3120,3122,3124,3126,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149],{"class":395,"line":691},[393,3112,1733],{"class":623},[393,3114,3115],{"class":1230},"\"filtered mean cos = ",[393,3117,1709],{"class":572},[393,3119,1741],{"class":565},[393,3121,569],{"class":415},[393,3123,2633],{"class":565},[393,3125,894],{"class":415},[393,3127,3128],{"class":1226},"'",[393,3130,1231],{"class":1230},[393,3132,3128],{"class":1226},[393,3134,2478],{"class":415},[393,3136,1182],{"class":565},[393,3138,750],{"class":415},[393,3140,1754],{"class":565},[393,3142,1757],{"class":415},[393,3144,1760],{"class":623},[393,3146,1714],{"class":572},[393,3148,1227],{"class":1230},[393,3150,576],{"class":415},[338,3152,3153],{},[3154,3155],"img",{"alt":389,"src":3156},"\u002F_nb\u002Fe7a3aaee4e2aa5e6.png",[1768,3158],{"data":3159,"kind":1771},"cmF3IG1lYW4gY29zID0gMC44NTUgICBmaWx0ZXJlZCBtZWFuIGNvcyA9IDAuOTI4Cg==",[3161,3162,3164],"h2",{"id":3163},"adaptive-gain-via-the-covariance","Adaptive gain via the covariance",[338,3166,3167,3168,3171,3172,124,3174,124,3176,3179,3180,416],{},"The variance starts high (the filter knows it is guessing) and\ncollapses as evidence accumulates — that shrinking is what makes the\nKalman gain large early and small later, the behaviour EMA's fixed\n",[347,3169,3170],{},"rho"," only approximates. The covariance stays diagonal throughout\n(diagonal ",[347,3173,358],{},[347,3175,362],{},[347,3177,3178],{},"P0","), so this is genuinely ",[347,3181,366],{},[384,3183,3185],{"className":386,"code":3184,"language":388,"meta":389,"style":389},"var = torch.stack([rec[\"emb_cov\"][k].diagonal() for k in range(T)])  # (T, D)\noffdiag = torch.stack([\n    (rec[\"emb_cov\"][k] - torch.diag(rec[\"emb_cov\"][k].diagonal())).abs().max()\n    for k in range(T)])\nfig, ax = plt.subplots(figsize=(7, 4))\nfor j in range(0, D, 4):\n    ax.plot(t, var[:, j], label=f\"Var(dim {j})\")\nax.set_title(f\"Per-dimension variance shrinks under measurements\\n\"\n             f\"(max off-diagonal entry over the run: {offdiag.max():.1e} \"\n             f\"-> stays diagonal)\")\nax.set_xlabel(\"frame\"); ax.set_ylabel(\"variance\")\nax.legend(fontsize=8); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[347,3186,3187,3241,3257,3321,3338,3373,3399,3445,3468,3495,3504,3540,3574],{"__ignoreMap":389},[393,3188,3189,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3238],{"class":395,"line":396},[393,3190,3191],{"class":403},"var ",[393,3193,591],{"class":590},[393,3195,710],{"class":403},[393,3197,416],{"class":415},[393,3199,1506],{"class":565},[393,3201,1097],{"class":415},[393,3203,2633],{"class":565},[393,3205,894],{"class":415},[393,3207,1227],{"class":1226},[393,3209,2081],{"class":1230},[393,3211,1227],{"class":1226},[393,3213,3214],{"class":415},"][",[393,3216,1114],{"class":565},[393,3218,1127],{"class":415},[393,3220,354],{"class":565},[393,3222,1757],{"class":415},[393,3224,1151],{"class":399},[393,3226,1154],{"class":565},[393,3228,1157],{"class":399},[393,3230,1161],{"class":1160},[393,3232,569],{"class":415},[393,3234,747],{"class":565},[393,3236,3237],{"class":415},")])",[393,3239,3240],{"class":597},"  # (T, D)\n",[393,3242,3243,3246,3248,3250,3252,3254],{"class":395,"line":407},[393,3244,3245],{"class":403},"offdiag ",[393,3247,591],{"class":590},[393,3249,710],{"class":403},[393,3251,416],{"class":415},[393,3253,1506],{"class":565},[393,3255,3256],{"class":415},"([\n",[393,3258,3259,3262,3264,3266,3268,3270,3272,3274,3276,3278,3281,3283,3285,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3311,3314,3316,3319],{"class":395,"line":429},[393,3260,3261],{"class":415},"    (",[393,3263,2633],{"class":565},[393,3265,894],{"class":415},[393,3267,1227],{"class":1226},[393,3269,2081],{"class":1230},[393,3271,1227],{"class":1226},[393,3273,3214],{"class":415},[393,3275,1114],{"class":565},[393,3277,814],{"class":415},[393,3279,3280],{"class":590}," -",[393,3282,710],{"class":565},[393,3284,416],{"class":415},[393,3286,3287],{"class":565},"diag",[393,3289,569],{"class":415},[393,3291,2633],{"class":565},[393,3293,894],{"class":415},[393,3295,1227],{"class":1226},[393,3297,2081],{"class":1230},[393,3299,1227],{"class":1226},[393,3301,3214],{"class":415},[393,3303,1114],{"class":565},[393,3305,1127],{"class":415},[393,3307,354],{"class":565},[393,3309,3310],{"class":415},"())).",[393,3312,3313],{"class":565},"abs",[393,3315,718],{"class":415},[393,3317,3318],{"class":565},"max",[393,3320,756],{"class":415},[393,3322,3323,3325,3327,3329,3331,3333,3335],{"class":395,"line":436},[393,3324,1306],{"class":399},[393,3326,1154],{"class":565},[393,3328,1157],{"class":399},[393,3330,1161],{"class":1160},[393,3332,569],{"class":415},[393,3334,747],{"class":565},[393,3336,3337],{"class":415},")])\n",[393,3339,3340,3342,3344,3347,3349,3351,3353,3355,3357,3360,3362,3364,3367,3369,3371],{"class":395,"line":444},[393,3341,2407],{"class":403},[393,3343,463],{"class":415},[393,3345,3346],{"class":403}," ax ",[393,3348,591],{"class":590},[393,3350,2426],{"class":403},[393,3352,416],{"class":415},[393,3354,2431],{"class":565},[393,3356,569],{"class":415},[393,3358,3359],{"class":1017},"figsize",[393,3361,591],{"class":590},[393,3363,569],{"class":415},[393,3365,3366],{"class":572},"7",[393,3368,463],{"class":415},[393,3370,2456],{"class":572},[393,3372,2397],{"class":415},[393,3374,3375,3378,3381,3383,3385,3387,3389,3391,3393,3395,3397],{"class":395,"line":469},[393,3376,3377],{"class":399},"for",[393,3379,3380],{"class":403}," j ",[393,3382,1157],{"class":399},[393,3384,1161],{"class":1160},[393,3386,569],{"class":415},[393,3388,573],{"class":572},[393,3390,463],{"class":415},[393,3392,797],{"class":565},[393,3394,463],{"class":415},[393,3396,2456],{"class":572},[393,3398,662],{"class":415},[393,3400,3401,3404,3406,3408,3410,3412,3414,3417,3419,3422,3424,3426,3428,3430,3433,3435,3438,3440,3443],{"class":395,"line":486},[393,3402,3403],{"class":403},"    ax",[393,3405,416],{"class":415},[393,3407,2467],{"class":565},[393,3409,569],{"class":415},[393,3411,1674],{"class":565},[393,3413,463],{"class":415},[393,3415,3416],{"class":565}," var",[393,3418,808],{"class":415},[393,3420,3421],{"class":565}," j",[393,3423,2478],{"class":415},[393,3425,2521],{"class":1017},[393,3427,591],{"class":590},[393,3429,1283],{"class":623},[393,3431,3432],{"class":1230},"\"Var(dim ",[393,3434,1709],{"class":572},[393,3436,3437],{"class":565},"j",[393,3439,1714],{"class":572},[393,3441,3442],{"class":1230},")\"",[393,3444,576],{"class":415},[393,3446,3447,3450,3452,3454,3456,3458,3461,3465],{"class":395,"line":513},[393,3448,3449],{"class":403},"ax",[393,3451,416],{"class":415},[393,3453,2720],{"class":565},[393,3455,569],{"class":415},[393,3457,1283],{"class":623},[393,3459,3460],{"class":1230},"\"Per-dimension variance shrinks under measurements",[393,3462,3464],{"class":3463},"s_hVV","\\n",[393,3466,3467],{"class":1230},"\"\n",[393,3469,3470,3473,3476,3478,3481,3483,3485,3487,3490,3492],{"class":395,"line":535},[393,3471,3472],{"class":623},"             f",[393,3474,3475],{"class":1230},"\"(max off-diagonal entry over the run: ",[393,3477,1709],{"class":572},[393,3479,3480],{"class":565},"offdiag",[393,3482,416],{"class":415},[393,3484,3318],{"class":565},[393,3486,1757],{"class":415},[393,3488,3489],{"class":623},":.1e",[393,3491,1714],{"class":572},[393,3493,3494],{"class":1230}," \"\n",[393,3496,3497,3499,3502],{"class":395,"line":552},[393,3498,3472],{"class":623},[393,3500,3501],{"class":1230},"\"-> stays diagonal)\"",[393,3503,576],{"class":415},[393,3505,3506,3508,3510,3512,3514,3516,3518,3520,3522,3525,3527,3529,3531,3533,3536,3538],{"class":395,"line":557},[393,3507,3449],{"class":403},[393,3509,416],{"class":415},[393,3511,2740],{"class":565},[393,3513,569],{"class":415},[393,3515,1227],{"class":1226},[393,3517,209],{"class":1230},[393,3519,1227],{"class":1226},[393,3521,1514],{"class":415},[393,3523,3524],{"class":403},"; ax",[393,3526,416],{"class":415},[393,3528,2759],{"class":565},[393,3530,569],{"class":415},[393,3532,1227],{"class":1226},[393,3534,3535],{"class":1230},"variance",[393,3537,1227],{"class":1226},[393,3539,576],{"class":415},[393,3541,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572],{"class":395,"line":579},[393,3543,3449],{"class":403},[393,3545,416],{"class":415},[393,3547,2779],{"class":565},[393,3549,569],{"class":415},[393,3551,2784],{"class":1017},[393,3553,591],{"class":590},[393,3555,2789],{"class":572},[393,3557,1514],{"class":415},[393,3559,3524],{"class":403},[393,3561,416],{"class":415},[393,3563,2798],{"class":565},[393,3565,569],{"class":415},[393,3567,2803],{"class":1017},[393,3569,591],{"class":590},[393,3571,2808],{"class":572},[393,3573,576],{"class":415},[393,3575,3576,3578,3580,3582,3584,3586,3588,3590],{"class":395,"line":584},[393,3577,3055],{"class":403},[393,3579,416],{"class":415},[393,3581,3060],{"class":565},[393,3583,1757],{"class":415},[393,3585,3065],{"class":403},[393,3587,416],{"class":415},[393,3589,3070],{"class":565},[393,3591,756],{"class":415},[338,3593,3594],{},[3154,3595],{"alt":389,"src":3596},"\u002F_nb\u002F3839756fb05bec83.png",[338,3598,3599,3602,3603,3606,3607,3609],{},[342,3600,3601],{},"Takeaway."," A diagonal Kalman gives EMA-like cost with principled,\nadaptive, ",[352,3604,3605],{},"measurable"," uncertainty. When you need the full covariance\nbut ",[347,3608,1722],{}," is large, the information filter and the EnKF (notebook 4)\nscale better.",[3611,3612,3613],"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);}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":389,"searchDepth":429,"depth":429,"links":3615},[3616],{"id":3163,"depth":407,"text":3164},"A Kalman filter on an embedding with a random-walk model\n(F = H = I) and diagonal process\u002Fmeasurement noise. With diagonal\nQ, R and a diagonal initial covariance the per-dimension filters\nare independent, so the cost stays O(D) while — unlike EMA — the\nfilter carries a real uncertainty that adapts the gain: it trusts\nmeasurements more while uncertain (early frames) and less once\nconfident.","md",{"notebook":432},{"icon":63},{"title":65,"description":3617},"pY7LosBaooQCemV6725ryMzzijon2L2OOcTMo4oJQCs",{},1785139890221]