
    /;ji	                     j    d dl Zd dlmZmZ d dlmZmZmZ  G d de	          Z
 G d de          ZdS )    N)ABCabstractmethod)OptionalDictAnyc                       e Zd ZdZdS )WatermarkingExceptionz8Exception raised for errors in the watermarking process.N)__name__
__module____qualname____doc__     K/root/voice-cloning/.venv/lib/python3.11/site-packages/perth/watermarker.pyr	   r	      s        BBDr   r	   c            
           e Zd ZdZe	 	 ddej        deej                 dedej        fd            Z	e	 	 dd	ej        ded
ee         dej        fd            Z
dej        dedef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.
    ND  wav	watermarksample_ratereturnc                     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   kwargss        r   apply_watermarkzWatermarkerBase.apply_watermark       $ "###r   watermarked_wavwatermark_lengthc                     t                      )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   s        r   get_watermarkzWatermarkerBase.get_watermark'   r   r   c                     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   s      r   verify_compatibilityz$WatermarkerBase.verify_compatibility;   s	     tr   )Nr   )r   N)r
   r   r   r   r   npndarrayr   intr   r"   boolr$   r   r   r   r   r      s          QU+0$ $2: $(2::N $%($?Az$ $ $ ^$& LQ8<$ $RZ $c $(0$KM:$ $ $ ^$&
        r   r   )numpyr%   abcr   r   typingr   r   r   	Exceptionr	   r   r   r   r   <module>r-      s        # # # # # # # # & & & & & & & & & &	 	 	 	 	I 	 	 	
; ; ; ; ;c ; ; ; ; ;r   