U
    &ºc§  ã                   @   s$   d Z ddlmZ G dd„ deƒZdS )z=PyTorch MarianMTModel model, ported from the Marian C++ repo.é    )ÚBartForConditionalGenerationc                   @   s   e Zd ZdZi Zdd„ ZdS )ÚMarianMTModeluÌ  
    Pytorch version of marian-nmt's transformer.h (c++). Designed for the OPUS-NMT translation checkpoints.
    Model API is identical to BartForConditionalGeneration.
    Available models are listed at `Model List <https://huggingface.co/models?search=Helsinki-NLP>`__

    Examples::

        from transformers import MarianTokenizer, MarianMTModel
        from typing import List
        src = 'fr'  # source language
        trg = 'en'  # target language
        sample_text = "oÃ¹ est l'arrÃªt de bus ?"
        mname = f'Helsinki-NLP/opus-mt-{src}-{trg}'

        model = MarianMTModel.from_pretrained(mname)
        tok = MarianTokenizer.from_pretrained(mname)
        batch = tok.prepare_translation_batch(src_texts=[sample_text])  # don't need tgt_text for inference
        gen = model.generate(**batch)  # for forward pass: model(**batch)
        words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)  # returns "Where is the the bus stop ?"

    c                 C   sD   t dƒ|d d …| jjf< ||d kr@| jjd k	r@|  || jj¡ |S )Nz-infé   )ÚfloatÚconfigZpad_token_idZeos_token_idZ_force_token_ids_generation)ÚselfZlogitsÚcur_lenÚ
max_length© r
   ú@/tmp/pip-unpacked-wheel-ymerj3tt/transformers/modeling_marian.pyÚprepare_logits_for_generation.   s    z+MarianMTModel.prepare_logits_for_generationN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zpretrained_model_archive_mapr   r
   r
   r
   r   r      s   r   N)r   Ztransformers.modeling_bartr   r   r
   r
   r
   r   Ú<module>   s   