U
    9%e                     @   st   d Z ddlZddlmZmZmZ ddlZddlm	Z	 ddl
mZ ddlmZmZmZ ddlmZ G d	d
 d
eZdS )z Processor class for Pop2Piano.    N)ListOptionalUnion   )BatchFeature)ProcessorMixin)BatchEncodingPaddingStrategyTruncationStrategy)
TensorTypec                       s   e Zd ZdZddgZdZdZ fddZdee	j
ee ee	j
 f eeee f eee eeef eeeef eeeef ee ee eeeef dddZdeeedddZedd Z fddZedd Z  ZS )Pop2PianoProcessora  
    Constructs an Pop2Piano processor which wraps a Pop2Piano Feature Extractor and Pop2Piano Tokenizer into a single
    processor.

    [`Pop2PianoProcessor`] offers all the functionalities of [`Pop2PianoFeatureExtractor`] and [`Pop2PianoTokenizer`].
    See the docstring of [`~Pop2PianoProcessor.__call__`] and [`~Pop2PianoProcessor.decode`] for more information.

    Args:
        feature_extractor (`Pop2PianoFeatureExtractor`):
            An instance of [`Pop2PianoFeatureExtractor`]. The feature extractor is a required input.
        tokenizer (`Pop2PianoTokenizer`):
            An instance of ['Pop2PianoTokenizer`]. The tokenizer is a required input.
    feature_extractor	tokenizerZPop2PianoFeatureExtractorZPop2PianoTokenizerc                    s   t  || d S N)super__init__)selfr   r   	__class__ q/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/transformers/models/pop2piano/processing_pop2piano.pyr   .   s    zPop2PianoProcessor.__init__N   TF)audiosampling_ratesteps_per_beatresamplenotespadding
truncation
max_lengthpad_to_multiple_ofverbosereturnc              	   K   s   |dkr |dkr |dkr t d|dk	rJ|dk	rJ| jf ||||d|}|dk	rp| jf |||||	|
d|}|dkr||S |dks|dkr|S |d |d< |S dS )a"  
        This method uses [`Pop2PianoFeatureExtractor.__call__`] method to prepare log-mel-spectrograms for the model,
        and [`Pop2PianoTokenizer.__call__`] to prepare token_ids from notes.

        Please refer to the docstring of the above two methods for more information.
        Nz{You have to specify at least audios and sampling_rate in order to use feature extractor or notes to use the tokenizer part.)r   r   r   r   )r   r   r   r   r    r!   	token_ids)
ValueErrorr   r   )r   r   r   r   r   r   r   r   r   r    r!   kwargsinputsZencoded_token_idsr   r   r   __call__1   s<    
zPop2PianoProcessor.__call__)feature_extractor_outputreturn_midir"   c                 C   s   | j j|||dS )z
        This method uses [`Pop2PianoTokenizer.batch_decode`] method to convert model generated token_ids to midi_notes.

        Please refer to the docstring of the above two methods for more information.
        )r#   r(   r)   )r   batch_decode)r   r#   r(   r)   r   r   r   r*   k   s
      zPop2PianoProcessor.batch_decodec                 C   s"   | j j}| jj}tt|| S r   )r   model_input_namesr   listdictfromkeys)r   Ztokenizer_input_namesZfeature_extractor_input_namesr   r   r   r+   {   s    z$Pop2PianoProcessor.model_input_namesc                    s:   t j|rtd| dt j|dd t j|f|S )NzProvided path (z#) should be a directory, not a fileT)exist_ok)ospathisfiler$   makedirsr   save_pretrained)r   Zsave_directoryr%   r   r   r   r4      s    z"Pop2PianoProcessor.save_pretrainedc                 K   s   | j |f|}| | S r   )Z_get_arguments_from_pretrained)clsZpretrained_model_name_or_pathr%   argsr   r   r   from_pretrained   s    z"Pop2PianoProcessor.from_pretrained)
NNr   TNFNNNT)T)__name__
__module____qualname____doc__
attributesZfeature_extractor_classZtokenizer_classr   r   npZndarrayr   floatintr   boolr   strr	   r
   r   r   r'   r*   propertyr+   r4   classmethodr7   __classcell__r   r   r   r   r      sN             

> 
r   )r;   r0   typingr   r   r   numpyr=   Zfeature_extraction_utilsr   Zprocessing_utilsr   Ztokenization_utilsr   r	   r
   utilsr   r   r   r   r   r   <module>   s   