code wiki / _hdl_build / nx_actbench.nx

nx_actbench.nx

buildroot/runtime/_hdl_build/nx_actbench.nx

57971 B1222 linesdepth 3pulls 3 transitivereach 0 importersview sourcekind bench
docsdependenciesstructsconstsfunctions

about

nx_actbench.nx -- I3: THE PHYSICAL-PLAUSIBILITY RULER. (beyond-metahuman plan, Phase 0 instruments.) ★★★WHY THIS EXISTS, AND IT IS A MEASURED REASON RATHER THAN A PREFERENCE. The field published the number that convicts our whole instrument set: "Beyond MPJPE: A Physics-Based Audit of Monocular 3D Human Pose Estimation" (PhysHuman @ CVPR 2026) reports that the geometric standard MPJPE and the physical composite PHYSSCORE are correlated at only SPEARMAN rho = 0.37, WITH RANK REVERSALS -- the temporal method WHAM ranks 3rd on MPJPE and 1st on physical plausibility. Every ruler this program owns -- nx_twinbench (mm), nx_bodybench (geometry MIN), nx_facemark (placement), nx_curvebench -- is GEOMETRIC. So a body of ours can score well on all of them and still be physically impossible, and nothing we own could see it. This organ is the missing axis. ★WHAT IT IS NOT: invented teeth. The first draft of this rung was going to assert energy decay and replay determinism -- both fine properties, both MINE. runtime/nx_pose_benchmark_audit.nx exists precisely to convict that move, grading every claim MECHANICAL vs SELF-VALIDATED vs INDUSTRY-MEASURED, and its standing verdict is "ZERO industry benchmarks is the honest truth". So the channels below are the PUBLISHED ones (PHYSSCORE's six; definitions from the PhysDiff/EDGE lineage and PhyMotion arXiv:2605.14269), not the ones that were convenient to write. ★A RULER IS A FUNCTION OF A TRACE. PHYSSCORE operates on joint positions and needs NO GROUND TRUTH, which is the property that matters here: it can score a GENERATED being. That is what makes it usable on the creature/fantasy half, where there is no cadaver dragon to compare against. So this organ takes a trace + a skeleton and scores it. It is coupled to no generator. ★★CHANNEL 4 READS THE SKELETON'S OWN EMITTED TABLE. nx_skelgen writes "B <bone> <len> <lo> <hi>"; this reads those rows. There is therefore NO SECOND CONSTRAINT TABLE to drift from -- the exact failure nx_skelgen itself documents (a fix applied to one of two tables is a bug with a good alibi). ⚠★DECLARED SUBSTITUTION, because an undeclared one is a lie: PHYSSCORE measures penetration and float against the lowest MESH VERTEX. We measure against the lowest JOINT. A joint is inboard of the surface, so our penetration UNDER-reports and our float OVER-reports by roughly a limb radius. The number travels with that caveat in-band, every call. ⚠★AND THE FIELD ITSELF SAYS THERE IS NO STANDARD PARAMETER SET ("various methods may employ disparate parameter choices and even design distinct evaluation approaches"). So every threshold this organ uses is EMITTED IN THE OUTPUT. A plausibility number quoted without its thresholds is not comparable to anyone else's, including our own last run. nx_actbench score <trace> <skel.dat> nx_actbench selftest license_tier: ORIGINAL expect_exit: 0 No hw writes (Rule 26).

dependencies 1 imports · 0 importers

nx_gate_verdict.nx nx_actbench.nx

imports: nx_gate_verdict.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main ab_streq ab_gate gv_ctr sys_mmap gv_head gv_puts sys_write ab_costab ab_iabs gv_check gv_puts ↻ ab_acos ab_app ab_appn ab_wr sys_openat_wr ab_load_skel sys_read_file sys_openat_rd sys_lseek sys_mmap ↻ sys_read sys_close ab_tok ab_isdig ab_nextline ab_vbytes ab_fixture ab_app ↻ ab_appn ↻ ab_v ab_app ↻ ab_appn ↻ ab_wr ↻ ab_load_trace sys_read_file ↻ ab_tok ↻ ab_vidx ab_nextline ↻

structs

none

consts

42const AB_MAGIC_65536: i64 = 65536
43const AB_MAGIC_4096: i64 = 4096
44const AB_MAGIC_1523: i64 = 1523
49const AB_MAXF: i64 = 512
50const AB_MAXJ: i64 = 64
51const AB_MAXC: i64 = 32
53const AB_CST: i64 = 6
55const AB_MAXS: i64 = 32
56const AB_SST: i64 = 3
59const AB_CAPSAMP: i64 = 16
60const AB_MAXB: i64 = 24
61const AB_MODE: i64 = 420
65const AB_GTOL: i64 = 5
68const AB_CONTACT: i64 = 40
70const AB_FOOTHALF: i64 = 60
71const AB_SCALE: i64 = 1024
72const AB_PERMIL: i64 = 1000
73const AB_DEG: i64 = 180
75const AB_FXB: i64 = 20
76const AB_COS1: i64 = 1048416
77const AB_SIN1: i64 = 18300
78const AB_ONE20: i64 = 1048576
80const AB_E_OPEN: i64 = 3
81const AB_E_CAP: i64 = 4
82const AB_E_EMPTY: i64 = 5

functions

84func ab_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
called by 2: ab_scoremain
85func ab_pn(v: i64) -> i64
called by 1: ab_score
94func ab_streq(a: *u8, b: *u8) -> i64
called by 1: main
99func ab_iabs(v: i64) -> i64 { if v<0 { return 0-v } return v }
called by 1: ab_gate
104func ab_isqrt(v: i64) -> i64
115func ab_costab() -> *i64
called by 2: ab_scoreab_gate
132func ab_acos(cv: i64, t: *i64) -> i64
called by 2: ab_jlimitab_gate
145func ab_isdig(c: i64) -> i64 { if c>=48 { if c<=57 { return 1 } } return 0 }
called by 1: ab_tok
147func ab_tok(b: *u8, n: i64, p: *i64, out: *i64) -> i64
called by 2: ab_load_skelab_load_trace calls 1: ab_isdig
175func ab_nextline(b: *u8, n: i64, p: *i64) -> i64
188func ab_vidx(f: i64, j: i64, ax: i64) -> i64 { return (f*AB_MAXJ + j)*3 + ax }
197func ab_seg_dist(ax: i64, az: i64, bx: i64, bz: i64, px: i64, pz: i64) -> i64
called by 1: ab_hull_dist calls 1: ab_isqrt
216func ab_hull(cx: *i64, cz: *i64, n: i64, hx: *i64, hz: *i64) -> i64
called by 1: ab_com
265func ab_hull_dist(hx: *i64, hz: *i64, h: i64, px: i64, pz: i64) -> i64
called by 1: ab_com calls 2: ab_isqrtab_seg_dist
299func ab_pt_seg3(ax: i64, ay: i64, az: i64, bx: i64, by: i64, bz: i64,
called by 1: ab_seg_seg3 calls 1: ab_isqrt
324func ab_seg_seg3(ax: i64, ay: i64, az: i64, bx: i64, by: i64, bz: i64,
called by 1: ab_selfpen calls 1: ab_pt_seg3
345func ab_gpen(V: *i64, nf: i64, nj: i64, out: *i64) -> i64
called by 2: ab_scoreab_gate calls 1: ab_vidx
378func ab_float(V: *i64, nf: i64, nj: i64, out: *i64) -> i64
called by 1: ab_score calls 1: ab_vidx
409func ab_skate(V: *i64, nf: i64, E: *i64, ne: i64, out: *i64) -> i64
called by 2: ab_scoreab_gate calls 2: ab_vidxab_isqrt
458func ab_jlimit(V: *i64, nf: i64, C: *i64, nc: i64, BLO: *i64, BHI: *i64, t: *i64, out: *i64) -> i64
514func ab_smooth(V: *i64, nf: i64, nj: i64, out: *i64) -> i64
called by 2: ab_scoreab_gate calls 2: ab_vidxab_isqrt
552func ab_com(V: *i64, nf: i64, nj: i64, E: *i64, ne: i64, out: *i64) -> i64
609func ab_linked(a: i64, b: i64, JP: *i64) -> i64
called by 1: ab_selfpen
616func ab_selfpen(V: *i64, nf: i64, S: *i64, ns: i64, JP: *i64, out: *i64) -> i64
672func ab_load_skel(path: *u8, BLO: *i64, BHI: *i64, JP: *i64) -> i64
717func ab_load_trace(path: *u8, V: *i64, E: *i64, C: *i64, S: *i64, cfg: *i64) -> i64
797func ab_vbytes() -> i64 { return AB_MAXF*AB_MAXJ*3*8 }
called by 2: ab_scoreab_gate
800func ab_score(tpath: *u8, spath: *u8) -> i64
886func ab_wr(path: *u8, b: *u8, n: i64) -> i64
called by 2: ab_fixtureab_gate calls 1: sys_openat_wr
893func ab_app(b: *u8, p: *i64, s: *u8) -> i64
898func ab_appn(b: *u8, p: *i64, v: i64) -> i64
910func ab_v(b: *u8, p: *i64, f: i64, j: i64, x: i64, y: i64, z: i64) -> i64
called by 2: ab_fixtureab_gate calls 2: ab_appab_appn
922func ab_fixture(path: *u8, nf: i64, slide: i64, sink: i64, kneez: i64, jitter: i64) -> i64
called by 1: ab_gate calls 4: ab_appab_appnab_vab_wr
944func ab_gate() -> i64
1212func main(argc: i64, argv: *i64) -> i64