# États

Les blocs s'appuient sur les structures de données [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) et [BlockState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) pour communiquer et partager des données.

| État | Description |
|-------|-------------|
| [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) | Conserve les données globales nécessaires à l'exécution d'un pipeline et permet aux blocs de lire et de mettre à jour ces données. |
| [BlockState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) | Permet à chaque bloc d'effectuer son calcul avec les données nécessaires de `inputs`|

Ce guide explique le fonctionnement des états et la manière dont ils relient les blocs.

## PipelineState

Le [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) est un conteneur d'état global pour tous les blocs. Il maintient l'état d'exécution complet du pipeline et offre une méthode structurée pour que les blocs lisent et écrivent dans des données partagées.

[PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) stocke toutes les données dans un dictionnaire `values`, qui est un état **mutable** contenant les valeurs d’entrée fournies par l’utilisateur ainsi que les valeurs de sortie intermédiaires générées par les blocs. Si un bloc modifie une `input`, la modification sera reflétée dans le dictionnaire `values` après l’appel de `set_block_state`.

```py
PipelineState(
  values={
    'prompt': 'a cat'
    'guidance_scale': 7.0
    'num_inference_steps': 25
    'prompt_embeds': Tensor(dtype=torch.float32, shape=torch.Size([1, 1, 1, 1]))
    'negative_prompt_embeds': None
  },
)
```

## BlockState

Le [BlockState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) est une vue locale des variables pertinentes dont un bloc individuel a besoin depuis [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) pour effectuer ses calculs.

Accédez à ces variables directement en tant qu'attributs, comme `block_state.image`.

```py
BlockState(
    image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)
```

Lorsque la méthode `__call__` d'un bloc est exécutée, elle récupère le `BlockState` via `self.get_block_state(state)`, effectue ses opérations, puis met à jour [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) avec `self.set_block_state(state, block_state)`.

```py
def __call__(self, components, state):
    # retrieve BlockState
    block_state = self.get_block_state(state)

    # computation logic on inputs

    # update PipelineState
    self.set_block_state(state, block_state)
    return components, state
```

## Interaction avec l'état

L'interaction entre [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) et [BlockState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) est définie par les `inputs` et les `intermediate_outputs` d'un bloc.

- `inputs`, un bloc peut modifier une entrée - comme `block_state.image` - et ce changement peut être propagé globalement à [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) en appelant `set_block_state`.
- `intermediate_outputs` est une nouvelle variable créée par un bloc. Elle est ajoutée au dictionnaire `values` de l’objet [PipelineState](/docs/diffusers/v0.43.0/fr/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) et est disponible pour les blocs suivants ou accessible par les utilisateurs en tant que sortie finale du pipeline.

