[{"data":1,"prerenderedAt":8397},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Ftutorials\u002Fcosts_and_gates":328,"docyard:crossref-index":8396},[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":103,"body":330,"description":8390,"extension":8391,"meta":8392,"navigation":8393,"path":104,"seo":8394,"stem":105,"__hash__":8395},"content\u002F5.notebooks\u002Ftutorials\u002F3.costs_and_gates.md",{"type":331,"value":332,"toc":8378},"minimark",[333,337,363,366,738,743,746,2145,2149,2152,2753,2757,2778,3177,3183,3187,3225,3571,3576,3579,3583,3620,3623,4495,4500,4507,4779,4784,4788,5013,6036,6041,6047,6341,6346,6349,6353,6387,6795,6800,6804,6812,6844,7202,7892,7897,7900,7904,7907,7974,7983,8334,8339,8344,8348,8374],[334,335,103],"h1",{"id":336},"_3-the-cost-gate-zoos",[338,339,340,341,345,346,350,351,354,355,358,359,362],"p",{},"unitrack ships a catalogue of ",[342,343,344],"strong",{},"cost producers"," (functions\nfrom ",[347,348,349],"code",{},"(tracklets, detections)"," to a ",[347,352,353],{},"CostExpression",") and\n",[342,356,357],{},"gate producers"," (functions to a ",[347,360,361],{},"Gate"," variant). Mixing\nand matching them is most of the design space the paper\nexplores.",[338,364,365],{},"This notebook visualizes each one on small toy inputs so\nyou can see at a glance what shape each module produces.",[367,368,373],"pre",{"className":369,"code":370,"language":371,"meta":372,"style":372},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import torch\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfrom unitrack.costs import (\n    BiSoftmax,\n    BoxCIoU,\n    BoxGIoU,\n    BoxIoU,\n    CDist,\n    Chamfer,\n    Cosine,\n    Mahalanobis,\n    MaskIoU,\n    RBF,\n    Reduce,\n    Weighted,\n)\nfrom unitrack.data import Detections, FrameContext, Gate, Tracklets\nfrom unitrack.gates import (\n    ClassGate,\n    MotionGate,\n    NoneGate,\n    ScoreGate,\n    SpatialGate2D,\n    SpatialGate3D,\n)\nfrom unitrack.lifecycle import TrackletStatus\n\ntorch.manual_seed(0)\nctx = FrameContext.make(frame_idx=0, delta=0.0)\n\n","python","",[347,374,375,388,410,424,431,450,459,467,475,483,491,499,507,515,523,532,540,548,554,587,603,611,619,627,635,643,651,656,673,678,699],{"__ignoreMap":372},[376,377,380,384],"span",{"class":378,"line":379},"line",1,[376,381,383],{"class":382},"sVHd0","import",[376,385,387],{"class":386},"su5hD"," torch\n",[376,389,391,393,396,400,404,407],{"class":378,"line":390},2,[376,392,383],{"class":382},[376,394,395],{"class":386}," matplotlib",[376,397,399],{"class":398},"sP7_E",".",[376,401,403],{"class":402},"skxfh","pyplot",[376,405,406],{"class":382}," as",[376,408,409],{"class":386}," plt\n",[376,411,413,415,418,421],{"class":378,"line":412},3,[376,414,383],{"class":382},[376,416,417],{"class":386}," numpy ",[376,419,420],{"class":382},"as",[376,422,423],{"class":386}," np\n",[376,425,427],{"class":378,"line":426},4,[376,428,430],{"emptyLinePlaceholder":429},true,"\n",[376,432,434,437,440,442,445,447],{"class":378,"line":433},5,[376,435,436],{"class":382},"from",[376,438,439],{"class":386}," unitrack",[376,441,399],{"class":398},[376,443,444],{"class":386},"costs ",[376,446,383],{"class":382},[376,448,449],{"class":398}," (\n",[376,451,453,456],{"class":378,"line":452},6,[376,454,455],{"class":386},"    BiSoftmax",[376,457,458],{"class":398},",\n",[376,460,462,465],{"class":378,"line":461},7,[376,463,464],{"class":386},"    BoxCIoU",[376,466,458],{"class":398},[376,468,470,473],{"class":378,"line":469},8,[376,471,472],{"class":386},"    BoxGIoU",[376,474,458],{"class":398},[376,476,478,481],{"class":378,"line":477},9,[376,479,480],{"class":386},"    BoxIoU",[376,482,458],{"class":398},[376,484,486,489],{"class":378,"line":485},10,[376,487,488],{"class":386},"    CDist",[376,490,458],{"class":398},[376,492,494,497],{"class":378,"line":493},11,[376,495,496],{"class":386},"    Chamfer",[376,498,458],{"class":398},[376,500,502,505],{"class":378,"line":501},12,[376,503,504],{"class":386},"    Cosine",[376,506,458],{"class":398},[376,508,510,513],{"class":378,"line":509},13,[376,511,512],{"class":386},"    Mahalanobis",[376,514,458],{"class":398},[376,516,518,521],{"class":378,"line":517},14,[376,519,520],{"class":386},"    MaskIoU",[376,522,458],{"class":398},[376,524,526,530],{"class":378,"line":525},15,[376,527,529],{"class":528},"s_hVV","    RBF",[376,531,458],{"class":398},[376,533,535,538],{"class":378,"line":534},16,[376,536,537],{"class":386},"    Reduce",[376,539,458],{"class":398},[376,541,543,546],{"class":378,"line":542},17,[376,544,545],{"class":386},"    Weighted",[376,547,458],{"class":398},[376,549,551],{"class":378,"line":550},18,[376,552,553],{"class":398},")\n",[376,555,557,559,561,563,566,568,571,574,577,579,582,584],{"class":378,"line":556},19,[376,558,436],{"class":382},[376,560,439],{"class":386},[376,562,399],{"class":398},[376,564,565],{"class":386},"data ",[376,567,383],{"class":382},[376,569,570],{"class":386}," Detections",[376,572,573],{"class":398},",",[376,575,576],{"class":386}," FrameContext",[376,578,573],{"class":398},[376,580,581],{"class":386}," Gate",[376,583,573],{"class":398},[376,585,586],{"class":386}," Tracklets\n",[376,588,590,592,594,596,599,601],{"class":378,"line":589},20,[376,591,436],{"class":382},[376,593,439],{"class":386},[376,595,399],{"class":398},[376,597,598],{"class":386},"gates ",[376,600,383],{"class":382},[376,602,449],{"class":398},[376,604,606,609],{"class":378,"line":605},21,[376,607,608],{"class":386},"    ClassGate",[376,610,458],{"class":398},[376,612,614,617],{"class":378,"line":613},22,[376,615,616],{"class":386},"    MotionGate",[376,618,458],{"class":398},[376,620,622,625],{"class":378,"line":621},23,[376,623,624],{"class":386},"    NoneGate",[376,626,458],{"class":398},[376,628,630,633],{"class":378,"line":629},24,[376,631,632],{"class":386},"    ScoreGate",[376,634,458],{"class":398},[376,636,638,641],{"class":378,"line":637},25,[376,639,640],{"class":386},"    SpatialGate2D",[376,642,458],{"class":398},[376,644,646,649],{"class":378,"line":645},26,[376,647,648],{"class":386},"    SpatialGate3D",[376,650,458],{"class":398},[376,652,654],{"class":378,"line":653},27,[376,655,553],{"class":398},[376,657,659,661,663,665,668,670],{"class":378,"line":658},28,[376,660,436],{"class":382},[376,662,439],{"class":386},[376,664,399],{"class":398},[376,666,667],{"class":386},"lifecycle ",[376,669,383],{"class":382},[376,671,672],{"class":386}," TrackletStatus\n",[376,674,676],{"class":378,"line":675},29,[376,677,430],{"emptyLinePlaceholder":429},[376,679,681,684,686,690,693,697],{"class":378,"line":680},30,[376,682,683],{"class":386},"torch",[376,685,399],{"class":398},[376,687,689],{"class":688},"slqww","manual_seed",[376,691,692],{"class":398},"(",[376,694,696],{"class":695},"srdBf","0",[376,698,553],{"class":398},[376,700,702,705,709,711,713,716,718,722,724,726,728,731,733,736],{"class":378,"line":701},31,[376,703,704],{"class":386},"ctx ",[376,706,708],{"class":707},"smGrS","=",[376,710,576],{"class":386},[376,712,399],{"class":398},[376,714,715],{"class":688},"make",[376,717,692],{"class":398},[376,719,721],{"class":720},"s99_P","frame_idx",[376,723,708],{"class":707},[376,725,696],{"class":695},[376,727,573],{"class":398},[376,729,730],{"class":720}," delta",[376,732,708],{"class":707},[376,734,735],{"class":695},"0.0",[376,737,553],{"class":398},[739,740,742],"h2",{"id":741},"a-common-toy-fixture","A common toy fixture",[338,744,745],{},"Throughout this notebook we'll use 3 tracklets vs 4 detections\nwith synthetic kernel embeddings, masks, bboxes, and centroids.",[367,747,749],{"className":369,"code":748,"language":371,"meta":372,"style":372},"N, M, D = 3, 4, 8\n\n\ndef make_tracklets(\n    *, kernel=None, mask=None, bbox=None, centroid=None, cov=None, klass=None\n):\n    base = dict(\n        id=torch.arange(N, dtype=torch.int64),\n        status=torch.full((N,), int(TrackletStatus.Active), dtype=torch.int8),\n        hits=torch.ones(N, dtype=torch.int32),\n        time_since_update=torch.zeros(N, dtype=torch.int32),\n        age=torch.ones(N, dtype=torch.int32),\n        frame_started=torch.zeros(N, dtype=torch.int32),\n        frame_last_seen=torch.zeros(N, dtype=torch.int32),\n        batch_size=[N],\n    )\n    if kernel is not None:\n        base[\"kernel\"] = kernel\n    if mask is not None:\n        base[\"mask\"] = mask\n    if bbox is not None:\n        base[\"bbox\"] = bbox\n    if centroid is not None:\n        base[\"centroid\"] = centroid\n    if cov is not None:\n        base[\"centroid_cov\"] = cov\n    if klass is not None:\n        base[\"klass\"] = klass\n    return Tracklets(**base)\n\n\ndef make_dets(\n    *, kernel=None, mask=None, bbox=None, centroid=None, klass=None, score=None\n):\n    base = dict(\n        index=torch.arange(M, dtype=torch.int64),\n        batch_size=[M],\n    )\n    if kernel is not None:\n        base[\"kernel\"] = kernel\n    if mask is not None:\n        base[\"mask\"] = mask\n    if bbox is not None:\n        base[\"bbox\"] = bbox\n    if centroid is not None:\n        base[\"centroid\"] = centroid\n    if klass is not None:\n        base[\"klass\"] = klass\n    if score is not None:\n        base[\"score\"] = score\n    return Detections(**base)\n\n\n# Three tracklets with somewhat-distinct kernel embeddings:\ncs_kernel = torch.tensor(\n    [\n        [1, 0, 0, 0, 0, 0, 0, 0],\n        [0, 1, 0, 0, 0, 0, 0, 0],\n        [0, 0, 1, 0, 0, 0, 0, 0],\n    ],\n    dtype=torch.float32,\n)\n# Four detections — first 3 close to corresponding tracklets, last is novel.\nds_kernel = torch.tensor(\n    [\n        [0.9, 0.1, 0, 0, 0, 0, 0, 0],  # close to cs[0]\n        [0.1, 0.9, 0, 0, 0, 0, 0, 0],  # close to cs[1]\n        [0, 0.1, 0.9, 0, 0, 0, 0, 0],  # close to cs[2]\n        [0, 0, 0, 1, 0, 0, 0, 0],  # novel\n    ],\n    dtype=torch.float32,\n)\n\n",[347,750,751,781,785,789,802,866,871,884,919,970,1003,1035,1066,1097,1128,1143,1148,1168,1193,1208,1228,1243,1262,1277,1296,1311,1331,1346,1366,1383,1387,1391,1401,1455,1460,1471,1504,1517,1522,1537,1556,1571,1590,1605,1624,1639,1658,1673,1692,1708,1729,1744,1749,1754,1761,1779,1785,1825,1863,1900,1906,1923,1928,1934,1950,1955,1998,2040,2080,2120,2125,2140],{"__ignoreMap":372},[376,752,753,756,758,761,763,766,768,771,773,776,778],{"class":378,"line":379},[376,754,755],{"class":386},"N",[376,757,573],{"class":398},[376,759,760],{"class":386}," M",[376,762,573],{"class":398},[376,764,765],{"class":386}," D ",[376,767,708],{"class":707},[376,769,770],{"class":695}," 3",[376,772,573],{"class":398},[376,774,775],{"class":695}," 4",[376,777,573],{"class":398},[376,779,780],{"class":695}," 8\n",[376,782,783],{"class":378,"line":390},[376,784,430],{"emptyLinePlaceholder":429},[376,786,787],{"class":378,"line":412},[376,788,430],{"emptyLinePlaceholder":429},[376,790,791,795,799],{"class":378,"line":426},[376,792,794],{"class":793},"sbsja","def",[376,796,798],{"class":797},"sGLFI"," make_tracklets",[376,800,801],{"class":398},"(\n",[376,803,804,807,810,814,816,820,822,825,827,829,831,834,836,838,840,843,845,847,849,852,854,856,858,861,863],{"class":378,"line":433},[376,805,806],{"class":707},"    *",[376,808,809],{"class":386},", ",[376,811,813],{"class":812},"sFwrP","kernel",[376,815,708],{"class":707},[376,817,819],{"class":818},"s39Yj","None",[376,821,573],{"class":398},[376,823,824],{"class":812}," mask",[376,826,708],{"class":707},[376,828,819],{"class":818},[376,830,573],{"class":398},[376,832,833],{"class":812}," bbox",[376,835,708],{"class":707},[376,837,819],{"class":818},[376,839,573],{"class":398},[376,841,842],{"class":812}," centroid",[376,844,708],{"class":707},[376,846,819],{"class":818},[376,848,573],{"class":398},[376,850,851],{"class":812}," cov",[376,853,708],{"class":707},[376,855,819],{"class":818},[376,857,573],{"class":398},[376,859,860],{"class":812}," klass",[376,862,708],{"class":707},[376,864,865],{"class":818},"None\n",[376,867,868],{"class":378,"line":452},[376,869,870],{"class":398},"):\n",[376,872,873,876,878,882],{"class":378,"line":461},[376,874,875],{"class":386},"    base ",[376,877,708],{"class":707},[376,879,881],{"class":880},"sZMiF"," dict",[376,883,801],{"class":398},[376,885,886,889,891,893,895,898,900,902,904,907,909,911,913,916],{"class":378,"line":469},[376,887,888],{"class":720},"        id",[376,890,708],{"class":707},[376,892,683],{"class":688},[376,894,399],{"class":398},[376,896,897],{"class":688},"arange",[376,899,692],{"class":398},[376,901,755],{"class":688},[376,903,573],{"class":398},[376,905,906],{"class":720}," dtype",[376,908,708],{"class":707},[376,910,683],{"class":688},[376,912,399],{"class":398},[376,914,915],{"class":402},"int64",[376,917,918],{"class":398},"),\n",[376,920,921,924,926,928,930,933,936,938,941,944,946,949,951,954,957,959,961,963,965,968],{"class":378,"line":477},[376,922,923],{"class":720},"        status",[376,925,708],{"class":707},[376,927,683],{"class":688},[376,929,399],{"class":398},[376,931,932],{"class":688},"full",[376,934,935],{"class":398},"((",[376,937,755],{"class":688},[376,939,940],{"class":398},",),",[376,942,943],{"class":880}," int",[376,945,692],{"class":398},[376,947,948],{"class":688},"TrackletStatus",[376,950,399],{"class":398},[376,952,953],{"class":402},"Active",[376,955,956],{"class":398},"),",[376,958,906],{"class":720},[376,960,708],{"class":707},[376,962,683],{"class":688},[376,964,399],{"class":398},[376,966,967],{"class":402},"int8",[376,969,918],{"class":398},[376,971,972,975,977,979,981,984,986,988,990,992,994,996,998,1001],{"class":378,"line":485},[376,973,974],{"class":720},"        hits",[376,976,708],{"class":707},[376,978,683],{"class":688},[376,980,399],{"class":398},[376,982,983],{"class":688},"ones",[376,985,692],{"class":398},[376,987,755],{"class":688},[376,989,573],{"class":398},[376,991,906],{"class":720},[376,993,708],{"class":707},[376,995,683],{"class":688},[376,997,399],{"class":398},[376,999,1000],{"class":402},"int32",[376,1002,918],{"class":398},[376,1004,1005,1008,1010,1012,1014,1017,1019,1021,1023,1025,1027,1029,1031,1033],{"class":378,"line":493},[376,1006,1007],{"class":720},"        time_since_update",[376,1009,708],{"class":707},[376,1011,683],{"class":688},[376,1013,399],{"class":398},[376,1015,1016],{"class":688},"zeros",[376,1018,692],{"class":398},[376,1020,755],{"class":688},[376,1022,573],{"class":398},[376,1024,906],{"class":720},[376,1026,708],{"class":707},[376,1028,683],{"class":688},[376,1030,399],{"class":398},[376,1032,1000],{"class":402},[376,1034,918],{"class":398},[376,1036,1037,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064],{"class":378,"line":501},[376,1038,1039],{"class":720},"        age",[376,1041,708],{"class":707},[376,1043,683],{"class":688},[376,1045,399],{"class":398},[376,1047,983],{"class":688},[376,1049,692],{"class":398},[376,1051,755],{"class":688},[376,1053,573],{"class":398},[376,1055,906],{"class":720},[376,1057,708],{"class":707},[376,1059,683],{"class":688},[376,1061,399],{"class":398},[376,1063,1000],{"class":402},[376,1065,918],{"class":398},[376,1067,1068,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095],{"class":378,"line":509},[376,1069,1070],{"class":720},"        frame_started",[376,1072,708],{"class":707},[376,1074,683],{"class":688},[376,1076,399],{"class":398},[376,1078,1016],{"class":688},[376,1080,692],{"class":398},[376,1082,755],{"class":688},[376,1084,573],{"class":398},[376,1086,906],{"class":720},[376,1088,708],{"class":707},[376,1090,683],{"class":688},[376,1092,399],{"class":398},[376,1094,1000],{"class":402},[376,1096,918],{"class":398},[376,1098,1099,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126],{"class":378,"line":517},[376,1100,1101],{"class":720},"        frame_last_seen",[376,1103,708],{"class":707},[376,1105,683],{"class":688},[376,1107,399],{"class":398},[376,1109,1016],{"class":688},[376,1111,692],{"class":398},[376,1113,755],{"class":688},[376,1115,573],{"class":398},[376,1117,906],{"class":720},[376,1119,708],{"class":707},[376,1121,683],{"class":688},[376,1123,399],{"class":398},[376,1125,1000],{"class":402},[376,1127,918],{"class":398},[376,1129,1130,1133,1135,1138,1140],{"class":378,"line":525},[376,1131,1132],{"class":720},"        batch_size",[376,1134,708],{"class":707},[376,1136,1137],{"class":398},"[",[376,1139,755],{"class":688},[376,1141,1142],{"class":398},"],\n",[376,1144,1145],{"class":378,"line":534},[376,1146,1147],{"class":398},"    )\n",[376,1149,1150,1153,1156,1159,1162,1165],{"class":378,"line":542},[376,1151,1152],{"class":382},"    if",[376,1154,1155],{"class":386}," kernel ",[376,1157,1158],{"class":707},"is",[376,1160,1161],{"class":707}," not",[376,1163,1164],{"class":818}," None",[376,1166,1167],{"class":398},":\n",[376,1169,1170,1173,1175,1179,1182,1184,1187,1190],{"class":378,"line":550},[376,1171,1172],{"class":386},"        base",[376,1174,1137],{"class":398},[376,1176,1178],{"class":1177},"sjJ54","\"",[376,1180,813],{"class":1181},"s_sjI",[376,1183,1178],{"class":1177},[376,1185,1186],{"class":398},"]",[376,1188,1189],{"class":707}," =",[376,1191,1192],{"class":386}," kernel\n",[376,1194,1195,1197,1200,1202,1204,1206],{"class":378,"line":556},[376,1196,1152],{"class":382},[376,1198,1199],{"class":386}," mask ",[376,1201,1158],{"class":707},[376,1203,1161],{"class":707},[376,1205,1164],{"class":818},[376,1207,1167],{"class":398},[376,1209,1210,1212,1214,1216,1219,1221,1223,1225],{"class":378,"line":589},[376,1211,1172],{"class":386},[376,1213,1137],{"class":398},[376,1215,1178],{"class":1177},[376,1217,1218],{"class":1181},"mask",[376,1220,1178],{"class":1177},[376,1222,1186],{"class":398},[376,1224,1189],{"class":707},[376,1226,1227],{"class":386}," mask\n",[376,1229,1230,1232,1235,1237,1239,1241],{"class":378,"line":605},[376,1231,1152],{"class":382},[376,1233,1234],{"class":386}," bbox ",[376,1236,1158],{"class":707},[376,1238,1161],{"class":707},[376,1240,1164],{"class":818},[376,1242,1167],{"class":398},[376,1244,1245,1247,1249,1251,1253,1255,1257,1259],{"class":378,"line":613},[376,1246,1172],{"class":386},[376,1248,1137],{"class":398},[376,1250,1178],{"class":1177},[376,1252,291],{"class":1181},[376,1254,1178],{"class":1177},[376,1256,1186],{"class":398},[376,1258,1189],{"class":707},[376,1260,1261],{"class":386}," bbox\n",[376,1263,1264,1266,1269,1271,1273,1275],{"class":378,"line":621},[376,1265,1152],{"class":382},[376,1267,1268],{"class":386}," centroid ",[376,1270,1158],{"class":707},[376,1272,1161],{"class":707},[376,1274,1164],{"class":818},[376,1276,1167],{"class":398},[376,1278,1279,1281,1283,1285,1287,1289,1291,1293],{"class":378,"line":629},[376,1280,1172],{"class":386},[376,1282,1137],{"class":398},[376,1284,1178],{"class":1177},[376,1286,294],{"class":1181},[376,1288,1178],{"class":1177},[376,1290,1186],{"class":398},[376,1292,1189],{"class":707},[376,1294,1295],{"class":386}," centroid\n",[376,1297,1298,1300,1303,1305,1307,1309],{"class":378,"line":637},[376,1299,1152],{"class":382},[376,1301,1302],{"class":386}," cov ",[376,1304,1158],{"class":707},[376,1306,1161],{"class":707},[376,1308,1164],{"class":818},[376,1310,1167],{"class":398},[376,1312,1313,1315,1317,1319,1322,1324,1326,1328],{"class":378,"line":645},[376,1314,1172],{"class":386},[376,1316,1137],{"class":398},[376,1318,1178],{"class":1177},[376,1320,1321],{"class":1181},"centroid_cov",[376,1323,1178],{"class":1177},[376,1325,1186],{"class":398},[376,1327,1189],{"class":707},[376,1329,1330],{"class":386}," cov\n",[376,1332,1333,1335,1338,1340,1342,1344],{"class":378,"line":653},[376,1334,1152],{"class":382},[376,1336,1337],{"class":386}," klass ",[376,1339,1158],{"class":707},[376,1341,1161],{"class":707},[376,1343,1164],{"class":818},[376,1345,1167],{"class":398},[376,1347,1348,1350,1352,1354,1357,1359,1361,1363],{"class":378,"line":658},[376,1349,1172],{"class":386},[376,1351,1137],{"class":398},[376,1353,1178],{"class":1177},[376,1355,1356],{"class":1181},"klass",[376,1358,1178],{"class":1177},[376,1360,1186],{"class":398},[376,1362,1189],{"class":707},[376,1364,1365],{"class":386}," klass\n",[376,1367,1368,1371,1374,1376,1379,1381],{"class":378,"line":675},[376,1369,1370],{"class":382},"    return",[376,1372,1373],{"class":688}," Tracklets",[376,1375,692],{"class":398},[376,1377,1378],{"class":707},"**",[376,1380,259],{"class":688},[376,1382,553],{"class":398},[376,1384,1385],{"class":378,"line":680},[376,1386,430],{"emptyLinePlaceholder":429},[376,1388,1389],{"class":378,"line":701},[376,1390,430],{"emptyLinePlaceholder":429},[376,1392,1394,1396,1399],{"class":378,"line":1393},32,[376,1395,794],{"class":793},[376,1397,1398],{"class":797}," make_dets",[376,1400,801],{"class":398},[376,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1451,1453],{"class":378,"line":1403},33,[376,1405,806],{"class":707},[376,1407,809],{"class":386},[376,1409,813],{"class":812},[376,1411,708],{"class":707},[376,1413,819],{"class":818},[376,1415,573],{"class":398},[376,1417,824],{"class":812},[376,1419,708],{"class":707},[376,1421,819],{"class":818},[376,1423,573],{"class":398},[376,1425,833],{"class":812},[376,1427,708],{"class":707},[376,1429,819],{"class":818},[376,1431,573],{"class":398},[376,1433,842],{"class":812},[376,1435,708],{"class":707},[376,1437,819],{"class":818},[376,1439,573],{"class":398},[376,1441,860],{"class":812},[376,1443,708],{"class":707},[376,1445,819],{"class":818},[376,1447,573],{"class":398},[376,1449,1450],{"class":812}," score",[376,1452,708],{"class":707},[376,1454,865],{"class":818},[376,1456,1458],{"class":378,"line":1457},34,[376,1459,870],{"class":398},[376,1461,1463,1465,1467,1469],{"class":378,"line":1462},35,[376,1464,875],{"class":386},[376,1466,708],{"class":707},[376,1468,881],{"class":880},[376,1470,801],{"class":398},[376,1472,1474,1477,1479,1481,1483,1485,1487,1490,1492,1494,1496,1498,1500,1502],{"class":378,"line":1473},36,[376,1475,1476],{"class":720},"        index",[376,1478,708],{"class":707},[376,1480,683],{"class":688},[376,1482,399],{"class":398},[376,1484,897],{"class":688},[376,1486,692],{"class":398},[376,1488,1489],{"class":688},"M",[376,1491,573],{"class":398},[376,1493,906],{"class":720},[376,1495,708],{"class":707},[376,1497,683],{"class":688},[376,1499,399],{"class":398},[376,1501,915],{"class":402},[376,1503,918],{"class":398},[376,1505,1507,1509,1511,1513,1515],{"class":378,"line":1506},37,[376,1508,1132],{"class":720},[376,1510,708],{"class":707},[376,1512,1137],{"class":398},[376,1514,1489],{"class":688},[376,1516,1142],{"class":398},[376,1518,1520],{"class":378,"line":1519},38,[376,1521,1147],{"class":398},[376,1523,1525,1527,1529,1531,1533,1535],{"class":378,"line":1524},39,[376,1526,1152],{"class":382},[376,1528,1155],{"class":386},[376,1530,1158],{"class":707},[376,1532,1161],{"class":707},[376,1534,1164],{"class":818},[376,1536,1167],{"class":398},[376,1538,1540,1542,1544,1546,1548,1550,1552,1554],{"class":378,"line":1539},40,[376,1541,1172],{"class":386},[376,1543,1137],{"class":398},[376,1545,1178],{"class":1177},[376,1547,813],{"class":1181},[376,1549,1178],{"class":1177},[376,1551,1186],{"class":398},[376,1553,1189],{"class":707},[376,1555,1192],{"class":386},[376,1557,1559,1561,1563,1565,1567,1569],{"class":378,"line":1558},41,[376,1560,1152],{"class":382},[376,1562,1199],{"class":386},[376,1564,1158],{"class":707},[376,1566,1161],{"class":707},[376,1568,1164],{"class":818},[376,1570,1167],{"class":398},[376,1572,1574,1576,1578,1580,1582,1584,1586,1588],{"class":378,"line":1573},42,[376,1575,1172],{"class":386},[376,1577,1137],{"class":398},[376,1579,1178],{"class":1177},[376,1581,1218],{"class":1181},[376,1583,1178],{"class":1177},[376,1585,1186],{"class":398},[376,1587,1189],{"class":707},[376,1589,1227],{"class":386},[376,1591,1593,1595,1597,1599,1601,1603],{"class":378,"line":1592},43,[376,1594,1152],{"class":382},[376,1596,1234],{"class":386},[376,1598,1158],{"class":707},[376,1600,1161],{"class":707},[376,1602,1164],{"class":818},[376,1604,1167],{"class":398},[376,1606,1608,1610,1612,1614,1616,1618,1620,1622],{"class":378,"line":1607},44,[376,1609,1172],{"class":386},[376,1611,1137],{"class":398},[376,1613,1178],{"class":1177},[376,1615,291],{"class":1181},[376,1617,1178],{"class":1177},[376,1619,1186],{"class":398},[376,1621,1189],{"class":707},[376,1623,1261],{"class":386},[376,1625,1627,1629,1631,1633,1635,1637],{"class":378,"line":1626},45,[376,1628,1152],{"class":382},[376,1630,1268],{"class":386},[376,1632,1158],{"class":707},[376,1634,1161],{"class":707},[376,1636,1164],{"class":818},[376,1638,1167],{"class":398},[376,1640,1642,1644,1646,1648,1650,1652,1654,1656],{"class":378,"line":1641},46,[376,1643,1172],{"class":386},[376,1645,1137],{"class":398},[376,1647,1178],{"class":1177},[376,1649,294],{"class":1181},[376,1651,1178],{"class":1177},[376,1653,1186],{"class":398},[376,1655,1189],{"class":707},[376,1657,1295],{"class":386},[376,1659,1661,1663,1665,1667,1669,1671],{"class":378,"line":1660},47,[376,1662,1152],{"class":382},[376,1664,1337],{"class":386},[376,1666,1158],{"class":707},[376,1668,1161],{"class":707},[376,1670,1164],{"class":818},[376,1672,1167],{"class":398},[376,1674,1676,1678,1680,1682,1684,1686,1688,1690],{"class":378,"line":1675},48,[376,1677,1172],{"class":386},[376,1679,1137],{"class":398},[376,1681,1178],{"class":1177},[376,1683,1356],{"class":1181},[376,1685,1178],{"class":1177},[376,1687,1186],{"class":398},[376,1689,1189],{"class":707},[376,1691,1365],{"class":386},[376,1693,1695,1697,1700,1702,1704,1706],{"class":378,"line":1694},49,[376,1696,1152],{"class":382},[376,1698,1699],{"class":386}," score ",[376,1701,1158],{"class":707},[376,1703,1161],{"class":707},[376,1705,1164],{"class":818},[376,1707,1167],{"class":398},[376,1709,1711,1713,1715,1717,1720,1722,1724,1726],{"class":378,"line":1710},50,[376,1712,1172],{"class":386},[376,1714,1137],{"class":398},[376,1716,1178],{"class":1177},[376,1718,1719],{"class":1181},"score",[376,1721,1178],{"class":1177},[376,1723,1186],{"class":398},[376,1725,1189],{"class":707},[376,1727,1728],{"class":386}," score\n",[376,1730,1732,1734,1736,1738,1740,1742],{"class":378,"line":1731},51,[376,1733,1370],{"class":382},[376,1735,570],{"class":688},[376,1737,692],{"class":398},[376,1739,1378],{"class":707},[376,1741,259],{"class":688},[376,1743,553],{"class":398},[376,1745,1747],{"class":378,"line":1746},52,[376,1748,430],{"emptyLinePlaceholder":429},[376,1750,1752],{"class":378,"line":1751},53,[376,1753,430],{"emptyLinePlaceholder":429},[376,1755,1757],{"class":378,"line":1756},54,[376,1758,1760],{"class":1759},"sutJx","# Three tracklets with somewhat-distinct kernel embeddings:\n",[376,1762,1764,1767,1769,1772,1774,1777],{"class":378,"line":1763},55,[376,1765,1766],{"class":386},"cs_kernel ",[376,1768,708],{"class":707},[376,1770,1771],{"class":386}," torch",[376,1773,399],{"class":398},[376,1775,1776],{"class":688},"tensor",[376,1778,801],{"class":398},[376,1780,1782],{"class":378,"line":1781},56,[376,1783,1784],{"class":398},"    [\n",[376,1786,1788,1791,1794,1796,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823],{"class":378,"line":1787},57,[376,1789,1790],{"class":398},"        [",[376,1792,1793],{"class":695},"1",[376,1795,573],{"class":398},[376,1797,1798],{"class":695}," 0",[376,1800,573],{"class":398},[376,1802,1798],{"class":695},[376,1804,573],{"class":398},[376,1806,1798],{"class":695},[376,1808,573],{"class":398},[376,1810,1798],{"class":695},[376,1812,573],{"class":398},[376,1814,1798],{"class":695},[376,1816,573],{"class":398},[376,1818,1798],{"class":695},[376,1820,573],{"class":398},[376,1822,1798],{"class":695},[376,1824,1142],{"class":398},[376,1826,1828,1830,1832,1834,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861],{"class":378,"line":1827},58,[376,1829,1790],{"class":398},[376,1831,696],{"class":695},[376,1833,573],{"class":398},[376,1835,1836],{"class":695}," 1",[376,1838,573],{"class":398},[376,1840,1798],{"class":695},[376,1842,573],{"class":398},[376,1844,1798],{"class":695},[376,1846,573],{"class":398},[376,1848,1798],{"class":695},[376,1850,573],{"class":398},[376,1852,1798],{"class":695},[376,1854,573],{"class":398},[376,1856,1798],{"class":695},[376,1858,573],{"class":398},[376,1860,1798],{"class":695},[376,1862,1142],{"class":398},[376,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898],{"class":378,"line":1865},59,[376,1867,1790],{"class":398},[376,1869,696],{"class":695},[376,1871,573],{"class":398},[376,1873,1798],{"class":695},[376,1875,573],{"class":398},[376,1877,1836],{"class":695},[376,1879,573],{"class":398},[376,1881,1798],{"class":695},[376,1883,573],{"class":398},[376,1885,1798],{"class":695},[376,1887,573],{"class":398},[376,1889,1798],{"class":695},[376,1891,573],{"class":398},[376,1893,1798],{"class":695},[376,1895,573],{"class":398},[376,1897,1798],{"class":695},[376,1899,1142],{"class":398},[376,1901,1903],{"class":378,"line":1902},60,[376,1904,1905],{"class":398},"    ],\n",[376,1907,1909,1912,1914,1916,1918,1921],{"class":378,"line":1908},61,[376,1910,1911],{"class":720},"    dtype",[376,1913,708],{"class":707},[376,1915,683],{"class":688},[376,1917,399],{"class":398},[376,1919,1920],{"class":402},"float32",[376,1922,458],{"class":398},[376,1924,1926],{"class":378,"line":1925},62,[376,1927,553],{"class":398},[376,1929,1931],{"class":378,"line":1930},63,[376,1932,1933],{"class":1759},"# Four detections — first 3 close to corresponding tracklets, last is novel.\n",[376,1935,1937,1940,1942,1944,1946,1948],{"class":378,"line":1936},64,[376,1938,1939],{"class":386},"ds_kernel ",[376,1941,708],{"class":707},[376,1943,1771],{"class":386},[376,1945,399],{"class":398},[376,1947,1776],{"class":688},[376,1949,801],{"class":398},[376,1951,1953],{"class":378,"line":1952},65,[376,1954,1784],{"class":398},[376,1956,1958,1960,1963,1965,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1995],{"class":378,"line":1957},66,[376,1959,1790],{"class":398},[376,1961,1962],{"class":695},"0.9",[376,1964,573],{"class":398},[376,1966,1967],{"class":695}," 0.1",[376,1969,573],{"class":398},[376,1971,1798],{"class":695},[376,1973,573],{"class":398},[376,1975,1798],{"class":695},[376,1977,573],{"class":398},[376,1979,1798],{"class":695},[376,1981,573],{"class":398},[376,1983,1798],{"class":695},[376,1985,573],{"class":398},[376,1987,1798],{"class":695},[376,1989,573],{"class":398},[376,1991,1798],{"class":695},[376,1993,1994],{"class":398},"],",[376,1996,1997],{"class":1759},"  # close to cs[0]\n",[376,1999,2001,2003,2006,2008,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037],{"class":378,"line":2000},67,[376,2002,1790],{"class":398},[376,2004,2005],{"class":695},"0.1",[376,2007,573],{"class":398},[376,2009,2010],{"class":695}," 0.9",[376,2012,573],{"class":398},[376,2014,1798],{"class":695},[376,2016,573],{"class":398},[376,2018,1798],{"class":695},[376,2020,573],{"class":398},[376,2022,1798],{"class":695},[376,2024,573],{"class":398},[376,2026,1798],{"class":695},[376,2028,573],{"class":398},[376,2030,1798],{"class":695},[376,2032,573],{"class":398},[376,2034,1798],{"class":695},[376,2036,1994],{"class":398},[376,2038,2039],{"class":1759},"  # close to cs[1]\n",[376,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077],{"class":378,"line":2042},68,[376,2044,1790],{"class":398},[376,2046,696],{"class":695},[376,2048,573],{"class":398},[376,2050,1967],{"class":695},[376,2052,573],{"class":398},[376,2054,2010],{"class":695},[376,2056,573],{"class":398},[376,2058,1798],{"class":695},[376,2060,573],{"class":398},[376,2062,1798],{"class":695},[376,2064,573],{"class":398},[376,2066,1798],{"class":695},[376,2068,573],{"class":398},[376,2070,1798],{"class":695},[376,2072,573],{"class":398},[376,2074,1798],{"class":695},[376,2076,1994],{"class":398},[376,2078,2079],{"class":1759},"  # close to cs[2]\n",[376,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117],{"class":378,"line":2082},69,[376,2084,1790],{"class":398},[376,2086,696],{"class":695},[376,2088,573],{"class":398},[376,2090,1798],{"class":695},[376,2092,573],{"class":398},[376,2094,1798],{"class":695},[376,2096,573],{"class":398},[376,2098,1836],{"class":695},[376,2100,573],{"class":398},[376,2102,1798],{"class":695},[376,2104,573],{"class":398},[376,2106,1798],{"class":695},[376,2108,573],{"class":398},[376,2110,1798],{"class":695},[376,2112,573],{"class":398},[376,2114,1798],{"class":695},[376,2116,1994],{"class":398},[376,2118,2119],{"class":1759},"  # novel\n",[376,2121,2123],{"class":378,"line":2122},70,[376,2124,1905],{"class":398},[376,2126,2128,2130,2132,2134,2136,2138],{"class":378,"line":2127},71,[376,2129,1911],{"class":720},[376,2131,708],{"class":707},[376,2133,683],{"class":688},[376,2135,399],{"class":398},[376,2137,1920],{"class":402},[376,2139,458],{"class":398},[376,2141,2143],{"class":378,"line":2142},72,[376,2144,553],{"class":398},[739,2146,2148],{"id":2147},"heatmap-helper","Heatmap helper",[338,2150,2151],{},"We'll plot every cost matrix the same way: tracklets on the\nrows, detections on the columns, colorbar with low = better\nmatch.",[367,2153,2155],{"className":369,"code":2154,"language":371,"meta":372,"style":372},"def plot_cost(matrix: torch.Tensor, title: str, ax=None, cmap=\"viridis\"):\n    if ax is None:\n        fig, ax = plt.subplots(figsize=(4, 3))\n    disp = matrix.detach().clone()\n    if torch.isinf(disp).any():\n        disp[torch.isinf(disp)] = disp[~torch.isinf(disp)].max() * 2\n    im = ax.imshow(disp.numpy(), cmap=cmap)\n    ax.set_title(title, fontsize=10)\n    ax.set_xlabel(\"ds\")\n    ax.set_ylabel(\"cs\")\n    ax.set_xticks(range(matrix.shape[1]))\n    ax.set_yticks(range(matrix.shape[0]))\n    for i in range(matrix.shape[0]):\n        for j in range(matrix.shape[1]):\n            v = matrix[i, j].item()\n            label = \"∞\" if not np.isfinite(v) else f\"{v:.2f}\"\n            ax.text(j, i, label, ha=\"center\", va=\"center\", color=\"white\", fontsize=8)\n    return ax\n\n",[347,2156,2157,2214,2227,2265,2289,2314,2369,2404,2431,2451,2471,2502,2529,2558,2584,2611,2669,2746],{"__ignoreMap":372},[376,2158,2159,2161,2164,2166,2169,2172,2174,2176,2179,2181,2184,2186,2189,2191,2194,2196,2198,2200,2203,2205,2207,2210,2212],{"class":378,"line":379},[376,2160,794],{"class":793},[376,2162,2163],{"class":797}," plot_cost",[376,2165,692],{"class":398},[376,2167,2168],{"class":812},"matrix",[376,2170,2171],{"class":398},":",[376,2173,1771],{"class":386},[376,2175,399],{"class":398},[376,2177,2178],{"class":402},"Tensor",[376,2180,573],{"class":398},[376,2182,2183],{"class":812}," title",[376,2185,2171],{"class":398},[376,2187,2188],{"class":880}," str",[376,2190,573],{"class":398},[376,2192,2193],{"class":812}," ax",[376,2195,708],{"class":707},[376,2197,819],{"class":818},[376,2199,573],{"class":398},[376,2201,2202],{"class":812}," cmap",[376,2204,708],{"class":707},[376,2206,1178],{"class":1177},[376,2208,2209],{"class":1181},"viridis",[376,2211,1178],{"class":1177},[376,2213,870],{"class":398},[376,2215,2216,2218,2221,2223,2225],{"class":378,"line":390},[376,2217,1152],{"class":382},[376,2219,2220],{"class":386}," ax ",[376,2222,1158],{"class":707},[376,2224,1164],{"class":818},[376,2226,1167],{"class":398},[376,2228,2229,2232,2234,2236,2238,2241,2243,2246,2248,2251,2253,2255,2258,2260,2262],{"class":378,"line":412},[376,2230,2231],{"class":386},"        fig",[376,2233,573],{"class":398},[376,2235,2220],{"class":386},[376,2237,708],{"class":707},[376,2239,2240],{"class":386}," plt",[376,2242,399],{"class":398},[376,2244,2245],{"class":688},"subplots",[376,2247,692],{"class":398},[376,2249,2250],{"class":720},"figsize",[376,2252,708],{"class":707},[376,2254,692],{"class":398},[376,2256,2257],{"class":695},"4",[376,2259,573],{"class":398},[376,2261,770],{"class":695},[376,2263,2264],{"class":398},"))\n",[376,2266,2267,2270,2272,2275,2277,2280,2283,2286],{"class":378,"line":426},[376,2268,2269],{"class":386},"    disp ",[376,2271,708],{"class":707},[376,2273,2274],{"class":386}," matrix",[376,2276,399],{"class":398},[376,2278,2279],{"class":688},"detach",[376,2281,2282],{"class":398},"().",[376,2284,2285],{"class":688},"clone",[376,2287,2288],{"class":398},"()\n",[376,2290,2291,2293,2295,2297,2300,2302,2305,2308,2311],{"class":378,"line":433},[376,2292,1152],{"class":382},[376,2294,1771],{"class":386},[376,2296,399],{"class":398},[376,2298,2299],{"class":688},"isinf",[376,2301,692],{"class":398},[376,2303,2304],{"class":688},"disp",[376,2306,2307],{"class":398},").",[376,2309,2310],{"class":688},"any",[376,2312,2313],{"class":398},"():\n",[376,2315,2316,2319,2321,2323,2325,2327,2329,2331,2334,2336,2339,2341,2344,2346,2348,2350,2352,2354,2357,2360,2363,2366],{"class":378,"line":452},[376,2317,2318],{"class":386},"        disp",[376,2320,1137],{"class":398},[376,2322,683],{"class":386},[376,2324,399],{"class":398},[376,2326,2299],{"class":688},[376,2328,692],{"class":398},[376,2330,2304],{"class":688},[376,2332,2333],{"class":398},")]",[376,2335,1189],{"class":707},[376,2337,2338],{"class":386}," disp",[376,2340,1137],{"class":398},[376,2342,2343],{"class":707},"~",[376,2345,683],{"class":386},[376,2347,399],{"class":398},[376,2349,2299],{"class":688},[376,2351,692],{"class":398},[376,2353,2304],{"class":688},[376,2355,2356],{"class":398},")].",[376,2358,2359],{"class":688},"max",[376,2361,2362],{"class":398},"()",[376,2364,2365],{"class":707}," *",[376,2367,2368],{"class":695}," 2\n",[376,2370,2371,2374,2376,2378,2380,2383,2385,2387,2389,2392,2395,2397,2399,2402],{"class":378,"line":461},[376,2372,2373],{"class":386},"    im ",[376,2375,708],{"class":707},[376,2377,2193],{"class":386},[376,2379,399],{"class":398},[376,2381,2382],{"class":688},"imshow",[376,2384,692],{"class":398},[376,2386,2304],{"class":688},[376,2388,399],{"class":398},[376,2390,2391],{"class":688},"numpy",[376,2393,2394],{"class":398},"(),",[376,2396,2202],{"class":720},[376,2398,708],{"class":707},[376,2400,2401],{"class":688},"cmap",[376,2403,553],{"class":398},[376,2405,2406,2409,2411,2414,2416,2419,2421,2424,2426,2429],{"class":378,"line":469},[376,2407,2408],{"class":386},"    ax",[376,2410,399],{"class":398},[376,2412,2413],{"class":688},"set_title",[376,2415,692],{"class":398},[376,2417,2418],{"class":688},"title",[376,2420,573],{"class":398},[376,2422,2423],{"class":720}," fontsize",[376,2425,708],{"class":707},[376,2427,2428],{"class":695},"10",[376,2430,553],{"class":398},[376,2432,2433,2435,2437,2440,2442,2444,2447,2449],{"class":378,"line":477},[376,2434,2408],{"class":386},[376,2436,399],{"class":398},[376,2438,2439],{"class":688},"set_xlabel",[376,2441,692],{"class":398},[376,2443,1178],{"class":1177},[376,2445,2446],{"class":1181},"ds",[376,2448,1178],{"class":1177},[376,2450,553],{"class":398},[376,2452,2453,2455,2457,2460,2462,2464,2467,2469],{"class":378,"line":485},[376,2454,2408],{"class":386},[376,2456,399],{"class":398},[376,2458,2459],{"class":688},"set_ylabel",[376,2461,692],{"class":398},[376,2463,1178],{"class":1177},[376,2465,2466],{"class":1181},"cs",[376,2468,1178],{"class":1177},[376,2470,553],{"class":398},[376,2472,2473,2475,2477,2480,2482,2486,2488,2490,2492,2495,2497,2499],{"class":378,"line":493},[376,2474,2408],{"class":386},[376,2476,399],{"class":398},[376,2478,2479],{"class":688},"set_xticks",[376,2481,692],{"class":398},[376,2483,2485],{"class":2484},"sptTA","range",[376,2487,692],{"class":398},[376,2489,2168],{"class":688},[376,2491,399],{"class":398},[376,2493,2494],{"class":402},"shape",[376,2496,1137],{"class":398},[376,2498,1793],{"class":695},[376,2500,2501],{"class":398},"]))\n",[376,2503,2504,2506,2508,2511,2513,2515,2517,2519,2521,2523,2525,2527],{"class":378,"line":501},[376,2505,2408],{"class":386},[376,2507,399],{"class":398},[376,2509,2510],{"class":688},"set_yticks",[376,2512,692],{"class":398},[376,2514,2485],{"class":2484},[376,2516,692],{"class":398},[376,2518,2168],{"class":688},[376,2520,399],{"class":398},[376,2522,2494],{"class":402},[376,2524,1137],{"class":398},[376,2526,696],{"class":695},[376,2528,2501],{"class":398},[376,2530,2531,2534,2537,2540,2543,2545,2547,2549,2551,2553,2555],{"class":378,"line":509},[376,2532,2533],{"class":382},"    for",[376,2535,2536],{"class":386}," i ",[376,2538,2539],{"class":382},"in",[376,2541,2542],{"class":2484}," range",[376,2544,692],{"class":398},[376,2546,2168],{"class":688},[376,2548,399],{"class":398},[376,2550,2494],{"class":402},[376,2552,1137],{"class":398},[376,2554,696],{"class":695},[376,2556,2557],{"class":398},"]):\n",[376,2559,2560,2563,2566,2568,2570,2572,2574,2576,2578,2580,2582],{"class":378,"line":517},[376,2561,2562],{"class":382},"        for",[376,2564,2565],{"class":386}," j ",[376,2567,2539],{"class":382},[376,2569,2542],{"class":2484},[376,2571,692],{"class":398},[376,2573,2168],{"class":688},[376,2575,399],{"class":398},[376,2577,2494],{"class":402},[376,2579,1137],{"class":398},[376,2581,1793],{"class":695},[376,2583,2557],{"class":398},[376,2585,2586,2589,2591,2593,2595,2598,2600,2603,2606,2609],{"class":378,"line":525},[376,2587,2588],{"class":386},"            v ",[376,2590,708],{"class":707},[376,2592,2274],{"class":386},[376,2594,1137],{"class":398},[376,2596,2597],{"class":386},"i",[376,2599,573],{"class":398},[376,2601,2602],{"class":386}," j",[376,2604,2605],{"class":398},"].",[376,2607,2608],{"class":688},"item",[376,2610,2288],{"class":398},[376,2612,2613,2616,2618,2621,2624,2626,2629,2631,2634,2636,2639,2641,2644,2647,2650,2653,2655,2658,2660,2663,2666],{"class":378,"line":534},[376,2614,2615],{"class":386},"            label ",[376,2617,708],{"class":707},[376,2619,2620],{"class":1177}," \"",[376,2622,2623],{"class":1181},"∞",[376,2625,1178],{"class":1177},[376,2627,2628],{"class":382}," if",[376,2630,1161],{"class":707},[376,2632,2633],{"class":386}," np",[376,2635,399],{"class":398},[376,2637,2638],{"class":688},"isfinite",[376,2640,692],{"class":398},[376,2642,2643],{"class":688},"v",[376,2645,2646],{"class":398},")",[376,2648,2649],{"class":382}," else",[376,2651,2652],{"class":793}," f",[376,2654,1178],{"class":1181},[376,2656,2657],{"class":695},"{",[376,2659,2643],{"class":386},[376,2661,2662],{"class":793},":.2f",[376,2664,2665],{"class":695},"}",[376,2667,2668],{"class":1181},"\"\n",[376,2670,2671,2674,2676,2679,2681,2684,2686,2689,2691,2694,2696,2699,2701,2703,2706,2708,2710,2713,2715,2717,2719,2721,2723,2726,2728,2730,2733,2735,2737,2739,2741,2744],{"class":378,"line":542},[376,2672,2673],{"class":386},"            ax",[376,2675,399],{"class":398},[376,2677,2678],{"class":688},"text",[376,2680,692],{"class":398},[376,2682,2683],{"class":688},"j",[376,2685,573],{"class":398},[376,2687,2688],{"class":688}," i",[376,2690,573],{"class":398},[376,2692,2693],{"class":688}," label",[376,2695,573],{"class":398},[376,2697,2698],{"class":720}," ha",[376,2700,708],{"class":707},[376,2702,1178],{"class":1177},[376,2704,2705],{"class":1181},"center",[376,2707,1178],{"class":1177},[376,2709,573],{"class":398},[376,2711,2712],{"class":720}," va",[376,2714,708],{"class":707},[376,2716,1178],{"class":1177},[376,2718,2705],{"class":1181},[376,2720,1178],{"class":1177},[376,2722,573],{"class":398},[376,2724,2725],{"class":720}," color",[376,2727,708],{"class":707},[376,2729,1178],{"class":1177},[376,2731,2732],{"class":1181},"white",[376,2734,1178],{"class":1177},[376,2736,573],{"class":398},[376,2738,2423],{"class":720},[376,2740,708],{"class":707},[376,2742,2743],{"class":695},"8",[376,2745,553],{"class":398},[376,2747,2748,2750],{"class":378,"line":550},[376,2749,1370],{"class":382},[376,2751,2752],{"class":386}," ax\n",[739,2754,2756],{"id":2755},"the-appearance-fixture-before-any-cost","The appearance fixture, before any cost",[338,2758,2759,2760,2762,2763,2765,2766,2768,2769,2771,2772,2774,2775,2777],{},"Every distance\u002Fsimilarity cost below reads the 8-dim ",[347,2761,813],{},"\nfield. Here are the raw embeddings the costs see: three tracklet\nrows (",[347,2764,2466],{},") and four detection rows (",[347,2767,2446],{},"). Rows 0–2 of ",[347,2770,2446],{}," are\nnear-copies of the matching ",[347,2773,2466],{}," row; ",[347,2776,2446],{}," row 3 lights up a\ndifferent dimension — a novel object with no tracklet to match.",[367,2779,2781],{"className":369,"code":2780,"language":371,"meta":372,"style":372},"fig, axes = plt.subplots(1, 2, figsize=(10, 3))\nfor ax, emb, title in [\n    (axes[0], cs_kernel, \"Tracklet kernels (cs)\"),\n    (axes[1], ds_kernel, \"Detection kernels (ds)\"),\n]:\n    im = ax.imshow(emb.numpy(), cmap=\"magma\", vmin=0, vmax=1, aspect=\"auto\")\n    ax.set_title(title, fontsize=10)\n    ax.set_xlabel(\"embedding dim\")\n    ax.set_ylabel(\"row\")\n    ax.set_yticks(range(emb.shape[0]))\n    ax.set_xticks(range(emb.shape[1]))\nfig.colorbar(im, ax=axes.ravel().tolist(), fraction=0.025, label=\"value\")\nfig.suptitle(\"Appearance feature space — what the distance\u002Fsimilarity costs see\")\nplt.show()\n\n",[347,2782,2783,2827,2849,2877,2903,2908,2976,2998,3017,3036,3062,3088,3145,3165],{"__ignoreMap":372},[376,2784,2785,2788,2790,2793,2795,2797,2799,2801,2803,2805,2807,2810,2812,2815,2817,2819,2821,2823,2825],{"class":378,"line":379},[376,2786,2787],{"class":386},"fig",[376,2789,573],{"class":398},[376,2791,2792],{"class":386}," axes ",[376,2794,708],{"class":707},[376,2796,2240],{"class":386},[376,2798,399],{"class":398},[376,2800,2245],{"class":688},[376,2802,692],{"class":398},[376,2804,1793],{"class":695},[376,2806,573],{"class":398},[376,2808,2809],{"class":695}," 2",[376,2811,573],{"class":398},[376,2813,2814],{"class":720}," figsize",[376,2816,708],{"class":707},[376,2818,692],{"class":398},[376,2820,2428],{"class":695},[376,2822,573],{"class":398},[376,2824,770],{"class":695},[376,2826,2264],{"class":398},[376,2828,2829,2832,2834,2836,2839,2841,2844,2846],{"class":378,"line":390},[376,2830,2831],{"class":382},"for",[376,2833,2193],{"class":386},[376,2835,573],{"class":398},[376,2837,2838],{"class":386}," emb",[376,2840,573],{"class":398},[376,2842,2843],{"class":386}," title ",[376,2845,2539],{"class":382},[376,2847,2848],{"class":398}," [\n",[376,2850,2851,2854,2857,2859,2861,2863,2866,2868,2870,2873,2875],{"class":378,"line":412},[376,2852,2853],{"class":398},"    (",[376,2855,2856],{"class":386},"axes",[376,2858,1137],{"class":398},[376,2860,696],{"class":695},[376,2862,1994],{"class":398},[376,2864,2865],{"class":386}," cs_kernel",[376,2867,573],{"class":398},[376,2869,2620],{"class":1177},[376,2871,2872],{"class":1181},"Tracklet kernels (cs)",[376,2874,1178],{"class":1177},[376,2876,918],{"class":398},[376,2878,2879,2881,2883,2885,2887,2889,2892,2894,2896,2899,2901],{"class":378,"line":426},[376,2880,2853],{"class":398},[376,2882,2856],{"class":386},[376,2884,1137],{"class":398},[376,2886,1793],{"class":695},[376,2888,1994],{"class":398},[376,2890,2891],{"class":386}," ds_kernel",[376,2893,573],{"class":398},[376,2895,2620],{"class":1177},[376,2897,2898],{"class":1181},"Detection kernels (ds)",[376,2900,1178],{"class":1177},[376,2902,918],{"class":398},[376,2904,2905],{"class":378,"line":433},[376,2906,2907],{"class":398},"]:\n",[376,2909,2910,2912,2914,2916,2918,2920,2922,2925,2927,2929,2931,2933,2935,2937,2940,2942,2944,2947,2949,2951,2953,2956,2958,2960,2962,2965,2967,2969,2972,2974],{"class":378,"line":452},[376,2911,2373],{"class":386},[376,2913,708],{"class":707},[376,2915,2193],{"class":386},[376,2917,399],{"class":398},[376,2919,2382],{"class":688},[376,2921,692],{"class":398},[376,2923,2924],{"class":688},"emb",[376,2926,399],{"class":398},[376,2928,2391],{"class":688},[376,2930,2394],{"class":398},[376,2932,2202],{"class":720},[376,2934,708],{"class":707},[376,2936,1178],{"class":1177},[376,2938,2939],{"class":1181},"magma",[376,2941,1178],{"class":1177},[376,2943,573],{"class":398},[376,2945,2946],{"class":720}," vmin",[376,2948,708],{"class":707},[376,2950,696],{"class":695},[376,2952,573],{"class":398},[376,2954,2955],{"class":720}," vmax",[376,2957,708],{"class":707},[376,2959,1793],{"class":695},[376,2961,573],{"class":398},[376,2963,2964],{"class":720}," aspect",[376,2966,708],{"class":707},[376,2968,1178],{"class":1177},[376,2970,2971],{"class":1181},"auto",[376,2973,1178],{"class":1177},[376,2975,553],{"class":398},[376,2977,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996],{"class":378,"line":461},[376,2979,2408],{"class":386},[376,2981,399],{"class":398},[376,2983,2413],{"class":688},[376,2985,692],{"class":398},[376,2987,2418],{"class":688},[376,2989,573],{"class":398},[376,2991,2423],{"class":720},[376,2993,708],{"class":707},[376,2995,2428],{"class":695},[376,2997,553],{"class":398},[376,2999,3000,3002,3004,3006,3008,3010,3013,3015],{"class":378,"line":469},[376,3001,2408],{"class":386},[376,3003,399],{"class":398},[376,3005,2439],{"class":688},[376,3007,692],{"class":398},[376,3009,1178],{"class":1177},[376,3011,3012],{"class":1181},"embedding dim",[376,3014,1178],{"class":1177},[376,3016,553],{"class":398},[376,3018,3019,3021,3023,3025,3027,3029,3032,3034],{"class":378,"line":477},[376,3020,2408],{"class":386},[376,3022,399],{"class":398},[376,3024,2459],{"class":688},[376,3026,692],{"class":398},[376,3028,1178],{"class":1177},[376,3030,3031],{"class":1181},"row",[376,3033,1178],{"class":1177},[376,3035,553],{"class":398},[376,3037,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060],{"class":378,"line":485},[376,3039,2408],{"class":386},[376,3041,399],{"class":398},[376,3043,2510],{"class":688},[376,3045,692],{"class":398},[376,3047,2485],{"class":2484},[376,3049,692],{"class":398},[376,3051,2924],{"class":688},[376,3053,399],{"class":398},[376,3055,2494],{"class":402},[376,3057,1137],{"class":398},[376,3059,696],{"class":695},[376,3061,2501],{"class":398},[376,3063,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086],{"class":378,"line":493},[376,3065,2408],{"class":386},[376,3067,399],{"class":398},[376,3069,2479],{"class":688},[376,3071,692],{"class":398},[376,3073,2485],{"class":2484},[376,3075,692],{"class":398},[376,3077,2924],{"class":688},[376,3079,399],{"class":398},[376,3081,2494],{"class":402},[376,3083,1137],{"class":398},[376,3085,1793],{"class":695},[376,3087,2501],{"class":398},[376,3089,3090,3092,3094,3097,3099,3102,3104,3106,3108,3110,3112,3115,3117,3120,3122,3125,3127,3130,3132,3134,3136,3138,3141,3143],{"class":378,"line":501},[376,3091,2787],{"class":386},[376,3093,399],{"class":398},[376,3095,3096],{"class":688},"colorbar",[376,3098,692],{"class":398},[376,3100,3101],{"class":688},"im",[376,3103,573],{"class":398},[376,3105,2193],{"class":720},[376,3107,708],{"class":707},[376,3109,2856],{"class":688},[376,3111,399],{"class":398},[376,3113,3114],{"class":688},"ravel",[376,3116,2282],{"class":398},[376,3118,3119],{"class":688},"tolist",[376,3121,2394],{"class":398},[376,3123,3124],{"class":720}," fraction",[376,3126,708],{"class":707},[376,3128,3129],{"class":695},"0.025",[376,3131,573],{"class":398},[376,3133,2693],{"class":720},[376,3135,708],{"class":707},[376,3137,1178],{"class":1177},[376,3139,3140],{"class":1181},"value",[376,3142,1178],{"class":1177},[376,3144,553],{"class":398},[376,3146,3147,3149,3151,3154,3156,3158,3161,3163],{"class":378,"line":509},[376,3148,2787],{"class":386},[376,3150,399],{"class":398},[376,3152,3153],{"class":688},"suptitle",[376,3155,692],{"class":398},[376,3157,1178],{"class":1177},[376,3159,3160],{"class":1181},"Appearance feature space — what the distance\u002Fsimilarity costs see",[376,3162,1178],{"class":1177},[376,3164,553],{"class":398},[376,3166,3167,3170,3172,3175],{"class":378,"line":517},[376,3168,3169],{"class":386},"plt",[376,3171,399],{"class":398},[376,3173,3174],{"class":688},"show",[376,3176,2288],{"class":398},[338,3178,3179],{},[3180,3181],"img",{"alt":372,"src":3182},"\u002F_nb\u002F9b51fdd6f04962d0.png",[739,3184,3186],{"id":3185},"distance-similarity-costs-over-kernel-embeddings","Distance \u002F similarity costs over kernel embeddings",[3188,3189,3190,3201,3210,3216],"ul",{},[3191,3192,3193,3196,3197,3200],"li",{},[342,3194,3195],{},"Cosine"," — ",[347,3198,3199],{},"1 − cos(a, b)",". Direction-only; magnitude irrelevant.",[3191,3202,3203,3196,3206,3209],{},[342,3204,3205],{},"CDist",[347,3207,3208],{},"‖a − b‖_p"," Minkowski distance (default p=2).",[3191,3211,3212,3215],{},[342,3213,3214],{},"BiSoftmax"," — bidirectional softmax similarity (paper-aligned).",[3191,3217,3218,3196,3221,3224],{},[342,3219,3220],{},"RBF",[347,3222,3223],{},"1 − exp(−γ ‖a − b‖²)","; kernel-style similarity.",[367,3226,3228],{"className":369,"code":3227,"language":371,"meta":372,"style":372},"cs = make_tracklets(kernel=cs_kernel)\nds = make_dets(kernel=ds_kernel)\n\nfig, axes = plt.subplots(1, 4, figsize=(15, 3))\nplot_cost(Cosine(\"kernel\")(cs, ds, ctx).matrix, \"Cosine\", ax=axes[0])\nplot_cost(CDist(\"kernel\")(cs, ds, ctx).matrix, \"CDist (p=2)\", ax=axes[1])\nplot_cost(BiSoftmax(\"kernel\")(cs, ds, ctx).matrix, \"BiSoftmax\", ax=axes[2])\nplot_cost(RBF(\"kernel\", gamma=1.0)(cs, ds, ctx).matrix, \"RBF (γ=1)\", ax=axes[3])\nplt.tight_layout()\nplt.show()\n\n",[347,3229,3230,3250,3270,3274,3315,3374,3429,3484,3550,3561],{"__ignoreMap":372},[376,3231,3232,3235,3237,3239,3241,3243,3245,3248],{"class":378,"line":379},[376,3233,3234],{"class":386},"cs ",[376,3236,708],{"class":707},[376,3238,798],{"class":688},[376,3240,692],{"class":398},[376,3242,813],{"class":720},[376,3244,708],{"class":707},[376,3246,3247],{"class":688},"cs_kernel",[376,3249,553],{"class":398},[376,3251,3252,3255,3257,3259,3261,3263,3265,3268],{"class":378,"line":390},[376,3253,3254],{"class":386},"ds ",[376,3256,708],{"class":707},[376,3258,1398],{"class":688},[376,3260,692],{"class":398},[376,3262,813],{"class":720},[376,3264,708],{"class":707},[376,3266,3267],{"class":688},"ds_kernel",[376,3269,553],{"class":398},[376,3271,3272],{"class":378,"line":412},[376,3273,430],{"emptyLinePlaceholder":429},[376,3275,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3309,3311,3313],{"class":378,"line":426},[376,3277,2787],{"class":386},[376,3279,573],{"class":398},[376,3281,2792],{"class":386},[376,3283,708],{"class":707},[376,3285,2240],{"class":386},[376,3287,399],{"class":398},[376,3289,2245],{"class":688},[376,3291,692],{"class":398},[376,3293,1793],{"class":695},[376,3295,573],{"class":398},[376,3297,775],{"class":695},[376,3299,573],{"class":398},[376,3301,2814],{"class":720},[376,3303,708],{"class":707},[376,3305,692],{"class":398},[376,3307,3308],{"class":695},"15",[376,3310,573],{"class":398},[376,3312,770],{"class":695},[376,3314,2264],{"class":398},[376,3316,3317,3320,3322,3324,3326,3328,3330,3332,3335,3337,3339,3342,3344,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":378,"line":433},[376,3318,3319],{"class":688},"plot_cost",[376,3321,692],{"class":398},[376,3323,3195],{"class":688},[376,3325,692],{"class":398},[376,3327,1178],{"class":1177},[376,3329,813],{"class":1181},[376,3331,1178],{"class":1177},[376,3333,3334],{"class":398},")(",[376,3336,2466],{"class":688},[376,3338,573],{"class":398},[376,3340,3341],{"class":688}," ds",[376,3343,573],{"class":398},[376,3345,3346],{"class":688}," ctx",[376,3348,2307],{"class":398},[376,3350,2168],{"class":402},[376,3352,573],{"class":398},[376,3354,2620],{"class":1177},[376,3356,3195],{"class":1181},[376,3358,1178],{"class":1177},[376,3360,573],{"class":398},[376,3362,2193],{"class":720},[376,3364,708],{"class":707},[376,3366,2856],{"class":688},[376,3368,1137],{"class":398},[376,3370,696],{"class":695},[376,3372,3373],{"class":398},"])\n",[376,3375,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3413,3415,3417,3419,3421,3423,3425,3427],{"class":378,"line":452},[376,3377,3319],{"class":688},[376,3379,692],{"class":398},[376,3381,3205],{"class":688},[376,3383,692],{"class":398},[376,3385,1178],{"class":1177},[376,3387,813],{"class":1181},[376,3389,1178],{"class":1177},[376,3391,3334],{"class":398},[376,3393,2466],{"class":688},[376,3395,573],{"class":398},[376,3397,3341],{"class":688},[376,3399,573],{"class":398},[376,3401,3346],{"class":688},[376,3403,2307],{"class":398},[376,3405,2168],{"class":402},[376,3407,573],{"class":398},[376,3409,2620],{"class":1177},[376,3411,3412],{"class":1181},"CDist (p=2)",[376,3414,1178],{"class":1177},[376,3416,573],{"class":398},[376,3418,2193],{"class":720},[376,3420,708],{"class":707},[376,3422,2856],{"class":688},[376,3424,1137],{"class":398},[376,3426,1793],{"class":695},[376,3428,3373],{"class":398},[376,3430,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3482],{"class":378,"line":461},[376,3432,3319],{"class":688},[376,3434,692],{"class":398},[376,3436,3214],{"class":688},[376,3438,692],{"class":398},[376,3440,1178],{"class":1177},[376,3442,813],{"class":1181},[376,3444,1178],{"class":1177},[376,3446,3334],{"class":398},[376,3448,2466],{"class":688},[376,3450,573],{"class":398},[376,3452,3341],{"class":688},[376,3454,573],{"class":398},[376,3456,3346],{"class":688},[376,3458,2307],{"class":398},[376,3460,2168],{"class":402},[376,3462,573],{"class":398},[376,3464,2620],{"class":1177},[376,3466,3214],{"class":1181},[376,3468,1178],{"class":1177},[376,3470,573],{"class":398},[376,3472,2193],{"class":720},[376,3474,708],{"class":707},[376,3476,2856],{"class":688},[376,3478,1137],{"class":398},[376,3480,3481],{"class":695},"2",[376,3483,3373],{"class":398},[376,3485,3486,3488,3490,3492,3494,3496,3498,3500,3502,3505,3507,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3533,3535,3537,3539,3541,3543,3545,3548],{"class":378,"line":469},[376,3487,3319],{"class":688},[376,3489,692],{"class":398},[376,3491,3220],{"class":688},[376,3493,692],{"class":398},[376,3495,1178],{"class":1177},[376,3497,813],{"class":1181},[376,3499,1178],{"class":1177},[376,3501,573],{"class":398},[376,3503,3504],{"class":720}," gamma",[376,3506,708],{"class":707},[376,3508,3509],{"class":695},"1.0",[376,3511,3334],{"class":398},[376,3513,2466],{"class":688},[376,3515,573],{"class":398},[376,3517,3341],{"class":688},[376,3519,573],{"class":398},[376,3521,3346],{"class":688},[376,3523,2307],{"class":398},[376,3525,2168],{"class":402},[376,3527,573],{"class":398},[376,3529,2620],{"class":1177},[376,3531,3532],{"class":1181},"RBF (γ=1)",[376,3534,1178],{"class":1177},[376,3536,573],{"class":398},[376,3538,2193],{"class":720},[376,3540,708],{"class":707},[376,3542,2856],{"class":688},[376,3544,1137],{"class":398},[376,3546,3547],{"class":695},"3",[376,3549,3373],{"class":398},[376,3551,3552,3554,3556,3559],{"class":378,"line":477},[376,3553,3169],{"class":386},[376,3555,399],{"class":398},[376,3557,3558],{"class":688},"tight_layout",[376,3560,2288],{"class":398},[376,3562,3563,3565,3567,3569],{"class":378,"line":485},[376,3564,3169],{"class":386},[376,3566,399],{"class":398},[376,3568,3174],{"class":688},[376,3570,2288],{"class":398},[338,3572,3573],{},[3180,3574],{"alt":372,"src":3575},"\u002F_nb\u002Fa6b2dcb0b609eec1.png",[338,3577,3578],{},"Notice the diagonals of the first three: each tracklet has its\nlowest cost at the matching detection (0, 1, 2) and a high\ncost at the novel detection (3). RBF compresses the contrast\nbecause exp(0) ≈ 1 for already-close pairs.",[739,3580,3582],{"id":3581},"overlap-costs-over-masks-and-bboxes","Overlap costs over masks and bboxes",[3188,3584,3585,3594,3602,3611],{},[3191,3586,3587,3196,3590,3593],{},[342,3588,3589],{},"MaskIoU",[347,3591,3592],{},"1 − IoU"," over bitmasks.",[3191,3595,3596,3599,3600,399],{},[342,3597,3598],{},"BoxIoU"," — plain ",[347,3601,3592],{},[3191,3603,3604,3196,3607,3610],{},[342,3605,3606],{},"BoxGIoU",[347,3608,3609],{},"1 − GIoU"," (penalizes enclosing area).",[3191,3612,3613,3196,3616,3619],{},[342,3614,3615],{},"BoxCIoU",[347,3617,3618],{},"1 − CIoU"," (penalizes centre offset + aspect ratio).",[338,3621,3622],{},"Below we test on bounding boxes that are mostly aligned but\nhave one outlier.",[367,3624,3626],{"className":369,"code":3625,"language":371,"meta":372,"style":372},"# Three tracklets, four detections; identity bboxes near-overlap.\ncs_box = torch.tensor(\n    [\n        [10, 10, 30, 30],\n        [50, 10, 70, 30],\n        [90, 10, 110, 30],\n    ],\n    dtype=torch.float32,\n)\nds_box = torch.tensor(\n    [\n        [12, 11, 32, 31],  # close to cs[0]\n        [49, 12, 70, 32],  # close to cs[1]\n        [88, 11, 109, 30],  # close to cs[2]\n        [200, 200, 220, 220],  # far from all\n    ],\n    dtype=torch.float32,\n)\n\n# Draw the boxes themselves before scoring them.\nimport matplotlib.patches as mpatches\n\nfig, ax = plt.subplots(figsize=(7, 4))\nfor i, (x0, y0, x1, y1) in enumerate(cs_box.tolist()):\n    ax.add_patch(\n        mpatches.Rectangle(\n            (x0, y0), x1 - x0, y1 - y0, fill=False, edgecolor=\"tab:blue\", linewidth=2\n        )\n    )\n    ax.text(x0, y0 - 2, f\"cs{i}\", color=\"tab:blue\", fontsize=9)\nfor j, (x0, y0, x1, y1) in enumerate(ds_box.tolist()):\n    ax.add_patch(\n        mpatches.Rectangle(\n            (x0, y0),\n            x1 - x0,\n            y1 - y0,\n            fill=False,\n            edgecolor=\"tab:orange\",\n            linewidth=2,\n            linestyle=\"--\",\n        )\n    )\n    ax.text(x1, y1 + 2, f\"ds{j}\", color=\"tab:orange\", fontsize=9)\nax.set_xlim(0, 240)\nax.set_ylim(240, 0)  # image convention: y down\nax.set_aspect(\"equal\")\nax.set_title(\"Box fixture — solid = tracklets (cs), dashed = detections (ds)\")\nax.set_xlabel(\"x\")\nax.set_ylabel(\"y\")\nplt.show()\n\n",[347,3627,3628,3633,3648,3652,3674,3696,3718,3722,3736,3740,3755,3759,3785,3809,3833,3859,3863,3877,3881,3885,3890,3906,3910,3943,3992,4003,4015,4080,4085,4089,4148,4189,4199,4209,4221,4232,4243,4254,4270,4281,4297,4301,4305,4364,4385,4408,4428,4447,4466,4485],{"__ignoreMap":372},[376,3629,3630],{"class":378,"line":379},[376,3631,3632],{"class":1759},"# Three tracklets, four detections; identity bboxes near-overlap.\n",[376,3634,3635,3638,3640,3642,3644,3646],{"class":378,"line":390},[376,3636,3637],{"class":386},"cs_box ",[376,3639,708],{"class":707},[376,3641,1771],{"class":386},[376,3643,399],{"class":398},[376,3645,1776],{"class":688},[376,3647,801],{"class":398},[376,3649,3650],{"class":378,"line":412},[376,3651,1784],{"class":398},[376,3653,3654,3656,3658,3660,3663,3665,3668,3670,3672],{"class":378,"line":426},[376,3655,1790],{"class":398},[376,3657,2428],{"class":695},[376,3659,573],{"class":398},[376,3661,3662],{"class":695}," 10",[376,3664,573],{"class":398},[376,3666,3667],{"class":695}," 30",[376,3669,573],{"class":398},[376,3671,3667],{"class":695},[376,3673,1142],{"class":398},[376,3675,3676,3678,3681,3683,3685,3687,3690,3692,3694],{"class":378,"line":433},[376,3677,1790],{"class":398},[376,3679,3680],{"class":695},"50",[376,3682,573],{"class":398},[376,3684,3662],{"class":695},[376,3686,573],{"class":398},[376,3688,3689],{"class":695}," 70",[376,3691,573],{"class":398},[376,3693,3667],{"class":695},[376,3695,1142],{"class":398},[376,3697,3698,3700,3703,3705,3707,3709,3712,3714,3716],{"class":378,"line":452},[376,3699,1790],{"class":398},[376,3701,3702],{"class":695},"90",[376,3704,573],{"class":398},[376,3706,3662],{"class":695},[376,3708,573],{"class":398},[376,3710,3711],{"class":695}," 110",[376,3713,573],{"class":398},[376,3715,3667],{"class":695},[376,3717,1142],{"class":398},[376,3719,3720],{"class":378,"line":461},[376,3721,1905],{"class":398},[376,3723,3724,3726,3728,3730,3732,3734],{"class":378,"line":469},[376,3725,1911],{"class":720},[376,3727,708],{"class":707},[376,3729,683],{"class":688},[376,3731,399],{"class":398},[376,3733,1920],{"class":402},[376,3735,458],{"class":398},[376,3737,3738],{"class":378,"line":477},[376,3739,553],{"class":398},[376,3741,3742,3745,3747,3749,3751,3753],{"class":378,"line":485},[376,3743,3744],{"class":386},"ds_box ",[376,3746,708],{"class":707},[376,3748,1771],{"class":386},[376,3750,399],{"class":398},[376,3752,1776],{"class":688},[376,3754,801],{"class":398},[376,3756,3757],{"class":378,"line":493},[376,3758,1784],{"class":398},[376,3760,3761,3763,3766,3768,3771,3773,3776,3778,3781,3783],{"class":378,"line":501},[376,3762,1790],{"class":398},[376,3764,3765],{"class":695},"12",[376,3767,573],{"class":398},[376,3769,3770],{"class":695}," 11",[376,3772,573],{"class":398},[376,3774,3775],{"class":695}," 32",[376,3777,573],{"class":398},[376,3779,3780],{"class":695}," 31",[376,3782,1994],{"class":398},[376,3784,1997],{"class":1759},[376,3786,3787,3789,3792,3794,3797,3799,3801,3803,3805,3807],{"class":378,"line":509},[376,3788,1790],{"class":398},[376,3790,3791],{"class":695},"49",[376,3793,573],{"class":398},[376,3795,3796],{"class":695}," 12",[376,3798,573],{"class":398},[376,3800,3689],{"class":695},[376,3802,573],{"class":398},[376,3804,3775],{"class":695},[376,3806,1994],{"class":398},[376,3808,2039],{"class":1759},[376,3810,3811,3813,3816,3818,3820,3822,3825,3827,3829,3831],{"class":378,"line":517},[376,3812,1790],{"class":398},[376,3814,3815],{"class":695},"88",[376,3817,573],{"class":398},[376,3819,3770],{"class":695},[376,3821,573],{"class":398},[376,3823,3824],{"class":695}," 109",[376,3826,573],{"class":398},[376,3828,3667],{"class":695},[376,3830,1994],{"class":398},[376,3832,2079],{"class":1759},[376,3834,3835,3837,3840,3842,3845,3847,3850,3852,3854,3856],{"class":378,"line":525},[376,3836,1790],{"class":398},[376,3838,3839],{"class":695},"200",[376,3841,573],{"class":398},[376,3843,3844],{"class":695}," 200",[376,3846,573],{"class":398},[376,3848,3849],{"class":695}," 220",[376,3851,573],{"class":398},[376,3853,3849],{"class":695},[376,3855,1994],{"class":398},[376,3857,3858],{"class":1759},"  # far from all\n",[376,3860,3861],{"class":378,"line":534},[376,3862,1905],{"class":398},[376,3864,3865,3867,3869,3871,3873,3875],{"class":378,"line":542},[376,3866,1911],{"class":720},[376,3868,708],{"class":707},[376,3870,683],{"class":688},[376,3872,399],{"class":398},[376,3874,1920],{"class":402},[376,3876,458],{"class":398},[376,3878,3879],{"class":378,"line":550},[376,3880,553],{"class":398},[376,3882,3883],{"class":378,"line":556},[376,3884,430],{"emptyLinePlaceholder":429},[376,3886,3887],{"class":378,"line":589},[376,3888,3889],{"class":1759},"# Draw the boxes themselves before scoring them.\n",[376,3891,3892,3894,3896,3898,3901,3903],{"class":378,"line":605},[376,3893,383],{"class":382},[376,3895,395],{"class":386},[376,3897,399],{"class":398},[376,3899,3900],{"class":402},"patches",[376,3902,406],{"class":382},[376,3904,3905],{"class":386}," mpatches\n",[376,3907,3908],{"class":378,"line":613},[376,3909,430],{"emptyLinePlaceholder":429},[376,3911,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934,3937,3939,3941],{"class":378,"line":621},[376,3913,2787],{"class":386},[376,3915,573],{"class":398},[376,3917,2220],{"class":386},[376,3919,708],{"class":707},[376,3921,2240],{"class":386},[376,3923,399],{"class":398},[376,3925,2245],{"class":688},[376,3927,692],{"class":398},[376,3929,2250],{"class":720},[376,3931,708],{"class":707},[376,3933,692],{"class":398},[376,3935,3936],{"class":695},"7",[376,3938,573],{"class":398},[376,3940,775],{"class":695},[376,3942,2264],{"class":398},[376,3944,3945,3947,3949,3951,3954,3957,3959,3962,3964,3967,3969,3972,3974,3977,3980,3982,3985,3987,3989],{"class":378,"line":629},[376,3946,2831],{"class":382},[376,3948,2688],{"class":386},[376,3950,573],{"class":398},[376,3952,3953],{"class":398}," (",[376,3955,3956],{"class":386},"x0",[376,3958,573],{"class":398},[376,3960,3961],{"class":386}," y0",[376,3963,573],{"class":398},[376,3965,3966],{"class":386}," x1",[376,3968,573],{"class":398},[376,3970,3971],{"class":386}," y1",[376,3973,2646],{"class":398},[376,3975,3976],{"class":382}," in",[376,3978,3979],{"class":2484}," enumerate",[376,3981,692],{"class":398},[376,3983,3984],{"class":688},"cs_box",[376,3986,399],{"class":398},[376,3988,3119],{"class":688},[376,3990,3991],{"class":398},"()):\n",[376,3993,3994,3996,3998,4001],{"class":378,"line":637},[376,3995,2408],{"class":386},[376,3997,399],{"class":398},[376,3999,4000],{"class":688},"add_patch",[376,4002,801],{"class":398},[376,4004,4005,4008,4010,4013],{"class":378,"line":645},[376,4006,4007],{"class":688},"        mpatches",[376,4009,399],{"class":398},[376,4011,4012],{"class":688},"Rectangle",[376,4014,801],{"class":398},[376,4016,4017,4020,4022,4024,4026,4028,4031,4034,4037,4039,4042,4044,4046,4048,4051,4053,4056,4058,4061,4063,4065,4068,4070,4072,4075,4077],{"class":378,"line":653},[376,4018,4019],{"class":398},"            (",[376,4021,3956],{"class":688},[376,4023,573],{"class":398},[376,4025,3961],{"class":688},[376,4027,956],{"class":398},[376,4029,4030],{"class":688}," x1 ",[376,4032,4033],{"class":707},"-",[376,4035,4036],{"class":688}," x0",[376,4038,573],{"class":398},[376,4040,4041],{"class":688}," y1 ",[376,4043,4033],{"class":707},[376,4045,3961],{"class":688},[376,4047,573],{"class":398},[376,4049,4050],{"class":720}," fill",[376,4052,708],{"class":707},[376,4054,4055],{"class":818},"False",[376,4057,573],{"class":398},[376,4059,4060],{"class":720}," edgecolor",[376,4062,708],{"class":707},[376,4064,1178],{"class":1177},[376,4066,4067],{"class":1181},"tab:blue",[376,4069,1178],{"class":1177},[376,4071,573],{"class":398},[376,4073,4074],{"class":720}," linewidth",[376,4076,708],{"class":707},[376,4078,4079],{"class":695},"2\n",[376,4081,4082],{"class":378,"line":658},[376,4083,4084],{"class":398},"        )\n",[376,4086,4087],{"class":378,"line":675},[376,4088,1147],{"class":398},[376,4090,4091,4093,4095,4097,4099,4101,4103,4106,4108,4110,4112,4114,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4146],{"class":378,"line":680},[376,4092,2408],{"class":386},[376,4094,399],{"class":398},[376,4096,2678],{"class":688},[376,4098,692],{"class":398},[376,4100,3956],{"class":688},[376,4102,573],{"class":398},[376,4104,4105],{"class":688}," y0 ",[376,4107,4033],{"class":707},[376,4109,2809],{"class":695},[376,4111,573],{"class":398},[376,4113,2652],{"class":793},[376,4115,4116],{"class":1181},"\"cs",[376,4118,2657],{"class":695},[376,4120,2597],{"class":688},[376,4122,2665],{"class":695},[376,4124,1178],{"class":1181},[376,4126,573],{"class":398},[376,4128,2725],{"class":720},[376,4130,708],{"class":707},[376,4132,1178],{"class":1177},[376,4134,4067],{"class":1181},[376,4136,1178],{"class":1177},[376,4138,573],{"class":398},[376,4140,2423],{"class":720},[376,4142,708],{"class":707},[376,4144,4145],{"class":695},"9",[376,4147,553],{"class":398},[376,4149,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4183,4185,4187],{"class":378,"line":701},[376,4151,2831],{"class":382},[376,4153,2602],{"class":386},[376,4155,573],{"class":398},[376,4157,3953],{"class":398},[376,4159,3956],{"class":386},[376,4161,573],{"class":398},[376,4163,3961],{"class":386},[376,4165,573],{"class":398},[376,4167,3966],{"class":386},[376,4169,573],{"class":398},[376,4171,3971],{"class":386},[376,4173,2646],{"class":398},[376,4175,3976],{"class":382},[376,4177,3979],{"class":2484},[376,4179,692],{"class":398},[376,4181,4182],{"class":688},"ds_box",[376,4184,399],{"class":398},[376,4186,3119],{"class":688},[376,4188,3991],{"class":398},[376,4190,4191,4193,4195,4197],{"class":378,"line":1393},[376,4192,2408],{"class":386},[376,4194,399],{"class":398},[376,4196,4000],{"class":688},[376,4198,801],{"class":398},[376,4200,4201,4203,4205,4207],{"class":378,"line":1403},[376,4202,4007],{"class":688},[376,4204,399],{"class":398},[376,4206,4012],{"class":688},[376,4208,801],{"class":398},[376,4210,4211,4213,4215,4217,4219],{"class":378,"line":1457},[376,4212,4019],{"class":398},[376,4214,3956],{"class":688},[376,4216,573],{"class":398},[376,4218,3961],{"class":688},[376,4220,918],{"class":398},[376,4222,4223,4226,4228,4230],{"class":378,"line":1462},[376,4224,4225],{"class":688},"            x1 ",[376,4227,4033],{"class":707},[376,4229,4036],{"class":688},[376,4231,458],{"class":398},[376,4233,4234,4237,4239,4241],{"class":378,"line":1473},[376,4235,4236],{"class":688},"            y1 ",[376,4238,4033],{"class":707},[376,4240,3961],{"class":688},[376,4242,458],{"class":398},[376,4244,4245,4248,4250,4252],{"class":378,"line":1506},[376,4246,4247],{"class":720},"            fill",[376,4249,708],{"class":707},[376,4251,4055],{"class":818},[376,4253,458],{"class":398},[376,4255,4256,4259,4261,4263,4266,4268],{"class":378,"line":1519},[376,4257,4258],{"class":720},"            edgecolor",[376,4260,708],{"class":707},[376,4262,1178],{"class":1177},[376,4264,4265],{"class":1181},"tab:orange",[376,4267,1178],{"class":1177},[376,4269,458],{"class":398},[376,4271,4272,4275,4277,4279],{"class":378,"line":1524},[376,4273,4274],{"class":720},"            linewidth",[376,4276,708],{"class":707},[376,4278,3481],{"class":695},[376,4280,458],{"class":398},[376,4282,4283,4286,4288,4290,4293,4295],{"class":378,"line":1539},[376,4284,4285],{"class":720},"            linestyle",[376,4287,708],{"class":707},[376,4289,1178],{"class":1177},[376,4291,4292],{"class":1181},"--",[376,4294,1178],{"class":1177},[376,4296,458],{"class":398},[376,4298,4299],{"class":378,"line":1558},[376,4300,4084],{"class":398},[376,4302,4303],{"class":378,"line":1573},[376,4304,1147],{"class":398},[376,4306,4307,4309,4311,4313,4315,4318,4320,4322,4325,4327,4329,4331,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362],{"class":378,"line":1592},[376,4308,2408],{"class":386},[376,4310,399],{"class":398},[376,4312,2678],{"class":688},[376,4314,692],{"class":398},[376,4316,4317],{"class":688},"x1",[376,4319,573],{"class":398},[376,4321,4041],{"class":688},[376,4323,4324],{"class":707},"+",[376,4326,2809],{"class":695},[376,4328,573],{"class":398},[376,4330,2652],{"class":793},[376,4332,4333],{"class":1181},"\"ds",[376,4335,2657],{"class":695},[376,4337,2683],{"class":688},[376,4339,2665],{"class":695},[376,4341,1178],{"class":1181},[376,4343,573],{"class":398},[376,4345,2725],{"class":720},[376,4347,708],{"class":707},[376,4349,1178],{"class":1177},[376,4351,4265],{"class":1181},[376,4353,1178],{"class":1177},[376,4355,573],{"class":398},[376,4357,2423],{"class":720},[376,4359,708],{"class":707},[376,4361,4145],{"class":695},[376,4363,553],{"class":398},[376,4365,4366,4369,4371,4374,4376,4378,4380,4383],{"class":378,"line":1607},[376,4367,4368],{"class":386},"ax",[376,4370,399],{"class":398},[376,4372,4373],{"class":688},"set_xlim",[376,4375,692],{"class":398},[376,4377,696],{"class":695},[376,4379,573],{"class":398},[376,4381,4382],{"class":695}," 240",[376,4384,553],{"class":398},[376,4386,4387,4389,4391,4394,4396,4399,4401,4403,4405],{"class":378,"line":1626},[376,4388,4368],{"class":386},[376,4390,399],{"class":398},[376,4392,4393],{"class":688},"set_ylim",[376,4395,692],{"class":398},[376,4397,4398],{"class":695},"240",[376,4400,573],{"class":398},[376,4402,1798],{"class":695},[376,4404,2646],{"class":398},[376,4406,4407],{"class":1759},"  # image convention: y down\n",[376,4409,4410,4412,4414,4417,4419,4421,4424,4426],{"class":378,"line":1641},[376,4411,4368],{"class":386},[376,4413,399],{"class":398},[376,4415,4416],{"class":688},"set_aspect",[376,4418,692],{"class":398},[376,4420,1178],{"class":1177},[376,4422,4423],{"class":1181},"equal",[376,4425,1178],{"class":1177},[376,4427,553],{"class":398},[376,4429,4430,4432,4434,4436,4438,4440,4443,4445],{"class":378,"line":1660},[376,4431,4368],{"class":386},[376,4433,399],{"class":398},[376,4435,2413],{"class":688},[376,4437,692],{"class":398},[376,4439,1178],{"class":1177},[376,4441,4442],{"class":1181},"Box fixture — solid = tracklets (cs), dashed = detections (ds)",[376,4444,1178],{"class":1177},[376,4446,553],{"class":398},[376,4448,4449,4451,4453,4455,4457,4459,4462,4464],{"class":378,"line":1675},[376,4450,4368],{"class":386},[376,4452,399],{"class":398},[376,4454,2439],{"class":688},[376,4456,692],{"class":398},[376,4458,1178],{"class":1177},[376,4460,4461],{"class":1181},"x",[376,4463,1178],{"class":1177},[376,4465,553],{"class":398},[376,4467,4468,4470,4472,4474,4476,4478,4481,4483],{"class":378,"line":1694},[376,4469,4368],{"class":386},[376,4471,399],{"class":398},[376,4473,2459],{"class":688},[376,4475,692],{"class":398},[376,4477,1178],{"class":1177},[376,4479,4480],{"class":1181},"y",[376,4482,1178],{"class":1177},[376,4484,553],{"class":398},[376,4486,4487,4489,4491,4493],{"class":378,"line":1710},[376,4488,3169],{"class":386},[376,4490,399],{"class":398},[376,4492,3174],{"class":688},[376,4494,2288],{"class":398},[338,4496,4497],{},[3180,4498],{"alt":372,"src":4499},"\u002F_nb\u002F58fea3d6689f9029.png",[338,4501,4502,4503,4506],{},"Three detection boxes hug their matching tracklet; ",[347,4504,4505],{},"ds3"," sits far\naway with no overlap. The IoU-family costs below turn that picture\ninto numbers.",[367,4508,4510],{"className":369,"code":4509,"language":371,"meta":372,"style":372},"cs_b = make_tracklets(bbox=cs_box)\nds_b = make_dets(bbox=ds_box)\n\nfig, axes = plt.subplots(1, 3, figsize=(11, 3))\nplot_cost(BoxIoU(\"bbox\")(cs_b, ds_b, ctx).matrix, \"BoxIoU\", ax=axes[0])\nplot_cost(BoxGIoU(\"bbox\")(cs_b, ds_b, ctx).matrix, \"BoxGIoU\", ax=axes[1])\nplot_cost(BoxCIoU(\"bbox\")(cs_b, ds_b, ctx).matrix, \"BoxCIoU\", ax=axes[2])\nplt.tight_layout()\nplt.show()\n\n",[347,4511,4512,4531,4550,4554,4595,4651,4705,4759,4769],{"__ignoreMap":372},[376,4513,4514,4517,4519,4521,4523,4525,4527,4529],{"class":378,"line":379},[376,4515,4516],{"class":386},"cs_b ",[376,4518,708],{"class":707},[376,4520,798],{"class":688},[376,4522,692],{"class":398},[376,4524,291],{"class":720},[376,4526,708],{"class":707},[376,4528,3984],{"class":688},[376,4530,553],{"class":398},[376,4532,4533,4536,4538,4540,4542,4544,4546,4548],{"class":378,"line":390},[376,4534,4535],{"class":386},"ds_b ",[376,4537,708],{"class":707},[376,4539,1398],{"class":688},[376,4541,692],{"class":398},[376,4543,291],{"class":720},[376,4545,708],{"class":707},[376,4547,4182],{"class":688},[376,4549,553],{"class":398},[376,4551,4552],{"class":378,"line":412},[376,4553,430],{"emptyLinePlaceholder":429},[376,4555,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4589,4591,4593],{"class":378,"line":426},[376,4557,2787],{"class":386},[376,4559,573],{"class":398},[376,4561,2792],{"class":386},[376,4563,708],{"class":707},[376,4565,2240],{"class":386},[376,4567,399],{"class":398},[376,4569,2245],{"class":688},[376,4571,692],{"class":398},[376,4573,1793],{"class":695},[376,4575,573],{"class":398},[376,4577,770],{"class":695},[376,4579,573],{"class":398},[376,4581,2814],{"class":720},[376,4583,708],{"class":707},[376,4585,692],{"class":398},[376,4587,4588],{"class":695},"11",[376,4590,573],{"class":398},[376,4592,770],{"class":695},[376,4594,2264],{"class":398},[376,4596,4597,4599,4601,4603,4605,4607,4609,4611,4613,4616,4618,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649],{"class":378,"line":433},[376,4598,3319],{"class":688},[376,4600,692],{"class":398},[376,4602,3598],{"class":688},[376,4604,692],{"class":398},[376,4606,1178],{"class":1177},[376,4608,291],{"class":1181},[376,4610,1178],{"class":1177},[376,4612,3334],{"class":398},[376,4614,4615],{"class":688},"cs_b",[376,4617,573],{"class":398},[376,4619,4620],{"class":688}," ds_b",[376,4622,573],{"class":398},[376,4624,3346],{"class":688},[376,4626,2307],{"class":398},[376,4628,2168],{"class":402},[376,4630,573],{"class":398},[376,4632,2620],{"class":1177},[376,4634,3598],{"class":1181},[376,4636,1178],{"class":1177},[376,4638,573],{"class":398},[376,4640,2193],{"class":720},[376,4642,708],{"class":707},[376,4644,2856],{"class":688},[376,4646,1137],{"class":398},[376,4648,696],{"class":695},[376,4650,3373],{"class":398},[376,4652,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699,4701,4703],{"class":378,"line":452},[376,4654,3319],{"class":688},[376,4656,692],{"class":398},[376,4658,3606],{"class":688},[376,4660,692],{"class":398},[376,4662,1178],{"class":1177},[376,4664,291],{"class":1181},[376,4666,1178],{"class":1177},[376,4668,3334],{"class":398},[376,4670,4615],{"class":688},[376,4672,573],{"class":398},[376,4674,4620],{"class":688},[376,4676,573],{"class":398},[376,4678,3346],{"class":688},[376,4680,2307],{"class":398},[376,4682,2168],{"class":402},[376,4684,573],{"class":398},[376,4686,2620],{"class":1177},[376,4688,3606],{"class":1181},[376,4690,1178],{"class":1177},[376,4692,573],{"class":398},[376,4694,2193],{"class":720},[376,4696,708],{"class":707},[376,4698,2856],{"class":688},[376,4700,1137],{"class":398},[376,4702,1793],{"class":695},[376,4704,3373],{"class":398},[376,4706,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757],{"class":378,"line":461},[376,4708,3319],{"class":688},[376,4710,692],{"class":398},[376,4712,3615],{"class":688},[376,4714,692],{"class":398},[376,4716,1178],{"class":1177},[376,4718,291],{"class":1181},[376,4720,1178],{"class":1177},[376,4722,3334],{"class":398},[376,4724,4615],{"class":688},[376,4726,573],{"class":398},[376,4728,4620],{"class":688},[376,4730,573],{"class":398},[376,4732,3346],{"class":688},[376,4734,2307],{"class":398},[376,4736,2168],{"class":402},[376,4738,573],{"class":398},[376,4740,2620],{"class":1177},[376,4742,3615],{"class":1181},[376,4744,1178],{"class":1177},[376,4746,573],{"class":398},[376,4748,2193],{"class":720},[376,4750,708],{"class":707},[376,4752,2856],{"class":688},[376,4754,1137],{"class":398},[376,4756,3481],{"class":695},[376,4758,3373],{"class":398},[376,4760,4761,4763,4765,4767],{"class":378,"line":469},[376,4762,3169],{"class":386},[376,4764,399],{"class":398},[376,4766,3558],{"class":688},[376,4768,2288],{"class":398},[376,4770,4771,4773,4775,4777],{"class":378,"line":477},[376,4772,3169],{"class":386},[376,4774,399],{"class":398},[376,4776,3174],{"class":688},[376,4778,2288],{"class":398},[338,4780,4781],{},[3180,4782],{"alt":372,"src":4783},"\u002F_nb\u002F8413c495888e075a.png",[739,4785,4787],{"id":4786},"mahalanobis-distance-kalman-style-gating","Mahalanobis distance — Kalman-style gating",[338,4789,4790,4793,4794,5012],{},[347,4791,4792],{},"Mahalanobis(field, cov_field)"," reads a per-tracklet covariance\nmatrix from the snapshot and computes\n",[376,4795,4798,4862],{"className":4796},[4797],"katex",[376,4799,4802],{"className":4800},[4801],"katex-mathml",[4803,4804,4806],"math",{"xmlns":4805},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[4807,4808,4809,4857],"semantics",{},[4810,4811,4812,4816,4820,4823,4826,4834,4847,4849,4851,4853,4855],"mrow",{},[4813,4814,692],"mo",{"stretchy":4815},"false",[4817,4818,4819],"mi",{},"a",[4813,4821,4822],{},"−",[4817,4824,4825],{},"b",[4827,4828,4829,4831],"msup",{},[4813,4830,2646],{"stretchy":4815},[4817,4832,4833],{},"T",[4827,4835,4836,4840],{},[4817,4837,4839],{"mathvariant":4838},"normal","Σ",[4810,4841,4842,4844],{},[4813,4843,4822],{},[4845,4846,1793],"mn",{},[4813,4848,692],{"stretchy":4815},[4817,4850,4819],{},[4813,4852,4822],{},[4817,4854,4825],{},[4813,4856,2646],{"stretchy":4815},[4858,4859,4861],"annotation",{"encoding":4860},"application\u002Fx-tex","(a-b)^T \\Sigma^{-1} (a-b)",[376,4863,4867,4896,5000],{"className":4864,"ariaHidden":4866},[4865],"katex-html","true",[376,4868,4870,4875,4879,4884,4889,4893],{"className":4869},[259],[376,4871],{"className":4872,"style":4874},[4873],"strut","height:1em;vertical-align:-0.25em;",[376,4876,692],{"className":4877},[4878],"mopen",[376,4880,4819],{"className":4881},[4882,4883],"mord","mathnormal",[376,4885],{"className":4886,"style":4888},[4887],"mspace","margin-right:0.2222em;",[376,4890,4822],{"className":4891},[4892],"mbin",[376,4894],{"className":4895,"style":4888},[4887],[376,4897,4899,4903,4906,4949,4985,4988,4991,4994,4997],{"className":4898},[259],[376,4900],{"className":4901,"style":4902},[4873],"height:1.0913em;vertical-align:-0.25em;",[376,4904,4825],{"className":4905},[4882,4883],[376,4907,4910,4913],{"className":4908},[4909],"mclose",[376,4911,2646],{"className":4912},[4909],[376,4914,4917],{"className":4915},[4916],"msupsub",[376,4918,4921],{"className":4919},[4920],"vlist-t",[376,4922,4925],{"className":4923},[4924],"vlist-r",[376,4926,4930],{"className":4927,"style":4929},[4928],"vlist","height:0.8413em;",[376,4931,4933,4938],{"style":4932},"top:-3.063em;margin-right:0.05em;",[376,4934],{"className":4935,"style":4937},[4936],"pstrut","height:2.7em;",[376,4939,4945],{"className":4940},[4941,4942,4943,4944],"sizing","reset-size6","size3","mtight",[376,4946,4833],{"className":4947,"style":4948},[4882,4883,4944],"margin-right:0.1389em;",[376,4950,4952,4955],{"className":4951},[4882],[376,4953,4839],{"className":4954},[4882],[376,4956,4958],{"className":4957},[4916],[376,4959,4961],{"className":4960},[4920],[376,4962,4964],{"className":4963},[4924],[376,4965,4968],{"className":4966,"style":4967},[4928],"height:0.8141em;",[376,4969,4970,4973],{"style":4932},[376,4971],{"className":4972,"style":4937},[4936],[376,4974,4976],{"className":4975},[4941,4942,4943,4944],[376,4977,4979,4982],{"className":4978},[4882,4944],[376,4980,4822],{"className":4981},[4882,4944],[376,4983,1793],{"className":4984},[4882,4944],[376,4986,692],{"className":4987},[4878],[376,4989,4819],{"className":4990},[4882,4883],[376,4992],{"className":4993,"style":4888},[4887],[376,4995,4822],{"className":4996},[4892],[376,4998],{"className":4999,"style":4888},[4887],[376,5001,5003,5006,5009],{"className":5002},[259],[376,5004],{"className":5005,"style":4874},[4873],[376,5007,4825],{"className":5008},[4882,4883],[376,5010,2646],{"className":5011},[4909]," over each pair. With identity\ncovariance this is squared L2; with anisotropic covariance,\nelongation along the dominant axis is \"free.\"",[367,5014,5016],{"className":369,"code":5015,"language":371,"meta":372,"style":372},"from matplotlib.patches import Ellipse\n\ncs_pos = torch.tensor([[0.0, 0.0], [10.0, 0.0], [0.0, 10.0]])\nds_pos = torch.tensor([[0.5, 0.5], [9.0, 1.0], [0.0, 11.0], [50.0, 50.0]])\n\neye_cov = torch.eye(2).expand(N, 2, 2).contiguous()\naniso = torch.eye(2).clone()\naniso[0, 0] = 100.0  # 100x the variance along x\naniso_cov = aniso.expand(N, 2, 2).contiguous()\n\n\n# The geometry: centroids, plus each tracklet's 1-sigma covariance\n# ellipse. Mahalanobis distance measures how many sigmas a detection\n# sits from a tracklet — so points inside a wide ellipse are \"cheap.\"\ndef draw_centroids(ax, cov, title):\n    ax.scatter(\n        cs_pos[:, 0],\n        cs_pos[:, 1],\n        marker=\"s\",\n        s=120,\n        color=\"tab:blue\",\n        edgecolor=\"black\",\n        label=\"cs\",\n        zorder=3,\n    )\n    ax.scatter(\n        ds_pos[:, 0],\n        ds_pos[:, 1],\n        marker=\"o\",\n        s=70,\n        color=\"tab:orange\",\n        edgecolor=\"black\",\n        label=\"ds\",\n        zorder=3,\n    )\n    for i in range(N):\n        w = 2 * float(cov[i, 0, 0]) ** 0.5  # 1-sigma full width\n        h = 2 * float(cov[i, 1, 1]) ** 0.5\n        ax.add_patch(\n            Ellipse(\n                cs_pos[i].tolist(),\n                w,\n                h,\n                angle=0,\n                fill=False,\n                edgecolor=\"tab:blue\",\n                alpha=0.6,\n            )\n        )\n    ax.set_title(title, fontsize=10)\n    ax.set_xlabel(\"x\")\n    ax.set_ylabel(\"y\")\n    ax.set_aspect(\"equal\")\n    ax.set_xlim(-8, 22)\n    ax.set_ylim(-8, 22)  # ds3 (50,50) is off-plot\n    ax.legend(fontsize=8)\n    ax.grid(alpha=0.3)\n\n\nfig, axes = plt.subplots(1, 2, figsize=(10, 4))\ndraw_centroids(axes[0], eye_cov, \"Σ = I  (isotropic 1σ)\")\ndraw_centroids(axes[1], aniso_cov, \"Σ_x = 100·Σ_y  (stretched in x)\")\nplt.tight_layout()\nplt.show()\n\n",[347,5017,5018,5034,5038,5087,5147,5151,5193,5216,5239,5271,5275,5279,5284,5289,5294,5315,5326,5338,5348,5364,5376,5391,5407,5422,5433,5437,5447,5458,5468,5483,5494,5508,5522,5536,5546,5550,5566,5608,5644,5655,5662,5678,5685,5692,5703,5714,5729,5741,5746,5750,5772,5790,5808,5826,5847,5870,5890,5911,5915,5919,5959,5988,6016,6026],{"__ignoreMap":372},[376,5019,5020,5022,5024,5026,5029,5031],{"class":378,"line":379},[376,5021,436],{"class":382},[376,5023,395],{"class":386},[376,5025,399],{"class":398},[376,5027,5028],{"class":386},"patches ",[376,5030,383],{"class":382},[376,5032,5033],{"class":386}," Ellipse\n",[376,5035,5036],{"class":378,"line":390},[376,5037,430],{"emptyLinePlaceholder":429},[376,5039,5040,5043,5045,5047,5049,5051,5054,5056,5058,5061,5063,5066,5069,5071,5073,5075,5077,5079,5081,5084],{"class":378,"line":412},[376,5041,5042],{"class":386},"cs_pos ",[376,5044,708],{"class":707},[376,5046,1771],{"class":386},[376,5048,399],{"class":398},[376,5050,1776],{"class":688},[376,5052,5053],{"class":398},"([[",[376,5055,735],{"class":695},[376,5057,573],{"class":398},[376,5059,5060],{"class":695}," 0.0",[376,5062,1994],{"class":398},[376,5064,5065],{"class":398}," [",[376,5067,5068],{"class":695},"10.0",[376,5070,573],{"class":398},[376,5072,5060],{"class":695},[376,5074,1994],{"class":398},[376,5076,5065],{"class":398},[376,5078,735],{"class":695},[376,5080,573],{"class":398},[376,5082,5083],{"class":695}," 10.0",[376,5085,5086],{"class":398},"]])\n",[376,5088,5089,5092,5094,5096,5098,5100,5102,5105,5107,5110,5112,5114,5117,5119,5122,5124,5126,5128,5130,5133,5135,5137,5140,5142,5145],{"class":378,"line":426},[376,5090,5091],{"class":386},"ds_pos ",[376,5093,708],{"class":707},[376,5095,1771],{"class":386},[376,5097,399],{"class":398},[376,5099,1776],{"class":688},[376,5101,5053],{"class":398},[376,5103,5104],{"class":695},"0.5",[376,5106,573],{"class":398},[376,5108,5109],{"class":695}," 0.5",[376,5111,1994],{"class":398},[376,5113,5065],{"class":398},[376,5115,5116],{"class":695},"9.0",[376,5118,573],{"class":398},[376,5120,5121],{"class":695}," 1.0",[376,5123,1994],{"class":398},[376,5125,5065],{"class":398},[376,5127,735],{"class":695},[376,5129,573],{"class":398},[376,5131,5132],{"class":695}," 11.0",[376,5134,1994],{"class":398},[376,5136,5065],{"class":398},[376,5138,5139],{"class":695},"50.0",[376,5141,573],{"class":398},[376,5143,5144],{"class":695}," 50.0",[376,5146,5086],{"class":398},[376,5148,5149],{"class":378,"line":433},[376,5150,430],{"emptyLinePlaceholder":429},[376,5152,5153,5156,5158,5160,5162,5165,5167,5169,5171,5174,5176,5178,5180,5182,5184,5186,5188,5191],{"class":378,"line":452},[376,5154,5155],{"class":386},"eye_cov ",[376,5157,708],{"class":707},[376,5159,1771],{"class":386},[376,5161,399],{"class":398},[376,5163,5164],{"class":688},"eye",[376,5166,692],{"class":398},[376,5168,3481],{"class":695},[376,5170,2307],{"class":398},[376,5172,5173],{"class":688},"expand",[376,5175,692],{"class":398},[376,5177,755],{"class":688},[376,5179,573],{"class":398},[376,5181,2809],{"class":695},[376,5183,573],{"class":398},[376,5185,2809],{"class":695},[376,5187,2307],{"class":398},[376,5189,5190],{"class":688},"contiguous",[376,5192,2288],{"class":398},[376,5194,5195,5198,5200,5202,5204,5206,5208,5210,5212,5214],{"class":378,"line":461},[376,5196,5197],{"class":386},"aniso ",[376,5199,708],{"class":707},[376,5201,1771],{"class":386},[376,5203,399],{"class":398},[376,5205,5164],{"class":688},[376,5207,692],{"class":398},[376,5209,3481],{"class":695},[376,5211,2307],{"class":398},[376,5213,2285],{"class":688},[376,5215,2288],{"class":398},[376,5217,5218,5221,5223,5225,5227,5229,5231,5233,5236],{"class":378,"line":469},[376,5219,5220],{"class":386},"aniso",[376,5222,1137],{"class":398},[376,5224,696],{"class":695},[376,5226,573],{"class":398},[376,5228,1798],{"class":695},[376,5230,1186],{"class":398},[376,5232,1189],{"class":707},[376,5234,5235],{"class":695}," 100.0",[376,5237,5238],{"class":1759},"  # 100x the variance along x\n",[376,5240,5241,5244,5246,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269],{"class":378,"line":477},[376,5242,5243],{"class":386},"aniso_cov ",[376,5245,708],{"class":707},[376,5247,5248],{"class":386}," aniso",[376,5250,399],{"class":398},[376,5252,5173],{"class":688},[376,5254,692],{"class":398},[376,5256,755],{"class":688},[376,5258,573],{"class":398},[376,5260,2809],{"class":695},[376,5262,573],{"class":398},[376,5264,2809],{"class":695},[376,5266,2307],{"class":398},[376,5268,5190],{"class":688},[376,5270,2288],{"class":398},[376,5272,5273],{"class":378,"line":485},[376,5274,430],{"emptyLinePlaceholder":429},[376,5276,5277],{"class":378,"line":493},[376,5278,430],{"emptyLinePlaceholder":429},[376,5280,5281],{"class":378,"line":501},[376,5282,5283],{"class":1759},"# The geometry: centroids, plus each tracklet's 1-sigma covariance\n",[376,5285,5286],{"class":378,"line":509},[376,5287,5288],{"class":1759},"# ellipse. Mahalanobis distance measures how many sigmas a detection\n",[376,5290,5291],{"class":378,"line":517},[376,5292,5293],{"class":1759},"# sits from a tracklet — so points inside a wide ellipse are \"cheap.\"\n",[376,5295,5296,5298,5301,5303,5305,5307,5309,5311,5313],{"class":378,"line":525},[376,5297,794],{"class":793},[376,5299,5300],{"class":797}," draw_centroids",[376,5302,692],{"class":398},[376,5304,4368],{"class":812},[376,5306,573],{"class":398},[376,5308,851],{"class":812},[376,5310,573],{"class":398},[376,5312,2183],{"class":812},[376,5314,870],{"class":398},[376,5316,5317,5319,5321,5324],{"class":378,"line":534},[376,5318,2408],{"class":386},[376,5320,399],{"class":398},[376,5322,5323],{"class":688},"scatter",[376,5325,801],{"class":398},[376,5327,5328,5331,5334,5336],{"class":378,"line":542},[376,5329,5330],{"class":688},"        cs_pos",[376,5332,5333],{"class":398},"[:,",[376,5335,1798],{"class":695},[376,5337,1142],{"class":398},[376,5339,5340,5342,5344,5346],{"class":378,"line":550},[376,5341,5330],{"class":688},[376,5343,5333],{"class":398},[376,5345,1836],{"class":695},[376,5347,1142],{"class":398},[376,5349,5350,5353,5355,5357,5360,5362],{"class":378,"line":556},[376,5351,5352],{"class":720},"        marker",[376,5354,708],{"class":707},[376,5356,1178],{"class":1177},[376,5358,5359],{"class":1181},"s",[376,5361,1178],{"class":1177},[376,5363,458],{"class":398},[376,5365,5366,5369,5371,5374],{"class":378,"line":589},[376,5367,5368],{"class":720},"        s",[376,5370,708],{"class":707},[376,5372,5373],{"class":695},"120",[376,5375,458],{"class":398},[376,5377,5378,5381,5383,5385,5387,5389],{"class":378,"line":605},[376,5379,5380],{"class":720},"        color",[376,5382,708],{"class":707},[376,5384,1178],{"class":1177},[376,5386,4067],{"class":1181},[376,5388,1178],{"class":1177},[376,5390,458],{"class":398},[376,5392,5393,5396,5398,5400,5403,5405],{"class":378,"line":613},[376,5394,5395],{"class":720},"        edgecolor",[376,5397,708],{"class":707},[376,5399,1178],{"class":1177},[376,5401,5402],{"class":1181},"black",[376,5404,1178],{"class":1177},[376,5406,458],{"class":398},[376,5408,5409,5412,5414,5416,5418,5420],{"class":378,"line":621},[376,5410,5411],{"class":720},"        label",[376,5413,708],{"class":707},[376,5415,1178],{"class":1177},[376,5417,2466],{"class":1181},[376,5419,1178],{"class":1177},[376,5421,458],{"class":398},[376,5423,5424,5427,5429,5431],{"class":378,"line":629},[376,5425,5426],{"class":720},"        zorder",[376,5428,708],{"class":707},[376,5430,3547],{"class":695},[376,5432,458],{"class":398},[376,5434,5435],{"class":378,"line":637},[376,5436,1147],{"class":398},[376,5438,5439,5441,5443,5445],{"class":378,"line":645},[376,5440,2408],{"class":386},[376,5442,399],{"class":398},[376,5444,5323],{"class":688},[376,5446,801],{"class":398},[376,5448,5449,5452,5454,5456],{"class":378,"line":653},[376,5450,5451],{"class":688},"        ds_pos",[376,5453,5333],{"class":398},[376,5455,1798],{"class":695},[376,5457,1142],{"class":398},[376,5459,5460,5462,5464,5466],{"class":378,"line":658},[376,5461,5451],{"class":688},[376,5463,5333],{"class":398},[376,5465,1836],{"class":695},[376,5467,1142],{"class":398},[376,5469,5470,5472,5474,5476,5479,5481],{"class":378,"line":675},[376,5471,5352],{"class":720},[376,5473,708],{"class":707},[376,5475,1178],{"class":1177},[376,5477,5478],{"class":1181},"o",[376,5480,1178],{"class":1177},[376,5482,458],{"class":398},[376,5484,5485,5487,5489,5492],{"class":378,"line":680},[376,5486,5368],{"class":720},[376,5488,708],{"class":707},[376,5490,5491],{"class":695},"70",[376,5493,458],{"class":398},[376,5495,5496,5498,5500,5502,5504,5506],{"class":378,"line":701},[376,5497,5380],{"class":720},[376,5499,708],{"class":707},[376,5501,1178],{"class":1177},[376,5503,4265],{"class":1181},[376,5505,1178],{"class":1177},[376,5507,458],{"class":398},[376,5509,5510,5512,5514,5516,5518,5520],{"class":378,"line":1393},[376,5511,5395],{"class":720},[376,5513,708],{"class":707},[376,5515,1178],{"class":1177},[376,5517,5402],{"class":1181},[376,5519,1178],{"class":1177},[376,5521,458],{"class":398},[376,5523,5524,5526,5528,5530,5532,5534],{"class":378,"line":1403},[376,5525,5411],{"class":720},[376,5527,708],{"class":707},[376,5529,1178],{"class":1177},[376,5531,2446],{"class":1181},[376,5533,1178],{"class":1177},[376,5535,458],{"class":398},[376,5537,5538,5540,5542,5544],{"class":378,"line":1457},[376,5539,5426],{"class":720},[376,5541,708],{"class":707},[376,5543,3547],{"class":695},[376,5545,458],{"class":398},[376,5547,5548],{"class":378,"line":1462},[376,5549,1147],{"class":398},[376,5551,5552,5554,5556,5558,5560,5562,5564],{"class":378,"line":1473},[376,5553,2533],{"class":382},[376,5555,2536],{"class":386},[376,5557,2539],{"class":382},[376,5559,2542],{"class":2484},[376,5561,692],{"class":398},[376,5563,755],{"class":688},[376,5565,870],{"class":398},[376,5567,5568,5571,5573,5575,5577,5580,5582,5585,5587,5589,5591,5593,5595,5597,5600,5603,5605],{"class":378,"line":1506},[376,5569,5570],{"class":386},"        w ",[376,5572,708],{"class":707},[376,5574,2809],{"class":695},[376,5576,2365],{"class":707},[376,5578,5579],{"class":880}," float",[376,5581,692],{"class":398},[376,5583,5584],{"class":688},"cov",[376,5586,1137],{"class":398},[376,5588,2597],{"class":688},[376,5590,573],{"class":398},[376,5592,1798],{"class":695},[376,5594,573],{"class":398},[376,5596,1798],{"class":695},[376,5598,5599],{"class":398},"])",[376,5601,5602],{"class":707}," **",[376,5604,5109],{"class":695},[376,5606,5607],{"class":1759},"  # 1-sigma full width\n",[376,5609,5610,5613,5615,5617,5619,5621,5623,5625,5627,5629,5631,5633,5635,5637,5639,5641],{"class":378,"line":1519},[376,5611,5612],{"class":386},"        h ",[376,5614,708],{"class":707},[376,5616,2809],{"class":695},[376,5618,2365],{"class":707},[376,5620,5579],{"class":880},[376,5622,692],{"class":398},[376,5624,5584],{"class":688},[376,5626,1137],{"class":398},[376,5628,2597],{"class":688},[376,5630,573],{"class":398},[376,5632,1836],{"class":695},[376,5634,573],{"class":398},[376,5636,1836],{"class":695},[376,5638,5599],{"class":398},[376,5640,5602],{"class":707},[376,5642,5643],{"class":695}," 0.5\n",[376,5645,5646,5649,5651,5653],{"class":378,"line":1524},[376,5647,5648],{"class":386},"        ax",[376,5650,399],{"class":398},[376,5652,4000],{"class":688},[376,5654,801],{"class":398},[376,5656,5657,5660],{"class":378,"line":1539},[376,5658,5659],{"class":688},"            Ellipse",[376,5661,801],{"class":398},[376,5663,5664,5667,5669,5671,5673,5675],{"class":378,"line":1558},[376,5665,5666],{"class":688},"                cs_pos",[376,5668,1137],{"class":398},[376,5670,2597],{"class":688},[376,5672,2605],{"class":398},[376,5674,3119],{"class":688},[376,5676,5677],{"class":398},"(),\n",[376,5679,5680,5683],{"class":378,"line":1573},[376,5681,5682],{"class":688},"                w",[376,5684,458],{"class":398},[376,5686,5687,5690],{"class":378,"line":1592},[376,5688,5689],{"class":688},"                h",[376,5691,458],{"class":398},[376,5693,5694,5697,5699,5701],{"class":378,"line":1607},[376,5695,5696],{"class":720},"                angle",[376,5698,708],{"class":707},[376,5700,696],{"class":695},[376,5702,458],{"class":398},[376,5704,5705,5708,5710,5712],{"class":378,"line":1626},[376,5706,5707],{"class":720},"                fill",[376,5709,708],{"class":707},[376,5711,4055],{"class":818},[376,5713,458],{"class":398},[376,5715,5716,5719,5721,5723,5725,5727],{"class":378,"line":1641},[376,5717,5718],{"class":720},"                edgecolor",[376,5720,708],{"class":707},[376,5722,1178],{"class":1177},[376,5724,4067],{"class":1181},[376,5726,1178],{"class":1177},[376,5728,458],{"class":398},[376,5730,5731,5734,5736,5739],{"class":378,"line":1660},[376,5732,5733],{"class":720},"                alpha",[376,5735,708],{"class":707},[376,5737,5738],{"class":695},"0.6",[376,5740,458],{"class":398},[376,5742,5743],{"class":378,"line":1675},[376,5744,5745],{"class":398},"            )\n",[376,5747,5748],{"class":378,"line":1694},[376,5749,4084],{"class":398},[376,5751,5752,5754,5756,5758,5760,5762,5764,5766,5768,5770],{"class":378,"line":1710},[376,5753,2408],{"class":386},[376,5755,399],{"class":398},[376,5757,2413],{"class":688},[376,5759,692],{"class":398},[376,5761,2418],{"class":688},[376,5763,573],{"class":398},[376,5765,2423],{"class":720},[376,5767,708],{"class":707},[376,5769,2428],{"class":695},[376,5771,553],{"class":398},[376,5773,5774,5776,5778,5780,5782,5784,5786,5788],{"class":378,"line":1731},[376,5775,2408],{"class":386},[376,5777,399],{"class":398},[376,5779,2439],{"class":688},[376,5781,692],{"class":398},[376,5783,1178],{"class":1177},[376,5785,4461],{"class":1181},[376,5787,1178],{"class":1177},[376,5789,553],{"class":398},[376,5791,5792,5794,5796,5798,5800,5802,5804,5806],{"class":378,"line":1746},[376,5793,2408],{"class":386},[376,5795,399],{"class":398},[376,5797,2459],{"class":688},[376,5799,692],{"class":398},[376,5801,1178],{"class":1177},[376,5803,4480],{"class":1181},[376,5805,1178],{"class":1177},[376,5807,553],{"class":398},[376,5809,5810,5812,5814,5816,5818,5820,5822,5824],{"class":378,"line":1751},[376,5811,2408],{"class":386},[376,5813,399],{"class":398},[376,5815,4416],{"class":688},[376,5817,692],{"class":398},[376,5819,1178],{"class":1177},[376,5821,4423],{"class":1181},[376,5823,1178],{"class":1177},[376,5825,553],{"class":398},[376,5827,5828,5830,5832,5834,5836,5838,5840,5842,5845],{"class":378,"line":1756},[376,5829,2408],{"class":386},[376,5831,399],{"class":398},[376,5833,4373],{"class":688},[376,5835,692],{"class":398},[376,5837,4033],{"class":707},[376,5839,2743],{"class":695},[376,5841,573],{"class":398},[376,5843,5844],{"class":695}," 22",[376,5846,553],{"class":398},[376,5848,5849,5851,5853,5855,5857,5859,5861,5863,5865,5867],{"class":378,"line":1763},[376,5850,2408],{"class":386},[376,5852,399],{"class":398},[376,5854,4393],{"class":688},[376,5856,692],{"class":398},[376,5858,4033],{"class":707},[376,5860,2743],{"class":695},[376,5862,573],{"class":398},[376,5864,5844],{"class":695},[376,5866,2646],{"class":398},[376,5868,5869],{"class":1759},"  # ds3 (50,50) is off-plot\n",[376,5871,5872,5874,5876,5879,5881,5884,5886,5888],{"class":378,"line":1781},[376,5873,2408],{"class":386},[376,5875,399],{"class":398},[376,5877,5878],{"class":688},"legend",[376,5880,692],{"class":398},[376,5882,5883],{"class":720},"fontsize",[376,5885,708],{"class":707},[376,5887,2743],{"class":695},[376,5889,553],{"class":398},[376,5891,5892,5894,5896,5899,5901,5904,5906,5909],{"class":378,"line":1787},[376,5893,2408],{"class":386},[376,5895,399],{"class":398},[376,5897,5898],{"class":688},"grid",[376,5900,692],{"class":398},[376,5902,5903],{"class":720},"alpha",[376,5905,708],{"class":707},[376,5907,5908],{"class":695},"0.3",[376,5910,553],{"class":398},[376,5912,5913],{"class":378,"line":1827},[376,5914,430],{"emptyLinePlaceholder":429},[376,5916,5917],{"class":378,"line":1865},[376,5918,430],{"emptyLinePlaceholder":429},[376,5920,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957],{"class":378,"line":1902},[376,5922,2787],{"class":386},[376,5924,573],{"class":398},[376,5926,2792],{"class":386},[376,5928,708],{"class":707},[376,5930,2240],{"class":386},[376,5932,399],{"class":398},[376,5934,2245],{"class":688},[376,5936,692],{"class":398},[376,5938,1793],{"class":695},[376,5940,573],{"class":398},[376,5942,2809],{"class":695},[376,5944,573],{"class":398},[376,5946,2814],{"class":720},[376,5948,708],{"class":707},[376,5950,692],{"class":398},[376,5952,2428],{"class":695},[376,5954,573],{"class":398},[376,5956,775],{"class":695},[376,5958,2264],{"class":398},[376,5960,5961,5964,5966,5968,5970,5972,5974,5977,5979,5981,5984,5986],{"class":378,"line":1908},[376,5962,5963],{"class":688},"draw_centroids",[376,5965,692],{"class":398},[376,5967,2856],{"class":688},[376,5969,1137],{"class":398},[376,5971,696],{"class":695},[376,5973,1994],{"class":398},[376,5975,5976],{"class":688}," eye_cov",[376,5978,573],{"class":398},[376,5980,2620],{"class":1177},[376,5982,5983],{"class":1181},"Σ = I  (isotropic 1σ)",[376,5985,1178],{"class":1177},[376,5987,553],{"class":398},[376,5989,5990,5992,5994,5996,5998,6000,6002,6005,6007,6009,6012,6014],{"class":378,"line":1925},[376,5991,5963],{"class":688},[376,5993,692],{"class":398},[376,5995,2856],{"class":688},[376,5997,1137],{"class":398},[376,5999,1793],{"class":695},[376,6001,1994],{"class":398},[376,6003,6004],{"class":688}," aniso_cov",[376,6006,573],{"class":398},[376,6008,2620],{"class":1177},[376,6010,6011],{"class":1181},"Σ_x = 100·Σ_y  (stretched in x)",[376,6013,1178],{"class":1177},[376,6015,553],{"class":398},[376,6017,6018,6020,6022,6024],{"class":378,"line":1930},[376,6019,3169],{"class":386},[376,6021,399],{"class":398},[376,6023,3558],{"class":688},[376,6025,2288],{"class":398},[376,6027,6028,6030,6032,6034],{"class":378,"line":1936},[376,6029,3169],{"class":386},[376,6031,399],{"class":398},[376,6033,3174],{"class":688},[376,6035,2288],{"class":398},[338,6037,6038],{},[3180,6039],{"alt":372,"src":6040},"\u002F_nb\u002F6d458d346c9c4890.png",[338,6042,6043,6044,6046],{},"Now the cost matrices for the same two covariance settings (the\nfar-away ",[347,6045,4505],{}," is the easy reject in both):",[367,6048,6050],{"className":369,"code":6049,"language":371,"meta":372,"style":372},"ds = make_dets(centroid=ds_pos)\n\ncs = make_tracklets(centroid=cs_pos, cov=eye_cov)\nfig, axes = plt.subplots(1, 2, figsize=(8, 3))\nplot_cost(\n    Mahalanobis(\"centroid\", \"centroid_cov\")(cs, ds, ctx).matrix,\n    \"Mahalanobis (Σ = I)\",\n    ax=axes[0],\n)\n\ncs = make_tracklets(centroid=cs_pos, cov=aniso_cov)\nplot_cost(\n    Mahalanobis(\"centroid\", \"centroid_cov\")(cs, ds, ctx).matrix,\n    \"Mahalanobis (Σ_x = 100·Σ_y)\",\n    ax=axes[1],\n)\nplt.tight_layout()\nplt.show()\n\n",[347,6051,6052,6071,6075,6103,6143,6149,6187,6199,6213,6217,6221,6248,6254,6292,6303,6317,6321,6331],{"__ignoreMap":372},[376,6053,6054,6056,6058,6060,6062,6064,6066,6069],{"class":378,"line":379},[376,6055,3254],{"class":386},[376,6057,708],{"class":707},[376,6059,1398],{"class":688},[376,6061,692],{"class":398},[376,6063,294],{"class":720},[376,6065,708],{"class":707},[376,6067,6068],{"class":688},"ds_pos",[376,6070,553],{"class":398},[376,6072,6073],{"class":378,"line":390},[376,6074,430],{"emptyLinePlaceholder":429},[376,6076,6077,6079,6081,6083,6085,6087,6089,6092,6094,6096,6098,6101],{"class":378,"line":412},[376,6078,3234],{"class":386},[376,6080,708],{"class":707},[376,6082,798],{"class":688},[376,6084,692],{"class":398},[376,6086,294],{"class":720},[376,6088,708],{"class":707},[376,6090,6091],{"class":688},"cs_pos",[376,6093,573],{"class":398},[376,6095,851],{"class":720},[376,6097,708],{"class":707},[376,6099,6100],{"class":688},"eye_cov",[376,6102,553],{"class":398},[376,6104,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131,6133,6135,6137,6139,6141],{"class":378,"line":426},[376,6106,2787],{"class":386},[376,6108,573],{"class":398},[376,6110,2792],{"class":386},[376,6112,708],{"class":707},[376,6114,2240],{"class":386},[376,6116,399],{"class":398},[376,6118,2245],{"class":688},[376,6120,692],{"class":398},[376,6122,1793],{"class":695},[376,6124,573],{"class":398},[376,6126,2809],{"class":695},[376,6128,573],{"class":398},[376,6130,2814],{"class":720},[376,6132,708],{"class":707},[376,6134,692],{"class":398},[376,6136,2743],{"class":695},[376,6138,573],{"class":398},[376,6140,770],{"class":695},[376,6142,2264],{"class":398},[376,6144,6145,6147],{"class":378,"line":433},[376,6146,3319],{"class":688},[376,6148,801],{"class":398},[376,6150,6151,6153,6155,6157,6159,6161,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183,6185],{"class":378,"line":452},[376,6152,512],{"class":688},[376,6154,692],{"class":398},[376,6156,1178],{"class":1177},[376,6158,294],{"class":1181},[376,6160,1178],{"class":1177},[376,6162,573],{"class":398},[376,6164,2620],{"class":1177},[376,6166,1321],{"class":1181},[376,6168,1178],{"class":1177},[376,6170,3334],{"class":398},[376,6172,2466],{"class":688},[376,6174,573],{"class":398},[376,6176,3341],{"class":688},[376,6178,573],{"class":398},[376,6180,3346],{"class":688},[376,6182,2307],{"class":398},[376,6184,2168],{"class":402},[376,6186,458],{"class":398},[376,6188,6189,6192,6195,6197],{"class":378,"line":461},[376,6190,6191],{"class":1177},"    \"",[376,6193,6194],{"class":1181},"Mahalanobis (Σ = I)",[376,6196,1178],{"class":1177},[376,6198,458],{"class":398},[376,6200,6201,6203,6205,6207,6209,6211],{"class":378,"line":469},[376,6202,2408],{"class":720},[376,6204,708],{"class":707},[376,6206,2856],{"class":688},[376,6208,1137],{"class":398},[376,6210,696],{"class":695},[376,6212,1142],{"class":398},[376,6214,6215],{"class":378,"line":477},[376,6216,553],{"class":398},[376,6218,6219],{"class":378,"line":485},[376,6220,430],{"emptyLinePlaceholder":429},[376,6222,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6246],{"class":378,"line":493},[376,6224,3234],{"class":386},[376,6226,708],{"class":707},[376,6228,798],{"class":688},[376,6230,692],{"class":398},[376,6232,294],{"class":720},[376,6234,708],{"class":707},[376,6236,6091],{"class":688},[376,6238,573],{"class":398},[376,6240,851],{"class":720},[376,6242,708],{"class":707},[376,6244,6245],{"class":688},"aniso_cov",[376,6247,553],{"class":398},[376,6249,6250,6252],{"class":378,"line":501},[376,6251,3319],{"class":688},[376,6253,801],{"class":398},[376,6255,6256,6258,6260,6262,6264,6266,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288,6290],{"class":378,"line":509},[376,6257,512],{"class":688},[376,6259,692],{"class":398},[376,6261,1178],{"class":1177},[376,6263,294],{"class":1181},[376,6265,1178],{"class":1177},[376,6267,573],{"class":398},[376,6269,2620],{"class":1177},[376,6271,1321],{"class":1181},[376,6273,1178],{"class":1177},[376,6275,3334],{"class":398},[376,6277,2466],{"class":688},[376,6279,573],{"class":398},[376,6281,3341],{"class":688},[376,6283,573],{"class":398},[376,6285,3346],{"class":688},[376,6287,2307],{"class":398},[376,6289,2168],{"class":402},[376,6291,458],{"class":398},[376,6293,6294,6296,6299,6301],{"class":378,"line":517},[376,6295,6191],{"class":1177},[376,6297,6298],{"class":1181},"Mahalanobis (Σ_x = 100·Σ_y)",[376,6300,1178],{"class":1177},[376,6302,458],{"class":398},[376,6304,6305,6307,6309,6311,6313,6315],{"class":378,"line":525},[376,6306,2408],{"class":720},[376,6308,708],{"class":707},[376,6310,2856],{"class":688},[376,6312,1137],{"class":398},[376,6314,1793],{"class":695},[376,6316,1142],{"class":398},[376,6318,6319],{"class":378,"line":534},[376,6320,553],{"class":398},[376,6322,6323,6325,6327,6329],{"class":378,"line":542},[376,6324,3169],{"class":386},[376,6326,399],{"class":398},[376,6328,3558],{"class":688},[376,6330,2288],{"class":398},[376,6332,6333,6335,6337,6339],{"class":378,"line":550},[376,6334,3169],{"class":386},[376,6336,399],{"class":398},[376,6338,3174],{"class":688},[376,6340,2288],{"class":398},[338,6342,6343],{},[3180,6344],{"alt":372,"src":6345},"\u002F_nb\u002Ff0ee4e4f544d9c26.png",[338,6347,6348],{},"Notice how the high-variance-x covariance flattens the cost\ndifferences along the x axis — a tracklet that's been tracked\nwith much position uncertainty in x cares less about a\ndetection that's a few units off in x.",[739,6350,6352],{"id":6351},"combinators-mixing-costs","Combinators — mixing costs",[3188,6354,6355,6375,6381],{},[3191,6356,6357,6360,6361,809,6364,809,6367,809,6370,809,6372,2307],{},[342,6358,6359],{},"Reduce"," combines K cost matrices with a reduction\n(",[347,6362,6363],{},"sum",[347,6365,6366],{},"mean",[347,6368,6369],{},"min",[347,6371,2359],{},[347,6373,6374],{},"product",[3191,6376,6377,6380],{},[342,6378,6379],{},"Weighted"," scales an inner cost by a constant.",[3191,6382,6383,6386],{},[342,6384,6385],{},"Sinkhorn"," (not visualized here) renormalises a cost via\nentropy-regularized OT — relevant for differentiable tracking.",[367,6388,6390],{"className":369,"code":6389,"language":371,"meta":372,"style":372},"cs = make_tracklets(kernel=cs_kernel)\nds = make_dets(kernel=ds_kernel)\ncosine = Cosine(\"kernel\")\ncdist = CDist(\"kernel\")\n\nsum_cost = Reduce([cosine, cdist], \"sum\")(cs, ds, ctx).matrix\nweighted = Reduce([cosine, Weighted(cdist, weight=0.1)], \"sum\")(cs, ds, ctx).matrix\n\nfig, axes = plt.subplots(1, 4, figsize=(15, 3))\nplot_cost(cosine(cs, ds, ctx).matrix, \"Cosine\", ax=axes[0])\nplot_cost(cdist(cs, ds, ctx).matrix, \"CDist\", ax=axes[1])\nplot_cost(sum_cost, \"Reduce(sum)\", ax=axes[2])\nplot_cost(weighted, \"Reduce(Cosine + 0.1·CDist)\", ax=axes[3])\nplt.tight_layout()\nplt.show()\n\n",[347,6391,6392,6410,6428,6448,6468,6472,6518,6575,6579,6619,6665,6711,6743,6775,6785],{"__ignoreMap":372},[376,6393,6394,6396,6398,6400,6402,6404,6406,6408],{"class":378,"line":379},[376,6395,3234],{"class":386},[376,6397,708],{"class":707},[376,6399,798],{"class":688},[376,6401,692],{"class":398},[376,6403,813],{"class":720},[376,6405,708],{"class":707},[376,6407,3247],{"class":688},[376,6409,553],{"class":398},[376,6411,6412,6414,6416,6418,6420,6422,6424,6426],{"class":378,"line":390},[376,6413,3254],{"class":386},[376,6415,708],{"class":707},[376,6417,1398],{"class":688},[376,6419,692],{"class":398},[376,6421,813],{"class":720},[376,6423,708],{"class":707},[376,6425,3267],{"class":688},[376,6427,553],{"class":398},[376,6429,6430,6433,6435,6438,6440,6442,6444,6446],{"class":378,"line":412},[376,6431,6432],{"class":386},"cosine ",[376,6434,708],{"class":707},[376,6436,6437],{"class":688}," Cosine",[376,6439,692],{"class":398},[376,6441,1178],{"class":1177},[376,6443,813],{"class":1181},[376,6445,1178],{"class":1177},[376,6447,553],{"class":398},[376,6449,6450,6453,6455,6458,6460,6462,6464,6466],{"class":378,"line":426},[376,6451,6452],{"class":386},"cdist ",[376,6454,708],{"class":707},[376,6456,6457],{"class":688}," CDist",[376,6459,692],{"class":398},[376,6461,1178],{"class":1177},[376,6463,813],{"class":1181},[376,6465,1178],{"class":1177},[376,6467,553],{"class":398},[376,6469,6470],{"class":378,"line":433},[376,6471,430],{"emptyLinePlaceholder":429},[376,6473,6474,6477,6479,6482,6485,6488,6490,6493,6495,6497,6499,6501,6503,6505,6507,6509,6511,6513,6515],{"class":378,"line":452},[376,6475,6476],{"class":386},"sum_cost ",[376,6478,708],{"class":707},[376,6480,6481],{"class":688}," Reduce",[376,6483,6484],{"class":398},"([",[376,6486,6487],{"class":688},"cosine",[376,6489,573],{"class":398},[376,6491,6492],{"class":688}," cdist",[376,6494,1994],{"class":398},[376,6496,2620],{"class":1177},[376,6498,6363],{"class":1181},[376,6500,1178],{"class":1177},[376,6502,3334],{"class":398},[376,6504,2466],{"class":688},[376,6506,573],{"class":398},[376,6508,3341],{"class":688},[376,6510,573],{"class":398},[376,6512,3346],{"class":688},[376,6514,2307],{"class":398},[376,6516,6517],{"class":402},"matrix\n",[376,6519,6520,6523,6525,6527,6529,6531,6533,6536,6538,6541,6543,6546,6548,6550,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573],{"class":378,"line":461},[376,6521,6522],{"class":386},"weighted ",[376,6524,708],{"class":707},[376,6526,6481],{"class":688},[376,6528,6484],{"class":398},[376,6530,6487],{"class":688},[376,6532,573],{"class":398},[376,6534,6535],{"class":688}," Weighted",[376,6537,692],{"class":398},[376,6539,6540],{"class":688},"cdist",[376,6542,573],{"class":398},[376,6544,6545],{"class":720}," weight",[376,6547,708],{"class":707},[376,6549,2005],{"class":695},[376,6551,6552],{"class":398},")],",[376,6554,2620],{"class":1177},[376,6556,6363],{"class":1181},[376,6558,1178],{"class":1177},[376,6560,3334],{"class":398},[376,6562,2466],{"class":688},[376,6564,573],{"class":398},[376,6566,3341],{"class":688},[376,6568,573],{"class":398},[376,6570,3346],{"class":688},[376,6572,2307],{"class":398},[376,6574,6517],{"class":402},[376,6576,6577],{"class":378,"line":469},[376,6578,430],{"emptyLinePlaceholder":429},[376,6580,6581,6583,6585,6587,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,6613,6615,6617],{"class":378,"line":477},[376,6582,2787],{"class":386},[376,6584,573],{"class":398},[376,6586,2792],{"class":386},[376,6588,708],{"class":707},[376,6590,2240],{"class":386},[376,6592,399],{"class":398},[376,6594,2245],{"class":688},[376,6596,692],{"class":398},[376,6598,1793],{"class":695},[376,6600,573],{"class":398},[376,6602,775],{"class":695},[376,6604,573],{"class":398},[376,6606,2814],{"class":720},[376,6608,708],{"class":707},[376,6610,692],{"class":398},[376,6612,3308],{"class":695},[376,6614,573],{"class":398},[376,6616,770],{"class":695},[376,6618,2264],{"class":398},[376,6620,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659,6661,6663],{"class":378,"line":485},[376,6622,3319],{"class":688},[376,6624,692],{"class":398},[376,6626,6487],{"class":688},[376,6628,692],{"class":398},[376,6630,2466],{"class":688},[376,6632,573],{"class":398},[376,6634,3341],{"class":688},[376,6636,573],{"class":398},[376,6638,3346],{"class":688},[376,6640,2307],{"class":398},[376,6642,2168],{"class":402},[376,6644,573],{"class":398},[376,6646,2620],{"class":1177},[376,6648,3195],{"class":1181},[376,6650,1178],{"class":1177},[376,6652,573],{"class":398},[376,6654,2193],{"class":720},[376,6656,708],{"class":707},[376,6658,2856],{"class":688},[376,6660,1137],{"class":398},[376,6662,696],{"class":695},[376,6664,3373],{"class":398},[376,6666,6667,6669,6671,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6709],{"class":378,"line":493},[376,6668,3319],{"class":688},[376,6670,692],{"class":398},[376,6672,6540],{"class":688},[376,6674,692],{"class":398},[376,6676,2466],{"class":688},[376,6678,573],{"class":398},[376,6680,3341],{"class":688},[376,6682,573],{"class":398},[376,6684,3346],{"class":688},[376,6686,2307],{"class":398},[376,6688,2168],{"class":402},[376,6690,573],{"class":398},[376,6692,2620],{"class":1177},[376,6694,3205],{"class":1181},[376,6696,1178],{"class":1177},[376,6698,573],{"class":398},[376,6700,2193],{"class":720},[376,6702,708],{"class":707},[376,6704,2856],{"class":688},[376,6706,1137],{"class":398},[376,6708,1793],{"class":695},[376,6710,3373],{"class":398},[376,6712,6713,6715,6717,6720,6722,6724,6727,6729,6731,6733,6735,6737,6739,6741],{"class":378,"line":501},[376,6714,3319],{"class":688},[376,6716,692],{"class":398},[376,6718,6719],{"class":688},"sum_cost",[376,6721,573],{"class":398},[376,6723,2620],{"class":1177},[376,6725,6726],{"class":1181},"Reduce(sum)",[376,6728,1178],{"class":1177},[376,6730,573],{"class":398},[376,6732,2193],{"class":720},[376,6734,708],{"class":707},[376,6736,2856],{"class":688},[376,6738,1137],{"class":398},[376,6740,3481],{"class":695},[376,6742,3373],{"class":398},[376,6744,6745,6747,6749,6752,6754,6756,6759,6761,6763,6765,6767,6769,6771,6773],{"class":378,"line":509},[376,6746,3319],{"class":688},[376,6748,692],{"class":398},[376,6750,6751],{"class":688},"weighted",[376,6753,573],{"class":398},[376,6755,2620],{"class":1177},[376,6757,6758],{"class":1181},"Reduce(Cosine + 0.1·CDist)",[376,6760,1178],{"class":1177},[376,6762,573],{"class":398},[376,6764,2193],{"class":720},[376,6766,708],{"class":707},[376,6768,2856],{"class":688},[376,6770,1137],{"class":398},[376,6772,3547],{"class":695},[376,6774,3373],{"class":398},[376,6776,6777,6779,6781,6783],{"class":378,"line":517},[376,6778,3169],{"class":386},[376,6780,399],{"class":398},[376,6782,3558],{"class":688},[376,6784,2288],{"class":398},[376,6786,6787,6789,6791,6793],{"class":378,"line":525},[376,6788,3169],{"class":386},[376,6790,399],{"class":398},[376,6792,3174],{"class":688},[376,6794,2288],{"class":398},[338,6796,6797],{},[3180,6798],{"alt":372,"src":6799},"\u002F_nb\u002F12d23713b14fb472.png",[739,6801,6803],{"id":6802},"gates-boolean-or-biased-acceptance-over-pairs","Gates — boolean (or biased) acceptance over pairs",[338,6805,6806,6807,6811],{},"Gates filter or penalise (cs, ds) pairs ",[6808,6809,6810],"em",{},"before"," the\nassociator runs. The unitrack catalogue:",[3188,6813,6814,6820,6826,6832,6838],{},[3191,6815,6816,6819],{},[342,6817,6818],{},"NoneGate"," — identity. Every pair survives.",[3191,6821,6822,6825],{},[342,6823,6824],{},"ClassGate(field)"," — pairs allowed iff their class fields agree.",[3191,6827,6828,6831],{},[342,6829,6830],{},"ScoreGate(field, threshold)"," — drops detections whose score is below threshold (per-side).",[3191,6833,6834,6837],{},[342,6835,6836],{},"SpatialGate2D \u002F 3D"," — drops pairs whose Euclidean distance exceeds a threshold.",[3191,6839,6840,6843],{},[342,6841,6842],{},"MotionGate"," — Mahalanobis χ² gate (Kalman-aware).",[367,6845,6847],{"className":369,"code":6846,"language":371,"meta":372,"style":372},"# Build a richer fixture so each gate has something to act on.\n# Centroids carry a z-axis so the 3-D spatial gate has a third\n# component to act on; the 2-D gate ignores the trailing coordinate.\ncs_kernel_g = cs_kernel\nds_kernel_g = ds_kernel\ncs_klass = torch.tensor([0, 1, 0])\nds_klass = torch.tensor([0, 1, 0, 2])\nds_score = torch.tensor([0.9, 0.6, 0.4, 0.95])\ncs_pos_g = torch.tensor([[0.0, 0.0, 0.0], [50.0, 0.0, 0.0], [100.0, 0.0, 0.0]])\nds_pos_g = torch.tensor(\n    [[2.0, 0.0, 0.0], [49.0, 1.0, 0.0], [98.0, 0.0, 0.0], [200.0, 0.0, 0.0]]\n)\n\ncs = make_tracklets(kernel=cs_kernel_g, centroid=cs_pos_g, klass=cs_klass)\nds = make_dets(kernel=ds_kernel_g, centroid=ds_pos_g, klass=ds_klass, score=ds_score)\n\n",[347,6848,6849,6854,6859,6864,6874,6884,6911,6942,6976,7032,7047,7111,7115,7119,7156],{"__ignoreMap":372},[376,6850,6851],{"class":378,"line":379},[376,6852,6853],{"class":1759},"# Build a richer fixture so each gate has something to act on.\n",[376,6855,6856],{"class":378,"line":390},[376,6857,6858],{"class":1759},"# Centroids carry a z-axis so the 3-D spatial gate has a third\n",[376,6860,6861],{"class":378,"line":412},[376,6862,6863],{"class":1759},"# component to act on; the 2-D gate ignores the trailing coordinate.\n",[376,6865,6866,6869,6871],{"class":378,"line":426},[376,6867,6868],{"class":386},"cs_kernel_g ",[376,6870,708],{"class":707},[376,6872,6873],{"class":386}," cs_kernel\n",[376,6875,6876,6879,6881],{"class":378,"line":433},[376,6877,6878],{"class":386},"ds_kernel_g ",[376,6880,708],{"class":707},[376,6882,6883],{"class":386}," ds_kernel\n",[376,6885,6886,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909],{"class":378,"line":452},[376,6887,6888],{"class":386},"cs_klass ",[376,6890,708],{"class":707},[376,6892,1771],{"class":386},[376,6894,399],{"class":398},[376,6896,1776],{"class":688},[376,6898,6484],{"class":398},[376,6900,696],{"class":695},[376,6902,573],{"class":398},[376,6904,1836],{"class":695},[376,6906,573],{"class":398},[376,6908,1798],{"class":695},[376,6910,3373],{"class":398},[376,6912,6913,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940],{"class":378,"line":461},[376,6914,6915],{"class":386},"ds_klass ",[376,6917,708],{"class":707},[376,6919,1771],{"class":386},[376,6921,399],{"class":398},[376,6923,1776],{"class":688},[376,6925,6484],{"class":398},[376,6927,696],{"class":695},[376,6929,573],{"class":398},[376,6931,1836],{"class":695},[376,6933,573],{"class":398},[376,6935,1798],{"class":695},[376,6937,573],{"class":398},[376,6939,2809],{"class":695},[376,6941,3373],{"class":398},[376,6943,6944,6947,6949,6951,6953,6955,6957,6959,6961,6964,6966,6969,6971,6974],{"class":378,"line":469},[376,6945,6946],{"class":386},"ds_score ",[376,6948,708],{"class":707},[376,6950,1771],{"class":386},[376,6952,399],{"class":398},[376,6954,1776],{"class":688},[376,6956,6484],{"class":398},[376,6958,1962],{"class":695},[376,6960,573],{"class":398},[376,6962,6963],{"class":695}," 0.6",[376,6965,573],{"class":398},[376,6967,6968],{"class":695}," 0.4",[376,6970,573],{"class":398},[376,6972,6973],{"class":695}," 0.95",[376,6975,3373],{"class":398},[376,6977,6978,6981,6983,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7022,7024,7026,7028,7030],{"class":378,"line":477},[376,6979,6980],{"class":386},"cs_pos_g ",[376,6982,708],{"class":707},[376,6984,1771],{"class":386},[376,6986,399],{"class":398},[376,6988,1776],{"class":688},[376,6990,5053],{"class":398},[376,6992,735],{"class":695},[376,6994,573],{"class":398},[376,6996,5060],{"class":695},[376,6998,573],{"class":398},[376,7000,5060],{"class":695},[376,7002,1994],{"class":398},[376,7004,5065],{"class":398},[376,7006,5139],{"class":695},[376,7008,573],{"class":398},[376,7010,5060],{"class":695},[376,7012,573],{"class":398},[376,7014,5060],{"class":695},[376,7016,1994],{"class":398},[376,7018,5065],{"class":398},[376,7020,7021],{"class":695},"100.0",[376,7023,573],{"class":398},[376,7025,5060],{"class":695},[376,7027,573],{"class":398},[376,7029,5060],{"class":695},[376,7031,5086],{"class":398},[376,7033,7034,7037,7039,7041,7043,7045],{"class":378,"line":485},[376,7035,7036],{"class":386},"ds_pos_g ",[376,7038,708],{"class":707},[376,7040,1771],{"class":386},[376,7042,399],{"class":398},[376,7044,1776],{"class":688},[376,7046,801],{"class":398},[376,7048,7049,7052,7055,7057,7059,7061,7063,7065,7067,7070,7072,7074,7076,7078,7080,7082,7085,7087,7089,7091,7093,7095,7097,7100,7102,7104,7106,7108],{"class":378,"line":493},[376,7050,7051],{"class":398},"    [[",[376,7053,7054],{"class":695},"2.0",[376,7056,573],{"class":398},[376,7058,5060],{"class":695},[376,7060,573],{"class":398},[376,7062,5060],{"class":695},[376,7064,1994],{"class":398},[376,7066,5065],{"class":398},[376,7068,7069],{"class":695},"49.0",[376,7071,573],{"class":398},[376,7073,5121],{"class":695},[376,7075,573],{"class":398},[376,7077,5060],{"class":695},[376,7079,1994],{"class":398},[376,7081,5065],{"class":398},[376,7083,7084],{"class":695},"98.0",[376,7086,573],{"class":398},[376,7088,5060],{"class":695},[376,7090,573],{"class":398},[376,7092,5060],{"class":695},[376,7094,1994],{"class":398},[376,7096,5065],{"class":398},[376,7098,7099],{"class":695},"200.0",[376,7101,573],{"class":398},[376,7103,5060],{"class":695},[376,7105,573],{"class":398},[376,7107,5060],{"class":695},[376,7109,7110],{"class":398},"]]\n",[376,7112,7113],{"class":378,"line":501},[376,7114,553],{"class":398},[376,7116,7117],{"class":378,"line":509},[376,7118,430],{"emptyLinePlaceholder":429},[376,7120,7121,7123,7125,7127,7129,7131,7133,7136,7138,7140,7142,7145,7147,7149,7151,7154],{"class":378,"line":517},[376,7122,3234],{"class":386},[376,7124,708],{"class":707},[376,7126,798],{"class":688},[376,7128,692],{"class":398},[376,7130,813],{"class":720},[376,7132,708],{"class":707},[376,7134,7135],{"class":688},"cs_kernel_g",[376,7137,573],{"class":398},[376,7139,842],{"class":720},[376,7141,708],{"class":707},[376,7143,7144],{"class":688},"cs_pos_g",[376,7146,573],{"class":398},[376,7148,860],{"class":720},[376,7150,708],{"class":707},[376,7152,7153],{"class":688},"cs_klass",[376,7155,553],{"class":398},[376,7157,7158,7160,7162,7164,7166,7168,7170,7173,7175,7177,7179,7182,7184,7186,7188,7191,7193,7195,7197,7200],{"class":378,"line":525},[376,7159,3254],{"class":386},[376,7161,708],{"class":707},[376,7163,1398],{"class":688},[376,7165,692],{"class":398},[376,7167,813],{"class":720},[376,7169,708],{"class":707},[376,7171,7172],{"class":688},"ds_kernel_g",[376,7174,573],{"class":398},[376,7176,842],{"class":720},[376,7178,708],{"class":707},[376,7180,7181],{"class":688},"ds_pos_g",[376,7183,573],{"class":398},[376,7185,860],{"class":720},[376,7187,708],{"class":707},[376,7189,7190],{"class":688},"ds_klass",[376,7192,573],{"class":398},[376,7194,1450],{"class":720},[376,7196,708],{"class":707},[376,7198,7199],{"class":688},"ds_score",[376,7201,553],{"class":398},[367,7203,7205],{"className":369,"code":7204,"language":371,"meta":372,"style":372},"def show_gate(g_call, title, ax):\n    g = g_call(cs, ds, ctx)\n    if g.kind == \"per_pair\":\n        m = g.mask\n    elif g.kind == \"per_cs\":\n        m = g.mask[:, None].expand(-1, M)\n    elif g.kind == \"per_ds\":\n        m = g.mask[None, :].expand(N, -1)\n    else:\n        m = torch.ones((N, M), dtype=torch.bool)\n    ax.imshow(m.numpy().astype(float), cmap=\"RdYlGn\", vmin=0, vmax=1)\n    ax.set_title(f\"{title}\\n[{g.kind}]\", fontsize=9)\n    ax.set_xlabel(\"ds\")\n    ax.set_ylabel(\"cs\")\n    ax.set_xticks(range(M))\n    ax.set_yticks(range(N))\n\n\nfig, axes = plt.subplots(1, 5, figsize=(15, 3))\nshow_gate(NoneGate(), \"NoneGate\", axes[0])\nshow_gate(ClassGate(\"klass\"), \"ClassGate('klass')\", axes[1])\nshow_gate(ScoreGate(\"score\", threshold=0.7), \"ScoreGate(>0.7)\", axes[2])\nshow_gate(SpatialGate2D(\"centroid\", max_dist=10.0), \"Spatial2D(\u003C10px)\", axes[3])\nshow_gate(SpatialGate3D(\"centroid\", max_dist=50.0), \"Spatial3D(\u003C50px)\", axes[4])\nplt.tight_layout()\nplt.show()\n\n",[347,7206,7207,7229,7253,7277,7291,7313,7345,7366,7402,7409,7444,7502,7552,7570,7588,7606,7624,7628,7632,7673,7701,7737,7783,7828,7872,7882],{"__ignoreMap":372},[376,7208,7209,7211,7214,7216,7219,7221,7223,7225,7227],{"class":378,"line":379},[376,7210,794],{"class":793},[376,7212,7213],{"class":797}," show_gate",[376,7215,692],{"class":398},[376,7217,7218],{"class":812},"g_call",[376,7220,573],{"class":398},[376,7222,2183],{"class":812},[376,7224,573],{"class":398},[376,7226,2193],{"class":812},[376,7228,870],{"class":398},[376,7230,7231,7234,7236,7239,7241,7243,7245,7247,7249,7251],{"class":378,"line":390},[376,7232,7233],{"class":386},"    g ",[376,7235,708],{"class":707},[376,7237,7238],{"class":688}," g_call",[376,7240,692],{"class":398},[376,7242,2466],{"class":688},[376,7244,573],{"class":398},[376,7246,3341],{"class":688},[376,7248,573],{"class":398},[376,7250,3346],{"class":688},[376,7252,553],{"class":398},[376,7254,7255,7257,7260,7262,7265,7268,7270,7273,7275],{"class":378,"line":412},[376,7256,1152],{"class":382},[376,7258,7259],{"class":386}," g",[376,7261,399],{"class":398},[376,7263,7264],{"class":402},"kind",[376,7266,7267],{"class":707}," ==",[376,7269,2620],{"class":1177},[376,7271,7272],{"class":1181},"per_pair",[376,7274,1178],{"class":1177},[376,7276,1167],{"class":398},[376,7278,7279,7282,7284,7286,7288],{"class":378,"line":426},[376,7280,7281],{"class":386},"        m ",[376,7283,708],{"class":707},[376,7285,7259],{"class":386},[376,7287,399],{"class":398},[376,7289,7290],{"class":402},"mask\n",[376,7292,7293,7296,7298,7300,7302,7304,7306,7309,7311],{"class":378,"line":433},[376,7294,7295],{"class":382},"    elif",[376,7297,7259],{"class":386},[376,7299,399],{"class":398},[376,7301,7264],{"class":402},[376,7303,7267],{"class":707},[376,7305,2620],{"class":1177},[376,7307,7308],{"class":1181},"per_cs",[376,7310,1178],{"class":1177},[376,7312,1167],{"class":398},[376,7314,7315,7317,7319,7321,7323,7325,7327,7329,7331,7333,7335,7337,7339,7341,7343],{"class":378,"line":452},[376,7316,7281],{"class":386},[376,7318,708],{"class":707},[376,7320,7259],{"class":386},[376,7322,399],{"class":398},[376,7324,1218],{"class":402},[376,7326,5333],{"class":398},[376,7328,1164],{"class":818},[376,7330,2605],{"class":398},[376,7332,5173],{"class":688},[376,7334,692],{"class":398},[376,7336,4033],{"class":707},[376,7338,1793],{"class":695},[376,7340,573],{"class":398},[376,7342,760],{"class":688},[376,7344,553],{"class":398},[376,7346,7347,7349,7351,7353,7355,7357,7359,7362,7364],{"class":378,"line":461},[376,7348,7295],{"class":382},[376,7350,7259],{"class":386},[376,7352,399],{"class":398},[376,7354,7264],{"class":402},[376,7356,7267],{"class":707},[376,7358,2620],{"class":1177},[376,7360,7361],{"class":1181},"per_ds",[376,7363,1178],{"class":1177},[376,7365,1167],{"class":398},[376,7367,7368,7370,7372,7374,7376,7378,7380,7382,7384,7387,7389,7391,7393,7395,7398,7400],{"class":378,"line":469},[376,7369,7281],{"class":386},[376,7371,708],{"class":707},[376,7373,7259],{"class":386},[376,7375,399],{"class":398},[376,7377,1218],{"class":402},[376,7379,1137],{"class":398},[376,7381,819],{"class":818},[376,7383,573],{"class":398},[376,7385,7386],{"class":398}," :].",[376,7388,5173],{"class":688},[376,7390,692],{"class":398},[376,7392,755],{"class":688},[376,7394,573],{"class":398},[376,7396,7397],{"class":707}," -",[376,7399,1793],{"class":695},[376,7401,553],{"class":398},[376,7403,7404,7407],{"class":378,"line":477},[376,7405,7406],{"class":382},"    else",[376,7408,1167],{"class":398},[376,7410,7411,7413,7415,7417,7419,7421,7423,7425,7427,7429,7431,7433,7435,7437,7439,7442],{"class":378,"line":485},[376,7412,7281],{"class":386},[376,7414,708],{"class":707},[376,7416,1771],{"class":386},[376,7418,399],{"class":398},[376,7420,983],{"class":688},[376,7422,935],{"class":398},[376,7424,755],{"class":688},[376,7426,573],{"class":398},[376,7428,760],{"class":688},[376,7430,956],{"class":398},[376,7432,906],{"class":720},[376,7434,708],{"class":707},[376,7436,683],{"class":688},[376,7438,399],{"class":398},[376,7440,7441],{"class":402},"bool",[376,7443,553],{"class":398},[376,7445,7446,7448,7450,7452,7454,7457,7459,7461,7463,7466,7468,7471,7473,7475,7477,7479,7482,7484,7486,7488,7490,7492,7494,7496,7498,7500],{"class":378,"line":493},[376,7447,2408],{"class":386},[376,7449,399],{"class":398},[376,7451,2382],{"class":688},[376,7453,692],{"class":398},[376,7455,7456],{"class":688},"m",[376,7458,399],{"class":398},[376,7460,2391],{"class":688},[376,7462,2282],{"class":398},[376,7464,7465],{"class":688},"astype",[376,7467,692],{"class":398},[376,7469,7470],{"class":880},"float",[376,7472,956],{"class":398},[376,7474,2202],{"class":720},[376,7476,708],{"class":707},[376,7478,1178],{"class":1177},[376,7480,7481],{"class":1181},"RdYlGn",[376,7483,1178],{"class":1177},[376,7485,573],{"class":398},[376,7487,2946],{"class":720},[376,7489,708],{"class":707},[376,7491,696],{"class":695},[376,7493,573],{"class":398},[376,7495,2955],{"class":720},[376,7497,708],{"class":707},[376,7499,1793],{"class":695},[376,7501,553],{"class":398},[376,7503,7504,7506,7508,7510,7512,7515,7517,7519,7521,7523,7526,7528,7530,7533,7535,7537,7539,7542,7544,7546,7548,7550],{"class":378,"line":501},[376,7505,2408],{"class":386},[376,7507,399],{"class":398},[376,7509,2413],{"class":688},[376,7511,692],{"class":398},[376,7513,7514],{"class":793},"f",[376,7516,1178],{"class":1181},[376,7518,2657],{"class":695},[376,7520,2418],{"class":688},[376,7522,2665],{"class":695},[376,7524,7525],{"class":528},"\\n",[376,7527,1137],{"class":1181},[376,7529,2657],{"class":695},[376,7531,7532],{"class":688},"g",[376,7534,399],{"class":398},[376,7536,7264],{"class":402},[376,7538,2665],{"class":695},[376,7540,7541],{"class":1181},"]\"",[376,7543,573],{"class":398},[376,7545,2423],{"class":720},[376,7547,708],{"class":707},[376,7549,4145],{"class":695},[376,7551,553],{"class":398},[376,7553,7554,7556,7558,7560,7562,7564,7566,7568],{"class":378,"line":509},[376,7555,2408],{"class":386},[376,7557,399],{"class":398},[376,7559,2439],{"class":688},[376,7561,692],{"class":398},[376,7563,1178],{"class":1177},[376,7565,2446],{"class":1181},[376,7567,1178],{"class":1177},[376,7569,553],{"class":398},[376,7571,7572,7574,7576,7578,7580,7582,7584,7586],{"class":378,"line":517},[376,7573,2408],{"class":386},[376,7575,399],{"class":398},[376,7577,2459],{"class":688},[376,7579,692],{"class":398},[376,7581,1178],{"class":1177},[376,7583,2466],{"class":1181},[376,7585,1178],{"class":1177},[376,7587,553],{"class":398},[376,7589,7590,7592,7594,7596,7598,7600,7602,7604],{"class":378,"line":525},[376,7591,2408],{"class":386},[376,7593,399],{"class":398},[376,7595,2479],{"class":688},[376,7597,692],{"class":398},[376,7599,2485],{"class":2484},[376,7601,692],{"class":398},[376,7603,1489],{"class":688},[376,7605,2264],{"class":398},[376,7607,7608,7610,7612,7614,7616,7618,7620,7622],{"class":378,"line":534},[376,7609,2408],{"class":386},[376,7611,399],{"class":398},[376,7613,2510],{"class":688},[376,7615,692],{"class":398},[376,7617,2485],{"class":2484},[376,7619,692],{"class":398},[376,7621,755],{"class":688},[376,7623,2264],{"class":398},[376,7625,7626],{"class":378,"line":542},[376,7627,430],{"emptyLinePlaceholder":429},[376,7629,7630],{"class":378,"line":550},[376,7631,430],{"emptyLinePlaceholder":429},[376,7633,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7657,7659,7661,7663,7665,7667,7669,7671],{"class":378,"line":556},[376,7635,2787],{"class":386},[376,7637,573],{"class":398},[376,7639,2792],{"class":386},[376,7641,708],{"class":707},[376,7643,2240],{"class":386},[376,7645,399],{"class":398},[376,7647,2245],{"class":688},[376,7649,692],{"class":398},[376,7651,1793],{"class":695},[376,7653,573],{"class":398},[376,7655,7656],{"class":695}," 5",[376,7658,573],{"class":398},[376,7660,2814],{"class":720},[376,7662,708],{"class":707},[376,7664,692],{"class":398},[376,7666,3308],{"class":695},[376,7668,573],{"class":398},[376,7670,770],{"class":695},[376,7672,2264],{"class":398},[376,7674,7675,7678,7680,7682,7684,7686,7688,7690,7692,7695,7697,7699],{"class":378,"line":589},[376,7676,7677],{"class":688},"show_gate",[376,7679,692],{"class":398},[376,7681,6818],{"class":688},[376,7683,2394],{"class":398},[376,7685,2620],{"class":1177},[376,7687,6818],{"class":1181},[376,7689,1178],{"class":1177},[376,7691,573],{"class":398},[376,7693,7694],{"class":688}," axes",[376,7696,1137],{"class":398},[376,7698,696],{"class":695},[376,7700,3373],{"class":398},[376,7702,7703,7705,7707,7710,7712,7714,7716,7718,7720,7722,7725,7727,7729,7731,7733,7735],{"class":378,"line":605},[376,7704,7677],{"class":688},[376,7706,692],{"class":398},[376,7708,7709],{"class":688},"ClassGate",[376,7711,692],{"class":398},[376,7713,1178],{"class":1177},[376,7715,1356],{"class":1181},[376,7717,1178],{"class":1177},[376,7719,956],{"class":398},[376,7721,2620],{"class":1177},[376,7723,7724],{"class":1181},"ClassGate('klass')",[376,7726,1178],{"class":1177},[376,7728,573],{"class":398},[376,7730,7694],{"class":688},[376,7732,1137],{"class":398},[376,7734,1793],{"class":695},[376,7736,3373],{"class":398},[376,7738,7739,7741,7743,7746,7748,7750,7752,7754,7756,7759,7761,7764,7766,7768,7771,7773,7775,7777,7779,7781],{"class":378,"line":613},[376,7740,7677],{"class":688},[376,7742,692],{"class":398},[376,7744,7745],{"class":688},"ScoreGate",[376,7747,692],{"class":398},[376,7749,1178],{"class":1177},[376,7751,1719],{"class":1181},[376,7753,1178],{"class":1177},[376,7755,573],{"class":398},[376,7757,7758],{"class":720}," threshold",[376,7760,708],{"class":707},[376,7762,7763],{"class":695},"0.7",[376,7765,956],{"class":398},[376,7767,2620],{"class":1177},[376,7769,7770],{"class":1181},"ScoreGate(>0.7)",[376,7772,1178],{"class":1177},[376,7774,573],{"class":398},[376,7776,7694],{"class":688},[376,7778,1137],{"class":398},[376,7780,3481],{"class":695},[376,7782,3373],{"class":398},[376,7784,7785,7787,7789,7792,7794,7796,7798,7800,7802,7805,7807,7809,7811,7813,7816,7818,7820,7822,7824,7826],{"class":378,"line":621},[376,7786,7677],{"class":688},[376,7788,692],{"class":398},[376,7790,7791],{"class":688},"SpatialGate2D",[376,7793,692],{"class":398},[376,7795,1178],{"class":1177},[376,7797,294],{"class":1181},[376,7799,1178],{"class":1177},[376,7801,573],{"class":398},[376,7803,7804],{"class":720}," max_dist",[376,7806,708],{"class":707},[376,7808,5068],{"class":695},[376,7810,956],{"class":398},[376,7812,2620],{"class":1177},[376,7814,7815],{"class":1181},"Spatial2D(\u003C10px)",[376,7817,1178],{"class":1177},[376,7819,573],{"class":398},[376,7821,7694],{"class":688},[376,7823,1137],{"class":398},[376,7825,3547],{"class":695},[376,7827,3373],{"class":398},[376,7829,7830,7832,7834,7837,7839,7841,7843,7845,7847,7849,7851,7853,7855,7857,7860,7862,7864,7866,7868,7870],{"class":378,"line":629},[376,7831,7677],{"class":688},[376,7833,692],{"class":398},[376,7835,7836],{"class":688},"SpatialGate3D",[376,7838,692],{"class":398},[376,7840,1178],{"class":1177},[376,7842,294],{"class":1181},[376,7844,1178],{"class":1177},[376,7846,573],{"class":398},[376,7848,7804],{"class":720},[376,7850,708],{"class":707},[376,7852,5139],{"class":695},[376,7854,956],{"class":398},[376,7856,2620],{"class":1177},[376,7858,7859],{"class":1181},"Spatial3D(\u003C50px)",[376,7861,1178],{"class":1177},[376,7863,573],{"class":398},[376,7865,7694],{"class":688},[376,7867,1137],{"class":398},[376,7869,2257],{"class":695},[376,7871,3373],{"class":398},[376,7873,7874,7876,7878,7880],{"class":378,"line":637},[376,7875,3169],{"class":386},[376,7877,399],{"class":398},[376,7879,3558],{"class":688},[376,7881,2288],{"class":398},[376,7883,7884,7886,7888,7890],{"class":378,"line":645},[376,7885,3169],{"class":386},[376,7887,399],{"class":398},[376,7889,3174],{"class":688},[376,7891,2288],{"class":398},[338,7893,7894],{},[3180,7895],{"alt":372,"src":7896},"\u002F_nb\u002Fbb1126ea4ecad00d.png",[338,7898,7899],{},"Reading the heatmaps: green = pair allowed; red = pair rejected.",[739,7901,7903],{"id":7902},"gate-composition","Gate composition",[338,7905,7906],{},"Gates form a closed algebra under conjunction. Cross-kind\npairs are promoted to the smallest variant that holds the\nresult:",[7908,7909,7910,7924],"table",{},[7911,7912,7913],"thead",{},[7914,7915,7916,7919,7921],"tr",{},[7917,7918,4819],"th",{},[7917,7920,4825],{},[7917,7922,7923],{},"result",[7925,7926,7927,7937,7946,7955,7964],"tbody",{},[7914,7928,7929,7933,7935],{},[7930,7931,7932],"td",{},"PerCs",[7930,7934,7932],{},[7930,7936,7932],{},[7914,7938,7939,7942,7944],{},[7930,7940,7941],{},"PerDs",[7930,7943,7941],{},[7930,7945,7941],{},[7914,7947,7948,7950,7952],{},[7930,7949,7932],{},[7930,7951,7941],{},[7930,7953,7954],{},"PerPair (outer-AND)",[7914,7956,7957,7959,7962],{},[7930,7958,2310],{},[7930,7960,7961],{},"PerPair",[7930,7963,7961],{},[7914,7965,7966,7969,7971],{},[7930,7967,7968],{},"CostBias",[7930,7970,7968],{},[7930,7972,7973],{},"CostBias (sum)",[338,7975,7976,7977,7979,7980,7982],{},"Combining ",[347,7978,7709],{}," (per-pair) with ",[347,7981,7745],{}," (per-ds)\npromotes to per-pair:",[367,7984,7986],{"className":369,"code":7985,"language":371,"meta":372,"style":372},"gA = ClassGate(\"klass\")(cs, ds, ctx)  # per_pair\ngB = ScoreGate(\"score\", threshold=0.7)(cs, ds, ctx)  # per_ds\ncombined = Gate.combine(gA, gB)\nprint(f\"ClassGate kind:  {gA.kind}\")\nprint(f\"ScoreGate kind:  {gB.kind}\")\nprint(f\"Combined kind:   {combined.kind}\")\n\nfig, ax = plt.subplots(figsize=(4, 3))\nax.imshow(combined.mask.numpy().astype(float), cmap=\"RdYlGn\", vmin=0, vmax=1)\nax.set_title(\"ClassGate ∧ ScoreGate(>0.7)\\n(green = both allow)\")\nax.set_xlabel(\"ds\")\nax.set_ylabel(\"cs\")\nplt.show()\n\n",[347,7987,7988,8023,8066,8092,8118,8144,8170,8174,8206,8264,8288,8306,8324],{"__ignoreMap":372},[376,7989,7990,7993,7995,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020],{"class":378,"line":379},[376,7991,7992],{"class":386},"gA ",[376,7994,708],{"class":707},[376,7996,7997],{"class":688}," ClassGate",[376,7999,692],{"class":398},[376,8001,1178],{"class":1177},[376,8003,1356],{"class":1181},[376,8005,1178],{"class":1177},[376,8007,3334],{"class":398},[376,8009,2466],{"class":688},[376,8011,573],{"class":398},[376,8013,3341],{"class":688},[376,8015,573],{"class":398},[376,8017,3346],{"class":688},[376,8019,2646],{"class":398},[376,8021,8022],{"class":1759},"  # per_pair\n",[376,8024,8025,8028,8030,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055,8057,8059,8061,8063],{"class":378,"line":390},[376,8026,8027],{"class":386},"gB ",[376,8029,708],{"class":707},[376,8031,8032],{"class":688}," ScoreGate",[376,8034,692],{"class":398},[376,8036,1178],{"class":1177},[376,8038,1719],{"class":1181},[376,8040,1178],{"class":1177},[376,8042,573],{"class":398},[376,8044,7758],{"class":720},[376,8046,708],{"class":707},[376,8048,7763],{"class":695},[376,8050,3334],{"class":398},[376,8052,2466],{"class":688},[376,8054,573],{"class":398},[376,8056,3341],{"class":688},[376,8058,573],{"class":398},[376,8060,3346],{"class":688},[376,8062,2646],{"class":398},[376,8064,8065],{"class":1759},"  # per_ds\n",[376,8067,8068,8071,8073,8075,8077,8080,8082,8085,8087,8090],{"class":378,"line":412},[376,8069,8070],{"class":386},"combined ",[376,8072,708],{"class":707},[376,8074,581],{"class":386},[376,8076,399],{"class":398},[376,8078,8079],{"class":688},"combine",[376,8081,692],{"class":398},[376,8083,8084],{"class":688},"gA",[376,8086,573],{"class":398},[376,8088,8089],{"class":688}," gB",[376,8091,553],{"class":398},[376,8093,8094,8097,8099,8101,8104,8106,8108,8110,8112,8114,8116],{"class":378,"line":426},[376,8095,8096],{"class":2484},"print",[376,8098,692],{"class":398},[376,8100,7514],{"class":793},[376,8102,8103],{"class":1181},"\"ClassGate kind:  ",[376,8105,2657],{"class":695},[376,8107,8084],{"class":688},[376,8109,399],{"class":398},[376,8111,7264],{"class":402},[376,8113,2665],{"class":695},[376,8115,1178],{"class":1181},[376,8117,553],{"class":398},[376,8119,8120,8122,8124,8126,8129,8131,8134,8136,8138,8140,8142],{"class":378,"line":433},[376,8121,8096],{"class":2484},[376,8123,692],{"class":398},[376,8125,7514],{"class":793},[376,8127,8128],{"class":1181},"\"ScoreGate kind:  ",[376,8130,2657],{"class":695},[376,8132,8133],{"class":688},"gB",[376,8135,399],{"class":398},[376,8137,7264],{"class":402},[376,8139,2665],{"class":695},[376,8141,1178],{"class":1181},[376,8143,553],{"class":398},[376,8145,8146,8148,8150,8152,8155,8157,8160,8162,8164,8166,8168],{"class":378,"line":452},[376,8147,8096],{"class":2484},[376,8149,692],{"class":398},[376,8151,7514],{"class":793},[376,8153,8154],{"class":1181},"\"Combined kind:   ",[376,8156,2657],{"class":695},[376,8158,8159],{"class":688},"combined",[376,8161,399],{"class":398},[376,8163,7264],{"class":402},[376,8165,2665],{"class":695},[376,8167,1178],{"class":1181},[376,8169,553],{"class":398},[376,8171,8172],{"class":378,"line":461},[376,8173,430],{"emptyLinePlaceholder":429},[376,8175,8176,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196,8198,8200,8202,8204],{"class":378,"line":469},[376,8177,2787],{"class":386},[376,8179,573],{"class":398},[376,8181,2220],{"class":386},[376,8183,708],{"class":707},[376,8185,2240],{"class":386},[376,8187,399],{"class":398},[376,8189,2245],{"class":688},[376,8191,692],{"class":398},[376,8193,2250],{"class":720},[376,8195,708],{"class":707},[376,8197,692],{"class":398},[376,8199,2257],{"class":695},[376,8201,573],{"class":398},[376,8203,770],{"class":695},[376,8205,2264],{"class":398},[376,8207,8208,8210,8212,8214,8216,8218,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262],{"class":378,"line":477},[376,8209,4368],{"class":386},[376,8211,399],{"class":398},[376,8213,2382],{"class":688},[376,8215,692],{"class":398},[376,8217,8159],{"class":688},[376,8219,399],{"class":398},[376,8221,1218],{"class":402},[376,8223,399],{"class":398},[376,8225,2391],{"class":688},[376,8227,2282],{"class":398},[376,8229,7465],{"class":688},[376,8231,692],{"class":398},[376,8233,7470],{"class":880},[376,8235,956],{"class":398},[376,8237,2202],{"class":720},[376,8239,708],{"class":707},[376,8241,1178],{"class":1177},[376,8243,7481],{"class":1181},[376,8245,1178],{"class":1177},[376,8247,573],{"class":398},[376,8249,2946],{"class":720},[376,8251,708],{"class":707},[376,8253,696],{"class":695},[376,8255,573],{"class":398},[376,8257,2955],{"class":720},[376,8259,708],{"class":707},[376,8261,1793],{"class":695},[376,8263,553],{"class":398},[376,8265,8266,8268,8270,8272,8274,8276,8279,8281,8284,8286],{"class":378,"line":485},[376,8267,4368],{"class":386},[376,8269,399],{"class":398},[376,8271,2413],{"class":688},[376,8273,692],{"class":398},[376,8275,1178],{"class":1177},[376,8277,8278],{"class":1181},"ClassGate ∧ ScoreGate(>0.7)",[376,8280,7525],{"class":528},[376,8282,8283],{"class":1181},"(green = both allow)",[376,8285,1178],{"class":1177},[376,8287,553],{"class":398},[376,8289,8290,8292,8294,8296,8298,8300,8302,8304],{"class":378,"line":493},[376,8291,4368],{"class":386},[376,8293,399],{"class":398},[376,8295,2439],{"class":688},[376,8297,692],{"class":398},[376,8299,1178],{"class":1177},[376,8301,2446],{"class":1181},[376,8303,1178],{"class":1177},[376,8305,553],{"class":398},[376,8307,8308,8310,8312,8314,8316,8318,8320,8322],{"class":378,"line":501},[376,8309,4368],{"class":386},[376,8311,399],{"class":398},[376,8313,2459],{"class":688},[376,8315,692],{"class":398},[376,8317,1178],{"class":1177},[376,8319,2466],{"class":1181},[376,8321,1178],{"class":1177},[376,8323,553],{"class":398},[376,8325,8326,8328,8330,8332],{"class":378,"line":509},[376,8327,3169],{"class":386},[376,8329,399],{"class":398},[376,8331,3174],{"class":688},[376,8333,2288],{"class":398},[8335,8336],"docyard-notebook-output",{"data":8337,"kind":8338},"Q2xhc3NHYXRlIGtpbmQ6ICBwZXJfcGFpcgpTY29yZUdhdGUga2luZDogIHBlcl9kcwpDb21iaW5lZCBraW5kOiAgIHBlcl9wYWlyCg==","stream",[338,8340,8341],{},[3180,8342],{"alt":372,"src":8343},"\u002F_nb\u002Fc52d2541fce8ae69.png",[739,8345,8347],{"id":8346},"whats-next","What's next",[338,8349,8350,8351,8353,8354,809,8357,809,8360,809,8363,809,8366,8369,8370,8373],{},"Notebook ",[342,8352,2257],{}," wires costs and gates into composable pipelines\nwith ",[347,8355,8356],{},"Pipe",[347,8358,8359],{},"Sequential",[347,8361,8362],{},"Parallel",[347,8364,8365],{},"Gated",[347,8367,8368],{},"Filter",", and\n",[347,8371,8372],{},"Iterate"," — these are the combinators that build up actual\ntrackers.",[8375,8376,8377],"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 .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .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 .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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html 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}",{"title":372,"searchDepth":412,"depth":412,"links":8379},[8380,8381,8382,8383,8384,8385,8386,8387,8388,8389],{"id":741,"depth":390,"text":742},{"id":2147,"depth":390,"text":2148},{"id":2755,"depth":390,"text":2756},{"id":3185,"depth":390,"text":3186},{"id":3581,"depth":390,"text":3582},{"id":4786,"depth":390,"text":4787},{"id":6351,"depth":390,"text":6352},{"id":6802,"depth":390,"text":6803},{"id":7902,"depth":390,"text":7903},{"id":8346,"depth":390,"text":8347},"unitrack ships a catalogue of cost producers (functions\nfrom (tracklets, detections) to a CostExpression) and\ngate producers (functions to a Gate variant). Mixing\nand matching them is most of the design space the paper\nexplores.","md",{"notebook":429},{"icon":63},{"title":103,"description":8390},"so-VnT_3q8uZp_xOwZrJWIC1z41S7El5wIm0T8sFSg8",{},1785139889577]