o
    mi                     @   s|   d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ G d
d de	ZdS )z0Base class of espeak backends for the phonemizer    N)Logger)OptionalUnionPattern)BaseBackend)EspeakWrapper)
get_logger)Punctuation)	Separatorc                       s   e Zd ZdZ			ddedeeeef  dedee	 f fdd	Z
ed
d Zedd ZedefddZedefddZedd Zejdededededef
ddZ  ZS )BaseEspeakBackendzAbstract espeak backend for the phonemizer

    Base class of the concrete backends Espeak and EspeakMbrola. It provides
    facilities to find espeak library and read espeak version.

    NFlanguagepunctuation_markspreserve_punctuationloggerc                    s2   t  j||||d t | _| jd| jj d S )N)r   r   r   z	loaded %s)super__init__r   Z_espeakr   debugZlibrary_path)selfr   r   r   r   	__class__ X/home/kim/smarthome/.venv/lib/python3.10/site-packages/phonemizer/backend/espeak/base.pyr   #   s   zBaseEspeakBackend.__init__c                 C   s   t | dS )ab  Sets the espeak backend to use `library`

        If this is not set, the backend uses the default espeak shared library
        from the system installation.

        Parameters
        ----------
        library (str or None) : the path to the espeak shared library to use as
            backend. Set `library` to None to restore the default.

        N)r   set_library)clslibraryr   r   r   r   1   s   zBaseEspeakBackend.set_libraryc                 C   s   t  S )a  Returns the espeak library used as backend

        The following precedence rule applies for library lookup:

        1. As specified by BaseEspeakBackend.set_library()
        2. Or as specified by the environment variable
           PHONEMIZER_ESPEAK_LIBRARY
        3. Or the default espeak library found on the system

        Raises
        ------
        RuntimeError if the espeak library cannot be found or if the
            environment variable PHONEMIZER_ESPEAK_LIBRARY is set to a
            non-readable file

        )r   r   r   r   r   r   r   @   s   zBaseEspeakBackend.libraryreturnc                 C   s"   zt   W dS  ty   Y dS w )NFT)r   RuntimeErrorr   r   r   r   is_availableT   s   zBaseEspeakBackend.is_availablec                 C   s   |   dkS )z0Returns True if using espeak-ng, False otherwise)   1   )versionr   r   r   r   is_espeak_ng\   s   zBaseEspeakBackend.is_espeak_ngc                 C   s   t  jS )zEspeak version as a tuple (major, minor, patch)

        Raises
        ------
        RuntimeError if BaseEspeakBackend.is_available() is False or if the
            version cannot be extracted for some reason.

        )r   r!   r   r   r   r   r!   b   s   
zBaseEspeakBackend.versionlinenum	separatorstripc                 C   s   d S )Nr   )r   r#   r$   r%   r&   r   r   r   _postprocess_linen   s   z#BaseEspeakBackend._postprocess_line)NFN)__name__
__module____qualname____doc__strr   r   r   boolr   r   classmethodr   r   r   r"   r!   abcabstractmethodintr
   r'   __classcell__r   r   r   r   r      s<    



r   )r+   r/   loggingr   typingr   r   r   Zphonemizer.backend.baser   Z!phonemizer.backend.espeak.wrapperr   Zphonemizer.loggerr   Zphonemizer.punctuationr	   Zphonemizer.separatorr
   r   r   r   r   r   <module>   s   