This module provides core utilities used throughout the GNN pipeline, including unified logging, argument parsing, pipeline orchestration, and common helper functions that ensure consistency across all modules.
src/utils/
├── __init__.py # Module initialization and exports
├── AGENTS.md # AI agent scaffolding documentation
├── README.md # This documentation
├── SPEC.md # Module specification
│
├── # Logging & Diagnostics
├── logging_utils.py # Unified logging utilities (1071 lines)
├── structured_logging.py # Structured JSON logging (459 lines)
├── visual_logging.py # Visual log formatting (431 lines)
├── diagnostic_logging.py # Diagnostic logging utilities
│
├── # Configuration & Arguments
├── argument_utils.py # Enhanced argument parsing (1225 lines)
├── config_loader.py # YAML/JSON config loading
│
├── # Pipeline Infrastructure
├── pipeline.py # Pipeline utilities
├── pipeline_template.py # Standardized pipeline templates (586 lines)
├── pipeline_dependencies.py # Step dependency management
├── pipeline_monitor.py # Pipeline health monitoring (696 lines)
├── pipeline_planner.py # Execution planning
├── pipeline_validator.py # Validation utilities
│
├── # Dependency Management
├── dependency_audit.py # Dependency auditing (504 lines)
├── dependency_installer.py # Dependency installation
├── dependency_manager.py # Dependency management (475 lines)
├── dependency_validator.py # Dependency validation (667 lines)
│
├── # Error Handling & Recovery
├── error_handling.py # Error handling framework
├── error_recovery.py # Error recovery strategies
├── recovery.py # Recovery implementations
│
├── # Resource & Performance
├── resource_manager.py # Resource monitoring
├── performance_tracker.py # Performance tracking
├── timeout_manager.py # Timeout management (445 lines)
├── visualization_optimizer.py # Viz optimization (445 lines)
│
├── # Testing & Validation
├── test_utils.py # Test utilities (1121 lines)
├── script_validator.py # Script validation (523 lines)
│
├── # Utilities
├── base_processor.py # Base processor class
├── execution_utils.py # Execution helpers
├── io_utils.py # I/O utilities
├── network_utils.py # Network utilities
├── path_utils.py # Path utilities
├── system_utils.py # System utilities
├── venv_utils.py # Virtual environment helpers
│
├── # Specialized
├── mcp.py # MCP integration (351 lines)
├── migration_helper.py # Migration utilities
├── simulation_monitor.py # Simulation monitoring
└── simulation_utils.py # Simulation utilities
graph TD
Pipeline[Pipeline Scripts] --> Utils{Utils Module}
Utils --> Log[Unified Logging]
Utils --> Args[Arg Parser]
Utils --> Files[File Utils]
Utils --> Valid[Validation]
Utils --> Config[Configuration]
Utils --> Error[Error Recovery]
Utils --> Perf[Performance Tracking]
Log --> StructLog[Structured Logs]
Args --> Config[Configuration]
Files --> IOSafe[Safe IO Ops]
Valid --> Checks[Path/Config Checks]
Error --> Recovery[Recovery Strategies]
Perf --> Metrics[Performance Metrics]
StructLog & Config & IOSafe & Checks & Recovery & Metrics --> Standard[Standardization]
graph LR
subgraph "Logging Utilities"
LogUtils[logging_utils.py]
StructLog[structured_logging.py]
VisualLog[visual_logging.py]
end
subgraph "Configuration"
ConfigLoader[config_loader.py]
ConfigMgr[configuration.py]
end
subgraph "Pipeline Support"
ArgUtils[argument_utils.py]
PipelineUtils[pipeline.py]
PipelineTemplate[pipeline_template.py]
end
subgraph "Error Handling"
ErrorRecovery[error_recovery.py]
ErrorHandling[error_handling.py]
end
subgraph "Resource Management"
ResourceMgr[resource_manager.py]
PerfTracker[performance_tracker.py]
end
PipelineUtils --> LogUtils
PipelineUtils --> ArgUtils
PipelineUtils --> ConfigLoader
LogUtils --> StructLog
LogUtils --> VisualLog
ErrorRecovery --> ErrorHandling
ResourceMgr --> PerfTracker
sequenceDiagram
participant Script as Pipeline Script
participant Utils as Utils Module
participant Logger as Logger
participant Tracker as Performance Tracker
Script->>Utils: setup_step_logging()
Utils->>Logger: Create logger with correlation ID
Utils->>Tracker: Initialize performance tracking
Logger-->>Script: Return logger instance
Script->>Logger: log_step_start()
Logger->>Tracker: Record start time
Logger->>Logger: Emit structured log
Script->>Logger: log_step_success()
Logger->>Tracker: Calculate duration
Logger->>Logger: Emit success log with metrics
Script->>Logger: log_step_error()
Logger->>Tracker: Record error
Logger->>Logger: Emit error log with context
Sets up standardized logging for pipeline steps.
Features:
- Correlation ID generation
- Structured logging format
- Performance tracking
- Error handling
- Log level management
Logs the start of a pipeline step.
Logging Features:
- Step identification
- Input/output directory logging
- Verbosity level tracking
- Performance start time
- Resource usage monitoring
Logs successful completion of a pipeline step.
Success Features:
- Results summary
- Performance metrics
- Output file counts
- Processing statistics
- Success indicators
Logs errors during pipeline step execution.
Error Features:
- Error type identification
- Stack trace logging
- Error context preservation
- Recovery suggestions
- Error categorization
Logs warnings during pipeline step execution.
Warning Features:
- Warning message logging
- Context preservation
- Severity assessment
- Action recommendations
- Warning categorization
Standard argument parser with comprehensive pipeline support.
Features:
- Graceful degradation
- Standard argument sets
- Validation integration
- Help text generation
- Error handling
Parses arguments for specific pipeline steps with recovery for graceful degradation.
Parsing Features:
- Standard argument parsing
- Recovery argument handling
- Validation integration
- Error recovery
- Help text generation
Gets the output directory for a specific pipeline script.
Features:
- Standardized output paths
- Directory creation
- Path validation
- Error handling
- Configuration integration
Gets the pipeline configuration.
Configuration Features:
- Configuration loading
- Default value handling
- Validation integration
- Error handling
- Configuration merging
Ensures a directory exists, creating it if necessary.
Features:
- Directory creation
- Permission handling
- Error handling
- Path validation
- Success verification
Safely executes file operations with error handling.
Safety Features:
- Exception handling
- Rollback capabilities
- Error reporting
- Success verification
- Resource cleanup
Gets comprehensive information about a file.
Info Features:
- File size
- Modification time
- File type
- Permissions
- Content analysis
Validates a file path.
Validation Features:
- Path existence checking
- Permission validation
- Path format validation
- Error reporting
- Success verification
Validates configuration dictionaries.
Validation Features:
- Required key checking
- Type validation
- Value validation
- Error reporting
- Success verification
Formats duration in human-readable format.
Formatting Features:
- Time unit conversion
- Precision handling
- Readable output
- Error handling
- Success verification
Formats file size in human-readable format.
Formatting Features:
- Size unit conversion
- Precision handling
- Readable output
- Error handling
- Success verification
from utils import setup_step_logging, log_step_start, log_step_success, log_step_error
# Setup logging for a module
logger = setup_step_logging(__name__)
# Log step start
log_step_start("my_step", target_dir, output_dir, verbose)
try:
# Perform processing
results = perform_processing()
# Log success
log_step_success("my_step", results)
except Exception as e:
# Log error
log_step_error("my_step", e)
raisefrom utils.argument_utils import ArgumentParser
# Parse arguments for a specific step
args = ArgumentParser.parse_step_arguments("step_name")
# Access parsed arguments
target_dir = args.target_dir
output_dir = args.output_dir
verbose = args.verbosefrom utils import get_output_dir_for_script, get_pipeline_config
# Get output directory for current script
output_dir = get_output_dir_for_script("my_script.py")
# Get pipeline configuration
config = get_pipeline_config()
# Use configuration
verbose = config.get("verbose", False)
log_level = config.get("log_level", "INFO")from utils import ensure_directory_exists, safe_file_operation, get_file_info
# Ensure directory exists
success = ensure_directory_exists(Path("output/my_step/"))
# Safe file operation
def write_file(content, path):
with open(path, 'w') as f:
f.write(content)
result = safe_file_operation(write_file, "Hello World", Path("test.txt"))
# Get file information
file_info = get_file_info(Path("test.txt"))
print(f"File size: {file_info['size']}")
print(f"Modified: {file_info['modified']}")from utils import validate_path, validate_config
# Validate path
if validate_path(Path("input/"), must_exist=True):
print("Path is valid")
else:
print("Path is invalid")
# Validate configuration
config = {
"verbose": True,
"output_dir": "output/",
"log_level": "INFO"
}
required_keys = ["verbose", "output_dir"]
if validate_config(config, required_keys):
print("Configuration is valid")
else:
print("Configuration is invalid")from utils import format_duration, format_file_size
# Format duration
duration = format_duration(3661.5) # 1 hour, 1 minute, 1.5 seconds
print(duration)
# Format file size
size = format_file_size(1024 * 1024) # 1 MB
print(size)Every module should follow this pattern using utils:
# Standard imports
from utils import setup_step_logging, log_step_start, log_step_success, log_step_error
from pipeline import get_output_dir_for_script, get_pipeline_config
# Setup logging
logger = setup_step_logging(__name__)
# Main processing function
def process_my_module(target_dir: Path, output_dir: Path, verbose: bool = False, **kwargs) -> bool:
"""Main function for processing my module tasks."""
try:
log_step_start("my_module", target_dir, output_dir, verbose)
# Core processing logic here
results = perform_my_module_processing(target_dir, output_dir, verbose)
log_step_success("my_module", results)
return True
except Exception as e:
log_step_error("my_module", e)
return False# Standard argument parsing for pipeline steps
def parse_step_arguments(step_name):
"""Parse arguments for a specific pipeline step."""
from utils.argument_utils import ArgumentParser
return ArgumentParser.parse_step_arguments(step_name)# Logging configuration
logging_config = {
'log_level': 'INFO', # Log level
'log_format': 'structured', # Log format
'correlation_ids': True, # Enable correlation IDs
'performance_tracking': True, # Enable performance tracking
'error_reporting': True # Enable error reporting
}# Argument parsing configuration
parser_config = {
'fallback_enabled': True, # Enable recovery parsing
'validation_enabled': True, # Enable argument validation
'help_generation': True, # Enable help text generation
'error_handling': True # Enable error handling
}# Pipeline configuration
pipeline_config = {
'output_base_dir': 'output/', # Base output directory
'log_base_dir': 'logs/', # Base log directory
'temp_dir': 'temp/', # Temporary directory
'backup_enabled': True, # Enable backups
'cleanup_enabled': True # Enable cleanup
}# Handle logging failures gracefully
try:
logger = setup_step_logging(__name__)
except Exception as e:
# Recovery to basic logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)# Handle argument parsing failures gracefully
try:
args = ArgumentParser.parse_step_arguments("step_name")
except Exception as e:
# Recovery to basic argument parser
parser = argparse.ArgumentParser()
parser.add_argument("--target-dir", type=Path, required=True)
parser.add_argument("--output-dir", type=Path, required=True)
args = parser.parse_args()# Handle file operation failures gracefully
try:
success = safe_file_operation(write_file, content, path)
except Exception as e:
logger.error(f"File operation failed: {e}")
# Provide recovery or error reporting- Structured Logging: Use structured logging for better performance
- Async Logging: Use async logging for non-blocking operations
- Log Rotation: Implement log rotation to manage file sizes
- Performance Tracking: Track logging performance impact
- Caching: Cache parsed arguments for repeated access
- Lazy Parsing: Parse arguments only when needed
- Validation Optimization: Optimize argument validation
- Error Recovery: Implement efficient error recovery
- Batch Operations: Use batch operations for multiple files
- Async Operations: Use async operations for I/O intensive tasks
- Caching: Cache file information for repeated access
- Error Recovery: Implement efficient error recovery
# Test individual utility functions
def test_setup_step_logging():
logger = setup_step_logging("test_module")
assert logger is not None
assert logger.name == "test_module"# Test complete utility pipeline
def test_utility_pipeline():
# Test logging setup
logger = setup_step_logging("test_module")
# Test argument parsing
args = ArgumentParser.parse_step_arguments("step_name")
# Test file operations
success = ensure_directory_exists(Path("test_dir/"))
assert success# Test validation utilities
def test_validation_utilities():
# Test path validation
assert validate_path(Path("."), must_exist=True)
# Test config validation
config = {"key": "value"}
assert validate_config(config, ["key"])- pathlib: Path handling
- logging: Logging functionality
- argparse: Argument parsing
- json: JSON data handling
- time: Time utilities
- rich: Rich text formatting
- click: Advanced command line interface
- pydantic: Data validation
- structlog: Structured logging
- Setup Time: < 10ms for logger setup
- Log Write Time: < 1ms per log entry
- Memory Usage: ~5MB base logging overhead
- File I/O: Optimized for minimal disk impact
- Parse Time: < 5ms for standard arguments
- Validation Time: < 2ms per argument
- Memory Usage: ~2MB for argument parser
- Error Recovery: < 10ms for recovery parsing
- Directory Creation: < 50ms for standard directories
- File Operations: < 100ms for standard files
- Validation Time: < 5ms per file validation
- Error Recovery: < 20ms for error recovery
Error: Failed to setup logging - permission denied
Solution: Check log directory permissions and create if necessary
Error: Argument parsing failed - invalid argument type
Solution: Check argument types and provide proper fallbacks
Error: File operation failed - disk full
Solution: Check disk space and implement cleanup procedures
Error: Validation failed - invalid path format
Solution: Check path format and implement proper validation
# Enable debug mode for detailed utility information
import logging
logging.getLogger().setLevel(logging.DEBUG)- Advanced Logging: AI-powered log analysis and optimization
- Smart Argument Parsing: Context-aware argument parsing
- Intelligent File Operations: AI-powered file operation optimization
- Automated Testing: Automated utility testing and validation
- Advanced Caching: Advanced caching strategies
- Parallel Processing: Parallel utility operations
- Incremental Updates: Incremental utility updates
- Machine Learning: ML-based utility optimization
The Utils module provides core utilities used throughout the GNN pipeline, including unified logging, argument parsing, pipeline orchestration, and common helper functions. The module ensures consistency across all modules by providing standardized patterns for logging, argument handling, file operations, and validation. These utilities form the foundation for reliable and maintainable pipeline operations.
This module is part of the GeneralizedNotationNotation project. See the main repository for license and citation information.
- Project overview: ../../README.md
- Comprehensive docs: ../../DOCS.md
- Architecture guide: ../../ARCHITECTURE.md
- Pipeline details: ../../doc/pipeline/README.md