Validation
This module provides validation for Phase 4 QR code features to ensure scannability and safety.
Phase 4 Validator
Validation for Phase 4 frame and centerpiece features.
This module provides validation logic for the new Phase 4 features including frame shapes, centerpiece reserves, and quiet zone enhancements.
- segnomms.validation.phase4.get_scanability_harness()[source]
- Return type:
Optional[QRScanabilityHarness]
- class segnomms.validation.phase4.Phase4Validator(qr_version, error_level, matrix_size)[source]
Bases:
objectValidation for Phase 4 frame and centerpiece features.
This class provides comprehensive validation for frame shapes, centerpiece reserves, and their interaction with existing QR code features.
Example
>>> validator = Phase4Validator( ... qr_version=7, error_level='M', matrix_size=45 ... ) >>> # Or using Pydantic model >>> config = Phase4ValidatorConfig( ... qr_version=7, error_level='m', matrix_size=45 ... ) >>> validator = Phase4Validator(**config.model_dump())
- validate_frame_safety(frame_config, border_modules)[source]
Validate frame configuration for QR code safety.
- Parameters:
frame_config (
FrameConfig) – Frame configuration to validateborder_modules (
int) – Number of border modules (quiet zone)
- Return type:
- Returns:
List of warning messages (empty if all valid)
- validate_centerpiece_safety(centerpiece_config)[source]
Validate centerpiece size against error correction capacity.
- Parameters:
centerpiece_config (
CenterpieceConfig) – Centerpiece configuration to validate- Return type:
- Returns:
List of error messages (empty if valid)
- validate_contrast_ratio(config, min_ratio=3.0)[source]
Validate color contrast ratio for scanability.
- Parameters:
config (
RenderingConfig) – Rendering configuration containing colorsmin_ratio (
float) – Minimum acceptable contrast ratio (default: 3.0)
- Return type:
- Returns:
List of error messages (empty if valid)
- validate_module_size_scanability(config)[source]
Validate module size against scanability requirements.
- Parameters:
config (
RenderingConfig) – Rendering configuration- Return type:
- Returns:
List of warning messages
- run_automated_scanability_test(config, minimum_success_rate=0.8, test_data='SegnoMMS Test')[source]
Run automated scanability testing harness.
- Parameters:
config (
RenderingConfig) – Rendering configuration to testminimum_success_rate (
float) – Minimum required success ratetest_data (
str) – Data to encode for testing
- Return type:
- Returns:
List of error messages (empty if passes)
- validate_combined_features(config)[source]
Check for problematic feature combinations.
- Parameters:
config (
RenderingConfig) – Complete rendering configuration- Return type:
- Returns:
List of warning messages
- get_recommendations(config)[source]
Get recommendations for optimal configuration.
- Parameters:
config (
RenderingConfig) – Rendering configuration to analyze- Return type:
- Returns:
List of recommendation messages
- validate_all(config, min_contrast_ratio=3.0, run_scanability_tests=False, min_scanability_success_rate=0.8)[source]
Perform complete validation of Phase 4 features.
- Parameters:
config (
RenderingConfig) – Complete rendering configurationmin_contrast_ratio (
float) – Minimum contrast ratio for scanability (default: 3.0)run_scanability_tests (
bool) – Whether to run automated scanning tests (default: False)min_scanability_success_rate (
float) – Minimum success rate for scanning tests (default: 0.8)
- Return type:
ValidationResult- Returns:
ValidationResult with errors, warnings, and recommendations
The Phase4Validator class validates frame shapes and centerpiece configurations
to prevent settings that might make QR codes unscannable.
Validation Classes
- class segnomms.validation.phase4.Phase4Validator(qr_version, error_level, matrix_size)[source]
Bases:
objectValidation for Phase 4 frame and centerpiece features.
This class provides comprehensive validation for frame shapes, centerpiece reserves, and their interaction with existing QR code features.
Example
>>> validator = Phase4Validator( ... qr_version=7, error_level='M', matrix_size=45 ... ) >>> # Or using Pydantic model >>> config = Phase4ValidatorConfig( ... qr_version=7, error_level='m', matrix_size=45 ... ) >>> validator = Phase4Validator(**config.model_dump())
- validate_frame_safety(frame_config, border_modules)[source]
Validate frame configuration for QR code safety.
- Parameters:
frame_config (
FrameConfig) – Frame configuration to validateborder_modules (
int) – Number of border modules (quiet zone)
- Return type:
- Returns:
List of warning messages (empty if all valid)
- validate_centerpiece_safety(centerpiece_config)[source]
Validate centerpiece size against error correction capacity.
- Parameters:
centerpiece_config (
CenterpieceConfig) – Centerpiece configuration to validate- Return type:
- Returns:
List of error messages (empty if valid)
- validate_contrast_ratio(config, min_ratio=3.0)[source]
Validate color contrast ratio for scanability.
- Parameters:
config (
RenderingConfig) – Rendering configuration containing colorsmin_ratio (
float) – Minimum acceptable contrast ratio (default: 3.0)
- Return type:
- Returns:
List of error messages (empty if valid)
- validate_module_size_scanability(config)[source]
Validate module size against scanability requirements.
- Parameters:
config (
RenderingConfig) – Rendering configuration- Return type:
- Returns:
List of warning messages
- run_automated_scanability_test(config, minimum_success_rate=0.8, test_data='SegnoMMS Test')[source]
Run automated scanability testing harness.
- Parameters:
config (
RenderingConfig) – Rendering configuration to testminimum_success_rate (
float) – Minimum required success ratetest_data (
str) – Data to encode for testing
- Return type:
- Returns:
List of error messages (empty if passes)
- validate_combined_features(config)[source]
Check for problematic feature combinations.
- Parameters:
config (
RenderingConfig) – Complete rendering configuration- Return type:
- Returns:
List of warning messages
- get_recommendations(config)[source]
Get recommendations for optimal configuration.
- Parameters:
config (
RenderingConfig) – Rendering configuration to analyze- Return type:
- Returns:
List of recommendation messages
- validate_all(config, min_contrast_ratio=3.0, run_scanability_tests=False, min_scanability_success_rate=0.8)[source]
Perform complete validation of Phase 4 features.
- Parameters:
config (
RenderingConfig) – Complete rendering configurationmin_contrast_ratio (
float) – Minimum contrast ratio for scanability (default: 3.0)run_scanability_tests (
bool) – Whether to run automated scanning tests (default: False)min_scanability_success_rate (
float) – Minimum success rate for scanning tests (default: 0.8)
- Return type:
ValidationResult- Returns:
ValidationResult with errors, warnings, and recommendations
Validation checks include:
Frame Safety: Ensures adequate borders for non-square frames
Centerpiece Size: Validates logo area size against error correction capacity
Configuration Conflicts: Detects incompatible feature combinations
QR Code Limits: Prevents configurations that exceed QR code capabilities
Error Correction Guidelines
The validator enforces safe centerpiece size limits based on error correction levels:
Error Level |
Recovery |
Max Centerpiece Size |
|---|---|---|
L (Low) |
~7% |
5% - Very conservative |
M (Medium) |
~15% |
8% - Good for small logos |
Q (Quartile) |
~25% |
15% - Medium logos |
H (High) |
~30% |
20% - Large logos |
Frame Validation
Frame shape validation includes:
Border Requirements: Minimum quiet zone sizes for different frame shapes
Clipping Safety: Ensures critical patterns aren’t clipped by frame shapes
Custom Path Validation: Basic validation of custom SVG paths
Examples
Manual Validation:
from segnomms.validation.phase4 import Phase4Validator
from segnomms.config import RenderingConfig
import segno
# Create QR code and config
qr = segno.make("Test data", error='m')
config = RenderingConfig.from_kwargs(
frame_shape='circle',
border=3, # May be too small
centerpiece_enabled=True,
centerpiece_size=0.2 # May be too large for M level
)
# Validate configuration
validator = Phase4Validator(qr, config)
warnings = validator.validate_all()
for warning in warnings:
print(f"Warning: {warning}")
Automatic Validation:
# Validation happens automatically during rendering
from segnomms import write
qr = segno.make("Test", error='l')
# This will log warnings for unsafe configuration
with open('output.svg', 'w') as f:
write(qr, f,
frame_shape='circle',
centerpiece_enabled=True,
centerpiece_size=0.15, # Too large for L level
border=2) # Too small for circle frame
Validation Results
Validation methods return lists of warning strings:
Empty list: Configuration is safe
Warning messages: Potential issues that may affect scannability
Recommendations: Suggested parameter adjustments
Common Warnings
Frame Shape Warnings:
“Circle/custom frames should use 5+ module quiet zone”
“Frame shape may clip important QR patterns”
Centerpiece Warnings:
“Centerpiece size exceeds safe limit for error level”
“Large centerpiece with aggressive merging may cause issues”
Configuration Conflicts:
“Custom frame path appears invalid”
“Centerpiece offset places logo outside QR bounds”
Best Practices
To avoid validation warnings:
Use adequate borders: 5-6 modules for circle/custom frames
Match error correction to centerpiece size: Use H level for large logos
Test scannability: Always test with target scanning devices
Conservative sizing: Start with smaller centerpieces and increase if needed