# FlowMatchEulerDiscreteScheduler

`FlowMatchEulerDiscreteScheduler` se basa en el muestreo por flow-matching introducido en [Stable Diffusion 3](https://huggingface.co/papers/2403.03206).

## FlowMatchEulerDiscreteScheduler[[diffusers.FlowMatchEulerDiscreteScheduler]]

#### diffusers.FlowMatchEulerDiscreteScheduler[[diffusers.FlowMatchEulerDiscreteScheduler]]

```python
diffusers.FlowMatchEulerDiscreteScheduler(num_train_timesteps: int = 1000, shift: float = 1.0, use_dynamic_shifting: bool = False, base_shift: float | None = 0.5, max_shift: float | None = 1.15, base_image_seq_len: int = 256, max_image_seq_len: int = 4096, invert_sigmas: bool = False, shift_terminal: float = None, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, time_shift_type: typing.Literal['exponential', 'linear'] = 'exponential', stochastic_sampling: bool = False)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L48)

**Parámetros:**

num_train_timesteps (`int`, por defecto 1000) : El número de pasos de difusión para entrenar el modelo.

shift (`float`, por defecto 1.0) : El valor de desplazamiento para la programación de pasos de tiempo.

use_dynamic_shifting (`bool`, predeterminado en False) : Si se aplica el desplazamiento de paso de tiempo en tiempo real en función de la resolución de la imagen.

base_shift (`float`, por defecto 0.5) : Valor para estabilizar la generación de imágenes. Aumentar `base_shift` reduce la variación y la imagen es más consistente con la salida deseada.

max_shift (`float`, por defecto 1.15) : Cambio de valor permitido para los vectores latentes. Aumentar `max_shift` fomenta más variación y la imagen puede resultar más exagerada o estilizada.

base_image_seq_len (`int`, por defecto 256) : La longitud de la secuencia de la imagen base.

max_image_seq_len (`int`, por defecto 4096) : La longitud máxima de la secuencia de imagen.

invert_sigmas (`bool`, por defecto False) : Si se deben invertir los sigmas.

shift_terminal (`float`, por defecto None) : El valor final del calendario de pasos temporales desplazados.

use_karras_sigmas (`bool`, predeterminado en False) : Si se deben usar sigmas de Karras para los tamaños de paso en el plan de ruido durante la muestreo.

use_exponential_sigmas (`bool`, predeterminado en False) : Si se deben usar sigmas exponenciales para los tamaños de paso en el plan de ruido durante la muestreo.

use_beta_sigmas (`bool`, predeterminado en False) : Si se deben usar sigmas beta para los tamaños de paso en el programa de ruido durante la muestreo.

time_shift_type (`str`, por defecto "exponential") : El tipo de desplazamiento de pasos de tiempo dependiente de la resolución dinámica que se debe aplicar. Puede ser "exponential" o "linear".

stochastic_sampling (`bool`, por defecto False) : Si se debe usar muestreo estocástico.

Euler scheduler.

Este modelo hereda de [SchedulerMixin](/docs/diffusers/main/es/api/schedulers/overview#diffusers.SchedulerMixin) y [ConfigMixin](/docs/diffusers/main/es/api/configuration#diffusers.ConfigMixin). Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los programadores, como la carga y el guardado.

#### index_for_timestep[[diffusers.FlowMatchEulerDiscreteScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.FloatTensor], schedule_timesteps: typing.Optional[torch.FloatTensor] = None)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L393)

**Parámetros:**

timestep (`float` o `torch.FloatTensor`) : El paso de tiempo para el que se busca el índice.

schedule_timesteps (`torch.FloatTensor`, *opcional*) : Los pasos de tiempo del calendario contra los que validar. Si es `None`, se utilizan los pasos de tiempo del programador.

**Devuelve:** `int`

El índice del paso de tiempo.

Obtén el índice para el paso de tiempo dado.

#### scale_noise[[diffusers.FlowMatchEulerDiscreteScheduler.scale_noise]]

```python
scale_noise(sample: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], noise: typing.Optional[torch.FloatTensor] = None)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L188)

**Parámetros:**

sample (`torch.FloatTensor`) : La muestra de entrada.

timestep (`torch.FloatTensor`) : El paso temporal actual en la cadena de difusión.

noise (`torch.FloatTensor`) : El tensor de ruido.

**Devuelve:** `torch.FloatTensor`

Una muestra de entrada escalada.

Proceso de avance en flow-matching

#### set_begin_index[[diffusers.FlowMatchEulerDiscreteScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L168)

**Parámetros:**

begin_index (`int`, por defecto `0`) : El índice inicial del programador.

Establece el índice inicial para el programador. Esta función debe ejecutarse desde la tubería antes de la inferencia.

#### set_shift[[diffusers.FlowMatchEulerDiscreteScheduler.set_shift]]

```python
set_shift(shift: float)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L178)

**Parámetros:**

shift (`float`) : El valor de desplazamiento que se debe establecer.

Establece el valor de desplazamiento para el programador.

#### set_timesteps[[diffusers.FlowMatchEulerDiscreteScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int | None = None, device: typing.Union[str, torch.device] = None, sigmas: list[float] | None = None, mu: float | None = None, timesteps: list[float] | None = None)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L283)

**Parámetros:**

num_inference_steps (`int`, *opcional*) : El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado.

device (`str` o `torch.device`, *opcional*) : El dispositivo al que deben moverse los pasos de tiempo. Si es `None`, los pasos de tiempo no se mueven.

sigmas (`list[float]`, *opcional*) : Valores personalizados para sigmas que se usarán en cada paso de difusión. Si es `None`, los sigmas se calculan automáticamente.

mu (`float`, *opcional*) : Determina la cantidad de desplazamiento aplicado a las sigmas al realizar el desplazamiento de pasos de tiempo dependiente de la resolución.

timesteps (`list[float]`, *opcional*) : Valores personalizados para los pasos de tiempo que se usarán en cada paso de difusión. Si es `None`, los pasos de tiempo se calculan automáticamente.

Establece los pasos discretos utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).

#### paso[[diffusers.FlowMatchEulerDiscreteScheduler.step]]

```python
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, per_token_timesteps: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L432)

**Parámetros:**

model_output (`torch.FloatTensor`) : La salida directa del modelo de difusión aprendido.

timestep (`float`) : El paso de tiempo discreto actual en la cadena de difusión.

sample (`torch.FloatTensor`) : Una instancia actual de una muestra creada por el proceso de difusión.

s_churn (`float`) --

s_tmin  (`float`) --

s_tmax  (`float`) --

s_noise (`float`, por defecto 1.0) : Factor de escala para el ruido añadido a la muestra.

generator (`torch.Generator`, *opcional*) : Un generador de números aleatorios.

per_token_timesteps (`torch.Tensor`, *opcional*) : Los pasos de tiempo para cada token en la muestra.

return_dict (`bool`, por defecto `True`) : Si se devuelve un `FlowMatchEulerDiscreteSchedulerOutput` o una tupla.

**Devuelve:** `FlowMatchEulerDiscreteSchedulerOutput` o `tuple`

If return_dict is `True`, `FlowMatchEulerDiscreteSchedulerOutput` is returned, otherwise a tuple is returned where the first element is the sample tensor.

Predice la muestra del paso de tiempo anterior invirtiendo el SDE. Esta función propaga el proceso de difusión desde las salidas del modelo aprendido (con mayor frecuencia, el ruido predicho).

#### stretch_shift_to_terminal[[diffusers.FlowMatchEulerDiscreteScheduler.stretch_shift_to_terminal]]

```python
stretch_shift_to_terminal(t: Tensor)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L262)

**Parámetros:**

t (`torch.Tensor`) : Un tensor de pasos de tiempo que se estirará y desplazará.

**Devuelve:** `torch.Tensor`

Un tensor de pasos de tiempo ajustados de modo que el valor final sea igual a `self.config.shift_terminal`.

Estira y desplaza la programación de pasos de tiempo para garantizar que termine en el valor de configuración `shift_terminal` configurado.

Referencia: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

#### time_shift[[diffusers.FlowMatchEulerDiscreteScheduler.time_shift]]

```python
time_shift(mu: float, sigma: float, t: Tensor)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_match_euler_discrete.py#L241)

**Parámetros:**

mu (`float`) : El parámetro mu para el desplazamiento en el tiempo.

sigma (`float`) : El parámetro sigma para el desplazamiento temporal.

t (`torch.Tensor`) : Los pasos de tiempo de entrada.

**Devuelve:** `torch.Tensor`

Los pasos de tiempo desplazados.

Aplicar el desplazamiento temporal a los sigmas.

