map2fig 0.7.7

Fast, publication-quality HEALPix sky map visualization in Rust
Documentation
#!/usr/bin/env python3
"""
Colorbar height fix verification - shows actual Rust implementation output.
"""

def calculate_height(map_h):
    """Replicate the Rust calculation exactly."""
    base_h = map_h / 20.0
    rounded = round(base_h)
    # Round to nearest multiple of 3
    result = round((rounded / 3.0) * 3.0)
    result = max(result, 12.0)
    return result

def show_analysis():
    print("\n" + "=" * 90)
    print("COLORBAR HEIGHT FIX - ACTUAL RUST IMPLEMENTATION")
    print("=" * 90 + "\n")
    
    print("Portrait Layout: cbar_h = round_to_multiple_of_3(round(map_h / 20.0))\n")
    print(f"{'Width':<10} {'map_w':<10} {'map_h':<12} {'÷20.0':<10} {'Old (round)':<12} {'New (mod 3)':<12} {'Changed?':<10}")
    print("-" * 90)
    
    widths = [800, 900, 1000, 1024, 1200, 1440, 1600, 1920, 2560]
    
    for width in widths:
        outer_pad = 24
        map_w = width - 2 * outer_pad
        map_h = map_w / 2.0
        
        base_h = map_h / 20.0
        old_height = round(base_h)
        new_height = calculate_height(map_h)
        
        old_mod3 = old_height % 3
        new_mod3 = int(new_height) % 3
        
        changed = "YES" if old_height != new_height else "NO"
        status = "" if new_mod3 == 0 else ""
        
        print(f"{width:<10} {map_w:<10} {map_h:<12.1f} {base_h:<10.1f} {old_height:<12} {int(new_height):<12} {changed:<10}  {status}")
    
    print("\n" + "=" * 90)
    print("Key Improvements:")
    print("=" * 90)
    print("""
Default case (1200px width):
  OLD: 28.8 → rounds to 29 (29 % 3 = 2) ✗ ASYMMETRY
  NEW: 28.8 → rounds to 29 → rounds to 30 (30 % 3 = 0) ✓ FIXED
  
Consequence:
  - Triangle height changes from 29 to 30 pixels
  - This ensures proper Bresenham progression
  - Expected: Left-right asymmetry should disappear
  - Expected: Cliffs and plateaus should be eliminated
""")
    
    print("\n" + "=" * 90)

if __name__ == "__main__":
    show_analysis()