nx_hairdyn_transport_gate_t284.nx source
↩ module page · 73 lines · 3781 B
1// Retained actual CPU pose palette, 2026-09-13T17:45:20.246Z; not GPU readback.
2// Source317781...; source vertex identities and weights retained in fixture JSON.
3// Test uses actual root-to-first-node displacements, not an anatomical range.
4import "nx_hairdyn_transport_candidate_t284.nx"
5import "nx_gate_verdict.nx"
6func main()->i64{
7 let ctr:*i64=gv_ctr();gv_head("guide displacement inverse transport" as *u8)
8 let q:*i64=sys_mmap(32) as *i64;let cq:*i64=sys_mmap(32) as *i64
9 let v:*i64=sys_mmap(24) as *i64;let b:*i64=sys_mmap(24) as *i64
10 let back:*i64=sys_mmap(24) as *i64;let wrong:*i64=sys_mmap(24) as *i64
11 var maxerr:i64=0;var err:i64=0;var bad:i64=0;var a:i64=0
12q[0]=234;q[1]=34;q[2]=526;q[3]=4054;
13vm_q_norm(q,q)
14v[0]=-1086;v[1]=658;v[2]=-2339
15hd_posed_delta_to_bind(b,q,v,cq);hd_bind_delta_to_posed(back,q,b)
16 hd_bind_delta_to_posed(wrong,q,v)
17 err=0;bad=0;a=0
18 while a<3{err=vm_max(err,vm_abs(back[a]-v[a]));bad=vm_max(bad,vm_abs(wrong[a]-v[a]));a=a+1}
19 maxerr=vm_max(maxerr,err)
20 gv_kv("guide0_roundtrip_max_source_units" as *u8,err)
21 gv_kv("guide0_uncorrected_max_source_units" as *u8,bad)
22 gv_check("guide0 inverse improves over posed displacement sent as bind" as *u8,err<bad,ctr)
23q[0]=311;q[1]=45;q[2]=526;q[3]=4049;
24vm_q_norm(q,q)
25v[0]=-1654;v[1]=290;v[2]=-977
26hd_posed_delta_to_bind(b,q,v,cq);hd_bind_delta_to_posed(back,q,b)
27 hd_bind_delta_to_posed(wrong,q,v)
28 err=0;bad=0;a=0
29 while a<3{err=vm_max(err,vm_abs(back[a]-v[a]));bad=vm_max(bad,vm_abs(wrong[a]-v[a]));a=a+1}
30 maxerr=vm_max(maxerr,err)
31 gv_kv("guide300_roundtrip_max_source_units" as *u8,err)
32 gv_kv("guide300_uncorrected_max_source_units" as *u8,bad)
33 gv_check("guide300 inverse improves over posed displacement sent as bind" as *u8,err<bad,ctr)
34q[0]=310;q[1]=44;q[2]=525;q[3]=4049;
35vm_q_norm(q,q)
36v[0]=-239;v[1]=875;v[2]=-2519
37hd_posed_delta_to_bind(b,q,v,cq);hd_bind_delta_to_posed(back,q,b)
38 hd_bind_delta_to_posed(wrong,q,v)
39 err=0;bad=0;a=0
40 while a<3{err=vm_max(err,vm_abs(back[a]-v[a]));bad=vm_max(bad,vm_abs(wrong[a]-v[a]));a=a+1}
41 maxerr=vm_max(maxerr,err)
42 gv_kv("guide600_roundtrip_max_source_units" as *u8,err)
43 gv_kv("guide600_uncorrected_max_source_units" as *u8,bad)
44 gv_check("guide600 inverse improves over posed displacement sent as bind" as *u8,err<bad,ctr)
45q[0]=308;q[1]=44;q[2]=525;q[3]=4049;
46vm_q_norm(q,q)
47v[0]=-67;v[1]=0;v[2]=-2556
48hd_posed_delta_to_bind(b,q,v,cq);hd_bind_delta_to_posed(back,q,b)
49 hd_bind_delta_to_posed(wrong,q,v)
50 err=0;bad=0;a=0
51 while a<3{err=vm_max(err,vm_abs(back[a]-v[a]));bad=vm_max(bad,vm_abs(wrong[a]-v[a]));a=a+1}
52 maxerr=vm_max(maxerr,err)
53 gv_kv("guide900_roundtrip_max_source_units" as *u8,err)
54 gv_kv("guide900_uncorrected_max_source_units" as *u8,bad)
55 gv_check("guide900 inverse improves over posed displacement sent as bind" as *u8,err<bad,ctr)
56q[0]=310;q[1]=44;q[2]=525;q[3]=4049;
57vm_q_norm(q,q)
58v[0]=-341;v[1]=1131;v[2]=-1535
59hd_posed_delta_to_bind(b,q,v,cq);hd_bind_delta_to_posed(back,q,b)
60 hd_bind_delta_to_posed(wrong,q,v)
61 err=0;bad=0;a=0
62 while a<3{err=vm_max(err,vm_abs(back[a]-v[a]));bad=vm_max(bad,vm_abs(wrong[a]-v[a]));a=a+1}
63 maxerr=vm_max(maxerr,err)
64 gv_kv("guide1199_roundtrip_max_source_units" as *u8,err)
65 gv_kv("guide1199_uncorrected_max_source_units" as *u8,bad)
66 gv_check("guide1199 inverse improves over posed displacement sent as bind" as *u8,err<bad,ctr)
67vm_q_ident(q);v[0]=17;v[1]=0-31;v[2]=53
68hd_posed_delta_to_bind(b,q,v,cq)
69gv_check_eq("identity x exact" as *u8,b[0],v[0],ctr)
70gv_check_eq("identity y exact" as *u8,b[1],v[1],ctr)
71gv_check_eq("identity z exact" as *u8,b[2],v[2],ctr)
72gv_kv("roundtrip_max_source_units" as *u8,maxerr)
73return gv_verdict("nx_hairdyn_transport_gate_t284" as *u8,ctr,"direction correctness and measured integer quantization; not a zero-error or contact-quality claim" as *u8)
74}