o
    Vù¡i™	  ã                   @   sP   d dl Zd dlmZmZ d dlmZmZmZ G dd„ de	ƒZ
G dd„ deƒZdS )é    N)ÚABCÚabstractmethod)ÚOptionalÚDictÚAnyc                   @   s   e Zd ZdZdS )ÚWatermarkingExceptionz8Exception raised for errors in the watermarking process.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úE/home/ubuntu/.local/lib/python3.10/site-packages/perth/watermarker.pyr      s    r   c                
   @   s‚   e Zd ZdZe		ddejdeej dedejfdd	„ƒZ	e		dd
ejdedee dejfdd„ƒZ
dejdedefdd„ZdS )ÚWatermarkerBasezá
    Base class for all audio watermarking algorithms.
    
    This abstract class defines the interface that all watermarking implementations
    must follow, providing methods for watermark application and extraction.
    NéD¬  ÚwavÚ	watermarkÚsample_rateÚreturnc                 K   ó   t ƒ ‚)a  
        Apply a watermark to an audio signal.
        
        Args:
            wav: Input audio signal as numpy array
            watermark: Optional watermark data to embed. If None, a default watermark may be generated.
            sample_rate: Sample rate of the audio signal in Hz
            **kwargs: Additional algorithm-specific parameters
            
        Returns:
            Watermarked audio signal as numpy array
            
        Raises:
            WatermarkingException: If watermarking fails
        ©ÚNotImplementedError)Úselfr   r   r   Úkwargsr   r   r   Úapply_watermark   ó   zWatermarkerBase.apply_watermarkÚwatermarked_wavÚwatermark_lengthc                 K   r   )a  
        Extract a watermark from a watermarked audio signal.
        
        Args:
            watermarked_wav: Watermarked audio signal as numpy array
            sample_rate: Sample rate of the audio signal in Hz
            watermark_length: Optional expected length of the watermark
            **kwargs: Additional algorithm-specific parameters
            
        Returns:
            Extracted watermark data as numpy array
            
        Raises:
            WatermarkingException: If watermark extraction fails
        r   )r   r   r   r   r   r   r   r   Úget_watermark'   r   zWatermarkerBase.get_watermarkc                 C   s   dS )a6  
        Verify if the audio is compatible with this watermarking method.
        
        Args:
            wav: Input audio signal as numpy array
            sample_rate: Sample rate of the audio signal in Hz
            
        Returns:
            True if the audio is compatible, False otherwise
        Tr   )r   r   r   r   r   r   Úverify_compatibility;   s   z$WatermarkerBase.verify_compatibility)Nr   )r   N)r   r	   r
   r   r   ÚnpÚndarrayr   Úintr   r   Úboolr   r   r   r   r   r      s&    ÿÿÿÿÿÿr   )Únumpyr   Úabcr   r   Útypingr   r   r   Ú	Exceptionr   r   r   r   r   r   Ú<module>   s
    