

"""simple docstring"""





from dataclasses import dataclass
from typing import Optional, Tuple, Union

import flax
import jax.numpy as jnp
from scipy import integrate

from ..configuration_utils import ConfigMixin, register_to_config
from .scheduling_utils_flax import (
    CommonSchedulerState,
    FlaxKarrasDiffusionSchedulers,
    FlaxSchedulerMixin,
    FlaxSchedulerOutput,
    broadcast_to_shape_from_left,
)

@flax.struct.dataclass
class     __a   :

   """simple docstring"""

   SCREAMING_SNAKE_CASE_						     =						42

   # setable values
   SCREAMING_SNAKE_CASE_						     =						42
   SCREAMING_SNAKE_CASE_						     =						42
   SCREAMING_SNAKE_CASE_						     =						42
   SCREAMING_SNAKE_CASE_						     =						None

   # running values
   SCREAMING_SNAKE_CASE_						     =						None






   @classmethod
   def    _lowerCAmelCase			(							cls     :					Union[str, Any]						,  lowercase_     :					Tuple						,  lowercase_     :					List[Any]						,  lowercase_     :					Union[str, Any]						,  lowercase_     :					Tuple						):
        return cls(common=lowerCamelCase__						,  init_noise_sigma=lowerCamelCase__						,  timesteps=lowerCamelCase__						,  sigmas=lowerCamelCase__						)



@dataclass
class     __a   (      _a    ):

   """simple docstring"""

   SCREAMING_SNAKE_CASE_						     =						42



class     __a   (      _a,    _a    ):

   """simple docstring"""

   SCREAMING_SNAKE_CASE_						     =						[e.name for e in FlaxKarrasDiffusionSchedulers]

   SCREAMING_SNAKE_CASE_						     =						42






   @property
   def    _lowerCAmelCase			(							self     :					Optional[Any]						):
        return True






   @register_to_config
   def __init__(							self     :					Tuple						,  lowercase_     :					Any = 1000						,  lowercase_     :					Any = 0.0_0_0_1						,  lowercase_     :					str = 0.0_2						,  lowercase_     :					List[str] = "linear"						,  lowercase_     :					Optional[int] = None						,  lowercase_     :					List[Any] = "epsilon"						,  lowercase_     :					str = jnp.floataa						,  ):
        UpperCamelCase__		:    Optional[Any]         =dtype






   def    _lowerCAmelCase			(							self     :					Optional[Any]						,  lowercase_     :					Optional[int] = None						):
        if common is None:
             UpperCamelCase__		:    Union[str, Any]         =CommonSchedulerState.create(self						)

        UpperCamelCase__		:    int         =jnp.arange(0						,  self.config.num_train_timesteps						).round()[::-1]
        UpperCamelCase__		:    Dict         =((1 - common.alphas_cumprod) / common.alphas_cumprod) ** 0.5

        # standard deviation of the initial noise distribution
        UpperCamelCase__		:    Optional[Any]         =sigmas.max()

        return LMSDiscreteSchedulerState.create(
            common=lowerCamelCase__						,  init_noise_sigma=lowerCamelCase__						,  timesteps=lowerCamelCase__						,  sigmas=lowerCamelCase__						,  )






   def    _lowerCAmelCase			(							self     :					str						,  lowercase_     :					Optional[Any]						,  lowercase_     :					Union[str, Any]						,  lowercase_     :					Any						):
        (UpperCamelCase__	)		:    Optional[Any]         =jnp.where(state.timesteps == timestep						,  size=1						)
        UpperCamelCase__		:    Optional[Any]         =step_index[0]

        UpperCamelCase__		:    Dict         =state.sigmas[step_index]
        UpperCamelCase__		:    Optional[Any]         =sample / ((sigma**2 + 1) ** 0.5)
        return sample






   def    _lowerCAmelCase			(							self     :					Any						,  lowercase_     :					List[str]						,  lowercase_     :					Any						,  lowercase_     :					Optional[int]						,  lowercase_     :					Tuple						):

        def lms_derivative(lowercase_     :					Optional[Any]						):
             UpperCamelCase__		:    Optional[Any]         =1.0
             for k in range(lowerCamelCase__						):
                  if current_order == k:
                       continue
                  prod *= (tau - state.sigmas[t - k]) / (state.sigmas[t - current_order] - state.sigmas[t - k])
             return prod

        UpperCamelCase__		:    Tuple         =integrate.quad(lowerCamelCase__						,  state.sigmas[t]						,  state.sigmas[t + 1]						,  epsrel=1e-4						)[0]

        return integrated_coeff






   def    _lowerCAmelCase			(							self     :					List[Any]						,  lowercase_     :					str						,  lowercase_     :					int						,  lowercase_     :					Tuple = ()						):
        UpperCamelCase__		:    int         =jnp.linspace(self.config.num_train_timesteps - 1						,  0						,  lowerCamelCase__						,  dtype=self.dtype						)

        UpperCamelCase__		:    Optional[Any]         =jnp.floor(lowerCamelCase__						).astype(jnp.intaa						)
        UpperCamelCase__		:    Union[str, Any]         =jnp.ceil(lowerCamelCase__						).astype(jnp.intaa						)

        UpperCamelCase__		:    List[str]         =jnp.mod(lowerCamelCase__						,  1.0						)

        UpperCamelCase__		:    Union[str, Any]         =((1 - state.common.alphas_cumprod) / state.common.alphas_cumprod) ** 0.5
        UpperCamelCase__		:    Union[str, Any]         =(1 - frac) * sigmas[low_idx] + frac * sigmas[high_idx]
        UpperCamelCase__		:    Optional[Any]         =jnp.concatenate([sigmas, jnp.array([0.0]						,  dtype=self.dtype						)]						)

        UpperCamelCase__		:    str         =timesteps.astype(jnp.intaa						)

        # initial running values
        UpperCamelCase__		:    Dict         =jnp.zeros((0,) + shape						,  dtype=self.dtype						)

        return state.replace(
            timesteps=lowerCamelCase__						,  sigmas=lowerCamelCase__						,  num_inference_steps=lowerCamelCase__						,  derivatives=lowerCamelCase__						,  )






   def    _lowerCAmelCase			(							self     :					Optional[int]						,  lowercase_     :					Optional[int]						,  lowercase_     :					Any						,  lowercase_     :					str						,  lowercase_     :					str						,  lowercase_     :					Any = 4						,  lowercase_     :					List[Any] = True						,  ):
        if state.num_inference_steps is None:
             raise ValueError(
                 '''Number of inference steps is \'None\', you need to run \'set_timesteps\' after creating the scheduler'''						)

        UpperCamelCase__		:    Optional[int]         =state.sigmas[timestep]

        # 1. compute predicted original sample (x_0) from sigma-scaled predicted noise
        if self.config.prediction_type == "epsilon":
             UpperCamelCase__		:    Union[str, Any]         =sample - sigma * model_output
        elif self.config.prediction_type == "v_prediction":
             # * c_out + input * c_skip
             UpperCamelCase__		:    Dict         =model_output * (-sigma / (sigma**2 + 1) ** 0.5) + (sample / (sigma**2 + 1))
        else:
             raise ValueError(
                 f'''prediction_type given as {self.config.prediction_type} must be one of `epsilon`, or `v_prediction`'''						)

        # 2. Convert to an ODE derivative
        UpperCamelCase__		:    Optional[int]         =(sample - pred_original_sample) / sigma
        UpperCamelCase__		:    List[Any]         =state.replace(derivatives=jnp.append(state.derivatives						,  lowerCamelCase__						)						)
        if len(state.derivatives						) > order:
             UpperCamelCase__		:    Tuple         =state.replace(derivatives=jnp.delete(state.derivatives						,  0						)						)

        # 3. Compute linear multistep coefficients
        UpperCamelCase__		:    Union[str, Any]         =min(timestep + 1						,  lowerCamelCase__						)
        UpperCamelCase__		:    Any         =[self.get_lms_coefficient(lowerCamelCase__						,  lowerCamelCase__						,  lowerCamelCase__						,  lowerCamelCase__						) for curr_order in range(lowerCamelCase__						)]

        # 4. Compute previous sample based on the derivatives path
        UpperCamelCase__		:    Optional[int]         =sample + sum(
            coeff * derivative for coeff, derivative in zip(lowerCamelCase__						,  reversed(state.derivatives						)						)						)

        if not return_dict:
             return (prev_sample, state)

        return FlaxLMSSchedulerOutput(prev_sample=lowerCamelCase__						,  state=lowerCamelCase__						)






   def    _lowerCAmelCase			(							self     :					Tuple						,  lowercase_     :					Any						,  lowercase_     :					Optional[int]						,  lowercase_     :					Any						,  lowercase_     :					Union[str, Any]						,  ):
        UpperCamelCase__		:    Tuple         =state.sigmas[timesteps].flatten()
        UpperCamelCase__		:    int         =broadcast_to_shape_from_left(lowerCamelCase__						,  noise.shape						)

        UpperCamelCase__		:    str         =original_samples + noise * sigma

        return noisy_samples






   def __len__(							self     :					Optional[Any]						):
        return self.config.num_train_timesteps





"""simple docstring"""





from collections import OrderedDict
from typing import Any, Mapping, Optional

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...file_utils import TensorType, is_torch_available
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import logging


_SCREAMING_SNAKE_CASE       :  Any        = logging.get_logger(__name__)

_SCREAMING_SNAKE_CASE       :  Optional[int]        = {
    """facebook/blenderbot-3B""": """https://huggingface.co/facebook/blenderbot-3B/resolve/main/config.json""",
    # See all Blenderbot models at https://huggingface.co/models?filter=blenderbot
}

class     __a   (      snake_case__    ):

			"""simple docstring"""

			SCREAMING_SNAKE_CASE_						     =						'blenderbot'
			SCREAMING_SNAKE_CASE_						     =						['past_key_values']
			SCREAMING_SNAKE_CASE_						     =						{'num_attention_heads': 'encoder_attention_heads', 'hidden_size': 'd_model'}






			def __init__(							self     :					Dict						,  lowercase_     :					Any=8008						,  lowercase_     :					Dict=128						,  lowercase_     :					Tuple=2						,  lowercase_     :					List[Any]=1_0240						,  lowercase_     :					Optional[int]=32						,  lowercase_     :					Optional[Any]=24						,  lowercase_     :					str=1_0240						,  lowercase_     :					Tuple=32						,  lowercase_     :					Optional[int]=0.0						,  lowercase_     :					Optional[int]=0.0						,  lowercase_     :					str=True						,  lowercase_     :					List[str]=True						,  lowercase_     :					Union[str, Any]="gelu"						,  lowercase_     :					List[str]=2560						,  lowercase_     :					Any=0.1						,  lowercase_     :					List[Any]=0.0						,  lowercase_     :					Any=0.0						,  lowercase_     :					Union[str, Any]=0.0_2						,  lowercase_     :					Any=1						,  lowercase_     :					Optional[int]=False						,  lowercase_     :					int=0						,  lowercase_     :					Optional[int]=1						,  lowercase_     :					Any=2						,  lowercase_     :					Any=3						,  lowercase_     :					Dict=2						,  **lowercase_     :					Optional[int]						,  ):
								UpperCamelCase__		:    int         =vocab_size
								UpperCamelCase__		:    List[Any]         =max_position_embeddings
								UpperCamelCase__		:    List[Any]         =d_model
								UpperCamelCase__		:    Union[str, Any]         =encoder_ffn_dim
								UpperCamelCase__		:    Optional[Any]         =encoder_layers
								UpperCamelCase__		:    List[str]         =encoder_attention_heads
								UpperCamelCase__		:    Optional[Any]         =decoder_ffn_dim
								UpperCamelCase__		:    Dict         =decoder_layers
								UpperCamelCase__		:    int         =decoder_attention_heads
								UpperCamelCase__		:    List[Any]         =dropout
								UpperCamelCase__		:    Optional[int]         =attention_dropout
								UpperCamelCase__		:    List[Any]         =activation_dropout
								UpperCamelCase__		:    Dict         =activation_function
								UpperCamelCase__		:    Optional[int]         =init_std
								UpperCamelCase__		:    Optional[int]         =encoder_layerdrop
								UpperCamelCase__		:    Tuple         =decoder_layerdrop
								UpperCamelCase__		:    List[str]         =use_cache
								UpperCamelCase__		:    int         =encoder_layers
								UpperCamelCase__		:    str         =scale_embedding  # scale factor will be sqrt(d_model) if True

								super().__init__(
								    pad_token_id=lowercase_						,  bos_token_id=lowercase_						,  eos_token_id=lowercase_						,  is_encoder_decoder=lowercase_						,  decoder_start_token_id=lowercase_						,  encoder_no_repeat_ngram_size=lowercase_						,  forced_eos_token_id=lowercase_						,  **lowercase_						,  )



class     __a   (      snake_case__    ):

			"""simple docstring"""

			@property
			def    _lowerCAmelCase			(							self     :					List[Any]						):
								if self.task in ["default", "seq2seq-lm"]:
													UpperCamelCase__		:    List[str]         =OrderedDict(
													    [
													        ('''input_ids''', {0: '''batch''', 1: '''encoder_sequence'''}),
													        ('''attention_mask''', {0: '''batch''', 1: '''encoder_sequence'''}),
													    ]						)
													if self.use_past:
																		UpperCamelCase__		:    Any         ={0: '''batch'''}
																		UpperCamelCase__		:    Optional[Any]         ={0: '''batch''', 1: '''past_decoder_sequence + sequence'''}
													else:
																		UpperCamelCase__		:    Optional[Any]         ={0: '''batch''', 1: '''decoder_sequence'''}
																		UpperCamelCase__		:    List[str]         ={0: '''batch''', 1: '''decoder_sequence'''}
													if self.use_past:
																		self.fill_with_past_key_values_(lowercase_						,  direction='''inputs'''						)
								elif self.task == "causal-lm":
													UpperCamelCase__		:    Optional[Any]         =OrderedDict(
													    [
													        ('''input_ids''', {0: '''batch''', 1: '''encoder_sequence'''}),
													        ('''attention_mask''', {0: '''batch''', 1: '''encoder_sequence'''}),
													    ]						)
													if self.use_past:
																		UpperCamelCase__  ,			UpperCamelCase__		:    str         =self.num_layers
																		for i in range(lowercase_						):
																							UpperCamelCase__		:    Optional[int]         ={0: '''batch''', 2: '''past_sequence + sequence'''}
																							UpperCamelCase__		:    Dict         ={0: '''batch''', 2: '''past_sequence + sequence'''}
								else:
													UpperCamelCase__		:    Any         =OrderedDict(
													    [
													        ('''input_ids''', {0: '''batch''', 1: '''encoder_sequence'''}),
													        ('''attention_mask''', {0: '''batch''', 1: '''encoder_sequence'''}),
													        ('''decoder_input_ids''', {0: '''batch''', 1: '''decoder_sequence'''}),
													        ('''decoder_attention_mask''', {0: '''batch''', 1: '''decoder_sequence'''}),
													    ]						)

								return common_inputs






			@property
			# Copied from transformers.models.bart.configuration_bart.BartOnnxConfig.outputs
			def    _lowerCAmelCase			(							self     :					Tuple						):
								if self.task in ["default", "seq2seq-lm"]:
													UpperCamelCase__		:    List[Any]         =super().outputs
								else:
													UpperCamelCase__		:    List[str]         =super(lowercase_						,  self						).outputs
													if self.use_past:
																		UpperCamelCase__  ,			UpperCamelCase__		:    int         =self.num_layers
																		for i in range(lowercase_						):
																							UpperCamelCase__		:    Dict         ={0: '''batch''', 2: '''past_sequence + sequence'''}
																							UpperCamelCase__		:    Dict         ={0: '''batch''', 2: '''past_sequence + sequence'''}
								return common_outputs






			def    _lowerCAmelCase			(							self     :					Optional[int]						,  lowercase_     :					PreTrainedTokenizer						,  lowercase_     :					int = -1						,  lowercase_     :					int = -1						,  lowercase_     :					bool = False						,  lowercase_     :					Optional[TensorType] = None						,  ):
								UpperCamelCase__		:    List[Any]         =self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
								    lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						)
								# Generate decoder inputs
								UpperCamelCase__		:    List[Any]         =seq_length if not self.use_past else 1
								UpperCamelCase__		:    int         =self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
								    lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						)
								UpperCamelCase__		:    str         ={f'''decoder_{name}''': tensor for name, tensor in decoder_inputs.items()}
								UpperCamelCase__		:    str         =dict(**lowercase_						,  **lowercase_						)

								if self.use_past:
													if not is_torch_available():
																		raise ValueError('''Cannot generate dummy past_keys inputs without PyTorch installed.'''						)
													else:
																		import torch
													UpperCamelCase__  ,			UpperCamelCase__		:    Optional[int]         =common_inputs['''input_ids'''].shape
													UpperCamelCase__		:    Any         =common_inputs['''decoder_input_ids'''].shape[1]
													UpperCamelCase__  ,			UpperCamelCase__		:    Union[str, Any]         =self.num_attention_heads
													UpperCamelCase__		:    Any         =(
													    batch,
													    num_encoder_attention_heads,
													    encoder_seq_length,
													    self._config.hidden_size // num_encoder_attention_heads,
													)
													UpperCamelCase__		:    Tuple         =decoder_seq_length
													UpperCamelCase__		:    Optional[Any]         =(
													    batch,
													    num_decoder_attention_heads,
													    decoder_past_length,
													    self._config.hidden_size // num_decoder_attention_heads,
													)
													UpperCamelCase__		:    Union[str, Any]         =torch.cat(
													    [common_inputs['''decoder_attention_mask'''], torch.ones(lowercase_						,  lowercase_						)]						,  dim=1						)
													UpperCamelCase__		:    Any         =[]
													UpperCamelCase__  ,			UpperCamelCase__		:    Union[str, Any]         =self.num_layers

													for _ in range(lowercase_						):
																		common_inputs["past_key_values"].append(
																		    (
																		        torch.zeros(lowercase_						),
																		        torch.zeros(lowercase_						),
																		        torch.zeros(lowercase_						),
																		        torch.zeros(lowercase_						),
																		    )						)
								return common_inputs






			def    _lowerCAmelCase			(							self     :					Tuple						,  lowercase_     :					PreTrainedTokenizer						,  lowercase_     :					int = -1						,  lowercase_     :					int = -1						,  lowercase_     :					bool = False						,  lowercase_     :					Optional[TensorType] = None						,  ):
								UpperCamelCase__		:    str         =self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
								    lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						)

								if self.use_past:
													if not is_torch_available():
																		raise ValueError('''Cannot generate dummy past_keys inputs without PyTorch installed.'''						)
													else:
																		import torch
													UpperCamelCase__  ,			UpperCamelCase__		:    Tuple         =common_inputs['''input_ids'''].shape
													UpperCamelCase__		:    List[Any]         =seqlen
													UpperCamelCase__  ,			UpperCamelCase__		:    Any         =self.num_layers
													UpperCamelCase__  ,			UpperCamelCase__		:    Tuple         =self.num_attention_heads
													UpperCamelCase__		:    Optional[int]         =(
													    batch,
													    num_encoder_attention_heads,
													    past_key_values_length,
													    self._config.hidden_size // num_encoder_attention_heads,
													)
													UpperCamelCase__		:    Union[str, Any]         =common_inputs['''attention_mask'''].dtype
													UpperCamelCase__		:    int         =torch.cat(
													    [common_inputs['''attention_mask'''], torch.ones(lowercase_						,  lowercase_						,  dtype=lowercase_						)]						,  dim=1						)
													UpperCamelCase__		:    List[str]         =[
													    (torch.zeros(lowercase_						), torch.zeros(lowercase_						)) for _ in range(lowercase_						)
													]
								return common_inputs






			def    _lowerCAmelCase			(							self     :					Tuple						,  lowercase_     :					PreTrainedTokenizer						,  lowercase_     :					int = -1						,  lowercase_     :					int = -1						,  lowercase_     :					bool = False						,  lowercase_     :					Optional[TensorType] = None						,  ):
								# Copied from OnnxConfig.generate_dummy_inputs
								# Did not use super(OnnxConfigWithPast, self).generate_dummy_inputs for code clarity.
								# If dynamic axis (-1) we forward with a fixed dimension of 2 samples to avoid optimizations made by ONNX
								UpperCamelCase__		:    str         =compute_effective_axis_dimension(
								    lowercase_						,  fixed_dimension=OnnxConfig.default_fixed_batch						,  num_token_to_add=0						)

								# If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
								UpperCamelCase__		:    Union[str, Any]         =tokenizer.num_special_tokens_to_add(lowercase_						)
								UpperCamelCase__		:    str         =compute_effective_axis_dimension(
								    lowercase_						,  fixed_dimension=OnnxConfig.default_fixed_sequence						,  num_token_to_add=lowercase_						)

								# Generate dummy inputs according to compute batch and sequence
								UpperCamelCase__		:    Union[str, Any]         =[''' '''.join([tokenizer.unk_token]						) * seq_length] * batch_size
								UpperCamelCase__		:    Tuple         =dict(tokenizer(lowercase_						,  return_tensors=lowercase_						)						)
								return common_inputs






			def    _lowerCAmelCase			(							self     :					int						,  lowercase_     :					PreTrainedTokenizer						,  lowercase_     :					int = -1						,  lowercase_     :					int = -1						,  lowercase_     :					bool = False						,  lowercase_     :					Optional[TensorType] = None						,  ):
								if self.task in ["default", "seq2seq-lm"]:
													UpperCamelCase__		:    Tuple         =self._generate_dummy_inputs_for_default_and_seqaseq_lm(
													    lowercase_						,  batch_size=lowercase_						,  seq_length=lowercase_						,  is_pair=lowercase_						,  framework=lowercase_						)

								elif self.task == "causal-lm":
													UpperCamelCase__		:    Union[str, Any]         =self._generate_dummy_inputs_for_causal_lm(
													    lowercase_						,  batch_size=lowercase_						,  seq_length=lowercase_						,  is_pair=lowercase_						,  framework=lowercase_						)
								else:
													UpperCamelCase__		:    Optional[int]         =self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
													    lowercase_						,  batch_size=lowercase_						,  seq_length=lowercase_						,  is_pair=lowercase_						,  framework=lowercase_						)

								return common_inputs






			def    _lowerCAmelCase			(							self     :					List[str]						,  lowercase_     :					int						,  lowercase_     :					Union[str, Any]						,  lowercase_     :					Optional[Any]						,  lowercase_     :					List[Any]						):
								if self.task in ["default", "seq2seq-lm"]:
													UpperCamelCase__		:    Optional[int]         =super()._flatten_past_key_values_(lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						)
								else:
													UpperCamelCase__		:    Optional[int]         =super(lowercase_						,  self						)._flatten_past_key_values_(
													    lowercase_						,  lowercase_						,  lowercase_						,  lowercase_						)






			def    _lowerCAmelCase			(							self     :					List[str]						,  lowercase_     :					Mapping[str, Mapping[int, str]]						,  lowercase_     :					str						):
								if direction not in ["inputs", "outputs"]:
													raise ValueError(f'''direction must either be "inputs" or "outputs", but {direction} was given'''						)

								UpperCamelCase__		:    Optional[int]         ='''past_key_values''' if direction == '''inputs''' else '''present'''
								UpperCamelCase__  ,			UpperCamelCase__		:    Optional[int]         =self.num_layers

								UpperCamelCase__		:    List[str]         ='''past_encoder_sequence'''
								UpperCamelCase__		:    Optional[int]         ='''past_decoder_sequence''' if direction == '''inputs''' else '''past_decoder_sequence + sequence'''

								for i in range(lowercase_						):
													UpperCamelCase__		:    Tuple         ={0: '''batch''', 2: decoder_sequence}
													UpperCamelCase__		:    Union[str, Any]         ={0: '''batch''', 2: decoder_sequence}
													UpperCamelCase__		:    str         ={0: '''batch''', 2: encoder_sequence}
													UpperCamelCase__		:    List[Any]         ={0: '''batch''', 2: encoder_sequence}


