"""Application-specific exception hierarchy.""" class ApplicationError(Exception): """Base class for expected application errors.""" class ConfigurationError(ApplicationError): """Raised when configuration is missing or invalid.""" class CameraOpenError(ApplicationError): """Raised when an input source cannot be opened.""" class FrameReadError(ApplicationError): """Raised after repeated camera frame read failures.""" class ModelLoadError(ApplicationError): """Raised when the YOLO model cannot be loaded.""" class VideoWriterError(ApplicationError): """Raised when an output video writer cannot be opened.""" class TrackerError(ApplicationError): """Raised when the external tracker cannot be initialized or updated.""" class TrackManagementError(ApplicationError): """Raised when accumulated track state is inconsistent.""" class TrackingLogError(ApplicationError): """Raised when tracking CSV files cannot be written.""" class FaceProcessingError(ApplicationError): """Raised when the face backend cannot be initialized.""" class FaceLogError(ApplicationError): """Raised when face CSV logs cannot be opened or written.""" class TurnLogError(ApplicationError): """Raised when turn-analysis CSV files cannot be opened or written.""" class VoiceLogError(ApplicationError): """Raised when voice-prompt CSV files cannot be opened or written.""" class PersonStateLogError(ApplicationError): """Raised when integrated person-state CSV files cannot be written.""" class UnifiedLogError(ApplicationError): """Raised when Phase 7 unified CSV files cannot be written."""