[{"data":1,"prerenderedAt":5745},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Ftutorials\u002Fcascaded_and_parallel":328,"docyard:crossref-index":5744},[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":115,"body":330,"description":340,"extension":5739,"meta":5740,"navigation":5741,"path":116,"seo":5742,"stem":117,"__hash__":5743},"content\u002F5.notebooks\u002Ftutorials\u002F6.cascaded_and_parallel.md",{"type":331,"value":332,"toc":5727},"minimark",[333,337,341,352,745,750,755,758,1619,1623,1627,1633,2845,2851,2855,2858,3275,3279,3282,3285,3320,3806,3810,3817,4133,4137,4569,4572,4575,4579,4582,5101,5106,5109,5113,5116,5680,5683,5686,5690,5720,5723],[334,335,115],"h1",{"id":336},"_6-end-to-end-k2-cascaded-and-parallel-fusion",[338,339,340],"p",{},"Time to assemble everything. We'll build a canonical\ntwo-stage cascaded tracker — strict appearance gating in\nstage 1 and relaxed motion-aware gating in stage 2 — run it\non a synthetic clip with known ground truth, and contrast it\nagainst a parallel-fusion variant.",[342,343,344],"blockquote",{},[338,345,346,347,351],{},"For an Optuna sweep with Mask2Former-Cityscapes detections,\nsee ",[348,349,350],"code",{},"examples\u002Fhpo_sweep\u002F",".\nThis notebook is the self-contained educational version,\nwith everything happening in-process on deterministic\nsynthetic data.",[353,354,359],"pre",{"className":355,"code":356,"language":357,"meta":358,"style":358},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import torch\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nimport unitrack\nfrom unitrack.assignment import Associate, Jonker\nfrom unitrack.costs import CDist, Cosine, Reduce\nfrom unitrack.data import Detections, FrameContext, TensorSpec\nfrom unitrack.gates import ClassGate, MotionGate, ScoreGate\nfrom unitrack.lifecycle import (\n    ConfirmedOnly,\n    StandardLifecycle,\n    StatusFilter,\n    TrackletStatus,\n)\nfrom unitrack.pipeline import Filter, Gated, Parallel, Pipe, Sequential\nfrom unitrack.pipeline.merge import WeightedSum\nfrom unitrack.states import (\n    FromDetectionField,\n    Identity,\n    Replace,\n    State,\n)\nfrom unitrack.states.kalman import KalmanCentroid2D\n\ntorch.manual_seed(42)\n\n","python","",[348,360,361,374,396,410,417,425,450,477,504,531,548,557,565,573,581,587,624,645,661,669,677,685,693,698,719,724],{"__ignoreMap":358},[362,363,366,370],"span",{"class":364,"line":365},"line",1,[362,367,369],{"class":368},"sVHd0","import",[362,371,373],{"class":372},"su5hD"," torch\n",[362,375,377,379,382,386,390,393],{"class":364,"line":376},2,[362,378,369],{"class":368},[362,380,381],{"class":372}," matplotlib",[362,383,385],{"class":384},"sP7_E",".",[362,387,389],{"class":388},"skxfh","pyplot",[362,391,392],{"class":368}," as",[362,394,395],{"class":372}," plt\n",[362,397,399,401,404,407],{"class":364,"line":398},3,[362,400,369],{"class":368},[362,402,403],{"class":372}," numpy ",[362,405,406],{"class":368},"as",[362,408,409],{"class":372}," np\n",[362,411,413],{"class":364,"line":412},4,[362,414,416],{"emptyLinePlaceholder":415},true,"\n",[362,418,420,422],{"class":364,"line":419},5,[362,421,369],{"class":368},[362,423,424],{"class":372}," unitrack\n",[362,426,428,431,434,436,439,441,444,447],{"class":364,"line":427},6,[362,429,430],{"class":368},"from",[362,432,433],{"class":372}," unitrack",[362,435,385],{"class":384},[362,437,438],{"class":372},"assignment ",[362,440,369],{"class":368},[362,442,443],{"class":372}," Associate",[362,445,446],{"class":384},",",[362,448,449],{"class":372}," Jonker\n",[362,451,453,455,457,459,462,464,467,469,472,474],{"class":364,"line":452},7,[362,454,430],{"class":368},[362,456,433],{"class":372},[362,458,385],{"class":384},[362,460,461],{"class":372},"costs ",[362,463,369],{"class":368},[362,465,466],{"class":372}," CDist",[362,468,446],{"class":384},[362,470,471],{"class":372}," Cosine",[362,473,446],{"class":384},[362,475,476],{"class":372}," Reduce\n",[362,478,480,482,484,486,489,491,494,496,499,501],{"class":364,"line":479},8,[362,481,430],{"class":368},[362,483,433],{"class":372},[362,485,385],{"class":384},[362,487,488],{"class":372},"data ",[362,490,369],{"class":368},[362,492,493],{"class":372}," Detections",[362,495,446],{"class":384},[362,497,498],{"class":372}," FrameContext",[362,500,446],{"class":384},[362,502,503],{"class":372}," TensorSpec\n",[362,505,507,509,511,513,516,518,521,523,526,528],{"class":364,"line":506},9,[362,508,430],{"class":368},[362,510,433],{"class":372},[362,512,385],{"class":384},[362,514,515],{"class":372},"gates ",[362,517,369],{"class":368},[362,519,520],{"class":372}," ClassGate",[362,522,446],{"class":384},[362,524,525],{"class":372}," MotionGate",[362,527,446],{"class":384},[362,529,530],{"class":372}," ScoreGate\n",[362,532,534,536,538,540,543,545],{"class":364,"line":533},10,[362,535,430],{"class":368},[362,537,433],{"class":372},[362,539,385],{"class":384},[362,541,542],{"class":372},"lifecycle ",[362,544,369],{"class":368},[362,546,547],{"class":384}," (\n",[362,549,551,554],{"class":364,"line":550},11,[362,552,553],{"class":372},"    ConfirmedOnly",[362,555,556],{"class":384},",\n",[362,558,560,563],{"class":364,"line":559},12,[362,561,562],{"class":372},"    StandardLifecycle",[362,564,556],{"class":384},[362,566,568,571],{"class":364,"line":567},13,[362,569,570],{"class":372},"    StatusFilter",[362,572,556],{"class":384},[362,574,576,579],{"class":364,"line":575},14,[362,577,578],{"class":372},"    TrackletStatus",[362,580,556],{"class":384},[362,582,584],{"class":364,"line":583},15,[362,585,586],{"class":384},")\n",[362,588,590,592,594,596,599,601,604,606,609,611,614,616,619,621],{"class":364,"line":589},16,[362,591,430],{"class":368},[362,593,433],{"class":372},[362,595,385],{"class":384},[362,597,598],{"class":372},"pipeline ",[362,600,369],{"class":368},[362,602,603],{"class":372}," Filter",[362,605,446],{"class":384},[362,607,608],{"class":372}," Gated",[362,610,446],{"class":384},[362,612,613],{"class":372}," Parallel",[362,615,446],{"class":384},[362,617,618],{"class":372}," Pipe",[362,620,446],{"class":384},[362,622,623],{"class":372}," Sequential\n",[362,625,627,629,631,633,635,637,640,642],{"class":364,"line":626},17,[362,628,430],{"class":368},[362,630,433],{"class":372},[362,632,385],{"class":384},[362,634,256],{"class":372},[362,636,385],{"class":384},[362,638,639],{"class":372},"merge ",[362,641,369],{"class":368},[362,643,644],{"class":372}," WeightedSum\n",[362,646,648,650,652,654,657,659],{"class":364,"line":647},18,[362,649,430],{"class":368},[362,651,433],{"class":372},[362,653,385],{"class":384},[362,655,656],{"class":372},"states ",[362,658,369],{"class":368},[362,660,547],{"class":384},[362,662,664,667],{"class":364,"line":663},19,[362,665,666],{"class":372},"    FromDetectionField",[362,668,556],{"class":384},[362,670,672,675],{"class":364,"line":671},20,[362,673,674],{"class":372},"    Identity",[362,676,556],{"class":384},[362,678,680,683],{"class":364,"line":679},21,[362,681,682],{"class":372},"    Replace",[362,684,556],{"class":384},[362,686,688,691],{"class":364,"line":687},22,[362,689,690],{"class":372},"    State",[362,692,556],{"class":384},[362,694,696],{"class":364,"line":695},23,[362,697,586],{"class":384},[362,699,701,703,705,707,709,711,714,716],{"class":364,"line":700},24,[362,702,430],{"class":368},[362,704,433],{"class":372},[362,706,385],{"class":384},[362,708,270],{"class":372},[362,710,385],{"class":384},[362,712,713],{"class":372},"kalman ",[362,715,369],{"class":368},[362,717,718],{"class":372}," KalmanCentroid2D\n",[362,720,722],{"class":364,"line":721},25,[362,723,416],{"emptyLinePlaceholder":415},[362,725,727,730,732,736,739,743],{"class":364,"line":726},26,[362,728,729],{"class":372},"torch",[362,731,385],{"class":384},[362,733,735],{"class":734},"slqww","manual_seed",[362,737,738],{"class":384},"(",[362,740,742],{"class":741},"srdBf","42",[362,744,586],{"class":384},[746,747],"docyard-notebook-output",{"data":748,"kind":749},"PHRvcmNoLl9DLkdlbmVyYXRvciBhdCAweDc3MDYwOGJjYzlkMD4=","result",[751,752,754],"h2",{"id":753},"synthetic-clip-with-known-ground-truth","Synthetic clip with known ground truth",[338,756,757],{},"Three identities, eight frames. Each identity has a constant\nkernel embedding plus a 2D position drifting at constant\nvelocity. Per-frame detection order is shuffled — the tracker\nhas to use the kernel embedding (and motion) to recover\nidentities.",[353,759,761],{"className":355,"code":760,"language":357,"meta":358,"style":358},"N_FRAMES, N_OBJS, K_DIM = 16, 3, 8\n\n\ndef make_clip(seed: int = 0):\n    g = torch.Generator().manual_seed(seed)\n    # Orthogonal appearance embeddings so cosine cleanly separates ids.\n    raw = torch.randn(K_DIM, K_DIM, generator=g)\n    q, _ = torch.linalg.qr(raw)\n    kernels = q[:N_OBJS]  # (N_OBJS, K_DIM), rows orthonormal.\n\n    classes = torch.tensor([0, 0, 1])\n    positions = torch.tensor([[20.0, 50.0], [100.0, 30.0], [180.0, 80.0]])\n    # Slow, well-separated velocities — Kalman's CV model tracks these\n    # cleanly across the 16-frame window.\n    velocities = torch.tensor([[0.6, 0.2], [-0.4, 0.3], [-0.3, -0.2]])\n\n    clip, gt = [], []\n    for k in range(N_FRAMES):\n        order = torch.randperm(N_OBJS, generator=g)\n        gt.append(order)\n        kernel_obs = kernels[order] + 0.01 * torch.randn(N_OBJS, K_DIM, generator=g)\n        kernel_obs = kernel_obs \u002F kernel_obs.norm(dim=-1, keepdim=True)\n        pos_obs = positions[order] + k * velocities[order]\n        clip.append(\n            Detections(\n                index=torch.arange(N_OBJS, dtype=torch.int64),\n                kernel=kernel_obs.float(),\n                klass=classes[order],\n                score=torch.full((N_OBJS,), 0.9),\n                centroid=pos_obs.float(),\n                batch_size=[N_OBJS],\n            )\n        )\n    return clip, torch.stack(gt)\n\n\nclip, gt = make_clip()\nprint(f\"Clip: {len(clip)} frames × {N_OBJS} detections.\")\nprint(f\"GT identity per frame:\\n{gt.numpy()}\")\n\n",[348,762,763,796,800,804,835,862,868,905,936,958,962,994,1047,1052,1057,1114,1118,1136,1156,1184,1201,1251,1294,1327,1339,1346,1381,1400,1418,1446,1463,1477,1483,1489,1514,1519,1524,1540,1585],{"__ignoreMap":358},[362,764,765,769,771,774,776,779,783,786,788,791,793],{"class":364,"line":365},[362,766,768],{"class":767},"s_hVV","N_FRAMES",[362,770,446],{"class":384},[362,772,773],{"class":767}," N_OBJS",[362,775,446],{"class":384},[362,777,778],{"class":767}," K_DIM",[362,780,782],{"class":781},"smGrS"," =",[362,784,785],{"class":741}," 16",[362,787,446],{"class":384},[362,789,790],{"class":741}," 3",[362,792,446],{"class":384},[362,794,795],{"class":741}," 8\n",[362,797,798],{"class":364,"line":376},[362,799,416],{"emptyLinePlaceholder":415},[362,801,802],{"class":364,"line":398},[362,803,416],{"emptyLinePlaceholder":415},[362,805,806,810,814,816,820,823,827,829,832],{"class":364,"line":412},[362,807,809],{"class":808},"sbsja","def",[362,811,813],{"class":812},"sGLFI"," make_clip",[362,815,738],{"class":384},[362,817,819],{"class":818},"sFwrP","seed",[362,821,822],{"class":384},":",[362,824,826],{"class":825},"sZMiF"," int",[362,828,782],{"class":781},[362,830,831],{"class":741}," 0",[362,833,834],{"class":384},"):\n",[362,836,837,840,843,846,848,851,854,856,858,860],{"class":364,"line":419},[362,838,839],{"class":372},"    g ",[362,841,842],{"class":781},"=",[362,844,845],{"class":372}," torch",[362,847,385],{"class":384},[362,849,850],{"class":734},"Generator",[362,852,853],{"class":384},"().",[362,855,735],{"class":734},[362,857,738],{"class":384},[362,859,819],{"class":734},[362,861,586],{"class":384},[362,863,864],{"class":364,"line":427},[362,865,867],{"class":866},"sutJx","    # Orthogonal appearance embeddings so cosine cleanly separates ids.\n",[362,869,870,873,875,877,879,882,884,888,890,892,894,898,900,903],{"class":364,"line":452},[362,871,872],{"class":372},"    raw ",[362,874,842],{"class":781},[362,876,845],{"class":372},[362,878,385],{"class":384},[362,880,881],{"class":734},"randn",[362,883,738],{"class":384},[362,885,887],{"class":886},"sptTA","K_DIM",[362,889,446],{"class":384},[362,891,778],{"class":886},[362,893,446],{"class":384},[362,895,897],{"class":896},"s99_P"," generator",[362,899,842],{"class":781},[362,901,902],{"class":734},"g",[362,904,586],{"class":384},[362,906,907,910,912,915,917,919,921,924,926,929,931,934],{"class":364,"line":479},[362,908,909],{"class":372},"    q",[362,911,446],{"class":384},[362,913,914],{"class":372}," _ ",[362,916,842],{"class":781},[362,918,845],{"class":372},[362,920,385],{"class":384},[362,922,923],{"class":388},"linalg",[362,925,385],{"class":384},[362,927,928],{"class":734},"qr",[362,930,738],{"class":384},[362,932,933],{"class":734},"raw",[362,935,586],{"class":384},[362,937,938,941,943,946,949,952,955],{"class":364,"line":506},[362,939,940],{"class":372},"    kernels ",[362,942,842],{"class":781},[362,944,945],{"class":372}," q",[362,947,948],{"class":384},"[:",[362,950,951],{"class":767},"N_OBJS",[362,953,954],{"class":384},"]",[362,956,957],{"class":866},"  # (N_OBJS, K_DIM), rows orthonormal.\n",[362,959,960],{"class":364,"line":533},[362,961,416],{"emptyLinePlaceholder":415},[362,963,964,967,969,971,973,976,979,982,984,986,988,991],{"class":364,"line":550},[362,965,966],{"class":372},"    classes ",[362,968,842],{"class":781},[362,970,845],{"class":372},[362,972,385],{"class":384},[362,974,975],{"class":734},"tensor",[362,977,978],{"class":384},"([",[362,980,981],{"class":741},"0",[362,983,446],{"class":384},[362,985,831],{"class":741},[362,987,446],{"class":384},[362,989,990],{"class":741}," 1",[362,992,993],{"class":384},"])\n",[362,995,996,999,1001,1003,1005,1007,1010,1013,1015,1018,1021,1024,1027,1029,1032,1034,1036,1039,1041,1044],{"class":364,"line":559},[362,997,998],{"class":372},"    positions ",[362,1000,842],{"class":781},[362,1002,845],{"class":372},[362,1004,385],{"class":384},[362,1006,975],{"class":734},[362,1008,1009],{"class":384},"([[",[362,1011,1012],{"class":741},"20.0",[362,1014,446],{"class":384},[362,1016,1017],{"class":741}," 50.0",[362,1019,1020],{"class":384},"],",[362,1022,1023],{"class":384}," [",[362,1025,1026],{"class":741},"100.0",[362,1028,446],{"class":384},[362,1030,1031],{"class":741}," 30.0",[362,1033,1020],{"class":384},[362,1035,1023],{"class":384},[362,1037,1038],{"class":741},"180.0",[362,1040,446],{"class":384},[362,1042,1043],{"class":741}," 80.0",[362,1045,1046],{"class":384},"]])\n",[362,1048,1049],{"class":364,"line":567},[362,1050,1051],{"class":866},"    # Slow, well-separated velocities — Kalman's CV model tracks these\n",[362,1053,1054],{"class":364,"line":575},[362,1055,1056],{"class":866},"    # cleanly across the 16-frame window.\n",[362,1058,1059,1062,1064,1066,1068,1070,1072,1075,1077,1080,1082,1084,1087,1090,1092,1095,1097,1099,1101,1104,1106,1109,1112],{"class":364,"line":583},[362,1060,1061],{"class":372},"    velocities ",[362,1063,842],{"class":781},[362,1065,845],{"class":372},[362,1067,385],{"class":384},[362,1069,975],{"class":734},[362,1071,1009],{"class":384},[362,1073,1074],{"class":741},"0.6",[362,1076,446],{"class":384},[362,1078,1079],{"class":741}," 0.2",[362,1081,1020],{"class":384},[362,1083,1023],{"class":384},[362,1085,1086],{"class":781},"-",[362,1088,1089],{"class":741},"0.4",[362,1091,446],{"class":384},[362,1093,1094],{"class":741}," 0.3",[362,1096,1020],{"class":384},[362,1098,1023],{"class":384},[362,1100,1086],{"class":781},[362,1102,1103],{"class":741},"0.3",[362,1105,446],{"class":384},[362,1107,1108],{"class":781}," -",[362,1110,1111],{"class":741},"0.2",[362,1113,1046],{"class":384},[362,1115,1116],{"class":364,"line":589},[362,1117,416],{"emptyLinePlaceholder":415},[362,1119,1120,1123,1125,1128,1130,1133],{"class":364,"line":626},[362,1121,1122],{"class":372},"    clip",[362,1124,446],{"class":384},[362,1126,1127],{"class":372}," gt ",[362,1129,842],{"class":781},[362,1131,1132],{"class":384}," [],",[362,1134,1135],{"class":384}," []\n",[362,1137,1138,1141,1144,1147,1150,1152,1154],{"class":364,"line":647},[362,1139,1140],{"class":368},"    for",[362,1142,1143],{"class":372}," k ",[362,1145,1146],{"class":368},"in",[362,1148,1149],{"class":886}," range",[362,1151,738],{"class":384},[362,1153,768],{"class":886},[362,1155,834],{"class":384},[362,1157,1158,1161,1163,1165,1167,1170,1172,1174,1176,1178,1180,1182],{"class":364,"line":663},[362,1159,1160],{"class":372},"        order ",[362,1162,842],{"class":781},[362,1164,845],{"class":372},[362,1166,385],{"class":384},[362,1168,1169],{"class":734},"randperm",[362,1171,738],{"class":384},[362,1173,951],{"class":886},[362,1175,446],{"class":384},[362,1177,897],{"class":896},[362,1179,842],{"class":781},[362,1181,902],{"class":734},[362,1183,586],{"class":384},[362,1185,1186,1189,1191,1194,1196,1199],{"class":364,"line":671},[362,1187,1188],{"class":372},"        gt",[362,1190,385],{"class":384},[362,1192,1193],{"class":734},"append",[362,1195,738],{"class":384},[362,1197,1198],{"class":734},"order",[362,1200,586],{"class":384},[362,1202,1203,1206,1208,1211,1214,1216,1218,1221,1224,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249],{"class":364,"line":679},[362,1204,1205],{"class":372},"        kernel_obs ",[362,1207,842],{"class":781},[362,1209,1210],{"class":372}," kernels",[362,1212,1213],{"class":384},"[",[362,1215,1198],{"class":372},[362,1217,954],{"class":384},[362,1219,1220],{"class":781}," +",[362,1222,1223],{"class":741}," 0.01",[362,1225,1226],{"class":781}," *",[362,1228,845],{"class":372},[362,1230,385],{"class":384},[362,1232,881],{"class":734},[362,1234,738],{"class":384},[362,1236,951],{"class":886},[362,1238,446],{"class":384},[362,1240,778],{"class":886},[362,1242,446],{"class":384},[362,1244,897],{"class":896},[362,1246,842],{"class":781},[362,1248,902],{"class":734},[362,1250,586],{"class":384},[362,1252,1253,1255,1257,1260,1262,1265,1267,1270,1272,1275,1278,1281,1283,1286,1288,1292],{"class":364,"line":687},[362,1254,1205],{"class":372},[362,1256,842],{"class":781},[362,1258,1259],{"class":372}," kernel_obs ",[362,1261,124],{"class":781},[362,1263,1264],{"class":372}," kernel_obs",[362,1266,385],{"class":384},[362,1268,1269],{"class":734},"norm",[362,1271,738],{"class":384},[362,1273,1274],{"class":896},"dim",[362,1276,1277],{"class":781},"=-",[362,1279,1280],{"class":741},"1",[362,1282,446],{"class":384},[362,1284,1285],{"class":896}," keepdim",[362,1287,842],{"class":781},[362,1289,1291],{"class":1290},"s39Yj","True",[362,1293,586],{"class":384},[362,1295,1296,1299,1301,1304,1306,1308,1310,1312,1314,1317,1320,1322,1324],{"class":364,"line":695},[362,1297,1298],{"class":372},"        pos_obs ",[362,1300,842],{"class":781},[362,1302,1303],{"class":372}," positions",[362,1305,1213],{"class":384},[362,1307,1198],{"class":372},[362,1309,954],{"class":384},[362,1311,1220],{"class":781},[362,1313,1143],{"class":372},[362,1315,1316],{"class":781},"*",[362,1318,1319],{"class":372}," velocities",[362,1321,1213],{"class":384},[362,1323,1198],{"class":372},[362,1325,1326],{"class":384},"]\n",[362,1328,1329,1332,1334,1336],{"class":364,"line":700},[362,1330,1331],{"class":372},"        clip",[362,1333,385],{"class":384},[362,1335,1193],{"class":734},[362,1337,1338],{"class":384},"(\n",[362,1340,1341,1344],{"class":364,"line":721},[362,1342,1343],{"class":734},"            Detections",[362,1345,1338],{"class":384},[362,1347,1348,1351,1353,1355,1357,1360,1362,1364,1366,1369,1371,1373,1375,1378],{"class":364,"line":726},[362,1349,1350],{"class":896},"                index",[362,1352,842],{"class":781},[362,1354,729],{"class":734},[362,1356,385],{"class":384},[362,1358,1359],{"class":734},"arange",[362,1361,738],{"class":384},[362,1363,951],{"class":886},[362,1365,446],{"class":384},[362,1367,1368],{"class":896}," dtype",[362,1370,842],{"class":781},[362,1372,729],{"class":734},[362,1374,385],{"class":384},[362,1376,1377],{"class":388},"int64",[362,1379,1380],{"class":384},"),\n",[362,1382,1384,1387,1389,1392,1394,1397],{"class":364,"line":1383},27,[362,1385,1386],{"class":896},"                kernel",[362,1388,842],{"class":781},[362,1390,1391],{"class":734},"kernel_obs",[362,1393,385],{"class":384},[362,1395,1396],{"class":734},"float",[362,1398,1399],{"class":384},"(),\n",[362,1401,1403,1406,1408,1411,1413,1415],{"class":364,"line":1402},28,[362,1404,1405],{"class":896},"                klass",[362,1407,842],{"class":781},[362,1409,1410],{"class":734},"classes",[362,1412,1213],{"class":384},[362,1414,1198],{"class":734},[362,1416,1417],{"class":384},"],\n",[362,1419,1421,1424,1426,1428,1430,1433,1436,1438,1441,1444],{"class":364,"line":1420},29,[362,1422,1423],{"class":896},"                score",[362,1425,842],{"class":781},[362,1427,729],{"class":734},[362,1429,385],{"class":384},[362,1431,1432],{"class":734},"full",[362,1434,1435],{"class":384},"((",[362,1437,951],{"class":886},[362,1439,1440],{"class":384},",),",[362,1442,1443],{"class":741}," 0.9",[362,1445,1380],{"class":384},[362,1447,1449,1452,1454,1457,1459,1461],{"class":364,"line":1448},30,[362,1450,1451],{"class":896},"                centroid",[362,1453,842],{"class":781},[362,1455,1456],{"class":734},"pos_obs",[362,1458,385],{"class":384},[362,1460,1396],{"class":734},[362,1462,1399],{"class":384},[362,1464,1466,1469,1471,1473,1475],{"class":364,"line":1465},31,[362,1467,1468],{"class":896},"                batch_size",[362,1470,842],{"class":781},[362,1472,1213],{"class":384},[362,1474,951],{"class":886},[362,1476,1417],{"class":384},[362,1478,1480],{"class":364,"line":1479},32,[362,1481,1482],{"class":384},"            )\n",[362,1484,1486],{"class":364,"line":1485},33,[362,1487,1488],{"class":384},"        )\n",[362,1490,1492,1495,1498,1500,1502,1504,1507,1509,1512],{"class":364,"line":1491},34,[362,1493,1494],{"class":368},"    return",[362,1496,1497],{"class":372}," clip",[362,1499,446],{"class":384},[362,1501,845],{"class":372},[362,1503,385],{"class":384},[362,1505,1506],{"class":734},"stack",[362,1508,738],{"class":384},[362,1510,1511],{"class":734},"gt",[362,1513,586],{"class":384},[362,1515,1517],{"class":364,"line":1516},35,[362,1518,416],{"emptyLinePlaceholder":415},[362,1520,1522],{"class":364,"line":1521},36,[362,1523,416],{"emptyLinePlaceholder":415},[362,1525,1527,1529,1531,1533,1535,1537],{"class":364,"line":1526},37,[362,1528,200],{"class":372},[362,1530,446],{"class":384},[362,1532,1127],{"class":372},[362,1534,842],{"class":781},[362,1536,813],{"class":734},[362,1538,1539],{"class":384},"()\n",[362,1541,1543,1546,1548,1551,1555,1558,1561,1563,1565,1568,1571,1574,1576,1578,1580,1583],{"class":364,"line":1542},38,[362,1544,1545],{"class":886},"print",[362,1547,738],{"class":384},[362,1549,1550],{"class":808},"f",[362,1552,1554],{"class":1553},"s_sjI","\"Clip: ",[362,1556,1557],{"class":741},"{",[362,1559,1560],{"class":886},"len",[362,1562,738],{"class":384},[362,1564,200],{"class":734},[362,1566,1567],{"class":384},")",[362,1569,1570],{"class":741},"}",[362,1572,1573],{"class":1553}," frames × ",[362,1575,1557],{"class":741},[362,1577,951],{"class":886},[362,1579,1570],{"class":741},[362,1581,1582],{"class":1553}," detections.\"",[362,1584,586],{"class":384},[362,1586,1588,1590,1592,1594,1597,1600,1602,1604,1606,1609,1612,1614,1617],{"class":364,"line":1587},39,[362,1589,1545],{"class":886},[362,1591,738],{"class":384},[362,1593,1550],{"class":808},[362,1595,1596],{"class":1553},"\"GT identity per frame:",[362,1598,1599],{"class":767},"\\n",[362,1601,1557],{"class":741},[362,1603,1511],{"class":734},[362,1605,385],{"class":384},[362,1607,1608],{"class":734},"numpy",[362,1610,1611],{"class":384},"()",[362,1613,1570],{"class":741},[362,1615,1616],{"class":1553},"\"",[362,1618,586],{"class":384},[746,1620],{"data":1621,"kind":1622},"Q2xpcDogMTYgZnJhbWVzIMOXIDMgZGV0ZWN0aW9ucy4KR1QgaWRlbnRpdHkgcGVyIGZyYW1lOgpbWzEgMCAyXQogWzAgMiAxXQogWzEgMiAwXQogWzIgMSAwXQogWzEgMCAyXQogWzEgMCAyXQogWzIgMCAxXQogWzAgMiAxXQogWzIgMCAxXQogWzAgMSAyXQogWzEgMCAyXQogWzEgMiAwXQogWzAgMiAxXQogWzIgMCAxXQogWzAgMiAxXQogWzAgMSAyXV0K","stream",[751,1624,1626],{"id":1625},"whats-in-the-clip","What's in the clip?",[338,1628,1629,1630,1632],{},"The trackers below are graded against the ground truth, so let's\nlook at it first. Un-shuffling each frame by its ",[348,1631,1511],{}," labels\nrecovers three coherent trajectories (left). The appearance\nembeddings are orthonormal by construction, so the cosine\nsimilarity between identities is ≈0 off the diagonal (right) —\nappearance alone separates them, and motion is the tie-breaker\nwhen two of them (classes 0 and 0) get close.",[353,1634,1636],{"className":355,"code":1635,"language":357,"meta":358,"style":358},"fig, (axp, axk) = plt.subplots(1, 2, figsize=(12, 4))\ncmap = plt.get_cmap(\"tab10\")\n\n# (left) reconstruct ground-truth tracks from the shuffled clip.\ntracks = {o: [] for o in range(N_OBJS)}\nfor k, dets in enumerate(clip):\n    for r in range(N_OBJS):\n        tracks[int(gt[k][r])].append(dets.centroid[r])\nfor o in range(N_OBJS):\n    pts = torch.stack(tracks[o])\n    axp.plot(pts[:, 0], pts[:, 1], \"-\", color=cmap(o), alpha=0.4)\n    axp.scatter(\n        pts[:, 0],\n        pts[:, 1],\n        color=cmap(o),\n        s=20,\n        edgecolor=\"black\",\n        linewidth=0.3,\n        label=f\"identity {o}\",\n    )\n    axp.scatter(\n        pts[0, 0],\n        pts[0, 1],\n        color=cmap(o),\n        marker=\"*\",\n        s=170,\n        edgecolor=\"black\",\n        zorder=3,\n    )\naxp.set_title(\"Ground-truth clip — 3 identities in 2D (★ = frame 0)\")\naxp.set_xlabel(\"x\")\naxp.set_ylabel(\"y\")\naxp.legend(fontsize=8)\naxp.grid(alpha=0.3)\n\n# (right) appearance separability at frame 0.\nkern0 = {int(gt[0][r]): clip[0].kernel[r] for r in range(N_OBJS)}\nK = torch.stack([kern0[o] for o in range(N_OBJS)])\nkn = torch.nn.functional.normalize\nsim = kn(K, dim=-1) @ kn(K, dim=-1).T\nim = axk.imshow(sim.numpy(), cmap=\"viridis\", vmin=-1, vmax=1)\naxk.set_title(\"Appearance: orthonormal kernels → off-diagonal ≈ 0\")\naxk.set_xlabel(\"identity\")\naxk.set_ylabel(\"identity\")\naxk.set_xticks(range(N_OBJS))\naxk.set_yticks(range(N_OBJS))\nfor i in range(N_OBJS):\n    for j in range(N_OBJS):\n        axk.text(\n            j,\n            i,\n            f\"{sim[i, j]:.2f}\",\n            ha=\"center\",\n            va=\"center\",\n            color=\"white\",\n            fontsize=9,\n        )\nfig.colorbar(im, ax=axk, fraction=0.046)\nplt.tight_layout()\nplt.show()\n\n",[348,1637,1638,1697,1723,1727,1732,1767,1791,1808,1853,1869,1893,1957,1968,1979,1989,2004,2016,2032,2043,2065,2070,2080,2094,2108,2122,2137,2148,2162,2174,2178,2198,2218,2238,2259,2279,2283,2288,2346,2385,2409,2459,2518,2539,2558,2577,2598,2618,2636,2654,2667,2675,2683,2716,2733,2749,2766,2779,2784,2820,2833],{"__ignoreMap":358},[362,1639,1640,1643,1645,1648,1651,1653,1656,1658,1660,1663,1665,1668,1670,1672,1674,1677,1679,1682,1684,1686,1689,1691,1694],{"class":364,"line":365},[362,1641,1642],{"class":372},"fig",[362,1644,446],{"class":384},[362,1646,1647],{"class":384}," (",[362,1649,1650],{"class":372},"axp",[362,1652,446],{"class":384},[362,1654,1655],{"class":372}," axk",[362,1657,1567],{"class":384},[362,1659,782],{"class":781},[362,1661,1662],{"class":372}," plt",[362,1664,385],{"class":384},[362,1666,1667],{"class":734},"subplots",[362,1669,738],{"class":384},[362,1671,1280],{"class":741},[362,1673,446],{"class":384},[362,1675,1676],{"class":741}," 2",[362,1678,446],{"class":384},[362,1680,1681],{"class":896}," figsize",[362,1683,842],{"class":781},[362,1685,738],{"class":384},[362,1687,1688],{"class":741},"12",[362,1690,446],{"class":384},[362,1692,1693],{"class":741}," 4",[362,1695,1696],{"class":384},"))\n",[362,1698,1699,1702,1704,1706,1708,1711,1713,1716,1719,1721],{"class":364,"line":376},[362,1700,1701],{"class":372},"cmap ",[362,1703,842],{"class":781},[362,1705,1662],{"class":372},[362,1707,385],{"class":384},[362,1709,1710],{"class":734},"get_cmap",[362,1712,738],{"class":384},[362,1714,1616],{"class":1715},"sjJ54",[362,1717,1718],{"class":1553},"tab10",[362,1720,1616],{"class":1715},[362,1722,586],{"class":384},[362,1724,1725],{"class":364,"line":398},[362,1726,416],{"emptyLinePlaceholder":415},[362,1728,1729],{"class":364,"line":412},[362,1730,1731],{"class":866},"# (left) reconstruct ground-truth tracks from the shuffled clip.\n",[362,1733,1734,1737,1739,1742,1745,1747,1750,1753,1756,1758,1760,1762,1764],{"class":364,"line":419},[362,1735,1736],{"class":372},"tracks ",[362,1738,842],{"class":781},[362,1740,1741],{"class":384}," {",[362,1743,1744],{"class":372},"o",[362,1746,822],{"class":384},[362,1748,1749],{"class":384}," []",[362,1751,1752],{"class":368}," for",[362,1754,1755],{"class":372}," o ",[362,1757,1146],{"class":368},[362,1759,1149],{"class":886},[362,1761,738],{"class":384},[362,1763,951],{"class":886},[362,1765,1766],{"class":384},")}\n",[362,1768,1769,1772,1775,1777,1780,1782,1785,1787,1789],{"class":364,"line":427},[362,1770,1771],{"class":368},"for",[362,1773,1774],{"class":372}," k",[362,1776,446],{"class":384},[362,1778,1779],{"class":372}," dets ",[362,1781,1146],{"class":368},[362,1783,1784],{"class":886}," enumerate",[362,1786,738],{"class":384},[362,1788,200],{"class":734},[362,1790,834],{"class":384},[362,1792,1793,1795,1798,1800,1802,1804,1806],{"class":364,"line":452},[362,1794,1140],{"class":368},[362,1796,1797],{"class":372}," r ",[362,1799,1146],{"class":368},[362,1801,1149],{"class":886},[362,1803,738],{"class":384},[362,1805,951],{"class":886},[362,1807,834],{"class":384},[362,1809,1810,1813,1815,1818,1820,1822,1824,1827,1830,1833,1836,1838,1840,1843,1845,1847,1849,1851],{"class":364,"line":479},[362,1811,1812],{"class":372},"        tracks",[362,1814,1213],{"class":384},[362,1816,1817],{"class":825},"int",[362,1819,738],{"class":384},[362,1821,1511],{"class":734},[362,1823,1213],{"class":384},[362,1825,1826],{"class":734},"k",[362,1828,1829],{"class":384},"][",[362,1831,1832],{"class":734},"r",[362,1834,1835],{"class":384},"])].",[362,1837,1193],{"class":734},[362,1839,738],{"class":384},[362,1841,1842],{"class":734},"dets",[362,1844,385],{"class":384},[362,1846,294],{"class":388},[362,1848,1213],{"class":384},[362,1850,1832],{"class":388},[362,1852,993],{"class":384},[362,1854,1855,1857,1859,1861,1863,1865,1867],{"class":364,"line":506},[362,1856,1771],{"class":368},[362,1858,1755],{"class":372},[362,1860,1146],{"class":368},[362,1862,1149],{"class":886},[362,1864,738],{"class":384},[362,1866,951],{"class":886},[362,1868,834],{"class":384},[362,1870,1871,1874,1876,1878,1880,1882,1884,1887,1889,1891],{"class":364,"line":533},[362,1872,1873],{"class":372},"    pts ",[362,1875,842],{"class":781},[362,1877,845],{"class":372},[362,1879,385],{"class":384},[362,1881,1506],{"class":734},[362,1883,738],{"class":384},[362,1885,1886],{"class":734},"tracks",[362,1888,1213],{"class":384},[362,1890,1744],{"class":734},[362,1892,993],{"class":384},[362,1894,1895,1898,1900,1903,1905,1908,1911,1913,1915,1918,1920,1922,1924,1927,1929,1931,1933,1936,1938,1941,1943,1945,1948,1951,1953,1955],{"class":364,"line":550},[362,1896,1897],{"class":372},"    axp",[362,1899,385],{"class":384},[362,1901,1902],{"class":734},"plot",[362,1904,738],{"class":384},[362,1906,1907],{"class":734},"pts",[362,1909,1910],{"class":384},"[:,",[362,1912,831],{"class":741},[362,1914,1020],{"class":384},[362,1916,1917],{"class":734}," pts",[362,1919,1910],{"class":384},[362,1921,990],{"class":741},[362,1923,1020],{"class":384},[362,1925,1926],{"class":1715}," \"",[362,1928,1086],{"class":1553},[362,1930,1616],{"class":1715},[362,1932,446],{"class":384},[362,1934,1935],{"class":896}," color",[362,1937,842],{"class":781},[362,1939,1940],{"class":734},"cmap",[362,1942,738],{"class":384},[362,1944,1744],{"class":734},[362,1946,1947],{"class":384},"),",[362,1949,1950],{"class":896}," alpha",[362,1952,842],{"class":781},[362,1954,1089],{"class":741},[362,1956,586],{"class":384},[362,1958,1959,1961,1963,1966],{"class":364,"line":559},[362,1960,1897],{"class":372},[362,1962,385],{"class":384},[362,1964,1965],{"class":734},"scatter",[362,1967,1338],{"class":384},[362,1969,1970,1973,1975,1977],{"class":364,"line":567},[362,1971,1972],{"class":734},"        pts",[362,1974,1910],{"class":384},[362,1976,831],{"class":741},[362,1978,1417],{"class":384},[362,1980,1981,1983,1985,1987],{"class":364,"line":575},[362,1982,1972],{"class":734},[362,1984,1910],{"class":384},[362,1986,990],{"class":741},[362,1988,1417],{"class":384},[362,1990,1991,1994,1996,1998,2000,2002],{"class":364,"line":583},[362,1992,1993],{"class":896},"        color",[362,1995,842],{"class":781},[362,1997,1940],{"class":734},[362,1999,738],{"class":384},[362,2001,1744],{"class":734},[362,2003,1380],{"class":384},[362,2005,2006,2009,2011,2014],{"class":364,"line":589},[362,2007,2008],{"class":896},"        s",[362,2010,842],{"class":781},[362,2012,2013],{"class":741},"20",[362,2015,556],{"class":384},[362,2017,2018,2021,2023,2025,2028,2030],{"class":364,"line":626},[362,2019,2020],{"class":896},"        edgecolor",[362,2022,842],{"class":781},[362,2024,1616],{"class":1715},[362,2026,2027],{"class":1553},"black",[362,2029,1616],{"class":1715},[362,2031,556],{"class":384},[362,2033,2034,2037,2039,2041],{"class":364,"line":647},[362,2035,2036],{"class":896},"        linewidth",[362,2038,842],{"class":781},[362,2040,1103],{"class":741},[362,2042,556],{"class":384},[362,2044,2045,2048,2050,2052,2055,2057,2059,2061,2063],{"class":364,"line":663},[362,2046,2047],{"class":896},"        label",[362,2049,842],{"class":781},[362,2051,1550],{"class":808},[362,2053,2054],{"class":1553},"\"identity ",[362,2056,1557],{"class":741},[362,2058,1744],{"class":734},[362,2060,1570],{"class":741},[362,2062,1616],{"class":1553},[362,2064,556],{"class":384},[362,2066,2067],{"class":364,"line":671},[362,2068,2069],{"class":384},"    )\n",[362,2071,2072,2074,2076,2078],{"class":364,"line":679},[362,2073,1897],{"class":372},[362,2075,385],{"class":384},[362,2077,1965],{"class":734},[362,2079,1338],{"class":384},[362,2081,2082,2084,2086,2088,2090,2092],{"class":364,"line":687},[362,2083,1972],{"class":734},[362,2085,1213],{"class":384},[362,2087,981],{"class":741},[362,2089,446],{"class":384},[362,2091,831],{"class":741},[362,2093,1417],{"class":384},[362,2095,2096,2098,2100,2102,2104,2106],{"class":364,"line":695},[362,2097,1972],{"class":734},[362,2099,1213],{"class":384},[362,2101,981],{"class":741},[362,2103,446],{"class":384},[362,2105,990],{"class":741},[362,2107,1417],{"class":384},[362,2109,2110,2112,2114,2116,2118,2120],{"class":364,"line":700},[362,2111,1993],{"class":896},[362,2113,842],{"class":781},[362,2115,1940],{"class":734},[362,2117,738],{"class":384},[362,2119,1744],{"class":734},[362,2121,1380],{"class":384},[362,2123,2124,2127,2129,2131,2133,2135],{"class":364,"line":721},[362,2125,2126],{"class":896},"        marker",[362,2128,842],{"class":781},[362,2130,1616],{"class":1715},[362,2132,1316],{"class":1553},[362,2134,1616],{"class":1715},[362,2136,556],{"class":384},[362,2138,2139,2141,2143,2146],{"class":364,"line":726},[362,2140,2008],{"class":896},[362,2142,842],{"class":781},[362,2144,2145],{"class":741},"170",[362,2147,556],{"class":384},[362,2149,2150,2152,2154,2156,2158,2160],{"class":364,"line":1383},[362,2151,2020],{"class":896},[362,2153,842],{"class":781},[362,2155,1616],{"class":1715},[362,2157,2027],{"class":1553},[362,2159,1616],{"class":1715},[362,2161,556],{"class":384},[362,2163,2164,2167,2169,2172],{"class":364,"line":1402},[362,2165,2166],{"class":896},"        zorder",[362,2168,842],{"class":781},[362,2170,2171],{"class":741},"3",[362,2173,556],{"class":384},[362,2175,2176],{"class":364,"line":1420},[362,2177,2069],{"class":384},[362,2179,2180,2182,2184,2187,2189,2191,2194,2196],{"class":364,"line":1448},[362,2181,1650],{"class":372},[362,2183,385],{"class":384},[362,2185,2186],{"class":734},"set_title",[362,2188,738],{"class":384},[362,2190,1616],{"class":1715},[362,2192,2193],{"class":1553},"Ground-truth clip — 3 identities in 2D (★ = frame 0)",[362,2195,1616],{"class":1715},[362,2197,586],{"class":384},[362,2199,2200,2202,2204,2207,2209,2211,2214,2216],{"class":364,"line":1465},[362,2201,1650],{"class":372},[362,2203,385],{"class":384},[362,2205,2206],{"class":734},"set_xlabel",[362,2208,738],{"class":384},[362,2210,1616],{"class":1715},[362,2212,2213],{"class":1553},"x",[362,2215,1616],{"class":1715},[362,2217,586],{"class":384},[362,2219,2220,2222,2224,2227,2229,2231,2234,2236],{"class":364,"line":1479},[362,2221,1650],{"class":372},[362,2223,385],{"class":384},[362,2225,2226],{"class":734},"set_ylabel",[362,2228,738],{"class":384},[362,2230,1616],{"class":1715},[362,2232,2233],{"class":1553},"y",[362,2235,1616],{"class":1715},[362,2237,586],{"class":384},[362,2239,2240,2242,2244,2247,2249,2252,2254,2257],{"class":364,"line":1485},[362,2241,1650],{"class":372},[362,2243,385],{"class":384},[362,2245,2246],{"class":734},"legend",[362,2248,738],{"class":384},[362,2250,2251],{"class":896},"fontsize",[362,2253,842],{"class":781},[362,2255,2256],{"class":741},"8",[362,2258,586],{"class":384},[362,2260,2261,2263,2265,2268,2270,2273,2275,2277],{"class":364,"line":1491},[362,2262,1650],{"class":372},[362,2264,385],{"class":384},[362,2266,2267],{"class":734},"grid",[362,2269,738],{"class":384},[362,2271,2272],{"class":896},"alpha",[362,2274,842],{"class":781},[362,2276,1103],{"class":741},[362,2278,586],{"class":384},[362,2280,2281],{"class":364,"line":1516},[362,2282,416],{"emptyLinePlaceholder":415},[362,2284,2285],{"class":364,"line":1521},[362,2286,2287],{"class":866},"# (right) appearance separability at frame 0.\n",[362,2289,2290,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2314,2316,2318,2320,2323,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344],{"class":364,"line":1526},[362,2291,2292],{"class":372},"kern0 ",[362,2294,842],{"class":781},[362,2296,1741],{"class":384},[362,2298,1817],{"class":825},[362,2300,738],{"class":384},[362,2302,1511],{"class":734},[362,2304,1213],{"class":384},[362,2306,981],{"class":741},[362,2308,1829],{"class":384},[362,2310,1832],{"class":734},[362,2312,2313],{"class":384},"]):",[362,2315,1497],{"class":372},[362,2317,1213],{"class":384},[362,2319,981],{"class":741},[362,2321,2322],{"class":384},"].",[362,2324,2325],{"class":388},"kernel",[362,2327,1213],{"class":384},[362,2329,1832],{"class":388},[362,2331,954],{"class":384},[362,2333,1752],{"class":368},[362,2335,1797],{"class":372},[362,2337,1146],{"class":368},[362,2339,1149],{"class":886},[362,2341,738],{"class":384},[362,2343,951],{"class":886},[362,2345,1766],{"class":384},[362,2347,2348,2351,2353,2355,2357,2359,2361,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382],{"class":364,"line":1542},[362,2349,2350],{"class":372},"K ",[362,2352,842],{"class":781},[362,2354,845],{"class":372},[362,2356,385],{"class":384},[362,2358,1506],{"class":734},[362,2360,978],{"class":384},[362,2362,2363],{"class":734},"kern0",[362,2365,1213],{"class":384},[362,2367,1744],{"class":734},[362,2369,954],{"class":384},[362,2371,1752],{"class":368},[362,2373,1755],{"class":734},[362,2375,1146],{"class":368},[362,2377,1149],{"class":886},[362,2379,738],{"class":384},[362,2381,951],{"class":886},[362,2383,2384],{"class":384},")])\n",[362,2386,2387,2390,2392,2394,2396,2399,2401,2404,2406],{"class":364,"line":1587},[362,2388,2389],{"class":372},"kn ",[362,2391,842],{"class":781},[362,2393,845],{"class":372},[362,2395,385],{"class":384},[362,2397,2398],{"class":388},"nn",[362,2400,385],{"class":384},[362,2402,2403],{"class":388},"functional",[362,2405,385],{"class":384},[362,2407,2408],{"class":388},"normalize\n",[362,2410,2412,2415,2417,2420,2422,2425,2427,2430,2432,2434,2436,2439,2441,2443,2445,2447,2449,2451,2453,2456],{"class":364,"line":2411},40,[362,2413,2414],{"class":372},"sim ",[362,2416,842],{"class":781},[362,2418,2419],{"class":734}," kn",[362,2421,738],{"class":384},[362,2423,2424],{"class":734},"K",[362,2426,446],{"class":384},[362,2428,2429],{"class":896}," dim",[362,2431,1277],{"class":781},[362,2433,1280],{"class":741},[362,2435,1567],{"class":384},[362,2437,2438],{"class":781}," @",[362,2440,2419],{"class":734},[362,2442,738],{"class":384},[362,2444,2424],{"class":734},[362,2446,446],{"class":384},[362,2448,2429],{"class":896},[362,2450,1277],{"class":781},[362,2452,1280],{"class":741},[362,2454,2455],{"class":384},").",[362,2457,2458],{"class":388},"T\n",[362,2460,2462,2465,2467,2469,2471,2474,2476,2479,2481,2483,2486,2489,2491,2493,2496,2498,2500,2503,2505,2507,2509,2512,2514,2516],{"class":364,"line":2461},41,[362,2463,2464],{"class":372},"im ",[362,2466,842],{"class":781},[362,2468,1655],{"class":372},[362,2470,385],{"class":384},[362,2472,2473],{"class":734},"imshow",[362,2475,738],{"class":384},[362,2477,2478],{"class":734},"sim",[362,2480,385],{"class":384},[362,2482,1608],{"class":734},[362,2484,2485],{"class":384},"(),",[362,2487,2488],{"class":896}," cmap",[362,2490,842],{"class":781},[362,2492,1616],{"class":1715},[362,2494,2495],{"class":1553},"viridis",[362,2497,1616],{"class":1715},[362,2499,446],{"class":384},[362,2501,2502],{"class":896}," vmin",[362,2504,1277],{"class":781},[362,2506,1280],{"class":741},[362,2508,446],{"class":384},[362,2510,2511],{"class":896}," vmax",[362,2513,842],{"class":781},[362,2515,1280],{"class":741},[362,2517,586],{"class":384},[362,2519,2521,2524,2526,2528,2530,2532,2535,2537],{"class":364,"line":2520},42,[362,2522,2523],{"class":372},"axk",[362,2525,385],{"class":384},[362,2527,2186],{"class":734},[362,2529,738],{"class":384},[362,2531,1616],{"class":1715},[362,2533,2534],{"class":1553},"Appearance: orthonormal kernels → off-diagonal ≈ 0",[362,2536,1616],{"class":1715},[362,2538,586],{"class":384},[362,2540,2542,2544,2546,2548,2550,2552,2554,2556],{"class":364,"line":2541},43,[362,2543,2523],{"class":372},[362,2545,385],{"class":384},[362,2547,2206],{"class":734},[362,2549,738],{"class":384},[362,2551,1616],{"class":1715},[362,2553,283],{"class":1553},[362,2555,1616],{"class":1715},[362,2557,586],{"class":384},[362,2559,2561,2563,2565,2567,2569,2571,2573,2575],{"class":364,"line":2560},44,[362,2562,2523],{"class":372},[362,2564,385],{"class":384},[362,2566,2226],{"class":734},[362,2568,738],{"class":384},[362,2570,1616],{"class":1715},[362,2572,283],{"class":1553},[362,2574,1616],{"class":1715},[362,2576,586],{"class":384},[362,2578,2580,2582,2584,2587,2589,2592,2594,2596],{"class":364,"line":2579},45,[362,2581,2523],{"class":372},[362,2583,385],{"class":384},[362,2585,2586],{"class":734},"set_xticks",[362,2588,738],{"class":384},[362,2590,2591],{"class":886},"range",[362,2593,738],{"class":384},[362,2595,951],{"class":886},[362,2597,1696],{"class":384},[362,2599,2601,2603,2605,2608,2610,2612,2614,2616],{"class":364,"line":2600},46,[362,2602,2523],{"class":372},[362,2604,385],{"class":384},[362,2606,2607],{"class":734},"set_yticks",[362,2609,738],{"class":384},[362,2611,2591],{"class":886},[362,2613,738],{"class":384},[362,2615,951],{"class":886},[362,2617,1696],{"class":384},[362,2619,2621,2623,2626,2628,2630,2632,2634],{"class":364,"line":2620},47,[362,2622,1771],{"class":368},[362,2624,2625],{"class":372}," i ",[362,2627,1146],{"class":368},[362,2629,1149],{"class":886},[362,2631,738],{"class":384},[362,2633,951],{"class":886},[362,2635,834],{"class":384},[362,2637,2639,2641,2644,2646,2648,2650,2652],{"class":364,"line":2638},48,[362,2640,1140],{"class":368},[362,2642,2643],{"class":372}," j ",[362,2645,1146],{"class":368},[362,2647,1149],{"class":886},[362,2649,738],{"class":384},[362,2651,951],{"class":886},[362,2653,834],{"class":384},[362,2655,2657,2660,2662,2665],{"class":364,"line":2656},49,[362,2658,2659],{"class":372},"        axk",[362,2661,385],{"class":384},[362,2663,2664],{"class":734},"text",[362,2666,1338],{"class":384},[362,2668,2670,2673],{"class":364,"line":2669},50,[362,2671,2672],{"class":734},"            j",[362,2674,556],{"class":384},[362,2676,2678,2681],{"class":364,"line":2677},51,[362,2679,2680],{"class":734},"            i",[362,2682,556],{"class":384},[362,2684,2686,2689,2691,2693,2695,2697,2700,2702,2705,2707,2710,2712,2714],{"class":364,"line":2685},52,[362,2687,2688],{"class":808},"            f",[362,2690,1616],{"class":1553},[362,2692,1557],{"class":741},[362,2694,2478],{"class":734},[362,2696,1213],{"class":384},[362,2698,2699],{"class":734},"i",[362,2701,446],{"class":384},[362,2703,2704],{"class":734}," j",[362,2706,954],{"class":384},[362,2708,2709],{"class":808},":.2f",[362,2711,1570],{"class":741},[362,2713,1616],{"class":1553},[362,2715,556],{"class":384},[362,2717,2719,2722,2724,2726,2729,2731],{"class":364,"line":2718},53,[362,2720,2721],{"class":896},"            ha",[362,2723,842],{"class":781},[362,2725,1616],{"class":1715},[362,2727,2728],{"class":1553},"center",[362,2730,1616],{"class":1715},[362,2732,556],{"class":384},[362,2734,2736,2739,2741,2743,2745,2747],{"class":364,"line":2735},54,[362,2737,2738],{"class":896},"            va",[362,2740,842],{"class":781},[362,2742,1616],{"class":1715},[362,2744,2728],{"class":1553},[362,2746,1616],{"class":1715},[362,2748,556],{"class":384},[362,2750,2752,2755,2757,2759,2762,2764],{"class":364,"line":2751},55,[362,2753,2754],{"class":896},"            color",[362,2756,842],{"class":781},[362,2758,1616],{"class":1715},[362,2760,2761],{"class":1553},"white",[362,2763,1616],{"class":1715},[362,2765,556],{"class":384},[362,2767,2769,2772,2774,2777],{"class":364,"line":2768},56,[362,2770,2771],{"class":896},"            fontsize",[362,2773,842],{"class":781},[362,2775,2776],{"class":741},"9",[362,2778,556],{"class":384},[362,2780,2782],{"class":364,"line":2781},57,[362,2783,1488],{"class":384},[362,2785,2787,2789,2791,2794,2796,2799,2801,2804,2806,2808,2810,2813,2815,2818],{"class":364,"line":2786},58,[362,2788,1642],{"class":372},[362,2790,385],{"class":384},[362,2792,2793],{"class":734},"colorbar",[362,2795,738],{"class":384},[362,2797,2798],{"class":734},"im",[362,2800,446],{"class":384},[362,2802,2803],{"class":896}," ax",[362,2805,842],{"class":781},[362,2807,2523],{"class":734},[362,2809,446],{"class":384},[362,2811,2812],{"class":896}," fraction",[362,2814,842],{"class":781},[362,2816,2817],{"class":741},"0.046",[362,2819,586],{"class":384},[362,2821,2823,2826,2828,2831],{"class":364,"line":2822},59,[362,2824,2825],{"class":372},"plt",[362,2827,385],{"class":384},[362,2829,2830],{"class":734},"tight_layout",[362,2832,1539],{"class":384},[362,2834,2836,2838,2840,2843],{"class":364,"line":2835},60,[362,2837,2825],{"class":372},[362,2839,385],{"class":384},[362,2841,2842],{"class":734},"show",[362,2844,1539],{"class":384},[338,2846,2847],{},[2848,2849],"img",{"alt":358,"src":2850},"\u002F_nb\u002Fbce0104826d88d48.png",[751,2852,2854],{"id":2853},"state-schema","State schema",[338,2856,2857],{},"Five fields per tracklet — kernel (appearance), centroid\n(motion), klass, score, and a couple book-keeping fields.",[353,2859,2861],{"className":355,"code":2860,"language":357,"meta":358,"style":358},"kalman = KalmanCentroid2D(\"centroid\", q=0.5, r=0.5)\n\nSTATES = {\n    \"kernel\": State(\n        schema=TensorSpec(shape=(K_DIM,), dtype=torch.float32),\n        process=Identity(\"kernel\"),\n        observation=Replace(\"kernel\"),\n        init=FromDetectionField(\"kernel\"),\n    ),\n    \"klass\": State(\n        schema=TensorSpec(shape=(), dtype=torch.int64),\n        process=Identity(\"klass\"),\n        observation=Replace(\"klass\"),\n        init=FromDetectionField(\"klass\"),\n    ),\n    \"score\": State(\n        schema=TensorSpec(shape=(), dtype=torch.float32),\n        process=Identity(\"score\"),\n        observation=Replace(\"score\"),\n        init=FromDetectionField(\"score\"),\n    ),\n    **kalman.state_entries(meas_field=\"centroid\", init_cov_scale=10.0),\n}\n\n",[348,2862,2863,2900,2904,2914,2930,2966,2986,3006,3026,3031,3046,3074,3092,3110,3128,3132,3147,3175,3193,3211,3229,3233,3270],{"__ignoreMap":358},[362,2864,2865,2867,2869,2872,2874,2876,2878,2880,2882,2884,2886,2889,2891,2894,2896,2898],{"class":364,"line":365},[362,2866,713],{"class":372},[362,2868,842],{"class":781},[362,2870,2871],{"class":734}," KalmanCentroid2D",[362,2873,738],{"class":384},[362,2875,1616],{"class":1715},[362,2877,294],{"class":1553},[362,2879,1616],{"class":1715},[362,2881,446],{"class":384},[362,2883,945],{"class":896},[362,2885,842],{"class":781},[362,2887,2888],{"class":741},"0.5",[362,2890,446],{"class":384},[362,2892,2893],{"class":896}," r",[362,2895,842],{"class":781},[362,2897,2888],{"class":741},[362,2899,586],{"class":384},[362,2901,2902],{"class":364,"line":376},[362,2903,416],{"emptyLinePlaceholder":415},[362,2905,2906,2909,2911],{"class":364,"line":398},[362,2907,2908],{"class":767},"STATES",[362,2910,782],{"class":781},[362,2912,2913],{"class":384}," {\n",[362,2915,2916,2919,2921,2923,2925,2928],{"class":364,"line":412},[362,2917,2918],{"class":1715},"    \"",[362,2920,2325],{"class":1553},[362,2922,1616],{"class":1715},[362,2924,822],{"class":384},[362,2926,2927],{"class":734}," State",[362,2929,1338],{"class":384},[362,2931,2932,2935,2937,2940,2942,2945,2947,2949,2951,2953,2955,2957,2959,2961,2964],{"class":364,"line":419},[362,2933,2934],{"class":896},"        schema",[362,2936,842],{"class":781},[362,2938,2939],{"class":734},"TensorSpec",[362,2941,738],{"class":384},[362,2943,2944],{"class":896},"shape",[362,2946,842],{"class":781},[362,2948,738],{"class":384},[362,2950,887],{"class":886},[362,2952,1440],{"class":384},[362,2954,1368],{"class":896},[362,2956,842],{"class":781},[362,2958,729],{"class":734},[362,2960,385],{"class":384},[362,2962,2963],{"class":388},"float32",[362,2965,1380],{"class":384},[362,2967,2968,2971,2973,2976,2978,2980,2982,2984],{"class":364,"line":427},[362,2969,2970],{"class":896},"        process",[362,2972,842],{"class":781},[362,2974,2975],{"class":734},"Identity",[362,2977,738],{"class":384},[362,2979,1616],{"class":1715},[362,2981,2325],{"class":1553},[362,2983,1616],{"class":1715},[362,2985,1380],{"class":384},[362,2987,2988,2991,2993,2996,2998,3000,3002,3004],{"class":364,"line":452},[362,2989,2990],{"class":896},"        observation",[362,2992,842],{"class":781},[362,2994,2995],{"class":734},"Replace",[362,2997,738],{"class":384},[362,2999,1616],{"class":1715},[362,3001,2325],{"class":1553},[362,3003,1616],{"class":1715},[362,3005,1380],{"class":384},[362,3007,3008,3011,3013,3016,3018,3020,3022,3024],{"class":364,"line":479},[362,3009,3010],{"class":896},"        init",[362,3012,842],{"class":781},[362,3014,3015],{"class":734},"FromDetectionField",[362,3017,738],{"class":384},[362,3019,1616],{"class":1715},[362,3021,2325],{"class":1553},[362,3023,1616],{"class":1715},[362,3025,1380],{"class":384},[362,3027,3028],{"class":364,"line":506},[362,3029,3030],{"class":384},"    ),\n",[362,3032,3033,3035,3038,3040,3042,3044],{"class":364,"line":533},[362,3034,2918],{"class":1715},[362,3036,3037],{"class":1553},"klass",[362,3039,1616],{"class":1715},[362,3041,822],{"class":384},[362,3043,2927],{"class":734},[362,3045,1338],{"class":384},[362,3047,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072],{"class":364,"line":550},[362,3049,2934],{"class":896},[362,3051,842],{"class":781},[362,3053,2939],{"class":734},[362,3055,738],{"class":384},[362,3057,2944],{"class":896},[362,3059,842],{"class":781},[362,3061,2485],{"class":384},[362,3063,1368],{"class":896},[362,3065,842],{"class":781},[362,3067,729],{"class":734},[362,3069,385],{"class":384},[362,3071,1377],{"class":388},[362,3073,1380],{"class":384},[362,3075,3076,3078,3080,3082,3084,3086,3088,3090],{"class":364,"line":559},[362,3077,2970],{"class":896},[362,3079,842],{"class":781},[362,3081,2975],{"class":734},[362,3083,738],{"class":384},[362,3085,1616],{"class":1715},[362,3087,3037],{"class":1553},[362,3089,1616],{"class":1715},[362,3091,1380],{"class":384},[362,3093,3094,3096,3098,3100,3102,3104,3106,3108],{"class":364,"line":567},[362,3095,2990],{"class":896},[362,3097,842],{"class":781},[362,3099,2995],{"class":734},[362,3101,738],{"class":384},[362,3103,1616],{"class":1715},[362,3105,3037],{"class":1553},[362,3107,1616],{"class":1715},[362,3109,1380],{"class":384},[362,3111,3112,3114,3116,3118,3120,3122,3124,3126],{"class":364,"line":575},[362,3113,3010],{"class":896},[362,3115,842],{"class":781},[362,3117,3015],{"class":734},[362,3119,738],{"class":384},[362,3121,1616],{"class":1715},[362,3123,3037],{"class":1553},[362,3125,1616],{"class":1715},[362,3127,1380],{"class":384},[362,3129,3130],{"class":364,"line":583},[362,3131,3030],{"class":384},[362,3133,3134,3136,3139,3141,3143,3145],{"class":364,"line":589},[362,3135,2918],{"class":1715},[362,3137,3138],{"class":1553},"score",[362,3140,1616],{"class":1715},[362,3142,822],{"class":384},[362,3144,2927],{"class":734},[362,3146,1338],{"class":384},[362,3148,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173],{"class":364,"line":626},[362,3150,2934],{"class":896},[362,3152,842],{"class":781},[362,3154,2939],{"class":734},[362,3156,738],{"class":384},[362,3158,2944],{"class":896},[362,3160,842],{"class":781},[362,3162,2485],{"class":384},[362,3164,1368],{"class":896},[362,3166,842],{"class":781},[362,3168,729],{"class":734},[362,3170,385],{"class":384},[362,3172,2963],{"class":388},[362,3174,1380],{"class":384},[362,3176,3177,3179,3181,3183,3185,3187,3189,3191],{"class":364,"line":647},[362,3178,2970],{"class":896},[362,3180,842],{"class":781},[362,3182,2975],{"class":734},[362,3184,738],{"class":384},[362,3186,1616],{"class":1715},[362,3188,3138],{"class":1553},[362,3190,1616],{"class":1715},[362,3192,1380],{"class":384},[362,3194,3195,3197,3199,3201,3203,3205,3207,3209],{"class":364,"line":663},[362,3196,2990],{"class":896},[362,3198,842],{"class":781},[362,3200,2995],{"class":734},[362,3202,738],{"class":384},[362,3204,1616],{"class":1715},[362,3206,3138],{"class":1553},[362,3208,1616],{"class":1715},[362,3210,1380],{"class":384},[362,3212,3213,3215,3217,3219,3221,3223,3225,3227],{"class":364,"line":671},[362,3214,3010],{"class":896},[362,3216,842],{"class":781},[362,3218,3015],{"class":734},[362,3220,738],{"class":384},[362,3222,1616],{"class":1715},[362,3224,3138],{"class":1553},[362,3226,1616],{"class":1715},[362,3228,1380],{"class":384},[362,3230,3231],{"class":364,"line":679},[362,3232,3030],{"class":384},[362,3234,3235,3238,3240,3242,3245,3247,3250,3252,3254,3256,3258,3260,3263,3265,3268],{"class":364,"line":687},[362,3236,3237],{"class":781},"    **",[362,3239,286],{"class":372},[362,3241,385],{"class":384},[362,3243,3244],{"class":734},"state_entries",[362,3246,738],{"class":384},[362,3248,3249],{"class":896},"meas_field",[362,3251,842],{"class":781},[362,3253,1616],{"class":1715},[362,3255,294],{"class":1553},[362,3257,1616],{"class":1715},[362,3259,446],{"class":384},[362,3261,3262],{"class":896}," init_cov_scale",[362,3264,842],{"class":781},[362,3266,3267],{"class":741},"10.0",[362,3269,1380],{"class":384},[362,3271,3272],{"class":364,"line":695},[362,3273,3274],{"class":384},"}\n",[751,3276,3278],{"id":3277},"the-k2-cascaded-canonical-configuration","The K=2 cascaded canonical configuration",[751,3280,3278],{"id":3281},"the-k2-cascaded-canonical-configuration-1",[338,3283,3284],{},"Two stages, strict then relaxed:",[3286,3287,3288,3304],"ul",{},[3289,3290,3291,3295,3296,3299,3300,3303],"li",{},[3292,3293,3294],"strong",{},"Stage 1"," — strict: ",[348,3297,3298],{},"ClassGate"," ∧ ",[348,3301,3302],{},"ScoreGate(>0.6)"," plus\na tight cosine threshold. Only \"obviously the same\" pairs\nmatch here.",[3289,3305,3306,3309,3310,3299,3312,3315,3316,3319],{},[3292,3307,3308],{},"Stage 2"," — relaxed: ",[348,3311,3298],{},[348,3313,3314],{},"MotionGate","\n(Mahalanobis χ² gate over the Kalman state) over a sum of\ncosine-on-kernel and Mahalanobis-on-centroid (here we use\n",[348,3317,3318],{},"CDist"," for plot legibility on the 2-D centroid; the gate\nitself does the Kalman-aware projection).",[353,3321,3323],{"className":355,"code":3322,"language":357,"meta":358,"style":358},"cascaded_root = Filter(\n    predicate=StatusFilter(\n        TrackletStatus.Tentative,\n        TrackletStatus.Active,\n        TrackletStatus.Lost,\n    ),\n    on=\"cs\",\n    then=Sequential(\n        [\n            Pipe(\n                cost=Gated(\n                    gate=Sequential(\n                        [\n                            ClassGate(\"klass\"),\n                            ScoreGate(\"score\", threshold=0.6),\n                        ]\n                    ),\n                    then=Cosine(\"kernel\"),\n                ),\n                assoc=Associate(Jonker(threshold=0.3)),\n            ),\n            Pipe(\n                cost=Gated(\n                    gate=Sequential(\n                        [\n                            ClassGate(\"klass\"),\n                            MotionGate(\"centroid\", \"centroid_cov\", max_chi2=25.0),\n                        ]\n                    ),\n                    then=Cosine(\"kernel\"),\n                ),\n                assoc=Associate(Jonker(threshold=0.5)),\n            ),\n        ]\n    ),\n)\n\ncascaded_tracker = unitrack.Tracker(\n    root=cascaded_root,\n    states=STATES,\n    lifecycle=StandardLifecycle(min_hits=1, max_age=3, allow_reid=2),\n    visibility=ConfirmedOnly(),\n)\n\n",[348,3324,3325,3336,3348,3360,3371,3382,3386,3402,3414,3419,3426,3438,3449,3454,3469,3493,3498,3503,3523,3528,3555,3560,3566,3576,3586,3590,3604,3638,3642,3646,3664,3668,3690,3694,3699,3703,3707,3711,3727,3739,3750,3790,3802],{"__ignoreMap":358},[362,3326,3327,3330,3332,3334],{"class":364,"line":365},[362,3328,3329],{"class":372},"cascaded_root ",[362,3331,842],{"class":781},[362,3333,603],{"class":734},[362,3335,1338],{"class":384},[362,3337,3338,3341,3343,3346],{"class":364,"line":376},[362,3339,3340],{"class":896},"    predicate",[362,3342,842],{"class":781},[362,3344,3345],{"class":734},"StatusFilter",[362,3347,1338],{"class":384},[362,3349,3350,3353,3355,3358],{"class":364,"line":398},[362,3351,3352],{"class":734},"        TrackletStatus",[362,3354,385],{"class":384},[362,3356,3357],{"class":388},"Tentative",[362,3359,556],{"class":384},[362,3361,3362,3364,3366,3369],{"class":364,"line":412},[362,3363,3352],{"class":734},[362,3365,385],{"class":384},[362,3367,3368],{"class":388},"Active",[362,3370,556],{"class":384},[362,3372,3373,3375,3377,3380],{"class":364,"line":419},[362,3374,3352],{"class":734},[362,3376,385],{"class":384},[362,3378,3379],{"class":388},"Lost",[362,3381,556],{"class":384},[362,3383,3384],{"class":364,"line":427},[362,3385,3030],{"class":384},[362,3387,3388,3391,3393,3395,3398,3400],{"class":364,"line":452},[362,3389,3390],{"class":896},"    on",[362,3392,842],{"class":781},[362,3394,1616],{"class":1715},[362,3396,3397],{"class":1553},"cs",[362,3399,1616],{"class":1715},[362,3401,556],{"class":384},[362,3403,3404,3407,3409,3412],{"class":364,"line":479},[362,3405,3406],{"class":896},"    then",[362,3408,842],{"class":781},[362,3410,3411],{"class":734},"Sequential",[362,3413,1338],{"class":384},[362,3415,3416],{"class":364,"line":506},[362,3417,3418],{"class":384},"        [\n",[362,3420,3421,3424],{"class":364,"line":533},[362,3422,3423],{"class":734},"            Pipe",[362,3425,1338],{"class":384},[362,3427,3428,3431,3433,3436],{"class":364,"line":550},[362,3429,3430],{"class":896},"                cost",[362,3432,842],{"class":781},[362,3434,3435],{"class":734},"Gated",[362,3437,1338],{"class":384},[362,3439,3440,3443,3445,3447],{"class":364,"line":559},[362,3441,3442],{"class":896},"                    gate",[362,3444,842],{"class":781},[362,3446,3411],{"class":734},[362,3448,1338],{"class":384},[362,3450,3451],{"class":364,"line":567},[362,3452,3453],{"class":384},"                        [\n",[362,3455,3456,3459,3461,3463,3465,3467],{"class":364,"line":575},[362,3457,3458],{"class":734},"                            ClassGate",[362,3460,738],{"class":384},[362,3462,1616],{"class":1715},[362,3464,3037],{"class":1553},[362,3466,1616],{"class":1715},[362,3468,1380],{"class":384},[362,3470,3471,3474,3476,3478,3480,3482,3484,3487,3489,3491],{"class":364,"line":583},[362,3472,3473],{"class":734},"                            ScoreGate",[362,3475,738],{"class":384},[362,3477,1616],{"class":1715},[362,3479,3138],{"class":1553},[362,3481,1616],{"class":1715},[362,3483,446],{"class":384},[362,3485,3486],{"class":896}," threshold",[362,3488,842],{"class":781},[362,3490,1074],{"class":741},[362,3492,1380],{"class":384},[362,3494,3495],{"class":364,"line":589},[362,3496,3497],{"class":384},"                        ]\n",[362,3499,3500],{"class":364,"line":626},[362,3501,3502],{"class":384},"                    ),\n",[362,3504,3505,3508,3510,3513,3515,3517,3519,3521],{"class":364,"line":647},[362,3506,3507],{"class":896},"                    then",[362,3509,842],{"class":781},[362,3511,3512],{"class":734},"Cosine",[362,3514,738],{"class":384},[362,3516,1616],{"class":1715},[362,3518,2325],{"class":1553},[362,3520,1616],{"class":1715},[362,3522,1380],{"class":384},[362,3524,3525],{"class":364,"line":663},[362,3526,3527],{"class":384},"                ),\n",[362,3529,3530,3533,3535,3538,3540,3543,3545,3548,3550,3552],{"class":364,"line":671},[362,3531,3532],{"class":896},"                assoc",[362,3534,842],{"class":781},[362,3536,3537],{"class":734},"Associate",[362,3539,738],{"class":384},[362,3541,3542],{"class":734},"Jonker",[362,3544,738],{"class":384},[362,3546,3547],{"class":896},"threshold",[362,3549,842],{"class":781},[362,3551,1103],{"class":741},[362,3553,3554],{"class":384},")),\n",[362,3556,3557],{"class":364,"line":679},[362,3558,3559],{"class":384},"            ),\n",[362,3561,3562,3564],{"class":364,"line":687},[362,3563,3423],{"class":734},[362,3565,1338],{"class":384},[362,3567,3568,3570,3572,3574],{"class":364,"line":695},[362,3569,3430],{"class":896},[362,3571,842],{"class":781},[362,3573,3435],{"class":734},[362,3575,1338],{"class":384},[362,3577,3578,3580,3582,3584],{"class":364,"line":700},[362,3579,3442],{"class":896},[362,3581,842],{"class":781},[362,3583,3411],{"class":734},[362,3585,1338],{"class":384},[362,3587,3588],{"class":364,"line":721},[362,3589,3453],{"class":384},[362,3591,3592,3594,3596,3598,3600,3602],{"class":364,"line":726},[362,3593,3458],{"class":734},[362,3595,738],{"class":384},[362,3597,1616],{"class":1715},[362,3599,3037],{"class":1553},[362,3601,1616],{"class":1715},[362,3603,1380],{"class":384},[362,3605,3606,3609,3611,3613,3615,3617,3619,3621,3624,3626,3628,3631,3633,3636],{"class":364,"line":1383},[362,3607,3608],{"class":734},"                            MotionGate",[362,3610,738],{"class":384},[362,3612,1616],{"class":1715},[362,3614,294],{"class":1553},[362,3616,1616],{"class":1715},[362,3618,446],{"class":384},[362,3620,1926],{"class":1715},[362,3622,3623],{"class":1553},"centroid_cov",[362,3625,1616],{"class":1715},[362,3627,446],{"class":384},[362,3629,3630],{"class":896}," max_chi2",[362,3632,842],{"class":781},[362,3634,3635],{"class":741},"25.0",[362,3637,1380],{"class":384},[362,3639,3640],{"class":364,"line":1402},[362,3641,3497],{"class":384},[362,3643,3644],{"class":364,"line":1420},[362,3645,3502],{"class":384},[362,3647,3648,3650,3652,3654,3656,3658,3660,3662],{"class":364,"line":1448},[362,3649,3507],{"class":896},[362,3651,842],{"class":781},[362,3653,3512],{"class":734},[362,3655,738],{"class":384},[362,3657,1616],{"class":1715},[362,3659,2325],{"class":1553},[362,3661,1616],{"class":1715},[362,3663,1380],{"class":384},[362,3665,3666],{"class":364,"line":1465},[362,3667,3527],{"class":384},[362,3669,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688],{"class":364,"line":1479},[362,3671,3532],{"class":896},[362,3673,842],{"class":781},[362,3675,3537],{"class":734},[362,3677,738],{"class":384},[362,3679,3542],{"class":734},[362,3681,738],{"class":384},[362,3683,3547],{"class":896},[362,3685,842],{"class":781},[362,3687,2888],{"class":741},[362,3689,3554],{"class":384},[362,3691,3692],{"class":364,"line":1485},[362,3693,3559],{"class":384},[362,3695,3696],{"class":364,"line":1491},[362,3697,3698],{"class":384},"        ]\n",[362,3700,3701],{"class":364,"line":1516},[362,3702,3030],{"class":384},[362,3704,3705],{"class":364,"line":1521},[362,3706,586],{"class":384},[362,3708,3709],{"class":364,"line":1526},[362,3710,416],{"emptyLinePlaceholder":415},[362,3712,3713,3716,3718,3720,3722,3725],{"class":364,"line":1542},[362,3714,3715],{"class":372},"cascaded_tracker ",[362,3717,842],{"class":781},[362,3719,433],{"class":372},[362,3721,385],{"class":384},[362,3723,3724],{"class":734},"Tracker",[362,3726,1338],{"class":384},[362,3728,3729,3732,3734,3737],{"class":364,"line":1587},[362,3730,3731],{"class":896},"    root",[362,3733,842],{"class":781},[362,3735,3736],{"class":734},"cascaded_root",[362,3738,556],{"class":384},[362,3740,3741,3744,3746,3748],{"class":364,"line":2411},[362,3742,3743],{"class":896},"    states",[362,3745,842],{"class":781},[362,3747,2908],{"class":886},[362,3749,556],{"class":384},[362,3751,3752,3755,3757,3760,3762,3765,3767,3769,3771,3774,3776,3778,3780,3783,3785,3788],{"class":364,"line":2461},[362,3753,3754],{"class":896},"    lifecycle",[362,3756,842],{"class":781},[362,3758,3759],{"class":734},"StandardLifecycle",[362,3761,738],{"class":384},[362,3763,3764],{"class":896},"min_hits",[362,3766,842],{"class":781},[362,3768,1280],{"class":741},[362,3770,446],{"class":384},[362,3772,3773],{"class":896}," max_age",[362,3775,842],{"class":781},[362,3777,2171],{"class":741},[362,3779,446],{"class":384},[362,3781,3782],{"class":896}," allow_reid",[362,3784,842],{"class":781},[362,3786,3787],{"class":741},"2",[362,3789,1380],{"class":384},[362,3791,3792,3795,3797,3800],{"class":364,"line":2520},[362,3793,3794],{"class":896},"    visibility",[362,3796,842],{"class":781},[362,3798,3799],{"class":734},"ConfirmedOnly",[362,3801,1399],{"class":384},[362,3803,3804],{"class":364,"line":2541},[362,3805,586],{"class":384},[751,3807,3809],{"id":3808},"the-parallel-fusion-variant","The parallel-fusion variant",[338,3811,3812,3813,3816],{},"One stage; the cost is a weighted sum of cosine-on-kernel and\nMahalanobis distance over the Kalman state. ",[348,3814,3815],{},"WeightedSum","\nmerges both into parallel fusion mode.",[353,3818,3820],{"className":355,"code":3819,"language":357,"meta":358,"style":358},"from unitrack.costs import Mahalanobis\n\nparallel_root = Filter(\n    predicate=StatusFilter(\n        TrackletStatus.Tentative,\n        TrackletStatus.Active,\n        TrackletStatus.Lost,\n    ),\n    on=\"cs\",\n    then=Pipe(\n        cost=Parallel(\n            children=[\n                Cosine(\"kernel\"),\n                Mahalanobis(\"centroid\", \"centroid_cov\"),\n            ],\n            merge=WeightedSum([1.0, 0.05]),\n        ),\n        assoc=Associate(Jonker(threshold=2.0)),\n    ),\n)\n\nparallel_tracker = unitrack.Tracker(\n    root=parallel_root,\n    states=STATES,\n    lifecycle=StandardLifecycle(min_hits=1, max_age=3, allow_reid=2),\n    visibility=ConfirmedOnly(),\n)\n\n",[348,3821,3822,3837,3841,3852,3862,3872,3882,3892,3896,3910,3921,3933,3943,3958,3981,3986,4008,4013,4037,4041,4045,4049,4064,4075,4085,4119,4129],{"__ignoreMap":358},[362,3823,3824,3826,3828,3830,3832,3834],{"class":364,"line":365},[362,3825,430],{"class":368},[362,3827,433],{"class":372},[362,3829,385],{"class":384},[362,3831,461],{"class":372},[362,3833,369],{"class":368},[362,3835,3836],{"class":372}," Mahalanobis\n",[362,3838,3839],{"class":364,"line":376},[362,3840,416],{"emptyLinePlaceholder":415},[362,3842,3843,3846,3848,3850],{"class":364,"line":398},[362,3844,3845],{"class":372},"parallel_root ",[362,3847,842],{"class":781},[362,3849,603],{"class":734},[362,3851,1338],{"class":384},[362,3853,3854,3856,3858,3860],{"class":364,"line":412},[362,3855,3340],{"class":896},[362,3857,842],{"class":781},[362,3859,3345],{"class":734},[362,3861,1338],{"class":384},[362,3863,3864,3866,3868,3870],{"class":364,"line":419},[362,3865,3352],{"class":734},[362,3867,385],{"class":384},[362,3869,3357],{"class":388},[362,3871,556],{"class":384},[362,3873,3874,3876,3878,3880],{"class":364,"line":427},[362,3875,3352],{"class":734},[362,3877,385],{"class":384},[362,3879,3368],{"class":388},[362,3881,556],{"class":384},[362,3883,3884,3886,3888,3890],{"class":364,"line":452},[362,3885,3352],{"class":734},[362,3887,385],{"class":384},[362,3889,3379],{"class":388},[362,3891,556],{"class":384},[362,3893,3894],{"class":364,"line":479},[362,3895,3030],{"class":384},[362,3897,3898,3900,3902,3904,3906,3908],{"class":364,"line":506},[362,3899,3390],{"class":896},[362,3901,842],{"class":781},[362,3903,1616],{"class":1715},[362,3905,3397],{"class":1553},[362,3907,1616],{"class":1715},[362,3909,556],{"class":384},[362,3911,3912,3914,3916,3919],{"class":364,"line":533},[362,3913,3406],{"class":896},[362,3915,842],{"class":781},[362,3917,3918],{"class":734},"Pipe",[362,3920,1338],{"class":384},[362,3922,3923,3926,3928,3931],{"class":364,"line":550},[362,3924,3925],{"class":896},"        cost",[362,3927,842],{"class":781},[362,3929,3930],{"class":734},"Parallel",[362,3932,1338],{"class":384},[362,3934,3935,3938,3940],{"class":364,"line":559},[362,3936,3937],{"class":896},"            children",[362,3939,842],{"class":781},[362,3941,3942],{"class":384},"[\n",[362,3944,3945,3948,3950,3952,3954,3956],{"class":364,"line":567},[362,3946,3947],{"class":734},"                Cosine",[362,3949,738],{"class":384},[362,3951,1616],{"class":1715},[362,3953,2325],{"class":1553},[362,3955,1616],{"class":1715},[362,3957,1380],{"class":384},[362,3959,3960,3963,3965,3967,3969,3971,3973,3975,3977,3979],{"class":364,"line":575},[362,3961,3962],{"class":734},"                Mahalanobis",[362,3964,738],{"class":384},[362,3966,1616],{"class":1715},[362,3968,294],{"class":1553},[362,3970,1616],{"class":1715},[362,3972,446],{"class":384},[362,3974,1926],{"class":1715},[362,3976,3623],{"class":1553},[362,3978,1616],{"class":1715},[362,3980,1380],{"class":384},[362,3982,3983],{"class":364,"line":583},[362,3984,3985],{"class":384},"            ],\n",[362,3987,3988,3991,3993,3995,3997,4000,4002,4005],{"class":364,"line":589},[362,3989,3990],{"class":896},"            merge",[362,3992,842],{"class":781},[362,3994,3815],{"class":734},[362,3996,978],{"class":384},[362,3998,3999],{"class":741},"1.0",[362,4001,446],{"class":384},[362,4003,4004],{"class":741}," 0.05",[362,4006,4007],{"class":384},"]),\n",[362,4009,4010],{"class":364,"line":626},[362,4011,4012],{"class":384},"        ),\n",[362,4014,4015,4018,4020,4022,4024,4026,4028,4030,4032,4035],{"class":364,"line":647},[362,4016,4017],{"class":896},"        assoc",[362,4019,842],{"class":781},[362,4021,3537],{"class":734},[362,4023,738],{"class":384},[362,4025,3542],{"class":734},[362,4027,738],{"class":384},[362,4029,3547],{"class":896},[362,4031,842],{"class":781},[362,4033,4034],{"class":741},"2.0",[362,4036,3554],{"class":384},[362,4038,4039],{"class":364,"line":663},[362,4040,3030],{"class":384},[362,4042,4043],{"class":364,"line":671},[362,4044,586],{"class":384},[362,4046,4047],{"class":364,"line":679},[362,4048,416],{"emptyLinePlaceholder":415},[362,4050,4051,4054,4056,4058,4060,4062],{"class":364,"line":687},[362,4052,4053],{"class":372},"parallel_tracker ",[362,4055,842],{"class":781},[362,4057,433],{"class":372},[362,4059,385],{"class":384},[362,4061,3724],{"class":734},[362,4063,1338],{"class":384},[362,4065,4066,4068,4070,4073],{"class":364,"line":695},[362,4067,3731],{"class":896},[362,4069,842],{"class":781},[362,4071,4072],{"class":734},"parallel_root",[362,4074,556],{"class":384},[362,4076,4077,4079,4081,4083],{"class":364,"line":700},[362,4078,3743],{"class":896},[362,4080,842],{"class":781},[362,4082,2908],{"class":886},[362,4084,556],{"class":384},[362,4086,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117],{"class":364,"line":721},[362,4088,3754],{"class":896},[362,4090,842],{"class":781},[362,4092,3759],{"class":734},[362,4094,738],{"class":384},[362,4096,3764],{"class":896},[362,4098,842],{"class":781},[362,4100,1280],{"class":741},[362,4102,446],{"class":384},[362,4104,3773],{"class":896},[362,4106,842],{"class":781},[362,4108,2171],{"class":741},[362,4110,446],{"class":384},[362,4112,3782],{"class":896},[362,4114,842],{"class":781},[362,4116,3787],{"class":741},[362,4118,1380],{"class":384},[362,4120,4121,4123,4125,4127],{"class":364,"line":726},[362,4122,3794],{"class":896},[362,4124,842],{"class":781},[362,4126,3799],{"class":734},[362,4128,1399],{"class":384},[362,4130,4131],{"class":364,"line":1383},[362,4132,586],{"class":384},[751,4134,4136],{"id":4135},"run-both-trackers-on-the-same-clip","Run both trackers on the same clip",[353,4138,4140],{"className":355,"code":4139,"language":357,"meta":358,"style":358},"def run_clip(tracker, clip):\n    ms = unitrack.MultiStream(tracker)\n    results = []\n    for k, dets in enumerate(clip):\n        ctx = FrameContext.make(frame_idx=k, delta=1 \u002F 15.0, fps=15.0, stream_key=0)\n        res = ms.step(stream_key=0, detections=dets, ctx=ctx)\n        results.append(res)\n    return results\n\n\ncas_results = run_clip(cascaded_tracker, clip)\npar_results = run_clip(parallel_tracker, clip)\n\nfor name, results in [(\"cascaded\", cas_results), (\"parallel\", par_results)]:\n    print(f\"\\n{name.upper()}:\")\n    for k, res in enumerate(results):\n        print(\n            f\"  frame {k}: snapshot={res.snapshot.batch_size[0]} live, \"\n            f\"confirmed ids={res.ids.tolist()}\"\n        )\n\n",[348,4141,4142,4159,4179,4188,4208,4267,4312,4328,4335,4339,4343,4363,4383,4387,4435,4467,4489,4496,4537,4565],{"__ignoreMap":358},[362,4143,4144,4146,4149,4151,4153,4155,4157],{"class":364,"line":365},[362,4145,809],{"class":808},[362,4147,4148],{"class":812}," run_clip",[362,4150,738],{"class":384},[362,4152,173],{"class":818},[362,4154,446],{"class":384},[362,4156,1497],{"class":818},[362,4158,834],{"class":384},[362,4160,4161,4164,4166,4168,4170,4173,4175,4177],{"class":364,"line":376},[362,4162,4163],{"class":372},"    ms ",[362,4165,842],{"class":781},[362,4167,433],{"class":372},[362,4169,385],{"class":384},[362,4171,4172],{"class":734},"MultiStream",[362,4174,738],{"class":384},[362,4176,173],{"class":734},[362,4178,586],{"class":384},[362,4180,4181,4184,4186],{"class":364,"line":398},[362,4182,4183],{"class":372},"    results ",[362,4185,842],{"class":781},[362,4187,1135],{"class":384},[362,4189,4190,4192,4194,4196,4198,4200,4202,4204,4206],{"class":364,"line":412},[362,4191,1140],{"class":368},[362,4193,1774],{"class":372},[362,4195,446],{"class":384},[362,4197,1779],{"class":372},[362,4199,1146],{"class":368},[362,4201,1784],{"class":886},[362,4203,738],{"class":384},[362,4205,200],{"class":734},[362,4207,834],{"class":384},[362,4209,4210,4213,4215,4217,4219,4222,4224,4227,4229,4231,4233,4236,4238,4240,4243,4246,4248,4251,4253,4256,4258,4261,4263,4265],{"class":364,"line":419},[362,4211,4212],{"class":372},"        ctx ",[362,4214,842],{"class":781},[362,4216,498],{"class":372},[362,4218,385],{"class":384},[362,4220,4221],{"class":734},"make",[362,4223,738],{"class":384},[362,4225,4226],{"class":896},"frame_idx",[362,4228,842],{"class":781},[362,4230,1826],{"class":734},[362,4232,446],{"class":384},[362,4234,4235],{"class":896}," delta",[362,4237,842],{"class":781},[362,4239,1280],{"class":741},[362,4241,4242],{"class":781}," \u002F",[362,4244,4245],{"class":741}," 15.0",[362,4247,446],{"class":384},[362,4249,4250],{"class":896}," fps",[362,4252,842],{"class":781},[362,4254,4255],{"class":741},"15.0",[362,4257,446],{"class":384},[362,4259,4260],{"class":896}," stream_key",[362,4262,842],{"class":781},[362,4264,981],{"class":741},[362,4266,586],{"class":384},[362,4268,4269,4272,4274,4277,4279,4282,4284,4287,4289,4291,4293,4296,4298,4300,4302,4305,4307,4310],{"class":364,"line":427},[362,4270,4271],{"class":372},"        res ",[362,4273,842],{"class":781},[362,4275,4276],{"class":372}," ms",[362,4278,385],{"class":384},[362,4280,4281],{"class":734},"step",[362,4283,738],{"class":384},[362,4285,4286],{"class":896},"stream_key",[362,4288,842],{"class":781},[362,4290,981],{"class":741},[362,4292,446],{"class":384},[362,4294,4295],{"class":896}," detections",[362,4297,842],{"class":781},[362,4299,1842],{"class":734},[362,4301,446],{"class":384},[362,4303,4304],{"class":896}," ctx",[362,4306,842],{"class":781},[362,4308,4309],{"class":734},"ctx",[362,4311,586],{"class":384},[362,4313,4314,4317,4319,4321,4323,4326],{"class":364,"line":452},[362,4315,4316],{"class":372},"        results",[362,4318,385],{"class":384},[362,4320,1193],{"class":734},[362,4322,738],{"class":384},[362,4324,4325],{"class":734},"res",[362,4327,586],{"class":384},[362,4329,4330,4332],{"class":364,"line":479},[362,4331,1494],{"class":368},[362,4333,4334],{"class":372}," results\n",[362,4336,4337],{"class":364,"line":506},[362,4338,416],{"emptyLinePlaceholder":415},[362,4340,4341],{"class":364,"line":533},[362,4342,416],{"emptyLinePlaceholder":415},[362,4344,4345,4348,4350,4352,4354,4357,4359,4361],{"class":364,"line":550},[362,4346,4347],{"class":372},"cas_results ",[362,4349,842],{"class":781},[362,4351,4148],{"class":734},[362,4353,738],{"class":384},[362,4355,4356],{"class":734},"cascaded_tracker",[362,4358,446],{"class":384},[362,4360,1497],{"class":734},[362,4362,586],{"class":384},[362,4364,4365,4368,4370,4372,4374,4377,4379,4381],{"class":364,"line":559},[362,4366,4367],{"class":372},"par_results ",[362,4369,842],{"class":781},[362,4371,4148],{"class":734},[362,4373,738],{"class":384},[362,4375,4376],{"class":734},"parallel_tracker",[362,4378,446],{"class":384},[362,4380,1497],{"class":734},[362,4382,586],{"class":384},[362,4384,4385],{"class":364,"line":567},[362,4386,416],{"emptyLinePlaceholder":415},[362,4388,4389,4391,4394,4396,4399,4401,4404,4406,4409,4411,4413,4416,4418,4420,4422,4425,4427,4429,4432],{"class":364,"line":575},[362,4390,1771],{"class":368},[362,4392,4393],{"class":372}," name",[362,4395,446],{"class":384},[362,4397,4398],{"class":372}," results ",[362,4400,1146],{"class":368},[362,4402,4403],{"class":384}," [(",[362,4405,1616],{"class":1715},[362,4407,4408],{"class":1553},"cascaded",[362,4410,1616],{"class":1715},[362,4412,446],{"class":384},[362,4414,4415],{"class":372}," cas_results",[362,4417,1947],{"class":384},[362,4419,1647],{"class":384},[362,4421,1616],{"class":1715},[362,4423,4424],{"class":1553},"parallel",[362,4426,1616],{"class":1715},[362,4428,446],{"class":384},[362,4430,4431],{"class":372}," par_results",[362,4433,4434],{"class":384},")]:\n",[362,4436,4437,4440,4442,4444,4446,4448,4450,4453,4455,4458,4460,4462,4465],{"class":364,"line":583},[362,4438,4439],{"class":886},"    print",[362,4441,738],{"class":384},[362,4443,1550],{"class":808},[362,4445,1616],{"class":1553},[362,4447,1599],{"class":767},[362,4449,1557],{"class":741},[362,4451,4452],{"class":734},"name",[362,4454,385],{"class":384},[362,4456,4457],{"class":734},"upper",[362,4459,1611],{"class":384},[362,4461,1570],{"class":741},[362,4463,4464],{"class":1553},":\"",[362,4466,586],{"class":384},[362,4468,4469,4471,4473,4475,4478,4480,4482,4484,4487],{"class":364,"line":589},[362,4470,1140],{"class":368},[362,4472,1774],{"class":372},[362,4474,446],{"class":384},[362,4476,4477],{"class":372}," res ",[362,4479,1146],{"class":368},[362,4481,1784],{"class":886},[362,4483,738],{"class":384},[362,4485,4486],{"class":734},"results",[362,4488,834],{"class":384},[362,4490,4491,4494],{"class":364,"line":626},[362,4492,4493],{"class":886},"        print",[362,4495,1338],{"class":384},[362,4497,4498,4500,4503,4505,4507,4509,4512,4514,4516,4518,4521,4523,4526,4528,4530,4532,4534],{"class":364,"line":647},[362,4499,2688],{"class":808},[362,4501,4502],{"class":1553},"\"  frame ",[362,4504,1557],{"class":741},[362,4506,1826],{"class":734},[362,4508,1570],{"class":741},[362,4510,4511],{"class":1553},": snapshot=",[362,4513,1557],{"class":741},[362,4515,4325],{"class":734},[362,4517,385],{"class":384},[362,4519,4520],{"class":388},"snapshot",[362,4522,385],{"class":384},[362,4524,4525],{"class":388},"batch_size",[362,4527,1213],{"class":384},[362,4529,981],{"class":741},[362,4531,954],{"class":384},[362,4533,1570],{"class":741},[362,4535,4536],{"class":1553}," live, \"\n",[362,4538,4539,4541,4544,4546,4548,4550,4553,4555,4558,4560,4562],{"class":364,"line":663},[362,4540,2688],{"class":808},[362,4542,4543],{"class":1553},"\"confirmed ids=",[362,4545,1557],{"class":741},[362,4547,4325],{"class":734},[362,4549,385],{"class":384},[362,4551,4552],{"class":388},"ids",[362,4554,385],{"class":384},[362,4556,4557],{"class":734},"tolist",[362,4559,1611],{"class":384},[362,4561,1570],{"class":741},[362,4563,4564],{"class":1553},"\"\n",[362,4566,4567],{"class":364,"line":671},[362,4568,1488],{"class":384},[746,4570],{"data":4571,"kind":1622},"CkNBU0NBREVEOgogIGZyYW1lIDA6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxOiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMjogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDM6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSA0OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgNTogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDY6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSA3OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgODogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDk6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxMDogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDExOiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMTI6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxMzogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDE0OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMTU6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KClBBUkFMTEVMOgogIGZyYW1lIDA6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxOiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMjogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDM6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSA0OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgNTogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDY6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSA3OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgODogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDk6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxMDogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDExOiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMTI6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10KICBmcmFtZSAxMzogc25hcHNob3Q9MyBsaXZlLCBjb25maXJtZWQgaWRzPVsxLCAyLCAzXQogIGZyYW1lIDE0OiBzbmFwc2hvdD0zIGxpdmUsIGNvbmZpcm1lZCBpZHM9WzEsIDIsIDNdCiAgZnJhbWUgMTU6IHNuYXBzaG90PTMgbGl2ZSwgY29uZmlybWVkIGlkcz1bMSwgMiwgM10K",[338,4573,4574],{},"Both configurations should produce stable identities — three\ntracklets persist across all frames, and from frame 1 onwards\ntheir IDs match the ground-truth identity assignment.",[751,4576,4578],{"id":4577},"visualize-the-trajectories","Visualize the trajectories",[338,4580,4581],{},"Each color = a tracker-assigned ID. We plot every detection at\nits centroid, colored by which tracklet the tracker thinks it\nbelongs to. A clean visualization is one trajectory per color.",[353,4583,4585],{"className":355,"code":4584,"language":357,"meta":358,"style":358},"def plot_trajectories(results, ax, title):\n    cmap = plt.get_cmap(\"tab10\")\n    for k, res in enumerate(results):\n        snap = res.snapshot\n        # KalmanCentroid2D state layout: [x, y, vx, vy] — take the\n        # first two dims for the plotted position.\n        pos = snap.centroid[..., :2]\n        ids = snap.id\n        for n in range(snap.batch_size[0]):\n            ax.scatter(\n                pos[n, 0],\n                pos[n, 1],\n                color=cmap(int(ids[n]) % 10),\n                s=40,\n                edgecolor=\"black\",\n                linewidth=0.5,\n                alpha=0.5 + 0.5 * (k \u002F max(1, N_FRAMES - 1)),\n            )\n    ax.set_title(title)\n    ax.set_xlabel(\"x\")\n    ax.set_ylabel(\"y\")\n    ax.grid(alpha=0.3)\n\n\nfig, axes = plt.subplots(1, 2, figsize=(12, 4))\nplot_trajectories(cas_results, axes[0], \"K=2 cascaded\")\nplot_trajectories(par_results, axes[1], \"Parallel fusion (Cosine + 0.05·CDist)\")\nplt.tight_layout()\nplt.show()\n\n",[348,4586,4587,4609,4632,4652,4667,4672,4677,4706,4720,4748,4759,4775,4789,4821,4833,4848,4859,4900,4904,4920,4938,4956,4974,4978,4982,5023,5053,5081,5091],{"__ignoreMap":358},[362,4588,4589,4591,4594,4596,4598,4600,4602,4604,4607],{"class":364,"line":365},[362,4590,809],{"class":808},[362,4592,4593],{"class":812}," plot_trajectories",[362,4595,738],{"class":384},[362,4597,4486],{"class":818},[362,4599,446],{"class":384},[362,4601,2803],{"class":818},[362,4603,446],{"class":384},[362,4605,4606],{"class":818}," title",[362,4608,834],{"class":384},[362,4610,4611,4614,4616,4618,4620,4622,4624,4626,4628,4630],{"class":364,"line":376},[362,4612,4613],{"class":372},"    cmap ",[362,4615,842],{"class":781},[362,4617,1662],{"class":372},[362,4619,385],{"class":384},[362,4621,1710],{"class":734},[362,4623,738],{"class":384},[362,4625,1616],{"class":1715},[362,4627,1718],{"class":1553},[362,4629,1616],{"class":1715},[362,4631,586],{"class":384},[362,4633,4634,4636,4638,4640,4642,4644,4646,4648,4650],{"class":364,"line":398},[362,4635,1140],{"class":368},[362,4637,1774],{"class":372},[362,4639,446],{"class":384},[362,4641,4477],{"class":372},[362,4643,1146],{"class":368},[362,4645,1784],{"class":886},[362,4647,738],{"class":384},[362,4649,4486],{"class":734},[362,4651,834],{"class":384},[362,4653,4654,4657,4659,4662,4664],{"class":364,"line":412},[362,4655,4656],{"class":372},"        snap ",[362,4658,842],{"class":781},[362,4660,4661],{"class":372}," res",[362,4663,385],{"class":384},[362,4665,4666],{"class":388},"snapshot\n",[362,4668,4669],{"class":364,"line":419},[362,4670,4671],{"class":866},"        # KalmanCentroid2D state layout: [x, y, vx, vy] — take the\n",[362,4673,4674],{"class":364,"line":427},[362,4675,4676],{"class":866},"        # first two dims for the plotted position.\n",[362,4678,4679,4682,4684,4687,4689,4691,4693,4697,4699,4702,4704],{"class":364,"line":452},[362,4680,4681],{"class":372},"        pos ",[362,4683,842],{"class":781},[362,4685,4686],{"class":372}," snap",[362,4688,385],{"class":384},[362,4690,294],{"class":388},[362,4692,1213],{"class":384},[362,4694,4696],{"class":4695},"swQdS","...",[362,4698,446],{"class":384},[362,4700,4701],{"class":384}," :",[362,4703,3787],{"class":741},[362,4705,1326],{"class":384},[362,4707,4708,4711,4713,4715,4717],{"class":364,"line":479},[362,4709,4710],{"class":372},"        ids ",[362,4712,842],{"class":781},[362,4714,4686],{"class":372},[362,4716,385],{"class":384},[362,4718,4719],{"class":388},"id\n",[362,4721,4722,4725,4728,4730,4732,4734,4737,4739,4741,4743,4745],{"class":364,"line":506},[362,4723,4724],{"class":368},"        for",[362,4726,4727],{"class":372}," n ",[362,4729,1146],{"class":368},[362,4731,1149],{"class":886},[362,4733,738],{"class":384},[362,4735,4736],{"class":734},"snap",[362,4738,385],{"class":384},[362,4740,4525],{"class":388},[362,4742,1213],{"class":384},[362,4744,981],{"class":741},[362,4746,4747],{"class":384},"]):\n",[362,4749,4750,4753,4755,4757],{"class":364,"line":533},[362,4751,4752],{"class":372},"            ax",[362,4754,385],{"class":384},[362,4756,1965],{"class":734},[362,4758,1338],{"class":384},[362,4760,4761,4764,4766,4769,4771,4773],{"class":364,"line":550},[362,4762,4763],{"class":734},"                pos",[362,4765,1213],{"class":384},[362,4767,4768],{"class":734},"n",[362,4770,446],{"class":384},[362,4772,831],{"class":741},[362,4774,1417],{"class":384},[362,4776,4777,4779,4781,4783,4785,4787],{"class":364,"line":559},[362,4778,4763],{"class":734},[362,4780,1213],{"class":384},[362,4782,4768],{"class":734},[362,4784,446],{"class":384},[362,4786,990],{"class":741},[362,4788,1417],{"class":384},[362,4790,4791,4794,4796,4798,4800,4802,4804,4806,4808,4810,4813,4816,4819],{"class":364,"line":567},[362,4792,4793],{"class":896},"                color",[362,4795,842],{"class":781},[362,4797,1940],{"class":734},[362,4799,738],{"class":384},[362,4801,1817],{"class":825},[362,4803,738],{"class":384},[362,4805,4552],{"class":734},[362,4807,1213],{"class":384},[362,4809,4768],{"class":734},[362,4811,4812],{"class":384},"])",[362,4814,4815],{"class":781}," %",[362,4817,4818],{"class":741}," 10",[362,4820,1380],{"class":384},[362,4822,4823,4826,4828,4831],{"class":364,"line":575},[362,4824,4825],{"class":896},"                s",[362,4827,842],{"class":781},[362,4829,4830],{"class":741},"40",[362,4832,556],{"class":384},[362,4834,4835,4838,4840,4842,4844,4846],{"class":364,"line":583},[362,4836,4837],{"class":896},"                edgecolor",[362,4839,842],{"class":781},[362,4841,1616],{"class":1715},[362,4843,2027],{"class":1553},[362,4845,1616],{"class":1715},[362,4847,556],{"class":384},[362,4849,4850,4853,4855,4857],{"class":364,"line":589},[362,4851,4852],{"class":896},"                linewidth",[362,4854,842],{"class":781},[362,4856,2888],{"class":741},[362,4858,556],{"class":384},[362,4860,4861,4864,4866,4868,4870,4873,4875,4877,4880,4882,4885,4887,4889,4891,4894,4896,4898],{"class":364,"line":626},[362,4862,4863],{"class":896},"                alpha",[362,4865,842],{"class":781},[362,4867,2888],{"class":741},[362,4869,1220],{"class":781},[362,4871,4872],{"class":741}," 0.5",[362,4874,1226],{"class":781},[362,4876,1647],{"class":384},[362,4878,4879],{"class":734},"k ",[362,4881,124],{"class":781},[362,4883,4884],{"class":886}," max",[362,4886,738],{"class":384},[362,4888,1280],{"class":741},[362,4890,446],{"class":384},[362,4892,4893],{"class":886}," N_FRAMES",[362,4895,1108],{"class":781},[362,4897,990],{"class":741},[362,4899,3554],{"class":384},[362,4901,4902],{"class":364,"line":647},[362,4903,1482],{"class":384},[362,4905,4906,4909,4911,4913,4915,4918],{"class":364,"line":663},[362,4907,4908],{"class":372},"    ax",[362,4910,385],{"class":384},[362,4912,2186],{"class":734},[362,4914,738],{"class":384},[362,4916,4917],{"class":734},"title",[362,4919,586],{"class":384},[362,4921,4922,4924,4926,4928,4930,4932,4934,4936],{"class":364,"line":671},[362,4923,4908],{"class":372},[362,4925,385],{"class":384},[362,4927,2206],{"class":734},[362,4929,738],{"class":384},[362,4931,1616],{"class":1715},[362,4933,2213],{"class":1553},[362,4935,1616],{"class":1715},[362,4937,586],{"class":384},[362,4939,4940,4942,4944,4946,4948,4950,4952,4954],{"class":364,"line":679},[362,4941,4908],{"class":372},[362,4943,385],{"class":384},[362,4945,2226],{"class":734},[362,4947,738],{"class":384},[362,4949,1616],{"class":1715},[362,4951,2233],{"class":1553},[362,4953,1616],{"class":1715},[362,4955,586],{"class":384},[362,4957,4958,4960,4962,4964,4966,4968,4970,4972],{"class":364,"line":687},[362,4959,4908],{"class":372},[362,4961,385],{"class":384},[362,4963,2267],{"class":734},[362,4965,738],{"class":384},[362,4967,2272],{"class":896},[362,4969,842],{"class":781},[362,4971,1103],{"class":741},[362,4973,586],{"class":384},[362,4975,4976],{"class":364,"line":695},[362,4977,416],{"emptyLinePlaceholder":415},[362,4979,4980],{"class":364,"line":700},[362,4981,416],{"emptyLinePlaceholder":415},[362,4983,4984,4986,4988,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5021],{"class":364,"line":721},[362,4985,1642],{"class":372},[362,4987,446],{"class":384},[362,4989,4990],{"class":372}," axes ",[362,4992,842],{"class":781},[362,4994,1662],{"class":372},[362,4996,385],{"class":384},[362,4998,1667],{"class":734},[362,5000,738],{"class":384},[362,5002,1280],{"class":741},[362,5004,446],{"class":384},[362,5006,1676],{"class":741},[362,5008,446],{"class":384},[362,5010,1681],{"class":896},[362,5012,842],{"class":781},[362,5014,738],{"class":384},[362,5016,1688],{"class":741},[362,5018,446],{"class":384},[362,5020,1693],{"class":741},[362,5022,1696],{"class":384},[362,5024,5025,5028,5030,5033,5035,5038,5040,5042,5044,5046,5049,5051],{"class":364,"line":726},[362,5026,5027],{"class":734},"plot_trajectories",[362,5029,738],{"class":384},[362,5031,5032],{"class":734},"cas_results",[362,5034,446],{"class":384},[362,5036,5037],{"class":734}," axes",[362,5039,1213],{"class":384},[362,5041,981],{"class":741},[362,5043,1020],{"class":384},[362,5045,1926],{"class":1715},[362,5047,5048],{"class":1553},"K=2 cascaded",[362,5050,1616],{"class":1715},[362,5052,586],{"class":384},[362,5054,5055,5057,5059,5062,5064,5066,5068,5070,5072,5074,5077,5079],{"class":364,"line":1383},[362,5056,5027],{"class":734},[362,5058,738],{"class":384},[362,5060,5061],{"class":734},"par_results",[362,5063,446],{"class":384},[362,5065,5037],{"class":734},[362,5067,1213],{"class":384},[362,5069,1280],{"class":741},[362,5071,1020],{"class":384},[362,5073,1926],{"class":1715},[362,5075,5076],{"class":1553},"Parallel fusion (Cosine + 0.05·CDist)",[362,5078,1616],{"class":1715},[362,5080,586],{"class":384},[362,5082,5083,5085,5087,5089],{"class":364,"line":1402},[362,5084,2825],{"class":372},[362,5086,385],{"class":384},[362,5088,2830],{"class":734},[362,5090,1539],{"class":384},[362,5092,5093,5095,5097,5099],{"class":364,"line":1420},[362,5094,2825],{"class":372},[362,5096,385],{"class":384},[362,5098,2842],{"class":734},[362,5100,1539],{"class":384},[338,5102,5103],{},[2848,5104],{"alt":358,"src":5105},"\u002F_nb\u002Fcac1a11ba783ae51.png",[338,5107,5108],{},"Each trajectory should appear as a coherent fade-in line in\none color. The marker alpha grows with frame index so you\ncan tell which point came earliest.",[751,5110,5112],{"id":5111},"id-stability-score","ID stability score",[338,5114,5115],{},"A simple HOTA-flavored proxy: for each ground-truth identity,\nis its tracker-assigned ID stable across frames? We measure\nthe fraction of frames where the GT identity gets its\nmost-frequent tracker ID.",[353,5117,5119],{"className":355,"code":5118,"language":357,"meta":358,"style":358},"def id_stability(results, gt) -> float:\n    # For each GT identity, collect the tracker IDs it was actually\n    # matched to (via res.match.matched_pairs) on each frame; the\n    # fraction matching the per-GT-id mode is the stability score.\n    tracker_ids_per_gt: dict[int, list[int]] = {g: [] for g in range(N_OBJS)}\n    for k, res in enumerate(results):\n        pairs = (\n            res.match.matched_pairs\n        )  # (P, 2) — (cs_idx, ds_idx) into res.snapshot \u002F detection rows.\n        snap_ids = res.snapshot.id\n        for p in range(pairs.shape[0]):\n            cs_idx = int(pairs[p, 0].item())\n            ds_idx = int(pairs[p, 1].item())\n            tracker_id = int(snap_ids[cs_idx].item())\n            gt_id = int(gt[k][ds_idx].item())\n            tracker_ids_per_gt[gt_id].append(tracker_id)\n\n    n_correct = n_total = 0\n    for ids in tracker_ids_per_gt.values():\n        if not ids:\n            continue\n        most = max(set(ids), key=ids.count)\n        n_correct += sum(1 for x in ids if x == most)\n        n_total += len(ids)\n    return n_correct \u002F max(n_total, 1)\n\n\nprint(f\"Cascaded ID stability:  {id_stability(cas_results, gt):.3f}\")\nprint(f\"Parallel ID stability:  {id_stability(par_results, gt):.3f}\")\n\n",[348,5120,5121,5148,5153,5158,5163,5214,5234,5243,5257,5265,5282,5308,5337,5364,5389,5417,5438,5442,5457,5477,5490,5495,5529,5566,5582,5604,5608,5612,5647],{"__ignoreMap":358},[362,5122,5123,5125,5128,5130,5132,5134,5137,5139,5142,5145],{"class":364,"line":365},[362,5124,809],{"class":808},[362,5126,5127],{"class":812}," id_stability",[362,5129,738],{"class":384},[362,5131,4486],{"class":818},[362,5133,446],{"class":384},[362,5135,5136],{"class":818}," gt",[362,5138,1567],{"class":384},[362,5140,5141],{"class":384}," ->",[362,5143,5144],{"class":825}," float",[362,5146,5147],{"class":384},":\n",[362,5149,5150],{"class":364,"line":376},[362,5151,5152],{"class":866},"    # For each GT identity, collect the tracker IDs it was actually\n",[362,5154,5155],{"class":364,"line":398},[362,5156,5157],{"class":866},"    # matched to (via res.match.matched_pairs) on each frame; the\n",[362,5159,5160],{"class":364,"line":412},[362,5161,5162],{"class":866},"    # fraction matching the per-GT-id mode is the stability score.\n",[362,5164,5165,5168,5170,5173,5175,5177,5179,5182,5184,5186,5189,5191,5193,5195,5197,5199,5201,5204,5206,5208,5210,5212],{"class":364,"line":419},[362,5166,5167],{"class":372},"    tracker_ids_per_gt",[362,5169,822],{"class":384},[362,5171,5172],{"class":372}," dict",[362,5174,1213],{"class":384},[362,5176,1817],{"class":825},[362,5178,446],{"class":384},[362,5180,5181],{"class":372}," list",[362,5183,1213],{"class":384},[362,5185,1817],{"class":825},[362,5187,5188],{"class":384},"]]",[362,5190,782],{"class":781},[362,5192,1741],{"class":384},[362,5194,902],{"class":372},[362,5196,822],{"class":384},[362,5198,1749],{"class":384},[362,5200,1752],{"class":368},[362,5202,5203],{"class":372}," g ",[362,5205,1146],{"class":368},[362,5207,1149],{"class":886},[362,5209,738],{"class":384},[362,5211,951],{"class":886},[362,5213,1766],{"class":384},[362,5215,5216,5218,5220,5222,5224,5226,5228,5230,5232],{"class":364,"line":427},[362,5217,1140],{"class":368},[362,5219,1774],{"class":372},[362,5221,446],{"class":384},[362,5223,4477],{"class":372},[362,5225,1146],{"class":368},[362,5227,1784],{"class":886},[362,5229,738],{"class":384},[362,5231,4486],{"class":734},[362,5233,834],{"class":384},[362,5235,5236,5239,5241],{"class":364,"line":452},[362,5237,5238],{"class":372},"        pairs ",[362,5240,842],{"class":781},[362,5242,547],{"class":384},[362,5244,5245,5248,5250,5252,5254],{"class":364,"line":479},[362,5246,5247],{"class":372},"            res",[362,5249,385],{"class":384},[362,5251,215],{"class":388},[362,5253,385],{"class":384},[362,5255,5256],{"class":388},"matched_pairs\n",[362,5258,5259,5262],{"class":364,"line":506},[362,5260,5261],{"class":384},"        )",[362,5263,5264],{"class":866},"  # (P, 2) — (cs_idx, ds_idx) into res.snapshot \u002F detection rows.\n",[362,5266,5267,5270,5272,5274,5276,5278,5280],{"class":364,"line":533},[362,5268,5269],{"class":372},"        snap_ids ",[362,5271,842],{"class":781},[362,5273,4661],{"class":372},[362,5275,385],{"class":384},[362,5277,4520],{"class":388},[362,5279,385],{"class":384},[362,5281,4719],{"class":388},[362,5283,5284,5286,5289,5291,5293,5295,5298,5300,5302,5304,5306],{"class":364,"line":550},[362,5285,4724],{"class":368},[362,5287,5288],{"class":372}," p ",[362,5290,1146],{"class":368},[362,5292,1149],{"class":886},[362,5294,738],{"class":384},[362,5296,5297],{"class":734},"pairs",[362,5299,385],{"class":384},[362,5301,2944],{"class":388},[362,5303,1213],{"class":384},[362,5305,981],{"class":741},[362,5307,4747],{"class":384},[362,5309,5310,5313,5315,5317,5319,5321,5323,5325,5327,5329,5331,5334],{"class":364,"line":559},[362,5311,5312],{"class":372},"            cs_idx ",[362,5314,842],{"class":781},[362,5316,826],{"class":825},[362,5318,738],{"class":384},[362,5320,5297],{"class":734},[362,5322,1213],{"class":384},[362,5324,338],{"class":734},[362,5326,446],{"class":384},[362,5328,831],{"class":741},[362,5330,2322],{"class":384},[362,5332,5333],{"class":734},"item",[362,5335,5336],{"class":384},"())\n",[362,5338,5339,5342,5344,5346,5348,5350,5352,5354,5356,5358,5360,5362],{"class":364,"line":567},[362,5340,5341],{"class":372},"            ds_idx ",[362,5343,842],{"class":781},[362,5345,826],{"class":825},[362,5347,738],{"class":384},[362,5349,5297],{"class":734},[362,5351,1213],{"class":384},[362,5353,338],{"class":734},[362,5355,446],{"class":384},[362,5357,990],{"class":741},[362,5359,2322],{"class":384},[362,5361,5333],{"class":734},[362,5363,5336],{"class":384},[362,5365,5366,5369,5371,5373,5375,5378,5380,5383,5385,5387],{"class":364,"line":575},[362,5367,5368],{"class":372},"            tracker_id ",[362,5370,842],{"class":781},[362,5372,826],{"class":825},[362,5374,738],{"class":384},[362,5376,5377],{"class":734},"snap_ids",[362,5379,1213],{"class":384},[362,5381,5382],{"class":734},"cs_idx",[362,5384,2322],{"class":384},[362,5386,5333],{"class":734},[362,5388,5336],{"class":384},[362,5390,5391,5394,5396,5398,5400,5402,5404,5406,5408,5411,5413,5415],{"class":364,"line":583},[362,5392,5393],{"class":372},"            gt_id ",[362,5395,842],{"class":781},[362,5397,826],{"class":825},[362,5399,738],{"class":384},[362,5401,1511],{"class":734},[362,5403,1213],{"class":384},[362,5405,1826],{"class":734},[362,5407,1829],{"class":384},[362,5409,5410],{"class":734},"ds_idx",[362,5412,2322],{"class":384},[362,5414,5333],{"class":734},[362,5416,5336],{"class":384},[362,5418,5419,5422,5424,5427,5429,5431,5433,5436],{"class":364,"line":589},[362,5420,5421],{"class":372},"            tracker_ids_per_gt",[362,5423,1213],{"class":384},[362,5425,5426],{"class":372},"gt_id",[362,5428,2322],{"class":384},[362,5430,1193],{"class":734},[362,5432,738],{"class":384},[362,5434,5435],{"class":734},"tracker_id",[362,5437,586],{"class":384},[362,5439,5440],{"class":364,"line":626},[362,5441,416],{"emptyLinePlaceholder":415},[362,5443,5444,5447,5449,5452,5454],{"class":364,"line":647},[362,5445,5446],{"class":372},"    n_correct ",[362,5448,842],{"class":781},[362,5450,5451],{"class":372}," n_total ",[362,5453,842],{"class":781},[362,5455,5456],{"class":741}," 0\n",[362,5458,5459,5461,5464,5466,5469,5471,5474],{"class":364,"line":663},[362,5460,1140],{"class":368},[362,5462,5463],{"class":372}," ids ",[362,5465,1146],{"class":368},[362,5467,5468],{"class":372}," tracker_ids_per_gt",[362,5470,385],{"class":384},[362,5472,5473],{"class":734},"values",[362,5475,5476],{"class":384},"():\n",[362,5478,5479,5482,5485,5488],{"class":364,"line":671},[362,5480,5481],{"class":368},"        if",[362,5483,5484],{"class":781}," not",[362,5486,5487],{"class":372}," ids",[362,5489,5147],{"class":384},[362,5491,5492],{"class":364,"line":679},[362,5493,5494],{"class":368},"            continue\n",[362,5496,5497,5500,5502,5504,5506,5509,5511,5513,5515,5518,5520,5522,5524,5527],{"class":364,"line":687},[362,5498,5499],{"class":372},"        most ",[362,5501,842],{"class":781},[362,5503,4884],{"class":886},[362,5505,738],{"class":384},[362,5507,5508],{"class":825},"set",[362,5510,738],{"class":384},[362,5512,4552],{"class":734},[362,5514,1947],{"class":384},[362,5516,5517],{"class":896}," key",[362,5519,842],{"class":781},[362,5521,4552],{"class":734},[362,5523,385],{"class":384},[362,5525,5526],{"class":388},"count",[362,5528,586],{"class":384},[362,5530,5531,5534,5537,5540,5542,5544,5546,5549,5551,5553,5556,5558,5561,5564],{"class":364,"line":695},[362,5532,5533],{"class":372},"        n_correct ",[362,5535,5536],{"class":781},"+=",[362,5538,5539],{"class":886}," sum",[362,5541,738],{"class":384},[362,5543,1280],{"class":741},[362,5545,1752],{"class":368},[362,5547,5548],{"class":734}," x ",[362,5550,1146],{"class":368},[362,5552,5463],{"class":734},[362,5554,5555],{"class":368},"if",[362,5557,5548],{"class":734},[362,5559,5560],{"class":781},"==",[362,5562,5563],{"class":734}," most",[362,5565,586],{"class":384},[362,5567,5568,5571,5573,5576,5578,5580],{"class":364,"line":700},[362,5569,5570],{"class":372},"        n_total ",[362,5572,5536],{"class":781},[362,5574,5575],{"class":886}," len",[362,5577,738],{"class":384},[362,5579,4552],{"class":734},[362,5581,586],{"class":384},[362,5583,5584,5586,5589,5591,5593,5595,5598,5600,5602],{"class":364,"line":721},[362,5585,1494],{"class":368},[362,5587,5588],{"class":372}," n_correct ",[362,5590,124],{"class":781},[362,5592,4884],{"class":886},[362,5594,738],{"class":384},[362,5596,5597],{"class":734},"n_total",[362,5599,446],{"class":384},[362,5601,990],{"class":741},[362,5603,586],{"class":384},[362,5605,5606],{"class":364,"line":726},[362,5607,416],{"emptyLinePlaceholder":415},[362,5609,5610],{"class":364,"line":1383},[362,5611,416],{"emptyLinePlaceholder":415},[362,5613,5614,5616,5618,5620,5623,5625,5628,5630,5632,5634,5636,5638,5641,5643,5645],{"class":364,"line":1402},[362,5615,1545],{"class":886},[362,5617,738],{"class":384},[362,5619,1550],{"class":808},[362,5621,5622],{"class":1553},"\"Cascaded ID stability:  ",[362,5624,1557],{"class":741},[362,5626,5627],{"class":734},"id_stability",[362,5629,738],{"class":384},[362,5631,5032],{"class":734},[362,5633,446],{"class":384},[362,5635,5136],{"class":734},[362,5637,1567],{"class":384},[362,5639,5640],{"class":808},":.3f",[362,5642,1570],{"class":741},[362,5644,1616],{"class":1553},[362,5646,586],{"class":384},[362,5648,5649,5651,5653,5655,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678],{"class":364,"line":1420},[362,5650,1545],{"class":886},[362,5652,738],{"class":384},[362,5654,1550],{"class":808},[362,5656,5657],{"class":1553},"\"Parallel ID stability:  ",[362,5659,1557],{"class":741},[362,5661,5627],{"class":734},[362,5663,738],{"class":384},[362,5665,5061],{"class":734},[362,5667,446],{"class":384},[362,5669,5136],{"class":734},[362,5671,1567],{"class":384},[362,5673,5640],{"class":808},[362,5675,1570],{"class":741},[362,5677,1616],{"class":1553},[362,5679,586],{"class":384},[746,5681],{"data":5682,"kind":1622},"Q2FzY2FkZWQgSUQgc3RhYmlsaXR5OiAgMS4wMDAKUGFyYWxsZWwgSUQgc3RhYmlsaXR5OiAgMS4wMDAK",[338,5684,5685],{},"On this small synthetic clip both shapes get most of the way.\nAt scale, K=2 cascaded consistently outperforms parallel —\nthe gap widens with more stages because parallel-merging\nconflicting matches injects errors.",[751,5687,5689],{"id":5688},"where-to-go-from-here","Where to go from here",[3286,5691,5692,5697,5707,5713],{},[3289,5693,5694,5695,385],{},"For an Optuna sweep over the tracker design space (with\nMask2Former on Cityscapes frames or a synthetic stand-in),\nlook at ",[348,5696,350],{},[3289,5698,5699,5700,5703,5704,2455],{},"For multi-stream batched inference, see\n",[348,5701,5702],{},"unitrack.tracker.BatchTracker"," (uses ",[348,5705,5706],{},"torch.vmap",[3289,5708,5709,5710,385],{},"For clip-aware tracking (MinVIS, DVIS++ patterns), see\n",[348,5711,5712],{},"unitrack.tracker.ClipTracker",[3289,5714,5715,5716,5719],{},"For end-to-end learnable tracking (gradients flowing through\nthe matcher), construct your ",[348,5717,5718],{},"Tracker(..., differentiable=True)","\nto swap in soft companions automatically.",[338,5721,5722],{},"Happy tracking!",[5724,5725,5726],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .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 .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":358,"searchDepth":398,"depth":398,"links":5728},[5729,5730,5731,5732,5733,5734,5735,5736,5737,5738],{"id":753,"depth":376,"text":754},{"id":1625,"depth":376,"text":1626},{"id":2853,"depth":376,"text":2854},{"id":3277,"depth":376,"text":3278},{"id":3281,"depth":376,"text":3278},{"id":3808,"depth":376,"text":3809},{"id":4135,"depth":376,"text":4136},{"id":4577,"depth":376,"text":4578},{"id":5111,"depth":376,"text":5112},{"id":5688,"depth":376,"text":5689},"md",{"notebook":415},{"icon":63},{"title":115,"description":340},"9PoxFjyOUbTgx_GTDTYiH2ZAFL_XPLY2Br1f-sfw544",{},1785139889774]