





import torch
from torch import nn

from ...configuration_utils import ConfigMixin, register_to_config
from ...models import ModelMixin
class     SCREAMING_SNAKE_CASE       (UpperCAmelCase      ,     UpperCAmelCase				):


   @register_to_config
   def __init__(   self      :    str      ,					*,
       a      :    int = 4      ,					a      :    int = 768      ,					a      :    int      ,					a      :    str      ,					)->       Any:





     """simple docstring"""







     super().__init__()

     lowercase__           =  nn.Parameter(torch.zeros(a	)	)

     # parameters for additional clip time embeddings
     lowercase__           =  nn.Linear(a      ,					a	)
     lowercase__           =  nn.Linear(a      ,					a	)

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


   def 	SCREAMING_SNAKE_CASE_							(   self      :    List[Any]      ,					*, a      :    List[str]      ,					a      :    str      ,					a      :    Tuple      ,					a      :    Union[str, Any]	)->       List[Any]:





     """simple docstring"""







     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(
           a      ,					-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(a	)
     lowercase__           =  self.clip_image_embeddings_project_to_time_embeddings(a	)
     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(a	)
     lowercase__           =  clip_extra_context_tokens.reshape(a      ,					-1      ,					self.clip_extra_context_tokens	)
     lowercase__           =  clip_extra_context_tokens.permute(0      ,					2      ,					1	)

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

     return text_encoder_hidden_states, additive_clip_time_embeddings







from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching




def       __UpperCamelCase  ()    ->       str:
  import os as original_os
  from os import path as original_path
  from os import rename as original_rename
  from os.path import dirname as original_dirname
  from os.path import join as original_join

  assert _test_patching.os is original_os
  assert _test_patching.path is original_path
  assert _test_patching.join is original_join

  assert _test_patching.renamed_os is original_os
  assert _test_patching.renamed_path is original_path
  assert _test_patching.renamed_join is original_join

  lowercase__           =  '__test_patch_submodule_mock__'
  with patch_submodule(_test_patching		,						'os.path.join'		,						_SCREAMING_SNAKE_CASE		):
    # Every way to access os.path.join must be patched, and the rest must stay untouched

    # check os.path.join
    assert isinstance(_test_patching.os		,						_PatchedModuleObj		)
    assert isinstance(_test_patching.os.path		,						_PatchedModuleObj		)
    assert _test_patching.os.path.join is mock

    # check path.join
    assert isinstance(_test_patching.path		,						_PatchedModuleObj		)
    assert _test_patching.path.join is mock

    # check join
    assert _test_patching.join is mock

    # check that the other attributes are untouched
    assert _test_patching.os.rename is original_rename
    assert _test_patching.path.dirname is original_dirname
    assert _test_patching.os.path.dirname is original_dirname

    # Even renamed modules or objects must be patched

    # check renamed_os.path.join
    assert isinstance(_test_patching.renamed_os		,						_PatchedModuleObj		)
    assert isinstance(_test_patching.renamed_os.path		,						_PatchedModuleObj		)
    assert _test_patching.renamed_os.path.join is mock

    # check renamed_path.join
    assert isinstance(_test_patching.renamed_path		,						_PatchedModuleObj		)
    assert _test_patching.renamed_path.join is mock

    # check renamed_join
    assert _test_patching.renamed_join is mock

    # check that the other attributes are untouched
    assert _test_patching.renamed_os.rename is original_rename
    assert _test_patching.renamed_path.dirname is original_dirname
    assert _test_patching.renamed_os.path.dirname is original_dirname

  # check that everthing is back to normal when the patch is over

  assert _test_patching.os is original_os
  assert _test_patching.path is original_path
  assert _test_patching.join is original_join

  assert _test_patching.renamed_os is original_os
  assert _test_patching.renamed_path is original_path
  assert _test_patching.renamed_join is original_join




def       __UpperCamelCase  ()    ->       Any:
  assert _test_patching.open is open

  lowercase__           =  '__test_patch_submodule_builtin_mock__'
  # _test_patching has "open" in its globals
  assert _test_patching.open is open
  with patch_submodule(_test_patching		,						'open'		,						_SCREAMING_SNAKE_CASE		):
    assert _test_patching.open is mock

  # check that everthing is back to normal when the patch is over

  assert _test_patching.open is open




def       __UpperCamelCase  ()    ->       List[str]:
  # pandas.read_csv is not present in _test_patching
  lowercase__           =  '__test_patch_submodule_missing_mock__'
  with patch_submodule(_test_patching		,						'pandas.read_csv'		,						_SCREAMING_SNAKE_CASE		):
    pass




def       __UpperCamelCase  ()    ->       List[str]:
  # builtin should always be mocked even if they're not in the globals
  # in case they're loaded at one point
  lowercase__           =  '__test_patch_submodule_missing_builtin_mock__'
  # _test_patching doesn't have "len" in its globals
  assert getattr(_test_patching		,						'len'		,						_SCREAMING_SNAKE_CASE		) is None
  with patch_submodule(_test_patching		,						'len'		,						_SCREAMING_SNAKE_CASE		):
    assert _test_patching.len is mock
  assert _test_patching.len is len




def       __UpperCamelCase  ()    ->       List[str]:
  lowercase__           =  '__test_patch_submodule_start_and_stop_mock__'
  lowercase__           =  patch_submodule(_test_patching		,						'open'		,						_SCREAMING_SNAKE_CASE		)
  assert _test_patching.open is open
  patch.start()
  assert _test_patching.open is mock
  patch.stop()
  assert _test_patching.open is open




def       __UpperCamelCase  ()    ->       Optional[int]:
  from os import rename as original_rename
  from os.path import dirname as original_dirname
  from os.path import join as original_join

  lowercase__           =  '__test_patch_submodule_successive_join__'
  lowercase__           =  '__test_patch_submodule_successive_dirname__'
  lowercase__           =  '__test_patch_submodule_successive_rename__'
  assert _test_patching.os.path.join is original_join
  assert _test_patching.os.path.dirname is original_dirname
  assert _test_patching.os.rename is original_rename

  with patch_submodule(_test_patching		,						'os.path.join'		,						_SCREAMING_SNAKE_CASE		):
    with patch_submodule(_test_patching		,						'os.rename'		,						_SCREAMING_SNAKE_CASE		):
      with patch_submodule(_test_patching		,						'os.path.dirname'		,						_SCREAMING_SNAKE_CASE		):
        assert _test_patching.os.path.join is mock_join
        assert _test_patching.os.path.dirname is mock_dirname
        assert _test_patching.os.rename is mock_rename

    # try another order
  with patch_submodule(_test_patching		,						'os.rename'		,						_SCREAMING_SNAKE_CASE		):
    with patch_submodule(_test_patching		,						'os.path.join'		,						_SCREAMING_SNAKE_CASE		):
      with patch_submodule(_test_patching		,						'os.path.dirname'		,						_SCREAMING_SNAKE_CASE		):
        assert _test_patching.os.path.join is mock_join
        assert _test_patching.os.path.dirname is mock_dirname
        assert _test_patching.os.rename is mock_rename

  assert _test_patching.os.path.join is original_join
  assert _test_patching.os.path.dirname is original_dirname
  assert _test_patching.os.rename is original_rename




def       __UpperCamelCase  ()    ->       Optional[Any]:
  lowercase__           =  '__test_patch_submodule_doesnt_exist_mock__'
  with patch_submodule(_test_patching		,						'__module_that_doesn_exist__.__attribute_that_doesn_exist__'		,						_SCREAMING_SNAKE_CASE		):
    pass
  with patch_submodule(_test_patching		,						'os.__attribute_that_doesn_exist__'		,						_SCREAMING_SNAKE_CASE		):
    pass


