@@ -1900,4 +1900,197 @@ mod tests {
19001900
19011901 assert ! ( accuracy > 1.0 / n_classes as f64 , "should beat random" ) ;
19021902 }
1903+ #[ test]
1904+ #[ ignore]
1905+ fn test_resonate_focus_through_stack ( ) {
1906+ // Take centroid focus patch → resonate through HEEL→HIP→BRANCH→LEAF.
1907+ // At each level, measure: accuracy, bytes, ρ preservation.
1908+ // This IS the full tensor codec cascade on real image data.
1909+
1910+ let bytes = match std:: fs:: read ( "/tmp/tiny_imagenet_labeled.bin" ) {
1911+ Ok ( b) => b,
1912+ Err ( _) => { eprintln ! ( "SKIP: /tmp/tiny_imagenet_labeled.bin not found" ) ; return ; }
1913+ } ;
1914+
1915+ let n = u32:: from_le_bytes ( [ bytes[ 0 ] , bytes[ 1 ] , bytes[ 2 ] , bytes[ 3 ] ] ) as usize ;
1916+ let d = u32:: from_le_bytes ( [ bytes[ 4 ] , bytes[ 5 ] , bytes[ 6 ] , bytes[ 7 ] ] ) as usize ;
1917+ let n_classes = u32:: from_le_bytes ( [ bytes[ 8 ] , bytes[ 9 ] , bytes[ 10 ] , bytes[ 11 ] ] ) as usize ;
1918+ let mut labels = Vec :: with_capacity ( n) ;
1919+ for i in 0 ..n {
1920+ let off = 12 + i * 4 ;
1921+ labels. push ( u32:: from_le_bytes ( [ bytes[ off] , bytes[ off+1 ] , bytes[ off+2 ] , bytes[ off+3 ] ] ) as usize ) ;
1922+ }
1923+ let pixel_start = 12 + n * 4 ;
1924+ let img_w = 64usize ; let img_h = 64usize ; let ch = 3usize ;
1925+ let n_use = n. min ( 200 ) ;
1926+
1927+ let pixel = |img : usize , r : usize , c : usize , channel : usize | -> f64 {
1928+ let off = pixel_start + ( img * d + r * img_w * ch + c * ch + channel) * 4 ;
1929+ f32:: from_le_bytes ( [ bytes[ off] , bytes[ off+1 ] , bytes[ off+2 ] , bytes[ off+3 ] ] ) as f64
1930+ } ;
1931+ let luma = |img : usize , r : usize , c : usize | -> f64 {
1932+ 0.299 * pixel ( img, r, c, 0 ) + 0.587 * pixel ( img, r, c, 1 ) + 0.114 * pixel ( img, r, c, 2 )
1933+ } ;
1934+
1935+ // ── LEAF: full centroid focus patch (432D, highest resolution) ──
1936+ let focus_radius = 6usize ;
1937+ let intersections = [ ( img_h/3 , img_w/3 ) , ( img_h/3 , 2 * img_w/3 ) ,
1938+ ( 2 * img_h/3 , img_w/3 ) , ( 2 * img_h/3 , 2 * img_w/3 ) ] ;
1939+
1940+ let leaf_features: Vec < Vec < f64 > > = ( 0 ..n_use) . map ( |img| {
1941+ // Find highest-energy intersection
1942+ let mut best_r = img_h / 2 ;
1943+ let mut best_c = img_w / 2 ;
1944+ let mut best_energy = 0.0f64 ;
1945+ for & ( ir, ic) in & intersections {
1946+ let mut energy = 0.0 ;
1947+ let r0 = ir. saturating_sub ( 8 ) ; let r1 = ( ir+8 ) . min ( img_h) ;
1948+ let c0 = ic. saturating_sub ( 8 ) ; let c1 = ( ic+8 ) . min ( img_w) ;
1949+ for r in r0..r1 { for c in c0..c1 {
1950+ if r > 0 && r < img_h-1 && c > 0 && c < img_w-1 {
1951+ let dx = luma ( img, r, c+1 ) - luma ( img, r, c. saturating_sub ( 1 ) ) ;
1952+ let dy = luma ( img, r+1 , c) - luma ( img, r. saturating_sub ( 1 ) , c) ;
1953+ energy += ( dx* dx + dy* dy) . sqrt ( ) ;
1954+ }
1955+ } }
1956+ if energy > best_energy { best_energy = energy; best_r = ir; best_c = ic; }
1957+ }
1958+ // Extract patch
1959+ let mut f = Vec :: with_capacity ( 432 ) ;
1960+ let r0 = best_r. saturating_sub ( focus_radius) ;
1961+ let r1 = ( best_r + focus_radius) . min ( img_h) ;
1962+ let c0 = best_c. saturating_sub ( focus_radius) ;
1963+ let c1 = ( best_c + focus_radius) . min ( img_w) ;
1964+ for r in r0..r1 { for c in c0..c1 { for channel in 0 ..ch {
1965+ f. push ( pixel ( img, r, c, channel) ) ;
1966+ } } }
1967+ f. resize ( 432 , 0.0 ) ;
1968+ f
1969+ } ) . collect ( ) ;
1970+
1971+ // ── BRANCH: golden-step compress (432D → 17D = 34 bytes) ──
1972+ let base_dim = 17 ; let golden_step = 11 ;
1973+ let compress17 = |v : & [ f64 ] | -> Vec < f64 > {
1974+ let fd = v. len ( ) ;
1975+ let n_oct = ( fd + base_dim - 1 ) / base_dim;
1976+ let mut sum = vec ! [ 0.0f64 ; base_dim] ;
1977+ let mut cnt = vec ! [ 0u32 ; base_dim] ;
1978+ for oct in 0 ..n_oct {
1979+ for bi in 0 ..base_dim {
1980+ let dim = oct * base_dim + ( ( bi * golden_step) % base_dim) ;
1981+ if dim < fd { sum[ bi] += v[ dim] ; cnt[ bi] += 1 ; }
1982+ }
1983+ }
1984+ sum. iter ( ) . zip ( & cnt) . map ( |( & s, & c) | if c > 0 { s / c as f64 } else { 0.0 } ) . collect ( )
1985+ } ;
1986+ let branch_features: Vec < Vec < f64 > > = leaf_features. iter ( ) . map ( |f| compress17 ( f) ) . collect ( ) ;
1987+
1988+ // ── HIP: quantize to i16 (17D × 2 bytes = 34 bytes, same size but integer) ──
1989+ let hip_features: Vec < Vec < f64 > > = branch_features. iter ( ) . map ( |f| {
1990+ f. iter ( ) . map ( |& v| ( ( v * 1000.0 ) . round ( ) . clamp ( -32768.0 , 32767.0 ) as i16 ) as f64 / 1000.0 ) . collect ( )
1991+ } ) . collect ( ) ;
1992+
1993+ // ── HEEL: scent byte — reduce to single energy + top category vote ──
1994+ // Scent = which of the 17 dimensions has highest absolute value
1995+ let heel_features: Vec < Vec < f64 > > = branch_features. iter ( ) . map ( |f| {
1996+ let max_dim = f. iter ( ) . enumerate ( )
1997+ . max_by ( |a, b| a. 1 . abs ( ) . partial_cmp ( & b. 1 . abs ( ) ) . unwrap ( ) )
1998+ . map ( |( i, _) | i) . unwrap_or ( 0 ) ;
1999+ let energy: f64 = f. iter ( ) . map ( |v| v * v) . sum :: < f64 > ( ) . sqrt ( ) ;
2000+ // 2D scent: dominant dimension + energy level
2001+ vec ! [ max_dim as f64 , energy]
2002+ } ) . collect ( ) ;
2003+
2004+ // ── Classify at each level ──
2005+ fn classify ( features : & [ Vec < f64 > ] , labels : & [ usize ] , n_classes : usize ) -> ( f64 , usize ) {
2006+ let n = features. len ( ) ;
2007+ let fd = features[ 0 ] . len ( ) ;
2008+ let mut arch = vec ! [ vec![ 0.0 ; fd] ; n_classes] ;
2009+ let mut cnt = vec ! [ 0usize ; n_classes] ;
2010+ for ( i, & l) in labels. iter ( ) . enumerate ( ) {
2011+ for j in 0 ..fd { arch[ l] [ j] += features[ i] [ j] ; }
2012+ cnt[ l] += 1 ;
2013+ }
2014+ for c in 0 ..n_classes {
2015+ if cnt[ c] > 0 { for j in 0 ..fd { arch[ c] [ j] /= cnt[ c] as f64 ; } }
2016+ }
2017+ let mut correct = 0 ;
2018+ for ( i, & tl) in labels. iter ( ) . enumerate ( ) {
2019+ let mut best_c = 0 ; let mut best_d = f64:: MAX ;
2020+ for c in 0 ..n_classes {
2021+ if cnt[ c] == 0 { continue ; }
2022+ let dist: f64 = features[ i] . iter ( ) . zip ( & arch[ c] )
2023+ . map ( |( a, b) | ( a-b) * ( a-b) ) . sum :: < f64 > ( ) . sqrt ( ) ;
2024+ if dist < best_d { best_d = dist; best_c = c; }
2025+ }
2026+ if best_c == tl { correct += 1 ; }
2027+ }
2028+ ( correct as f64 / n as f64 , correct)
2029+ }
2030+
2031+ // ── Compute ρ: how well does each level preserve pairwise distances? ──
2032+ fn pairwise_dists ( feats : & [ Vec < f64 > ] ) -> Vec < f64 > {
2033+ let n = feats. len ( ) . min ( 50 ) ; // limit for speed
2034+ let mut d = Vec :: new ( ) ;
2035+ for i in 0 ..n { for j in ( i+1 ) ..n {
2036+ let dist: f64 = feats[ i] . iter ( ) . zip ( & feats[ j] )
2037+ . map ( |( a, b) | ( a-b) * ( a-b) ) . sum :: < f64 > ( ) . sqrt ( ) ;
2038+ d. push ( dist) ;
2039+ } }
2040+ d
2041+ }
2042+ fn spearman ( a : & [ f64 ] , b : & [ f64 ] ) -> f64 {
2043+ fn ranks ( v : & [ f64 ] ) -> Vec < f64 > {
2044+ let mut idx: Vec < ( usize , f64 ) > = v. iter ( ) . copied ( ) . enumerate ( ) . collect ( ) ;
2045+ idx. sort_by ( |a, b| a. 1 . partial_cmp ( & b. 1 ) . unwrap ( ) ) ;
2046+ let mut r = vec ! [ 0.0 ; v. len( ) ] ;
2047+ for ( rank, ( i, _) ) in idx. into_iter ( ) . enumerate ( ) { r[ i] = rank as f64 ; }
2048+ r
2049+ }
2050+ let ( ra, rb) = ( ranks ( a) , ranks ( b) ) ;
2051+ let n = a. len ( ) as f64 ;
2052+ let ( ma, mb) = ( ra. iter ( ) . sum :: < f64 > ( ) / n, rb. iter ( ) . sum :: < f64 > ( ) / n) ;
2053+ let ( mut cov, mut va, mut vb) = ( 0.0 , 0.0 , 0.0 ) ;
2054+ for i in 0 ..a. len ( ) {
2055+ let ( da, db) = ( ra[ i] - ma, rb[ i] - mb) ;
2056+ cov += da * db; va += da * da; vb += db * db;
2057+ }
2058+ if va < 1e-10 || vb < 1e-10 { 0.0 } else { cov / ( va * vb) . sqrt ( ) }
2059+ }
2060+
2061+ let leaf_dists = pairwise_dists ( & leaf_features) ;
2062+ let rho_branch = spearman ( & leaf_dists, & pairwise_dists ( & branch_features) ) ;
2063+ let rho_hip = spearman ( & leaf_dists, & pairwise_dists ( & hip_features) ) ;
2064+ let rho_heel = spearman ( & leaf_dists, & pairwise_dists ( & heel_features) ) ;
2065+
2066+ let ( acc_leaf, cor_leaf) = classify ( & leaf_features, & labels[ ..n_use] , n_classes) ;
2067+ let ( acc_branch, cor_branch) = classify ( & branch_features, & labels[ ..n_use] , n_classes) ;
2068+ let ( acc_hip, cor_hip) = classify ( & hip_features, & labels[ ..n_use] , n_classes) ;
2069+ let ( acc_heel, cor_heel) = classify ( & heel_features, & labels[ ..n_use] , n_classes) ;
2070+
2071+ eprintln ! ( "=== Resonate Focus Object Through Full Stack ===" ) ;
2072+ eprintln ! ( " {} images, {} classes" , n_use, n_classes) ;
2073+ eprintln ! ( ) ;
2074+ eprintln ! ( " Level Dims Bytes Accuracy ρ vs LEAF ρ/byte" ) ;
2075+ eprintln ! ( " ───────── ───── ───── ───────── ───────── ──────" ) ;
2076+ eprintln ! ( " LEAF 432D 864B {:.1}% ({}/{}) 1.0000 {:.6}" ,
2077+ acc_leaf* 100.0 , cor_leaf, n_use, 1.0 /864.0 ) ;
2078+ eprintln ! ( " BRANCH 17D 34B {:.1}% ({}/{}) {:.4} {:.6}" ,
2079+ acc_branch* 100.0 , cor_branch, n_use, rho_branch, rho_branch/34.0 ) ;
2080+ eprintln ! ( " HIP 17D 34B {:.1}% ({}/{}) {:.4} {:.6}" ,
2081+ acc_hip* 100.0 , cor_hip, n_use, rho_hip, rho_hip/34.0 ) ;
2082+ eprintln ! ( " HEEL 2D 2B {:.1}% ({}/{}) {:.4} {:.6}" ,
2083+ acc_heel* 100.0 , cor_heel, n_use, rho_heel, rho_heel/2.0 ) ;
2084+ eprintln ! ( " Random — 0B {:.1}%" , 100.0 /n_classes as f64 ) ;
2085+ eprintln ! ( ) ;
2086+ eprintln ! ( " Cascade rejection simulation:" ) ;
2087+ eprintln ! ( " HEEL rejects: {:.0}% of wrong classes (scent screening)" ,
2088+ ( 1.0 - 1.0 /n_classes as f64 ) * ( 1.0 - acc_heel) * 100.0 ) ;
2089+ eprintln ! ( " After HEEL→HIP: {:.0}% remaining need full BRANCH check" ,
2090+ ( 1.0 - acc_hip) * 100.0 ) ;
2091+
2092+ assert ! ( acc_leaf > acc_branch, "LEAF should beat BRANCH" ) ;
2093+ assert ! ( acc_branch >= acc_heel, "BRANCH should beat or match HEEL" ) ;
2094+ assert ! ( rho_branch > rho_heel, "BRANCH ρ should exceed HEEL ρ" ) ;
2095+ }
19032096}
0 commit comments