mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2026-08-15 13:04:36 +00:00
feat: generate theory-aligned pathing artifacts
This commit is contained in:
parent
7fbb32d8b9
commit
ef3cd64475
10 changed files with 2716 additions and 1 deletions
327
tools/pathing_data/canonical-live-cases.json
Normal file
327
tools/pathing_data/canonical-live-cases.json
Normal file
|
|
@ -0,0 +1,327 @@
|
|||
[
|
||||
{
|
||||
"case_id": "ceiling-headhitter-sprint-mm12-gap1-ceil4p0",
|
||||
"bucket_id": "ceiling:headhitter:sprint:easy",
|
||||
"family": "ceiling",
|
||||
"subfamily": "headhitter",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "easy",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "ceiling-headhitter",
|
||||
"gap_blocks": 1,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": 4.0,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 102.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "ceiling-headhitter-sprint-mm12-gap3-ceil1p8125",
|
||||
"bucket_id": "ceiling:headhitter:sprint:boundary",
|
||||
"family": "ceiling",
|
||||
"subfamily": "headhitter",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "boundary",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "ceiling-headhitter",
|
||||
"gap_blocks": 3,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": 1.8125,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 104.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "ceiling-headhitter-sprint-mm12-gap4-ceil2p0",
|
||||
"bucket_id": "ceiling:headhitter:sprint:reject",
|
||||
"family": "ceiling",
|
||||
"subfamily": "headhitter",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "reject",
|
||||
"expected_result": "reject",
|
||||
"world_recipe_id": "ceiling-headhitter",
|
||||
"gap_blocks": 4,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": 2.0,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 105.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-ascend-sprint-mm12-gap0-dy1p0",
|
||||
"bucket_id": "linear:ascend:sprint:easy",
|
||||
"family": "linear",
|
||||
"subfamily": "ascend",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "easy",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-ascend",
|
||||
"gap_blocks": 0,
|
||||
"delta_y": 1.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 101.0,
|
||||
"y": 81.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-ascend-sprint-mm12-gap5-dy1p0",
|
||||
"bucket_id": "linear:ascend:sprint:boundary",
|
||||
"family": "linear",
|
||||
"subfamily": "ascend",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "boundary",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-ascend",
|
||||
"gap_blocks": 5,
|
||||
"delta_y": 1.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 106.0,
|
||||
"y": 81.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-ascend-sprint-mm12-gap6-dy1p0",
|
||||
"bucket_id": "linear:ascend:sprint:reject",
|
||||
"family": "linear",
|
||||
"subfamily": "ascend",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "reject",
|
||||
"expected_result": "reject",
|
||||
"world_recipe_id": "linear-ascend",
|
||||
"gap_blocks": 6,
|
||||
"delta_y": 1.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 107.0,
|
||||
"y": 81.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-descend-sprint-mm12-gap0-dym2p0",
|
||||
"bucket_id": "linear:descend:sprint:easy",
|
||||
"family": "linear",
|
||||
"subfamily": "descend",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "easy",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-descend",
|
||||
"gap_blocks": 0,
|
||||
"delta_y": -2.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 101.0,
|
||||
"y": 78.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-descend-sprint-mm12-gap7-dym1p0",
|
||||
"bucket_id": "linear:descend:sprint:boundary",
|
||||
"family": "linear",
|
||||
"subfamily": "descend",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "boundary",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-descend",
|
||||
"gap_blocks": 7,
|
||||
"delta_y": -1.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 108.0,
|
||||
"y": 79.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-flat-sprint-mm12-gap0-dy0p0",
|
||||
"bucket_id": "linear:flat:sprint:easy",
|
||||
"family": "linear",
|
||||
"subfamily": "flat",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "easy",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-flat",
|
||||
"gap_blocks": 0,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 101.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-flat-sprint-mm12-gap6-dy0p0",
|
||||
"bucket_id": "linear:flat:sprint:boundary",
|
||||
"family": "linear",
|
||||
"subfamily": "flat",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "boundary",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "linear-flat",
|
||||
"gap_blocks": 6,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 107.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "linear-flat-sprint-mm12-gap7-dy0p0",
|
||||
"bucket_id": "linear:flat:sprint:reject",
|
||||
"family": "linear",
|
||||
"subfamily": "flat",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "reject",
|
||||
"expected_result": "reject",
|
||||
"world_recipe_id": "linear-flat",
|
||||
"gap_blocks": 7,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": null,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 108.0,
|
||||
"y": 80.0,
|
||||
"z": 100.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "neo-neo-sprint-mm12-wall1",
|
||||
"bucket_id": "neo:neo:sprint:easy",
|
||||
"family": "neo",
|
||||
"subfamily": "neo",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "easy",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "neo-wall",
|
||||
"gap_blocks": null,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": 1,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 102.0,
|
||||
"y": 80.0,
|
||||
"z": 101.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"case_id": "neo-neo-sprint-mm12-wall4",
|
||||
"bucket_id": "neo:neo:sprint:boundary",
|
||||
"family": "neo",
|
||||
"subfamily": "neo",
|
||||
"movement_mode": "sprint",
|
||||
"momentum_ticks": 12,
|
||||
"difficulty_band": "boundary",
|
||||
"expected_result": "pass",
|
||||
"world_recipe_id": "neo-wall",
|
||||
"gap_blocks": null,
|
||||
"delta_y": 0.0,
|
||||
"ceiling_height": null,
|
||||
"wall_width": 4,
|
||||
"start": {
|
||||
"x": 100.5,
|
||||
"y": 80.0,
|
||||
"z": 100.5
|
||||
},
|
||||
"goal": {
|
||||
"x": 102.0,
|
||||
"y": 80.0,
|
||||
"z": 104.0
|
||||
}
|
||||
}
|
||||
]
|
||||
121
tools/pathing_data/theory-matrix.csv
Normal file
121
tools/pathing_data/theory-matrix.csv
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
case_id,family,subfamily,movement_mode,momentum_ticks,gap_blocks,delta_y,ceiling_height,wall_width,expected_reachable,landing_x,apex_y,margin,notes
|
||||
linear-flat-walk-mm12-gap0-dy0p0,linear,flat,walk,12,0,0.0,,,True,6.222586344756974,1.2522033525119995,5.422586344756974,
|
||||
linear-ascend-walk-mm12-gap0-dy1p0,linear,ascend,walk,12,0,1.0,,,True,5.4889195238454125,1.2522033525119995,4.688919523845413,
|
||||
linear-descend-walk-mm12-gap0-dym1p0,linear,descend,walk,12,0,-1.0,,,True,6.700370323067186,1.2522033525119995,5.900370323067186,
|
||||
linear-descend-walk-mm12-gap0-dym2p0,linear,descend,walk,12,0,-2.0,,,True,6.936456664658121,1.2522033525119995,6.136456664658121,
|
||||
linear-flat-walk-mm12-gap1-dy0p0,linear,flat,walk,12,1,0.0,,,True,6.222586344756974,1.2522033525119995,4.422586344756974,
|
||||
linear-ascend-walk-mm12-gap1-dy1p0,linear,ascend,walk,12,1,1.0,,,True,5.4889195238454125,1.2522033525119995,3.6889195238454127,
|
||||
linear-descend-walk-mm12-gap1-dym1p0,linear,descend,walk,12,1,-1.0,,,True,6.700370323067186,1.2522033525119995,4.900370323067186,
|
||||
linear-descend-walk-mm12-gap1-dym2p0,linear,descend,walk,12,1,-2.0,,,True,6.936456664658121,1.2522033525119995,5.136456664658121,
|
||||
linear-flat-walk-mm12-gap2-dy0p0,linear,flat,walk,12,2,0.0,,,True,6.222586344756974,1.2522033525119995,3.422586344756974,
|
||||
linear-ascend-walk-mm12-gap2-dy1p0,linear,ascend,walk,12,2,1.0,,,True,5.4889195238454125,1.2522033525119995,2.6889195238454127,
|
||||
linear-descend-walk-mm12-gap2-dym1p0,linear,descend,walk,12,2,-1.0,,,True,6.700370323067186,1.2522033525119995,3.900370323067186,
|
||||
linear-descend-walk-mm12-gap2-dym2p0,linear,descend,walk,12,2,-2.0,,,True,6.936456664658121,1.2522033525119995,4.136456664658121,
|
||||
linear-flat-walk-mm12-gap3-dy0p0,linear,flat,walk,12,3,0.0,,,True,6.222586344756974,1.2522033525119995,2.422586344756974,
|
||||
linear-ascend-walk-mm12-gap3-dy1p0,linear,ascend,walk,12,3,1.0,,,True,5.4889195238454125,1.2522033525119995,1.6889195238454127,
|
||||
linear-descend-walk-mm12-gap3-dym1p0,linear,descend,walk,12,3,-1.0,,,True,6.700370323067186,1.2522033525119995,2.900370323067186,
|
||||
linear-descend-walk-mm12-gap3-dym2p0,linear,descend,walk,12,3,-2.0,,,True,6.936456664658121,1.2522033525119995,3.1364566646581213,
|
||||
linear-flat-walk-mm12-gap4-dy0p0,linear,flat,walk,12,4,0.0,,,True,6.222586344756974,1.2522033525119995,1.422586344756974,
|
||||
linear-ascend-walk-mm12-gap4-dy1p0,linear,ascend,walk,12,4,1.0,,,True,5.4889195238454125,1.2522033525119995,0.6889195238454127,
|
||||
linear-descend-walk-mm12-gap4-dym1p0,linear,descend,walk,12,4,-1.0,,,True,6.700370323067186,1.2522033525119995,1.900370323067186,
|
||||
linear-descend-walk-mm12-gap4-dym2p0,linear,descend,walk,12,4,-2.0,,,True,6.936456664658121,1.2522033525119995,2.1364566646581213,
|
||||
linear-flat-walk-mm12-gap5-dy0p0,linear,flat,walk,12,5,0.0,,,True,6.222586344756974,1.2522033525119995,0.422586344756974,
|
||||
linear-ascend-walk-mm12-gap5-dy1p0,linear,ascend,walk,12,5,1.0,,,False,5.736036437366307,1.2522033525119995,-0.06396356263369274,
|
||||
linear-descend-walk-mm12-gap5-dym1p0,linear,descend,walk,12,5,-1.0,,,True,6.700370323067186,1.2522033525119995,0.900370323067186,
|
||||
linear-descend-walk-mm12-gap5-dym2p0,linear,descend,walk,12,5,-2.0,,,True,6.936456664658121,1.2522033525119995,1.1364566646581213,
|
||||
linear-flat-walk-mm12-gap6-dy0p0,linear,flat,walk,12,6,0.0,,,False,6.222586344756974,1.2522033525119995,-0.577413655243026,
|
||||
linear-ascend-walk-mm12-gap6-dy1p0,linear,ascend,walk,12,6,1.0,,,False,6.222586344756974,1.2522033525119995,-0.577413655243026,
|
||||
linear-descend-walk-mm12-gap6-dym1p0,linear,descend,walk,12,6,-1.0,,,False,6.222586344756974,1.2522033525119995,-0.577413655243026,
|
||||
linear-descend-walk-mm12-gap6-dym2p0,linear,descend,walk,12,6,-2.0,,,False,6.222586344756974,1.2522033525119995,-0.577413655243026,
|
||||
linear-flat-walk-mm12-gap7-dy0p0,linear,flat,walk,12,7,0.0,,,False,6.222586344756974,1.2522033525119995,-1.577413655243026,
|
||||
linear-ascend-walk-mm12-gap7-dy1p0,linear,ascend,walk,12,7,1.0,,,False,6.222586344756974,1.2522033525119995,-1.577413655243026,
|
||||
linear-descend-walk-mm12-gap7-dym1p0,linear,descend,walk,12,7,-1.0,,,False,6.222586344756974,1.2522033525119995,-1.577413655243026,
|
||||
linear-descend-walk-mm12-gap7-dym2p0,linear,descend,walk,12,7,-2.0,,,False,6.222586344756974,1.2522033525119995,-1.577413655243026,
|
||||
linear-flat-sprint-mm0-gap0-dy0p0,linear,flat,sprint,0,0,0.0,,,True,3.45850527608291,1.2522033525119995,2.65850527608291,
|
||||
linear-ascend-sprint-mm0-gap0-dy1p0,linear,ascend,sprint,0,0,1.0,,,True,2.67362389586132,1.2522033525119995,1.8736238958613198,
|
||||
linear-descend-sprint-mm0-gap0-dym1p0,linear,descend,sprint,0,0,-1.0,,,True,3.9632109047152393,1.2522033525119995,3.163210904715239,
|
||||
linear-descend-sprint-mm0-gap0-dym2p0,linear,descend,sprint,0,0,-2.0,,,True,4.210969402657874,1.2522033525119995,3.410969402657874,
|
||||
linear-flat-sprint-mm0-gap1-dy0p0,linear,flat,sprint,0,1,0.0,,,True,3.45850527608291,1.2522033525119995,1.65850527608291,
|
||||
linear-ascend-sprint-mm0-gap1-dy1p0,linear,ascend,sprint,0,1,1.0,,,True,2.67362389586132,1.2522033525119995,0.8736238958613198,
|
||||
linear-descend-sprint-mm0-gap1-dym1p0,linear,descend,sprint,0,1,-1.0,,,True,3.9632109047152393,1.2522033525119995,2.163210904715239,
|
||||
linear-descend-sprint-mm0-gap1-dym2p0,linear,descend,sprint,0,1,-2.0,,,True,4.210969402657874,1.2522033525119995,2.410969402657874,
|
||||
linear-flat-sprint-mm0-gap2-dy0p0,linear,flat,sprint,0,2,0.0,,,True,3.45850527608291,1.2522033525119995,0.6585052760829102,
|
||||
linear-ascend-sprint-mm0-gap2-dy1p0,linear,ascend,sprint,0,2,1.0,,,False,2.67362389586132,1.2522033525119995,-0.12637610413867995,
|
||||
linear-descend-sprint-mm0-gap2-dym1p0,linear,descend,sprint,0,2,-1.0,,,True,3.9632109047152393,1.2522033525119995,1.1632109047152395,
|
||||
linear-descend-sprint-mm0-gap2-dym2p0,linear,descend,sprint,0,2,-2.0,,,True,4.210969402657874,1.2522033525119995,1.4109694026578739,
|
||||
linear-flat-sprint-mm0-gap3-dy0p0,linear,flat,sprint,0,3,0.0,,,False,3.45850527608291,1.2522033525119995,-0.3414947239170898,
|
||||
linear-ascend-sprint-mm0-gap3-dy1p0,linear,ascend,sprint,0,3,1.0,,,False,3.45850527608291,1.2522033525119995,-0.3414947239170898,
|
||||
linear-descend-sprint-mm0-gap3-dym1p0,linear,descend,sprint,0,3,-1.0,,,False,3.45850527608291,1.2522033525119995,-0.3414947239170898,
|
||||
linear-descend-sprint-mm0-gap3-dym2p0,linear,descend,sprint,0,3,-2.0,,,False,3.45850527608291,1.2522033525119995,-0.3414947239170898,
|
||||
linear-flat-sprint-mm0-gap4-dy0p0,linear,flat,sprint,0,4,0.0,,,False,3.45850527608291,1.2522033525119995,-1.3414947239170898,
|
||||
linear-ascend-sprint-mm0-gap4-dy1p0,linear,ascend,sprint,0,4,1.0,,,False,3.45850527608291,1.2522033525119995,-1.3414947239170898,
|
||||
linear-descend-sprint-mm0-gap4-dym1p0,linear,descend,sprint,0,4,-1.0,,,False,3.45850527608291,1.2522033525119995,-1.3414947239170898,
|
||||
linear-descend-sprint-mm0-gap4-dym2p0,linear,descend,sprint,0,4,-2.0,,,False,3.45850527608291,1.2522033525119995,-1.3414947239170898,
|
||||
linear-flat-sprint-mm0-gap5-dy0p0,linear,flat,sprint,0,5,0.0,,,False,3.45850527608291,1.2522033525119995,-2.34149472391709,
|
||||
linear-ascend-sprint-mm0-gap5-dy1p0,linear,ascend,sprint,0,5,1.0,,,False,3.45850527608291,1.2522033525119995,-2.34149472391709,
|
||||
linear-descend-sprint-mm0-gap5-dym1p0,linear,descend,sprint,0,5,-1.0,,,False,3.45850527608291,1.2522033525119995,-2.34149472391709,
|
||||
linear-descend-sprint-mm0-gap5-dym2p0,linear,descend,sprint,0,5,-2.0,,,False,3.45850527608291,1.2522033525119995,-2.34149472391709,
|
||||
linear-flat-sprint-mm0-gap6-dy0p0,linear,flat,sprint,0,6,0.0,,,False,3.45850527608291,1.2522033525119995,-3.34149472391709,
|
||||
linear-ascend-sprint-mm0-gap6-dy1p0,linear,ascend,sprint,0,6,1.0,,,False,3.45850527608291,1.2522033525119995,-3.34149472391709,
|
||||
linear-descend-sprint-mm0-gap6-dym1p0,linear,descend,sprint,0,6,-1.0,,,False,3.45850527608291,1.2522033525119995,-3.34149472391709,
|
||||
linear-descend-sprint-mm0-gap6-dym2p0,linear,descend,sprint,0,6,-2.0,,,False,3.45850527608291,1.2522033525119995,-3.34149472391709,
|
||||
linear-flat-sprint-mm0-gap7-dy0p0,linear,flat,sprint,0,7,0.0,,,False,3.45850527608291,1.2522033525119995,-4.34149472391709,
|
||||
linear-ascend-sprint-mm0-gap7-dy1p0,linear,ascend,sprint,0,7,1.0,,,False,3.45850527608291,1.2522033525119995,-4.34149472391709,
|
||||
linear-descend-sprint-mm0-gap7-dym1p0,linear,descend,sprint,0,7,-1.0,,,False,3.45850527608291,1.2522033525119995,-4.34149472391709,
|
||||
linear-descend-sprint-mm0-gap7-dym2p0,linear,descend,sprint,0,7,-2.0,,,False,3.45850527608291,1.2522033525119995,-4.34149472391709,
|
||||
linear-flat-sprint-mm12-gap0-dy0p0,linear,flat,sprint,12,0,0.0,,,True,7.728196372726743,1.2522033525119995,6.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap0-dy1p0,linear,ascend,sprint,12,0,1.0,,,True,6.7601866346681065,1.2522033525119995,5.960186634668107,
|
||||
linear-descend-sprint-mm12-gap0-dym1p0,linear,descend,sprint,12,0,-1.0,,,True,8.329165987228953,1.2522033525119995,7.529165987228953,
|
||||
linear-descend-sprint-mm12-gap0-dym2p0,linear,descend,sprint,12,0,-2.0,,,True,8.618660719045328,1.2522033525119995,7.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap1-dy0p0,linear,flat,sprint,12,1,0.0,,,True,7.728196372726743,1.2522033525119995,5.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap1-dy1p0,linear,ascend,sprint,12,1,1.0,,,True,6.7601866346681065,1.2522033525119995,4.960186634668107,
|
||||
linear-descend-sprint-mm12-gap1-dym1p0,linear,descend,sprint,12,1,-1.0,,,True,8.329165987228953,1.2522033525119995,6.529165987228953,
|
||||
linear-descend-sprint-mm12-gap1-dym2p0,linear,descend,sprint,12,1,-2.0,,,True,8.618660719045328,1.2522033525119995,6.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap2-dy0p0,linear,flat,sprint,12,2,0.0,,,True,7.728196372726743,1.2522033525119995,4.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap2-dy1p0,linear,ascend,sprint,12,2,1.0,,,True,6.7601866346681065,1.2522033525119995,3.9601866346681067,
|
||||
linear-descend-sprint-mm12-gap2-dym1p0,linear,descend,sprint,12,2,-1.0,,,True,8.329165987228953,1.2522033525119995,5.529165987228953,
|
||||
linear-descend-sprint-mm12-gap2-dym2p0,linear,descend,sprint,12,2,-2.0,,,True,8.618660719045328,1.2522033525119995,5.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap3-dy0p0,linear,flat,sprint,12,3,0.0,,,True,7.728196372726743,1.2522033525119995,3.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap3-dy1p0,linear,ascend,sprint,12,3,1.0,,,True,6.7601866346681065,1.2522033525119995,2.9601866346681067,
|
||||
linear-descend-sprint-mm12-gap3-dym1p0,linear,descend,sprint,12,3,-1.0,,,True,8.329165987228953,1.2522033525119995,4.529165987228953,
|
||||
linear-descend-sprint-mm12-gap3-dym2p0,linear,descend,sprint,12,3,-2.0,,,True,8.618660719045328,1.2522033525119995,4.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap4-dy0p0,linear,flat,sprint,12,4,0.0,,,True,7.728196372726743,1.2522033525119995,2.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap4-dy1p0,linear,ascend,sprint,12,4,1.0,,,True,6.7601866346681065,1.2522033525119995,1.9601866346681067,
|
||||
linear-descend-sprint-mm12-gap4-dym1p0,linear,descend,sprint,12,4,-1.0,,,True,8.329165987228953,1.2522033525119995,3.5291659872289527,
|
||||
linear-descend-sprint-mm12-gap4-dym2p0,linear,descend,sprint,12,4,-2.0,,,True,8.618660719045328,1.2522033525119995,3.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap5-dy0p0,linear,flat,sprint,12,5,0.0,,,True,7.728196372726743,1.2522033525119995,1.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap5-dy1p0,linear,ascend,sprint,12,5,1.0,,,True,6.7601866346681065,1.2522033525119995,0.9601866346681067,
|
||||
linear-descend-sprint-mm12-gap5-dym1p0,linear,descend,sprint,12,5,-1.0,,,True,8.329165987228953,1.2522033525119995,2.5291659872289527,
|
||||
linear-descend-sprint-mm12-gap5-dym2p0,linear,descend,sprint,12,5,-2.0,,,True,8.618660719045328,1.2522033525119995,2.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap6-dy0p0,linear,flat,sprint,12,6,0.0,,,True,7.728196372726743,1.2522033525119995,0.9281963727267435,
|
||||
linear-ascend-sprint-mm12-gap6-dy1p0,linear,ascend,sprint,12,6,1.0,,,False,6.7601866346681065,1.2522033525119995,-0.03981336533189328,
|
||||
linear-descend-sprint-mm12-gap6-dym1p0,linear,descend,sprint,12,6,-1.0,,,True,8.329165987228953,1.2522033525119995,1.5291659872289527,
|
||||
linear-descend-sprint-mm12-gap6-dym2p0,linear,descend,sprint,12,6,-2.0,,,True,8.618660719045328,1.2522033525119995,1.8186607190453286,
|
||||
linear-flat-sprint-mm12-gap7-dy0p0,linear,flat,sprint,12,7,0.0,,,False,7.728196372726743,1.2522033525119995,-0.07180362727325651,
|
||||
linear-ascend-sprint-mm12-gap7-dy1p0,linear,ascend,sprint,12,7,1.0,,,False,7.728196372726743,1.2522033525119995,-0.07180362727325651,
|
||||
linear-descend-sprint-mm12-gap7-dym1p0,linear,descend,sprint,12,7,-1.0,,,True,8.329165987228953,1.2522033525119995,0.5291659872289527,
|
||||
linear-descend-sprint-mm12-gap7-dym2p0,linear,descend,sprint,12,7,-2.0,,,True,8.618660719045328,1.2522033525119995,0.8186607190453286,
|
||||
neo-neo-sprint-mm12-wall1,neo,neo,sprint,12,,0.0,,1,True,7.728196372726743,1.2522033525119995,6.128196372726743,
|
||||
neo-neo-sprint-mm12-wall2,neo,neo,sprint,12,,0.0,,2,True,7.728196372726743,1.2522033525119995,5.128196372726743,
|
||||
neo-neo-sprint-mm12-wall3,neo,neo,sprint,12,,0.0,,3,True,7.728196372726743,1.2522033525119995,4.128196372726743,
|
||||
neo-neo-sprint-mm12-wall4,neo,neo,sprint,12,,0.0,,4,True,7.728196372726743,1.2522033525119995,3.1281963727267437,
|
||||
ceiling-headhitter-sprint-mm12-gap1-ceil4p0,ceiling,headhitter,sprint,12,1,0.0,4.0,,True,7.728196372726743,1.2522033525119995,5.9281963727267435,
|
||||
ceiling-headhitter-sprint-mm12-gap2-ceil4p0,ceiling,headhitter,sprint,12,2,0.0,4.0,,True,7.728196372726743,1.2522033525119995,4.9281963727267435,
|
||||
ceiling-headhitter-sprint-mm12-gap3-ceil4p0,ceiling,headhitter,sprint,12,3,0.0,4.0,,True,7.728196372726743,1.2522033525119995,3.9281963727267435,
|
||||
ceiling-headhitter-sprint-mm12-gap4-ceil4p0,ceiling,headhitter,sprint,12,4,0.0,4.0,,True,7.728196372726743,1.2522033525119995,2.9281963727267435,
|
||||
ceiling-headhitter-sprint-mm12-gap1-ceil3p0,ceiling,headhitter,sprint,12,1,0.0,3.0,,True,7.415249123142595,1.2,5.615249123142595,
|
||||
ceiling-headhitter-sprint-mm12-gap2-ceil3p0,ceiling,headhitter,sprint,12,2,0.0,3.0,,True,7.415249123142595,1.2,4.615249123142595,
|
||||
ceiling-headhitter-sprint-mm12-gap3-ceil3p0,ceiling,headhitter,sprint,12,3,0.0,3.0,,True,7.415249123142595,1.2,3.615249123142595,
|
||||
ceiling-headhitter-sprint-mm12-gap4-ceil3p0,ceiling,headhitter,sprint,12,4,0.0,3.0,,True,7.415249123142595,1.2,2.615249123142595,
|
||||
ceiling-headhitter-sprint-mm12-gap1-ceil2p5,ceiling,headhitter,sprint,12,1,0.0,2.5,,True,5.6892730007057635,0.7,3.8892730007057636,
|
||||
ceiling-headhitter-sprint-mm12-gap2-ceil2p5,ceiling,headhitter,sprint,12,2,0.0,2.5,,True,5.6892730007057635,0.7,2.8892730007057636,
|
||||
ceiling-headhitter-sprint-mm12-gap3-ceil2p5,ceiling,headhitter,sprint,12,3,0.0,2.5,,True,5.6892730007057635,0.7,1.8892730007057636,
|
||||
ceiling-headhitter-sprint-mm12-gap4-ceil2p5,ceiling,headhitter,sprint,12,4,0.0,2.5,,True,5.6892730007057635,0.7,0.8892730007057636,
|
||||
ceiling-headhitter-sprint-mm12-gap1-ceil2p0,ceiling,headhitter,sprint,12,1,0.0,2.0,,True,4.481804356129017,0.19999999999999996,2.6818043561290175,
|
||||
ceiling-headhitter-sprint-mm12-gap2-ceil2p0,ceiling,headhitter,sprint,12,2,0.0,2.0,,True,4.481804356129017,0.19999999999999996,1.6818043561290175,
|
||||
ceiling-headhitter-sprint-mm12-gap3-ceil2p0,ceiling,headhitter,sprint,12,3,0.0,2.0,,True,4.481804356129017,0.19999999999999996,0.6818043561290175,
|
||||
ceiling-headhitter-sprint-mm12-gap4-ceil2p0,ceiling,headhitter,sprint,12,4,0.0,2.0,,False,4.481804356129017,0.19999999999999996,-0.31819564387098254,
|
||||
ceiling-headhitter-sprint-mm12-gap1-ceil1p8125,ceiling,headhitter,sprint,12,1,0.0,1.8125,,True,4.041631522485753,0.012499999999999956,2.2416315224857533,
|
||||
ceiling-headhitter-sprint-mm12-gap2-ceil1p8125,ceiling,headhitter,sprint,12,2,0.0,1.8125,,True,4.041631522485753,0.012499999999999956,1.2416315224857533,
|
||||
ceiling-headhitter-sprint-mm12-gap3-ceil1p8125,ceiling,headhitter,sprint,12,3,0.0,1.8125,,True,4.041631522485753,0.012499999999999956,0.24163152248575326,
|
||||
ceiling-headhitter-sprint-mm12-gap4-ceil1p8125,ceiling,headhitter,sprint,12,4,0.0,1.8125,,False,4.041631522485753,0.012499999999999956,-0.7583684775142467,
|
||||
|
1922
tools/pathing_data/theory-matrix.json
Normal file
1922
tools/pathing_data/theory-matrix.json
Normal file
File diff suppressed because it is too large
Load diff
124
tools/pathing_data/theory-matrix.md
Normal file
124
tools/pathing_data/theory-matrix.md
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
# Theory Matrix
|
||||
|
||||
| family | subfamily | movement_mode | case_id | expected_reachable | margin |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap0-dy0p0 | True | 5.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap0-dy1p0 | True | 4.688919523845413 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap0-dym1p0 | True | 5.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap0-dym2p0 | True | 6.136456664658121 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap1-dy0p0 | True | 4.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap1-dy1p0 | True | 3.6889195238454127 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap1-dym1p0 | True | 4.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap1-dym2p0 | True | 5.136456664658121 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap2-dy0p0 | True | 3.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap2-dy1p0 | True | 2.6889195238454127 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap2-dym1p0 | True | 3.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap2-dym2p0 | True | 4.136456664658121 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap3-dy0p0 | True | 2.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap3-dy1p0 | True | 1.6889195238454127 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap3-dym1p0 | True | 2.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap3-dym2p0 | True | 3.1364566646581213 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap4-dy0p0 | True | 1.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap4-dy1p0 | True | 0.6889195238454127 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap4-dym1p0 | True | 1.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap4-dym2p0 | True | 2.1364566646581213 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap5-dy0p0 | True | 0.422586344756974 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap5-dy1p0 | False | -0.06396356263369274 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap5-dym1p0 | True | 0.900370323067186 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap5-dym2p0 | True | 1.1364566646581213 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap6-dy0p0 | False | -0.577413655243026 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap6-dy1p0 | False | -0.577413655243026 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap6-dym1p0 | False | -0.577413655243026 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap6-dym2p0 | False | -0.577413655243026 |
|
||||
| linear | flat | walk | linear-flat-walk-mm12-gap7-dy0p0 | False | -1.577413655243026 |
|
||||
| linear | ascend | walk | linear-ascend-walk-mm12-gap7-dy1p0 | False | -1.577413655243026 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap7-dym1p0 | False | -1.577413655243026 |
|
||||
| linear | descend | walk | linear-descend-walk-mm12-gap7-dym2p0 | False | -1.577413655243026 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap0-dy0p0 | True | 2.65850527608291 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap0-dy1p0 | True | 1.8736238958613198 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap0-dym1p0 | True | 3.163210904715239 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap0-dym2p0 | True | 3.410969402657874 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap1-dy0p0 | True | 1.65850527608291 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap1-dy1p0 | True | 0.8736238958613198 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap1-dym1p0 | True | 2.163210904715239 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap1-dym2p0 | True | 2.410969402657874 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap2-dy0p0 | True | 0.6585052760829102 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap2-dy1p0 | False | -0.12637610413867995 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap2-dym1p0 | True | 1.1632109047152395 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap2-dym2p0 | True | 1.4109694026578739 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap3-dy0p0 | False | -0.3414947239170898 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap3-dy1p0 | False | -0.3414947239170898 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap3-dym1p0 | False | -0.3414947239170898 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap3-dym2p0 | False | -0.3414947239170898 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap4-dy0p0 | False | -1.3414947239170898 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap4-dy1p0 | False | -1.3414947239170898 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap4-dym1p0 | False | -1.3414947239170898 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap4-dym2p0 | False | -1.3414947239170898 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap5-dy0p0 | False | -2.34149472391709 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap5-dy1p0 | False | -2.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap5-dym1p0 | False | -2.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap5-dym2p0 | False | -2.34149472391709 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap6-dy0p0 | False | -3.34149472391709 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap6-dy1p0 | False | -3.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap6-dym1p0 | False | -3.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap6-dym2p0 | False | -3.34149472391709 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm0-gap7-dy0p0 | False | -4.34149472391709 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm0-gap7-dy1p0 | False | -4.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap7-dym1p0 | False | -4.34149472391709 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm0-gap7-dym2p0 | False | -4.34149472391709 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap0-dy0p0 | True | 6.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap0-dy1p0 | True | 5.960186634668107 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap0-dym1p0 | True | 7.529165987228953 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap0-dym2p0 | True | 7.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap1-dy0p0 | True | 5.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap1-dy1p0 | True | 4.960186634668107 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap1-dym1p0 | True | 6.529165987228953 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap1-dym2p0 | True | 6.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap2-dy0p0 | True | 4.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap2-dy1p0 | True | 3.9601866346681067 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap2-dym1p0 | True | 5.529165987228953 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap2-dym2p0 | True | 5.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap3-dy0p0 | True | 3.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap3-dy1p0 | True | 2.9601866346681067 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap3-dym1p0 | True | 4.529165987228953 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap3-dym2p0 | True | 4.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap4-dy0p0 | True | 2.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap4-dy1p0 | True | 1.9601866346681067 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap4-dym1p0 | True | 3.5291659872289527 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap4-dym2p0 | True | 3.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap5-dy0p0 | True | 1.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap5-dy1p0 | True | 0.9601866346681067 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap5-dym1p0 | True | 2.5291659872289527 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap5-dym2p0 | True | 2.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap6-dy0p0 | True | 0.9281963727267435 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap6-dy1p0 | False | -0.03981336533189328 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap6-dym1p0 | True | 1.5291659872289527 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap6-dym2p0 | True | 1.8186607190453286 |
|
||||
| linear | flat | sprint | linear-flat-sprint-mm12-gap7-dy0p0 | False | -0.07180362727325651 |
|
||||
| linear | ascend | sprint | linear-ascend-sprint-mm12-gap7-dy1p0 | False | -0.07180362727325651 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap7-dym1p0 | True | 0.5291659872289527 |
|
||||
| linear | descend | sprint | linear-descend-sprint-mm12-gap7-dym2p0 | True | 0.8186607190453286 |
|
||||
| neo | neo | sprint | neo-neo-sprint-mm12-wall1 | True | 6.128196372726743 |
|
||||
| neo | neo | sprint | neo-neo-sprint-mm12-wall2 | True | 5.128196372726743 |
|
||||
| neo | neo | sprint | neo-neo-sprint-mm12-wall3 | True | 4.128196372726743 |
|
||||
| neo | neo | sprint | neo-neo-sprint-mm12-wall4 | True | 3.1281963727267437 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap1-ceil4p0 | True | 5.9281963727267435 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap2-ceil4p0 | True | 4.9281963727267435 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap3-ceil4p0 | True | 3.9281963727267435 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap4-ceil4p0 | True | 2.9281963727267435 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap1-ceil3p0 | True | 5.615249123142595 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap2-ceil3p0 | True | 4.615249123142595 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap3-ceil3p0 | True | 3.615249123142595 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap4-ceil3p0 | True | 2.615249123142595 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap1-ceil2p5 | True | 3.8892730007057636 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap2-ceil2p5 | True | 2.8892730007057636 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap3-ceil2p5 | True | 1.8892730007057636 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap4-ceil2p5 | True | 0.8892730007057636 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap1-ceil2p0 | True | 2.6818043561290175 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap2-ceil2p0 | True | 1.6818043561290175 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap3-ceil2p0 | True | 0.6818043561290175 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap4-ceil2p0 | False | -0.31819564387098254 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap1-ceil1p8125 | True | 2.2416315224857533 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap2-ceil1p8125 | True | 1.2416315224857533 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap3-ceil1p8125 | True | 0.24163152248575326 |
|
||||
| ceiling | headhitter | sprint | ceiling-headhitter-sprint-mm12-gap4-ceil1p8125 | False | -0.7583684775142467 |
|
||||
90
tools/pathing_theory/canonical.py
Normal file
90
tools/pathing_theory/canonical.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
from tools.pathing_theory.models import CanonicalLiveCase, TheoryCase
|
||||
|
||||
|
||||
def _world_recipe_id(case: TheoryCase) -> str:
|
||||
if case.family == "linear":
|
||||
return f"linear-{case.subfamily}"
|
||||
if case.family == "neo":
|
||||
return "neo-wall"
|
||||
return "ceiling-headhitter"
|
||||
|
||||
|
||||
def _canonical_goal(case: TheoryCase) -> tuple[dict[str, float], dict[str, float]]:
|
||||
start = {"x": 100.5, "y": 80.0, "z": 100.5}
|
||||
if case.family == "linear":
|
||||
goal_y = 80.0 + (case.delta_y or 0.0)
|
||||
goal_x = 100 + (case.gap_blocks or 0) + 1
|
||||
return start, {"x": float(goal_x), "y": goal_y, "z": 100.0}
|
||||
if case.family == "neo":
|
||||
goal_z = 100 + (case.wall_width or 1)
|
||||
return start, {"x": 102.0, "y": 80.0, "z": float(goal_z)}
|
||||
goal_x = 100 + (case.gap_blocks or 0) + 1
|
||||
return start, {"x": float(goal_x), "y": 80.0, "z": 100.0}
|
||||
|
||||
|
||||
def build_canonical_live_cases(cases: list[TheoryCase]) -> list[CanonicalLiveCase]:
|
||||
live_candidate_cases = [
|
||||
case
|
||||
for case in cases
|
||||
if case.movement_mode == "sprint" and case.momentum_ticks == 12
|
||||
]
|
||||
|
||||
by_bucket: dict[tuple[str, str, str], list[TheoryCase]] = {}
|
||||
for case in live_candidate_cases:
|
||||
by_bucket.setdefault(
|
||||
(case.family, case.subfamily, case.movement_mode),
|
||||
[],
|
||||
).append(case)
|
||||
|
||||
canonical_cases: list[CanonicalLiveCase] = []
|
||||
for family, subfamily, movement_mode in sorted(by_bucket):
|
||||
bucket_cases = by_bucket[(family, subfamily, movement_mode)]
|
||||
reachable = sorted(
|
||||
[
|
||||
case
|
||||
for case in bucket_cases
|
||||
if case.expected_reachable and case.margin is not None
|
||||
],
|
||||
key=lambda case: case.margin,
|
||||
)
|
||||
unreachable = sorted(
|
||||
[case for case in bucket_cases if not case.expected_reachable],
|
||||
key=lambda case: float("-inf") if case.margin is None else abs(case.margin),
|
||||
)
|
||||
|
||||
selected: list[tuple[str, TheoryCase]] = []
|
||||
if reachable:
|
||||
easy = next(
|
||||
(case for case in reversed(reachable) if (case.margin or 0.0) >= 0.50),
|
||||
reachable[-1],
|
||||
)
|
||||
boundary = reachable[0]
|
||||
selected.append(("easy", easy))
|
||||
if boundary.case_id != easy.case_id:
|
||||
selected.append(("boundary", boundary))
|
||||
if unreachable:
|
||||
selected.append(("reject", unreachable[0]))
|
||||
|
||||
for difficulty_band, case in selected:
|
||||
start, goal = _canonical_goal(case)
|
||||
canonical_cases.append(
|
||||
CanonicalLiveCase(
|
||||
case_id=case.case_id,
|
||||
bucket_id=f"{family}:{subfamily}:{movement_mode}:{difficulty_band}",
|
||||
family=family,
|
||||
subfamily=subfamily,
|
||||
movement_mode=movement_mode,
|
||||
momentum_ticks=case.momentum_ticks,
|
||||
difficulty_band=difficulty_band,
|
||||
expected_result="pass" if case.expected_reachable else "reject",
|
||||
world_recipe_id=_world_recipe_id(case),
|
||||
gap_blocks=case.gap_blocks,
|
||||
delta_y=case.delta_y,
|
||||
ceiling_height=case.ceiling_height,
|
||||
wall_width=case.wall_width,
|
||||
start=start,
|
||||
goal=goal,
|
||||
)
|
||||
)
|
||||
|
||||
return canonical_cases
|
||||
|
|
@ -17,3 +17,22 @@ class TheoryCase:
|
|||
apex_y: float | None
|
||||
margin: float | None
|
||||
notes: str = ""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CanonicalLiveCase:
|
||||
case_id: str
|
||||
bucket_id: str
|
||||
family: str
|
||||
subfamily: str
|
||||
movement_mode: str
|
||||
momentum_ticks: int
|
||||
difficulty_band: str
|
||||
expected_result: str
|
||||
world_recipe_id: str
|
||||
gap_blocks: int | None
|
||||
delta_y: float | None
|
||||
ceiling_height: float | None
|
||||
wall_width: int | None
|
||||
start: dict[str, float]
|
||||
goal: dict[str, float]
|
||||
|
|
|
|||
48
tools/pathing_theory/renderers.py
Normal file
48
tools/pathing_theory/renderers.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import csv
|
||||
import json
|
||||
from dataclasses import asdict
|
||||
from pathlib import Path
|
||||
|
||||
from tools.pathing_theory.models import CanonicalLiveCase, TheoryCase
|
||||
|
||||
|
||||
def write_theory_artifacts(
|
||||
cases: list[TheoryCase],
|
||||
canonical_cases: list[CanonicalLiveCase],
|
||||
output_dir: Path,
|
||||
) -> None:
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
json_path = output_dir / "theory-matrix.json"
|
||||
csv_path = output_dir / "theory-matrix.csv"
|
||||
md_path = output_dir / "theory-matrix.md"
|
||||
canonical_path = output_dir / "canonical-live-cases.json"
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps([asdict(case) for case in cases], indent=2) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
canonical_path.write_text(
|
||||
json.dumps([asdict(case) for case in canonical_cases], indent=2) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
with csv_path.open("w", encoding="utf-8", newline="") as handle:
|
||||
writer = csv.DictWriter(handle, fieldnames=list(asdict(cases[0]).keys()))
|
||||
writer.writeheader()
|
||||
for case in cases:
|
||||
writer.writerow(asdict(case))
|
||||
|
||||
lines = [
|
||||
"# Theory Matrix",
|
||||
"",
|
||||
"| family | subfamily | movement_mode | case_id | expected_reachable | margin |",
|
||||
"| --- | --- | --- | --- | --- | --- |",
|
||||
]
|
||||
for case in cases:
|
||||
lines.append(
|
||||
f"| {case.family} | {case.subfamily} | {case.movement_mode} | "
|
||||
f"{case.case_id} | {case.expected_reachable} | {case.margin} |"
|
||||
)
|
||||
|
||||
md_path.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||||
|
|
@ -14,7 +14,7 @@ def build_theory_cases() -> list[TheoryCase]:
|
|||
(True, "sprint", 0),
|
||||
(True, "sprint", 12),
|
||||
]:
|
||||
for gap in range(0, 7):
|
||||
for gap in range(0, 8):
|
||||
for delta_y in [0.0, 1.0, -1.0, -2.0]:
|
||||
ok, landing_x, needed_x = can_reach_gap(
|
||||
gap_blocks=gap,
|
||||
|
|
|
|||
|
|
@ -17,6 +17,13 @@ Usage:
|
|||
|
||||
import argparse
|
||||
import csv
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
if str(REPO_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(REPO_ROOT))
|
||||
from tools.pathing_theory.canonical import build_canonical_live_cases
|
||||
from tools.pathing_theory.primitives import (
|
||||
PLAYER_WIDTH,
|
||||
can_reach_gap,
|
||||
|
|
@ -24,6 +31,7 @@ from tools.pathing_theory.primitives import (
|
|||
get_landing,
|
||||
simulate_jump,
|
||||
)
|
||||
from tools.pathing_theory.renderers import write_theory_artifacts
|
||||
from tools.pathing_theory.simulator import build_theory_cases
|
||||
|
||||
|
||||
|
|
@ -202,8 +210,17 @@ def main():
|
|||
help="Print per-tick trajectory data")
|
||||
parser.add_argument("--csv", type=str, default=None,
|
||||
help="Export results to CSV file")
|
||||
parser.add_argument("--write-artifacts", type=str, default=None,
|
||||
help="Write tracked theory artifacts to a directory")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.write_artifacts:
|
||||
cases = build_theory_cases()
|
||||
canonical_cases = build_canonical_live_cases(cases)
|
||||
write_theory_artifacts(cases, canonical_cases, Path(args.write_artifacts))
|
||||
print(f"Wrote theory artifacts to {args.write_artifacts}")
|
||||
return
|
||||
|
||||
results = analyze_all(verbose=args.verbose)
|
||||
|
||||
if args.csv and results:
|
||||
|
|
|
|||
47
tools/tests/test_pathing_canonical_cases.py
Normal file
47
tools/tests/test_pathing_canonical_cases.py
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import json
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from tools.pathing_theory.canonical import build_canonical_live_cases
|
||||
from tools.pathing_theory.renderers import write_theory_artifacts
|
||||
from tools.pathing_theory.simulator import build_theory_cases
|
||||
|
||||
|
||||
class CanonicalPathingCaseTests(unittest.TestCase):
|
||||
def test_build_canonical_live_cases_picks_easy_boundary_and_reject(self) -> None:
|
||||
canonical_cases = build_canonical_live_cases(build_theory_cases())
|
||||
bucket_ids = {case.bucket_id for case in canonical_cases}
|
||||
|
||||
self.assertTrue(all(case.movement_mode == "sprint" for case in canonical_cases))
|
||||
self.assertTrue(all(case.momentum_ticks == 12 for case in canonical_cases))
|
||||
self.assertIn("linear:flat:sprint:easy", bucket_ids)
|
||||
self.assertIn("linear:flat:sprint:boundary", bucket_ids)
|
||||
self.assertIn("linear:flat:sprint:reject", bucket_ids)
|
||||
self.assertIn("neo:neo:sprint:boundary", bucket_ids)
|
||||
self.assertIn("ceiling:headhitter:sprint:boundary", bucket_ids)
|
||||
|
||||
def test_write_theory_artifacts_writes_json_csv_and_markdown_from_same_cases(self) -> None:
|
||||
cases = build_theory_cases()
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
output_dir = Path(temp_dir)
|
||||
write_theory_artifacts(cases, build_canonical_live_cases(cases), output_dir)
|
||||
|
||||
json_path = output_dir / "theory-matrix.json"
|
||||
csv_path = output_dir / "theory-matrix.csv"
|
||||
md_path = output_dir / "theory-matrix.md"
|
||||
canonical_path = output_dir / "canonical-live-cases.json"
|
||||
|
||||
self.assertTrue(json_path.exists())
|
||||
self.assertTrue(csv_path.exists())
|
||||
self.assertTrue(md_path.exists())
|
||||
self.assertTrue(canonical_path.exists())
|
||||
|
||||
exported_cases = json.loads(json_path.read_text())
|
||||
self.assertEqual(len(cases), len(exported_cases))
|
||||
self.assertIn("| family | subfamily | movement_mode |", md_path.read_text())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue