






import unittest
from dataclasses import dataclass
from typing import List, Union

import numpy as np
import PIL.Image

from diffusers.utils.outputs import BaseOutput





@dataclass
class       __UpperCAmelCase  ( lowerCamelCase__		):
   UpperCamelCase       =  4_2






class       __UpperCAmelCase  ( unittest.TestCase		):



   def  __magic_name__					(							self							:  List[str]		):
     UpperCAmelCase :							Tuple								=				CustomOutput(images=np.random.rand(1,	3,	4,	4		)		)

     # check every way of getting the attribute
     assert isinstance(outputs.images,	np.ndarray		)
     assert outputs.images.shape == (1, 3, 4, 4)
     assert isinstance(outputs['''images'''],	np.ndarray		)
     assert outputs["images"].shape == (1, 3, 4, 4)
     assert isinstance(outputs[0],	np.ndarray		)
     assert outputs[0].shape == (1, 3, 4, 4)

     # test with a non-tensor attribute
     UpperCAmelCase :							Tuple								=				CustomOutput(images=[PIL.Image.new('''RGB''',	(4, 4)		)]		)

     # check every way of getting the attribute
     assert isinstance(outputs.images,	__A		)
     assert isinstance(outputs.images[0],	PIL.Image.Image		)
     assert isinstance(outputs['''images'''],	__A		)
     assert isinstance(outputs['''images'''][0],	PIL.Image.Image		)
     assert isinstance(outputs[0],	__A		)
     assert isinstance(outputs[0][0],	PIL.Image.Image		)





   def  __magic_name__					(							self							:  Tuple		):
     # test output reinitialization with a `dict` for compatibility with `accelerate`
     UpperCAmelCase :							str								=				CustomOutput({'''images''': np.random.rand(1,	3,	4,	4		)}		)

     # check every way of getting the attribute
     assert isinstance(outputs.images,	np.ndarray		)
     assert outputs.images.shape == (1, 3, 4, 4)
     assert isinstance(outputs['''images'''],	np.ndarray		)
     assert outputs["images"].shape == (1, 3, 4, 4)
     assert isinstance(outputs[0],	np.ndarray		)
     assert outputs[0].shape == (1, 3, 4, 4)

     # test with a non-tensor attribute
     UpperCAmelCase :							Any								=				CustomOutput({'''images''': [PIL.Image.new('''RGB''',	(4, 4)		)]}		)

     # check every way of getting the attribute
     assert isinstance(outputs.images,	__A		)
     assert isinstance(outputs.images[0],	PIL.Image.Image		)
     assert isinstance(outputs['''images'''],	__A		)
     assert isinstance(outputs['''images'''][0],	PIL.Image.Image		)
     assert isinstance(outputs[0],	__A		)
     assert isinstance(outputs[0][0],	PIL.Image.Image		)








from functools import lru_cache

@lru_cache
def     a__  (	UpperCAmelCase							:    int    )						->		int:
  if not isinstance(UpperCAmelCase       ,				UpperCAmelCase    ):
    raise TypeError('''k must be an integer.'''    )
  if k < 0:
    raise ValueError('''k integer must be greater or equal to zero.'''    )
  if k == 0:
    return 0
  elif k == 1:
    return 1
  else:
    return fibonacci(k - 1    ) + fibonacci(k - 2    )

def     a__  (	UpperCAmelCase							:    list       ,				UpperCAmelCase							:    int    )						->		int:
  UpperCAmelCase :							List[str]								=				len(UpperCAmelCase    )
  # Find m such that F_m >= n where F_i is the i_th fibonacci number.
  UpperCAmelCase :							Any								=				0
  while True:
    if fibonacci(UpperCAmelCase    ) >= len_list:
      UpperCAmelCase :							Optional[Any]								=				i
      break
    i += 1
  UpperCAmelCase :							List[Any]								=				0
  while fibb_k > 0:
    UpperCAmelCase :							List[str]								=				min(
        offset + fibonacci(fibb_k - 1    )       ,				len_list - 1    )  # Prevent out of range
    UpperCAmelCase :							Optional[Any]								=				arr[index_k]
    if item_k_1 == val:
      return index_k
    elif val < item_k_1:
      fibb_k -= 1
    elif val > item_k_1:
      offset += fibonacci(fibb_k - 1    )
      fibb_k -= 2
  else:
    return -1


if __name__ == "__main__":
     import doctest

     doctest.testmod()





