# FlowMapEulerDiscreteScheduler

`FlowMapEulerDiscreteScheduler`, akış haritasıyla damıtılmış difüzyon modelleri için tasarlanmış Euler tarzı bir örnekleyicidir. Akış haritası modelleri, tutarlılık modellerindeki sabit $\mathbf{z}_t \to \mathbf{z}_0$ eşlemesinin aksine, keyfi aralıklı geçişleri $\mathbf{z}_t \to \mathbf{z}_r$ öğrenir. Adımın her iki ucu da çağrıcı tarafından sağlanır; bu da herhangi bir adımla örneklemeyi mümkün kılar: tek bir damıtılmış kontrol noktası, yeniden eğitim gerektirmeden 1, 2, 4, 8, 16... NFE değerlerinde değerlendirilebilir.

Zamanlayıcı, [AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation](https://huggingface.co/papers/2605.13724) makalesinde tanıtılmış olup `AnyFlowPipeline` ve `AnyFlowFARPipeline` entegrasyonlarıyla birlikte gelir; ancak AnyFlow'a özgü değildir — herhangi bir flow-map-distilled checkpoint bunu kullanabilir.

## FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]

#### diffusers.FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]

```python
diffusers.FlowMapEulerDiscreteScheduler(num_train_timesteps: int = 1000, shift: float = 1.0)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L42)

**Parametreler:**

num_train_timesteps (*int*, varsayılan 1000) : Altta yatan akış haritası modelinin eğitilmesinde kullanılan difüzyon adım sayısı.

shift (*float*, varsayılan 1.0) : Çıkarım zaman çizelgesine uygulanan çarpımsal zaman adımı kaydırması. `shift=1.0` kimlik dönüşümüdür; 1.0'dan büyük değerler, zaman çizelgesini sonraki adımlarda daha fazla gürültü azaltma yönüne iter (ör. `shift=5`, Wan2.1 varsayılanıyla eşleşir).

Akış haritası damıtılmış difüzyon modelleri için Euler tarzı örnekleyici.

Flow-map modelleri, tutarlılık modellerindeki sabit \\(z_t \to z_0\\) eşlemesinin aksine, keyfi aralıklı geçişleri \\(z_t \to z_r\\) öğrenir; bu sayede tek bir damıtılmış checkpoint, yeniden eğitim gerektirmeden 1, 2, 4, 8, ... NFE değerlerinde değerlendirilebilir. *step* metodu, örneği tahmin edilen hız boyunca *timestep* değerinden *r_timestep* değerine ilerletir.

Yuchao Gu, Guian Fang ve diğerleri tarafından [AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation](https://huggingface.co/papers/2605.13724) makalesinde tanıtıldı.

Bu zamanlayıcı, [*SchedulerMixin*] ve [*ConfigMixin*] sınıflarından devralır. Tüm zamanlayıcılar için uygulanan genel yöntemlerin (yükleme, kaydetme vb.) belgelerini üst sınıf dokümantasyonunda bulabilirsiniz.

#### apply_shift[[diffusers.FlowMapEulerDiscreteScheduler.apply_shift]]

```python
apply_shift(sigmas: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L117)

Yapılandırılmış kaydırma dönüşümünü bir sigma gerginliğine uygulayın.

#### index_for_timestep[[diffusers.FlowMapEulerDiscreteScheduler.index_for_timestep]]

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L207)

`timestep`'in mevcut zaman çizelgesindeki indeksini döndürür; zaman çizelgesi dışında ise `None` döndürür.

Arama, küçük bir fp toleransı ile `self.timesteps` üzerinden yapılır. Doğrusal `timesteps = sigmas * num_train_timesteps` ilişkisini varsaymadan karşılık gelen sigma değerini geri getirmek için kullanılır; böylece özel bir zaman çizelgesi (ör. doğrusal olmayan kaydırma, elle ayarlanmış timesteps) bile doğru şekilde çözümlenir.

#### scale_model_input[[diffusers.FlowMapEulerDiscreteScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, *args, **kwargs)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L99)

No-op kimlik ölçekleme. Diğer Diffusers zamanlayıcılarıyla API uyumluluğu için sağlanır.

#### scale_noise[[diffusers.FlowMapEulerDiscreteScheduler.scale_noise]]

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L103)

`timestep`'in normalize edilmiş değerine göre `sample`'ı `noise`'a doğru doğrusal olarak interpolasyon yapın.

#### set_begin_index[[diffusers.FlowMapEulerDiscreteScheduler.set_begin_index]]

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L94)

Zamanlayıcı için başlangıç indeksini ayarlar. Programın ortasından başlayan (ör. görüntüden görüntüye) iş akışları, dağıtımı sabitlemek için `set_timesteps` ile ilk `step` arasında bunu çağırır.

#### set_timesteps[[diffusers.FlowMapEulerDiscreteScheduler.set_timesteps]]

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L123)

**Parametreler:**

num_inference_steps (*int*, *opsiyonel*) : Çıkarım adım sayısı. `None` ise, `sigmas` veya `timesteps` parametresinin geçirilmesi gerekir.

device (*str* veya *torch.device*, *opsiyonel*) : `self.sigmas` / `self.timesteps` için hedef cihaz.

sigmas (*List[float]*, *isteğe bağlı*) : Uzunluğu `num_inference_steps` olan özel sigma zamanlaması. Son `0` sigma değeri otomatik olarak eklenir. Yapılandırılan `shift` değeri bunun üzerine uygulanır.

timesteps (*List[float]*, *isteğe bağlı*) : `num_inference_steps` uzunluğunda, `self.timesteps` ile aynı birimlerde (yani `num_train_timesteps` ile ölçeklenmiş) özel zaman adımı zamanlaması. İçeride sigmalara dönüştürülür. Hem `sigmas` hem de `timesteps` geçirilirse, uzunluklarının eşleşmesi gerekir.

Çıkarım zaman adımı zamanlamasını oluşturun.

İçsel olarak, `num_inference_steps + 1` uzunluğundaki `self.sigmas` değerlerini takip eder (varsayılan olarak `1.0`'dan `0.0`'a uygulanan yapılandırılmış kaydırma ile bir linspace); `self.timesteps`, `num_train_timesteps` ile ölçeklendirilmiş ilk `num_inference_steps` sigma değerlerini açığa çıkarır — yani her çıkarım adımı için bir zaman adımı, bu da [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) ile eşleşir. Son sigma (`0`), son adımın örtük r-ucudur ve `sigmas` / `timesteps` kullanıcı tarafından sağlandığında otomatik olarak eklenir.

#### adım[[diffusers.FlowMapEulerDiscreteScheduler.step]]

```python
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, r_timestep: typing.Union[float, torch.FloatTensor, NoneType] = None, return_dict: bool = True)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_flow_map_euler_discrete.py#L223)

**Parametreler:**

model_output (*torch.Tensor*) : Akış haritası modelinden doğrudan çıktı (tahmini ortalama hız).

timestep (*float* veya *torch.Tensor*) : `self.timesteps` ile aynı birimlerde kaynak zaman adımı `t`.

sample (*torch.Tensor*) : Mevcut örnek \\(z_t\\).

r_timestep (*float* veya *torch.Tensor*, *opsiyonel*) : Hedef zaman adımı `r`. `None` olduğunda, zaman çizelgesindeki bir sonraki zaman adımına varsayılan olarak ayarlanır; herhangi bir adımlı örneklemeler için açık bir değer geçin. `r_timestep == timestep` bir işlemdir (no-op).

return_dict (*bool*, varsayılan *True*) : Varsayılan olarak [*FlowMapEulerDiscreteSchedulerOutput*] döndürülüp döndürülmediğini veya düz bir tuple döndürülüp döndürülmediğini belirtir.

**Dönüş:** [*FlowMapEulerDiscreteSchedulerOutput*] veya *tuple*

`return_dict=True` olduğunda, `prev_sample` değeri \\(z_r\\) olan bir [*FlowMapEulerDiscreteSchedulerOutput*] döndürür. Aksi halde 1-tuple `(prev_sample,)` döndürür.

Modelin tahmin ettiği hıza göre `timestep`'ten `r_timestep`'e `sample` ilerletin.

Standart bir Euler zamanlayıcısından farklı olarak, aralığın her iki ucu da çağrıcı tarafından sağlanabilir; böylece herhangi bir adımlı örneklemeye olanak tanınır: tek bir model çağrısı, *t* değerinden herhangi bir seçilen hedef *r* değerine (tek seferlik üretim için *r=0* dahil) adım atabilir. `r_timestep` atlandığında, zaman çizelgesindeki bir sonraki zaman adımına varsayılan olarak ayarlanır (`FlowMatchEulerDiscreteScheduler` semantiğiyle uyumlu).

Dahili olarak kaynak ve hedef sigmalar, girdi adımlarını `num_train_timesteps` değerine bölmek yerine `index_for_timestep` üzerinden `self.sigmas` dizisine indekslenerek geri kazanılır; bu sayede adım / sigma ilişkisi doğrusal olmayan herhangi bir zaman çizelgesi (örneğin özel bir kaydırma) doğru kalır. Zaman çizelgesi dışındaki bir `r_timestep` için zamanlayıcı, zaman çizelgesi dışında herhangi bir adımda örneklemenin desteklenmeye devam etmesi amacıyla `r_timestep / num_train_timesteps` ifadesine geri döner.

