






"""simple docstring"""



import torch
from torch import nn

from ...configuration_utils import ConfigMixin, register_to_config
from ...models import ModelMixin

class        a     (   lowerCAmelCase_,				lowerCAmelCase_	):







    @register_to_config
    def __init__(			self							,		*,
        _lowerCamelCase = 4							,		_lowerCamelCase = 7_6_8							,		_lowerCamelCase							,		_lowerCamelCase							,		):
      super().__init__()

      lowercase							    =       nn.Parameter(torch.zeros(snake_case_       )       )

      # parameters for additional clip time embeddings
      lowercase							    =       nn.Linear(snake_case_							,		snake_case_       )
      lowercase							    =       nn.Linear(snake_case_							,		snake_case_       )

      # parameters for encoder hidden states
      lowercase							    =       clip_extra_context_tokens
      lowercase							    =       nn.Linear(
          snake_case_							,		self.clip_extra_context_tokens * cross_attention_dim       )
      lowercase							    =       nn.Linear(snake_case_							,		snake_case_       )
      lowercase							    =       nn.LayerNorm(snake_case_       )







    def 			UpperCamelCase_      (			self							,		*, _lowerCamelCase							,		_lowerCamelCase							,		_lowerCamelCase							,		_lowerCamelCase       ):
      if do_classifier_free_guidance:
        # Add the classifier free guidance embeddings to the image embeddings
        lowercase							    =       image_embeddings.shape[0]
        lowercase							    =       self.learned_classifier_free_guidance_embeddings.unsqueeze(0       )
        lowercase							    =       classifier_free_guidance_embeddings.expand(
            snake_case_							,		-1       )
        lowercase							    =       torch.cat([classifier_free_guidance_embeddings, image_embeddings]							,		dim=0       )

      # The image embeddings batch size and the text embeddings batch size are equal
      assert image_embeddings.shape[0] == prompt_embeds.shape[0]

      lowercase							    =       prompt_embeds.shape[0]

      # "Specifically, we modify the architecture described in Nichol et al. (2021) by projecting and
      # adding CLIP embeddings to the existing timestep embedding, ...
      lowercase							    =       self.embedding_proj(snake_case_       )
      lowercase							    =       self.clip_image_embeddings_project_to_time_embeddings(snake_case_       )
      lowercase							    =       time_projected_image_embeddings + time_projected_prompt_embeds

      # ... and by projecting CLIP embeddings into four
      # extra tokens of context that are concatenated to the sequence of outputs from the GLIDE text encoder"
      lowercase							    =       self.clip_extra_context_tokens_proj(snake_case_       )
      lowercase							    =       clip_extra_context_tokens.reshape(snake_case_							,		-1							,		self.clip_extra_context_tokens       )
      lowercase							    =       clip_extra_context_tokens.permute(0							,		2							,		1       )

      lowercase							    =       self.encoder_hidden_states_proj(snake_case_       )
      lowercase							    =       self.text_encoder_hidden_states_norm(snake_case_       )
      lowercase							    =       torch.cat([clip_extra_context_tokens, text_encoder_hidden_states]							,		dim=1       )

      return text_encoder_hidden_states, additive_clip_time_embeddings









'''simple docstring'''




def 	UpperCAmelCase_							(					__lowercase							:      str       )		->       list:


     '''simple docstring'''



     if n_term == "":
          return []
     _UpperCAmelCase     							=   []
     for temp in range(int(__lowercase       )       ):
          series.append(f'1/{temp + 1}' if series else "1"       )
     return series


if __name__ == "__main__":
  __SCREAMING_SNAKE_CASE     :str       =				input('''Enter the last number (nth term) of the Harmonic Series''')
  print('''Formula of Harmonic Series => 1+1/2+1/3 ..... 1/n''')
  print(harmonic_series(nth_term))




