
    g                         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
e          ZdS )zProcessor class for Pop2Piano.    N)ListOptionalUnion   )BatchFeature)ProcessorMixin)BatchEncodingPaddingStrategyTruncationStrategy)
TensorTypec                       e Zd ZdZddgZdZdZ fdZ	 	 	 	 	 	 	 	 	 	 ddee	j
        ee         ee	j
                 f         deeee         f         dedee         deeef         deeeef         deeeef         dee         dee         dedeeef         fdZ	 ddededefdZed             Z fdZed             Z x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	tokenizerPop2PianoFeatureExtractorPop2PianoTokenizerc                 L    t                                          ||           d S N)super__init__)selfr   r   	__class__s      n/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/models/pop2piano/processing_pop2piano.pyr   zPop2PianoProcessor.__init__/   s$    *I66666    N   TFaudiosampling_ratesteps_per_beatresamplenotespadding
truncation
max_lengthpad_to_multiple_ofverbosereturnc           
          |||t          d          || | j        d||||d|}| | j        d|||||	|
d|}||S |||S |d         |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inputsencoded_token_idss                 r   __call__zPop2PianoProcessor.__call__2   s    . Mm3%-3  
 !:+T+ +-!	 
  F  . !%%#5! ! ! ! =M]m3$$ #4K"@F;Mr   feature_extractor_outputreturn_midic                 <    | j                             |||          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/   r0   )r   batch_decode)r   r(   r/   r0   s       r   r2   zPop2PianoProcessor.batch_decodel   s,     ~**:R`k + 
 
 	
r   c                     | j         j        }| j        j        }t          t                              ||z                       S r   )r   model_input_namesr   listdictfromkeys)r   tokenizer_input_namesfeature_extractor_input_namess      r   r4   z$Pop2PianoProcessor.model_input_names|   s:     $ @(,(>(P%DMM"7:W"WXXYYYr   c                     t           j                            |          rt          d| d          t          j        |d            t                      j        |fi |S )NzProvided path (z#) should be a directory, not a fileT)exist_ok)ospathisfiler*   makedirsr   save_pretrained)r   save_directoryr+   r   s      r   r@   z"Pop2PianoProcessor.save_pretrained   sh    7>>.)) 	db~bbbccc
NT2222&uww&~@@@@@r   c                 (     | j         |fi |} | | S r   )_get_arguments_from_pretrained)clspretrained_model_name_or_pathr+   argss       r   from_pretrainedz"Pop2PianoProcessor.from_pretrained   s*    1s12OZZSYZZsDzr   )
NNr   TNFNNNT)T)__name__
__module____qualname____doc__
attributesfeature_extractor_classtokenizer_classr   r   npndarrayr   floatintr   boolr   strr
   r   r   r	   r.   r2   propertyr4   r@   classmethodrG   __classcell__)r   s   @r   r   r      s         &{3J9*O7 7 7 7 7
 CG/3#')-5:;?$(,08 8RZed2:.>>?8 S$s)^,8 	8
 4.8 T:%&8 tS/128 $%7788 SM8 %SM8 8 
|]*	+8 8 8 8| !	
 
 #/
 	

 

 
 
 
  Z Z XZ
A A A A A   [    r   r   )rK   r<   typingr   r   r   numpyrO   feature_extraction_utilsr   processing_utilsr   tokenization_utilsr	   r
   r   utilsr   r   r)   r   r   <module>r^      s    % $ 				 ( ( ( ( ( ( ( ( ( (     4 4 4 4 4 4 . . . . . . T T T T T T T T T T      o o o o o o o o o or   