import gc
import unittest

from parameterized import parameterized

from diffusers import FlaxUNetaDConditionModel
from diffusers.utils import is_flax_available
from diffusers.utils.testing_utils import load_hf_numpy, require_flax, slow


if is_flax_available():
       import jax
       import jax.numpy as jnp


@slow
@require_flax
class 			UpperCAmelCase__    (		unittest.TestCase					):



  """simple docstring"""






  def 	_UpperCAmelCase				(				self:			Dict				,				__lowerCAmelCase:			List[Any]				,				__lowerCAmelCase:			str   ) -> Union[str, Any]:




    '''simple docstring'''




    return F'''gaussian_noise_s={seed}_shape={"_".join([str(__lowerCAmelCase   ) for s in shape]   )}.npy'''






  def 	_UpperCAmelCase				(				self:			Optional[int]   ) -> str:




    '''simple docstring'''




    super().tearDown()
    gc.collect()






  def 	_UpperCAmelCase				(				self:			Tuple				,				__lowerCAmelCase:			Optional[Any]=0				,				__lowerCAmelCase:			List[Any]=(4, 4, 64, 64)				,				__lowerCAmelCase:			Dict=False   ) -> Optional[Any]:




    '''simple docstring'''




    __UpperCAmelCase						    =       jnp.bfloataa if fpaa else jnp.floataa
    __UpperCAmelCase						    =       jnp.array(load_hf_numpy(self.get_file_format(__lowerCAmelCase				,				__lowerCAmelCase   )   )				,				dtype=__lowerCAmelCase   )
    return image






  def 	_UpperCAmelCase				(				self:			int				,				__lowerCAmelCase:			Union[str, Any]=False				,				__lowerCAmelCase:			List[str]="CompVis/stable-diffusion-v1-4"   ) -> List[str]:




    '''simple docstring'''




    __UpperCAmelCase						    =       jnp.bfloataa if fpaa else jnp.floataa
    __UpperCAmelCase						    =       "bf16" if fpaa else None

    __UpperCAmelCase    ,		__UpperCAmelCase						    =       FlaxUNetaDConditionModel.from_pretrained(
        __lowerCAmelCase				,				subfolder="unet"				,				dtype=__lowerCAmelCase				,				revision=__lowerCAmelCase   )
    return model, params






  def 	_UpperCAmelCase				(				self:			Optional[int]				,				__lowerCAmelCase:			Dict=0				,				__lowerCAmelCase:			Union[str, Any]=(4, 77, 768)				,				__lowerCAmelCase:			List[str]=False   ) -> int:




    '''simple docstring'''




    __UpperCAmelCase						    =       jnp.bfloataa if fpaa else jnp.floataa
    __UpperCAmelCase						    =       jnp.array(load_hf_numpy(self.get_file_format(__lowerCAmelCase				,				__lowerCAmelCase   )   )				,				dtype=__lowerCAmelCase   )
    return hidden_states






  @parameterized.expand(
      [
          # fmt: off
          [83, 4, [-0.2323, -0.1304, 0.0813, -0.3093, -0.0919, -0.1571, -0.1125, -0.5806]],
          [17, 0.55, [-0.0831, -0.2443, 0.0901, -0.0919, 0.3396, 0.0103, -0.3743, 0.0701]],
          [8, 0.89, [-0.4863, 0.0859, 0.0875, -0.1658, 0.9199, -0.0114, 0.4839, 0.4639]],
          [3, 1_000, [-0.5649, 0.2402, -0.5518, 0.1248, 1.1328, -0.2443, -0.0325, -1.0078]],
          # fmt: on
      ]   )
  def 	_UpperCAmelCase				(				self:			List[str]				,				__lowerCAmelCase:			Tuple				,				__lowerCAmelCase:			Union[str, Any]				,				__lowerCAmelCase:			Optional[Any]   ) -> Optional[Any]:




    '''simple docstring'''




    __UpperCAmelCase    ,		__UpperCAmelCase						    =       self.get_unet_model(model_id="CompVis/stable-diffusion-v1-4"				,				fpaa=__lowerCAmelCase   )
    __UpperCAmelCase						    =       self.get_latents(__lowerCAmelCase				,				fpaa=__lowerCAmelCase   )
    __UpperCAmelCase						    =       self.get_encoder_hidden_states(__lowerCAmelCase				,				fpaa=__lowerCAmelCase   )

    __UpperCAmelCase						    =       model.apply(
        {"params": params}				,				__lowerCAmelCase				,				jnp.array(__lowerCAmelCase				,				dtype=jnp.intaa   )				,				encoder_hidden_states=__lowerCAmelCase				,				).sample

    assert sample.shape == latents.shape

    __UpperCAmelCase						    =       jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())   )				,				dtype=jnp.floataa   )
    __UpperCAmelCase						    =       jnp.array(__lowerCAmelCase				,				dtype=jnp.floataa   )

    # Found torch (float16) and flax (bfloat16) outputs to be within this tolerance, in the same hardware
    assert jnp.allclose(__lowerCAmelCase				,				__lowerCAmelCase				,				atol=1E-2   )






  @parameterized.expand(
      [
          # fmt: off
          [83, 4, [0.1514, 0.0807, 0.1624, 0.1016, -0.1896, 0.0263, 0.0677, 0.2310]],
          [17, 0.55, [0.1164, -0.0216, 0.0170, 0.1589, -0.3120, 0.1005, -0.0581, -0.1458]],
          [8, 0.89, [-0.1758, -0.0169, 0.1004, -0.1411, 0.1312, 0.1103, -0.1996, 0.2139]],
          [3, 1_000, [0.1214, 0.0352, -0.0731, -0.1562, -0.0994, -0.0906, -0.2340, -0.0539]],
          # fmt: on
      ]   )
  def 	_UpperCAmelCase				(				self:			Union[str, Any]				,				__lowerCAmelCase:			Tuple				,				__lowerCAmelCase:			Union[str, Any]				,				__lowerCAmelCase:			Optional[Any]   ) -> Any:




    '''simple docstring'''




    __UpperCAmelCase    ,		__UpperCAmelCase						    =       self.get_unet_model(model_id="stabilityai/stable-diffusion-2"				,				fpaa=__lowerCAmelCase   )
    __UpperCAmelCase						    =       self.get_latents(__lowerCAmelCase				,				shape=(4, 4, 96, 96)				,				fpaa=__lowerCAmelCase   )
    __UpperCAmelCase						    =       self.get_encoder_hidden_states(__lowerCAmelCase				,				shape=(4, 77, 1_024)				,				fpaa=__lowerCAmelCase   )

    __UpperCAmelCase						    =       model.apply(
        {"params": params}				,				__lowerCAmelCase				,				jnp.array(__lowerCAmelCase				,				dtype=jnp.intaa   )				,				encoder_hidden_states=__lowerCAmelCase				,				).sample

    assert sample.shape == latents.shape

    __UpperCAmelCase						    =       jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())   )				,				dtype=jnp.floataa   )
    __UpperCAmelCase						    =       jnp.array(__lowerCAmelCase				,				dtype=jnp.floataa   )

    # Found torch (float16) and flax (bfloat16) outputs to be within this tolerance, on the same hardware
    assert jnp.allclose(__lowerCAmelCase				,				__lowerCAmelCase				,				atol=1E-2   )




from datetime import datetime

import requests




def       __lowerCAmelCase      (						A_   : str					)    ->  bytes:
  __UpperCAmelCase						    =       "https://downloadgram.net/wp-json/wppress/video-downloader/video?url="
  __UpperCAmelCase						    =       requests.get(base_url + url					).json()[0]["urls"][0]["src"]
  return requests.get(A_					).content


if __name__ == "__main__":
       a_							=      input("""Enter Video/IGTV url: """).strip()
       a_							=      F"{datetime.now():%Y-%m-%d_%H:%M:%S}.mp4"
       with open(file_name, """wb""") as fp:
              fp.write(download_video(url))
       print(F"Done. Video saved to disk as {file_name}.")



