
    wi=                         d dl mZmZmZmZmZmZmZ d dlZd dl	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ d	d
lmZmZ dZ G d de          ZdS )    )AnyCallableDictListOptionalTupleUnionN)CLIPTextModelWithProjectionCLIPTokenizer   )VaeImageProcessor)UVit2DModelVQModel)AmusedScheduler)replace_example_docstring   )DiffusionPipelineImagePipelineOutputa{  
    Examples:
        ```py
        >>> import torch
        >>> from diffusers import AmusedPipeline

        >>> pipe = AmusedPipeline.from_pretrained("amused/amused-512", variant="fp16", torch_dtype=torch.float16)
        >>> pipe = pipe.to("cuda")

        >>> prompt = "a photo of an astronaut riding a horse on mars"
        >>> image = pipe(prompt).images[0]
        ```
c            /           e Zd ZU eed<   eed<   eed<   eed<   eed<   e	ed<   dZ
dedededede	f
 fdZ ej                     ee          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'deeee         ef                  dee         dee         dededeeeee         f                  dee         deej                 deej                 deej                 deej                 deej                 deej                 ded eeeeej        gd	f                  d!ed"eeeef                  d#ed$eeef         d%eeeeef         ee         f         f(d&                        Z xZS )(AmusedPipelineimage_processorvqvae	tokenizertext_encodertransformer	schedulerz text_encoder->transformer->vqvaec                    t                                                       |                     |||||           dt          | j        j        j                  dz
  z  | _        t          | j        d          | _	        d S )N)r   r   r   r   r   r      F)vae_scale_factordo_normalize)
super__init__register_moduleslenr   configblock_out_channelsr   r   r   )selfr   r   r   r   r   	__class__s         z/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/diffusers/pipelines/amused/pipeline_amused.pyr"   zAmusedPipeline.__init__4   s     	%# 	 	
 	
 	
 !"c$**;*N&O&ORS&S T0$BWfklll    N         $@r   pilT   r   r   r   r   promptheightwidthnum_inference_stepsguidance_scalenegative_promptnum_images_per_prompt	generatorlatentsprompt_embedsencoder_hidden_statesnegative_prompt_embedsnegative_encoder_hidden_statesreturn_dictcallbackcallback_stepscross_attention_kwargs"micro_conditioning_aesthetic_scoremicro_conditioning_crop_coordtemperaturec           	      ^   |
||
|t          d          ||||t          d          ||
||
t          d          t          |t                    r|g}|t          |          }n|
j        d         }||z  }|| j        j        j        | j        z  }|| j        j        j        | j        z  }|
m| 	                    |ddd| j	        j
        	          j                            | j                  }|                     |dd
          }|j        }
|j        d         }|
                    |d          }
|                    |dd          }|dk    r||dgt          |          z  }t          |t                    r|g}| 	                    |ddd| j	        j
        	          j                            | j                  }|                     |dd
          }|j        }|j        d         }|                    |d          }|                    |dd          }t%          j        ||
g          }
t%          j        ||g          }t%          j        |||d         |d         |g| j        |j                  }|                    d          }|                    |dk    rd|z  n|d          }||| j        z  || j        z  f}|	6t%          j        || j        j        j        t$          j        | j                  }	| j                            ||| j                   t          | j        j                  || j        j        z  z
  }|                     |          5 }tA          | j        j                  D ]\  }}|dk    rt%          j!        |	gdz            }n|	}|                     |||
||          } |dk    r#| "                    d          \  }!}"|!||"|!z
  z  z   } | j        #                    | ||	|          j$        }	|t          | j        j                  dz
  k    s|dz   |k    r[|dz   | j        j        z  dk    rE|%                                 |/||z  dk    r&|tM          | j        dd          z  }# ||#||	           	 ddd           n# 1 swxY w Y   |dk    r|	}$n| j'        j        t$          j(        k    o| j'        j        j)        }%|%r| j'        *                                 | j'        +                    |	d||| j        z  || j        z  | j'        j        j,        f          j-        .                    dd          }$| j/        0                    |$|          }$|%r| j'        1                                 | 2                                 |s|$fS tg          |$          S )an  
        The call function to the pipeline for generation.

        Args:
            prompt (`str` or `List[str]`, *optional*):
                The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
            height (`int`, *optional*, defaults to `self.transformer.config.sample_size * self.vae_scale_factor`):
                The height in pixels of the generated image.
            width (`int`, *optional*, defaults to `self.unet.config.sample_size * self.vae_scale_factor`):
                The width in pixels of the generated image.
            num_inference_steps (`int`, *optional*, defaults to 16):
                The number of denoising steps. More denoising steps usually lead to a higher quality image at the
                expense of slower inference.
            guidance_scale (`float`, *optional*, defaults to 10.0):
                A higher guidance scale value encourages the model to generate images closely linked to the text
                `prompt` at the expense of lower image quality. Guidance scale is enabled when `guidance_scale > 1`.
            negative_prompt (`str` or `List[str]`, *optional*):
                The prompt or prompts to guide what to not include in image generation. If not defined, you need to
                pass `negative_prompt_embeds` instead. Ignored when not using guidance (`guidance_scale < 1`).
            num_images_per_prompt (`int`, *optional*, defaults to 1):
                The number of images to generate per prompt.
            generator (`torch.Generator`, *optional*):
                A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
                generation deterministic.
            latents (`torch.IntTensor`, *optional*):
                Pre-generated tokens representing latent vectors in `self.vqvae`, to be used as inputs for image
                gneration. If not provided, the starting latents will be completely masked.
            prompt_embeds (`torch.Tensor`, *optional*):
                Pre-generated text embeddings. Can be used to easily tweak text inputs (prompt weighting). If not
                provided, text embeddings are generated from the `prompt` input argument. A single vector from the
                pooled and projected final hidden states.
            encoder_hidden_states (`torch.Tensor`, *optional*):
                Pre-generated penultimate hidden states from the text encoder providing additional text conditioning.
            negative_prompt_embeds (`torch.Tensor`, *optional*):
                Pre-generated negative text embeddings. Can be used to easily tweak text inputs (prompt weighting). If
                not provided, `negative_prompt_embeds` are generated from the `negative_prompt` input argument.
            negative_encoder_hidden_states (`torch.Tensor`, *optional*):
                Analogous to `encoder_hidden_states` for the positive prompt.
            output_type (`str`, *optional*, defaults to `"pil"`):
                The output format of the generated image. Choose between `PIL.Image` or `np.array`.
            return_dict (`bool`, *optional*, defaults to `True`):
                Whether or not to return a [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] instead of a
                plain tuple.
            callback (`Callable`, *optional*):
                A function that calls every `callback_steps` steps during inference. The function is called with the
                following arguments: `callback(step: int, timestep: int, latents: torch.Tensor)`.
            callback_steps (`int`, *optional*, defaults to 1):
                The frequency at which the `callback` function is called. If not specified, the callback is called at
                every step.
            cross_attention_kwargs (`dict`, *optional*):
                A kwargs dictionary that if specified is passed along to the [`AttentionProcessor`] as defined in
                [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
            micro_conditioning_aesthetic_score (`int`, *optional*, defaults to 6):
                The targeted aesthetic score according to the laion aesthetic classifier. See
                https://laion.ai/blog/laion-aesthetics/ and the micro-conditioning section of
                https://arxiv.org/abs/2307.01952.
            micro_conditioning_crop_coord (`Tuple[int]`, *optional*, defaults to (0, 0)):
                The targeted height, width crop coordinates. See the micro-conditioning section of
                https://arxiv.org/abs/2307.01952.
            temperature (`Union[int, Tuple[int, int], List[int]]`, *optional*, defaults to (2, 0)):
                Configures the temperature scheduler on `self.scheduler` see `AmusedScheduler#set_timesteps`.

        Examples:

        Returns:
            [`~pipelines.pipeline_utils.ImagePipelineOutput`] or `tuple`:
                If `return_dict` is `True`, [`~pipelines.pipeline_utils.ImagePipelineOutput`] is returned, otherwise a
                `tuple` is returned where the first element is a list with the generated images.
        NzGpass either both `prompt_embeds` and `encoder_hidden_states` or neitherzXpass either both `negatve_prompt_embeds` and `negative_encoder_hidden_states` or neitherz,pass only one of `prompt` or `prompt_embeds`r   pt
max_lengthT)return_tensorspadding
truncationrG   )r>   output_hidden_statesr   g      ? )devicedtyper   )rO   rN   )total)micro_condspooled_text_embr;   rA   )model_outputtimestepsampler8   orderlatent)force_not_quantizeshape)4
ValueError
isinstancestrr$   rZ   r   r%   sample_sizer   r   model_max_length	input_idsto_execution_devicer   text_embedshidden_statesrepeattorchconcattensorrO   	unsqueezeexpandfullr   mask_token_idlongset_timesteps	timestepsrW   progress_bar	enumeratecatchunkstepprev_sampleupdategetattrr   float16force_upcastfloatdecodelatent_channelsrV   clipr   postprocesshalfmaybe_free_model_hooksr   )&r'   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   output_typer>   r?   r@   rA   rB   rC   rD   
batch_sizer`   outputsrR   rZ   num_warmup_stepsrp   irU   model_inputrT   uncond_logitscond_logitsstep_idxoutputneeds_upcastings&                                         r)   __call__zAmusedPipeline.__call__H   s   ~ %*?*G!&;&Gfggg".3Q3Y"*/M/Yj   N}4&:LQ^QjKLLLfc"" 	XFVJJ&,Q/J"77
>%,84;PPF=$+7$:OOE #$>: '   4122  ''	tZ^'__G#/M$+$9"$=!%,,-BAFF 5 < <=RTUWX Y YC%-"*')dS[[&8Oos33 8'6&7O NN##'(##~> +   BBt566  ++I4^b+cc)0)<&181Fr1J.%;%B%BCXZ[%\%\"-K-R-RShjkmn-o-o*!L*@-)PQQM$)L2PRg1h$i$i! l-a0-a02 )'-

 

 

 "++A..!((>C;O;OZU_acddVt'<<etG\>\]?jt~,:%*UYUk  G 	$$%8+tG]^^^t~788;NQUQ_Qe;ee%899  	>\()ABB > >8!C''"')WIM":":KK")K#// +$1*?+A  0     "C''1=1C1CA1F1F.M;#0>[S`E`3a#aL.--!-%"'	 .  
   DN455999U...AET^=Q3QUV3V3V '')))+N0Ba0G0G#$(K(K#K 8W===?> 	>  	>  	>  	>  	>  	>  	>  	>  	>  	>  	>  	>  	>  	>  	>D (""FF"j.%-?bDJDUDbO #
  """Z&&#'d33T22J%5	 ' 	 	 TT!QZZ  )55fkJJF "
!!!##%%% 	9"6***s   $D-RR"%R")NNNr+   r,   Nr   NNNNNNr-   TNr   Nr.   r/   r0   ) __name__
__module____qualname__r   __annotations__r   r   r
   r   r   model_cpu_offload_seqr"   rf   no_gradr   EXAMPLE_DOC_STRINGr   r	   r   r]   intrz   	Generator	IntTensorTensorboolr   r   r   r   r   __classcell__)r(   s   @r)   r   r   *   s        &&&&NNN---->mm !m 2	m
 !m #m m m m m m( U]__122 37 $##% $;?/0/3-1048<9=AE GK;?239?>D-~+ ~+tCy#~./~+ ~+ }	~+
 !~+ ~+ "%T#Y"78~+  (}~+ EO,~+ %/*~+  -~+  (5~+ !) 6~+ )1(>~+  !~+" 8S#u|$<d$BCD#~+$ %~+& !)c3h 8'~+( -0)~+* (-S#X+~+, 3c3hc:;-~+ ~+ ~+ 32 _~+ ~+ ~+ ~+ ~+r*   r   )typingr   r   r   r   r   r   r	   rf   transformersr
   r   r   r   modelsr   r   
schedulersr   utilsr   pipeline_utilsr   r   r   r    r*   r)   <module>r      s   E D D D D D D D D D D D D D D D D D  C C C C C C C C 0 0 0 0 0 0 * * * * * * * * ) ) ) ) ) ) . . . . . . C C C C C C C C ^+ ^+ ^+ ^+ ^+& ^+ ^+ ^+ ^+ ^+r*   