

import os
import tempfile
import unittest

import numpy as np
import torch

from diffusers.models import ModelMixin, UNetaDConditionModel
from diffusers.models.attention_processor import AttnProcessor, LoRAAttnProcessor
from diffusers.utils import (
    floats_tensor,
    logging,
    skip_mps,
    torch_device,
)
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import enable_full_determinism

from .test_modeling_common import ModelTesterMixin, UNetTesterMixin


enable_full_determinism()

lowercase_									=    logging.get_logger(__name__)
def 		_snake_case(       SCREAMING_SNAKE_CASE__     :      Optional[Any]       ,     SCREAMING_SNAKE_CASE__     :      bool = True )				-> List[str]:





    '''simple docstring'''






    A__        =  {}
    for name in model.attn_processors.keys():
        A__        =  name.endswith('attn2.processor' ) and not (
            name.startswith('transformer_in' ) or 'temp_attentions' in name.split('.' )
        )
        A__        =  model.config.cross_attention_dim if has_cross_attention else None
        if name.startswith('mid_block' ):
            A__        =  model.config.block_out_channels[-1]
        elif name.startswith('up_blocks' ):
            A__        =  int(name[len('up_blocks.' )] )
            A__        =  list(reversed(model.config.block_out_channels ) )[block_id]
        elif name.startswith('down_blocks' ):
            A__        =  int(name[len('down_blocks.' )] )
            A__        =  model.config.block_out_channels[block_id]
        elif name.startswith('transformer_in' ):
            # Note that the `8 * ...` comes from: https://github.com/huggingface/diffusers/blob/7139f0e874f10b2463caa8cbd585762a309d12d6/src/diffusers/models/unet_3d_condition.py#L148
            A__        =  8 * model.config.attention_head_dim

        A__        =  LoRAAttnProcessor(hidden_size=SCREAMING_SNAKE_CASE__       ,     cross_attention_dim=SCREAMING_SNAKE_CASE__ )
        A__        =  lora_attn_procs[name].to(model.device )

        if mock_weights:
            # add 1 to weights to mock trained weights
            with torch.no_grad():
                lora_attn_procs[name].to_q_lora.up.weight += 1
                lora_attn_procs[name].to_k_lora.up.weight += 1
                lora_attn_procs[name].to_v_lora.up.weight += 1
                lora_attn_procs[name].to_out_lora.up.weight += 1

    return lora_attn_procs


@skip_mps
class 					A		(				__SCREAMING_SNAKE_CASE       ,				__SCREAMING_SNAKE_CASE       ,				unittest.TestCase					):







    """simple docstring"""





    lowerCamelCase						      =				UNetaDConditionModel
    lowerCamelCase						      =				'sample'


    @property
    def 		snake_case__	( self					:			Dict						)->       List[str]:





        '''simple docstring'''







        A__        =  4
        A__        =  4
        A__        =  4
        A__        =  (3_2, 3_2)

        A__        =  floats_tensor((batch_size, num_channels, num_frames) + sizes						).to(__UpperCAmelCase						)
        A__        =  torch.tensor([1_0]						).to(__UpperCAmelCase						)
        A__        =  floats_tensor((batch_size, 4, 3_2)						).to(__UpperCAmelCase						)

        return {"sample": noise, "timestep": time_step, "encoder_hidden_states": encoder_hidden_states}


    @property
    def 		snake_case__	( self					:			List[Any]						)->       Optional[Any]:





        '''simple docstring'''







        return (4, 4, 3_2, 3_2)


    @property
    def 		snake_case__	( self					:			Optional[int]						)->       Optional[int]:





        '''simple docstring'''







        return (4, 4, 3_2, 3_2)


    def 		snake_case__	( self					:			int						)->       List[str]:





        '''simple docstring'''







        A__        =  {
            'block_out_channels': (3_2, 6_4),
            'down_block_types': (
                'CrossAttnDownBlock3D',
                'DownBlock3D',
            ),
            'up_block_types': ('UpBlock3D', 'CrossAttnUpBlock3D'),
            'cross_attention_dim': 3_2,
            'attention_head_dim': 8,
            'out_channels': 4,
            'in_channels': 4,
            'layers_per_block': 1,
            'sample_size': 3_2,
        }
        A__        =  self.dummy_input
        return init_dict, inputs_dict


    @unittest.skipIf(
        torch_device != 'cuda' or not is_xformers_available(),reason='XFormers attention is only available with CUDA and `xformers` installed',)
    def 		snake_case__	( self					:			str						)->       Union[str, Any]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()
        A__        =  self.model_class(**__UpperCAmelCase						)

        model.enable_xformers_memory_efficient_attention()

        assert (
            model.mid_block.attentions[0].transformer_blocks[0].attna.processor.__class__.__name__
            == "XFormersAttnProcessor"
        ), "xformers is not enabled"


    def 		snake_case__	( self					:			List[str]						)->       Any:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  3_2

        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)
        model.eval()

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)

            if isinstance(__UpperCAmelCase,__UpperCAmelCase						):
                A__        =  output.sample

        self.assertIsNotNone(__UpperCAmelCase						)
        A__        =  inputs_dict['sample'].shape
        self.assertEqual(output.shape,__UpperCAmelCase,'Input and output shapes do not match'						)


    def 		snake_case__	( self					:			Union[str, Any]						)->       Union[str, Any]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)
        model.eval()

        with torch.no_grad():
            # Warmup pass when using mps (see #372)
            if torch_device == "mps" and isinstance(__UpperCAmelCase,__UpperCAmelCase						):
                model(**self.dummy_input						)

            A__        =  model(**__UpperCAmelCase						)
            if isinstance(__UpperCAmelCase,__UpperCAmelCase						):
                A__        =  first.sample

            A__        =  model(**__UpperCAmelCase						)
            if isinstance(__UpperCAmelCase,__UpperCAmelCase						):
                A__        =  second.sample

        A__        =  first.cpu().numpy()
        A__        =  second.cpu().numpy()
        A__        =  out_a[~np.isnan(__UpperCAmelCase						)]
        A__        =  out_a[~np.isnan(__UpperCAmelCase						)]
        A__        =  np.amax(np.abs(out_a - out_a						)						)
        self.assertLessEqual(__UpperCAmelCase,1E-5						)


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





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)
        model.eval()

        model.set_attention_slice('auto'						)
        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)
        assert output is not None

        model.set_attention_slice('max'						)
        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)
        assert output is not None

        model.set_attention_slice(2						)
        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)
        assert output is not None


    def 		snake_case__	( self					:			Dict						)->       str:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

        A__        =  create_lora_layers(__UpperCAmelCase						)

        # make sure we can set a list of attention processors
        model.set_attn_processor(__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        # test that attn processors can be set to itself
        model.set_attn_processor(model.attn_processors						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.0}						).sample
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample

        assert (samplea - samplea).abs().max() < 3E-3
        assert (samplea - samplea).abs().max() < 3E-3

        # sample 2 and sample 3 should be different
        assert (samplea - samplea).abs().max() > 3E-3


    def 		snake_case__	( self					:			Any						)->       Dict:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

        A__        =  create_lora_layers(__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample

        with tempfile.TemporaryDirectory() as tmpdirname:
            model.save_attn_procs(__UpperCAmelCase						)
            self.assertTrue(os.path.isfile(os.path.join(__UpperCAmelCase,'pytorch_lora_weights.bin'						)						)						)
            torch.manual_seed(0						)
            A__        =  self.model_class(**__UpperCAmelCase						)
            new_model.to(__UpperCAmelCase						)
            new_model.load_attn_procs(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  new_model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample

        assert (sample - new_sample).abs().max() < 1E-3

        # LoRA and no LoRA should NOT be the same
        assert (sample - old_sample).abs().max() > 1E-4


    def 		snake_case__	( self					:			Tuple						)->       int:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

        A__        =  create_lora_layers(__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample

        with tempfile.TemporaryDirectory() as tmpdirname:
            model.save_attn_procs(__UpperCAmelCase,safe_serialization=__UpperCAmelCase						)
            self.assertTrue(os.path.isfile(os.path.join(__UpperCAmelCase,'pytorch_lora_weights.safetensors'						)						)						)
            torch.manual_seed(0						)
            A__        =  self.model_class(**__UpperCAmelCase						)
            new_model.to(__UpperCAmelCase						)
            new_model.load_attn_procs(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  new_model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.5}						).sample

        assert (sample - new_sample).abs().max() < 3E-3

        # LoRA and no LoRA should NOT be the same
        assert (sample - old_sample).abs().max() > 1E-4


    def 		snake_case__	( self					:			Tuple						)->       Optional[Any]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        A__        =  create_lora_layers(__UpperCAmelCase,mock_weights=__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)
        # Saving as torch, properly reloads with directly filename
        with tempfile.TemporaryDirectory() as tmpdirname:
            model.save_attn_procs(__UpperCAmelCase						)
            self.assertTrue(os.path.isfile(os.path.join(__UpperCAmelCase,'pytorch_lora_weights.bin'						)						)						)
            torch.manual_seed(0						)
            A__        =  self.model_class(**__UpperCAmelCase						)
            new_model.to(__UpperCAmelCase						)
            new_model.load_attn_procs(__UpperCAmelCase,weight_name='pytorch_lora_weights.bin'						)


    def 		snake_case__	( self					:			str						)->       List[str]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        A__        =  create_lora_layers(__UpperCAmelCase,mock_weights=__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)
        # Saving as torch, properly reloads with directly filename
        with tempfile.TemporaryDirectory() as tmpdirname:
            model.save_attn_procs(__UpperCAmelCase						)
            self.assertTrue(os.path.isfile(os.path.join(__UpperCAmelCase,'pytorch_lora_weights.bin'						)						)						)
            torch.manual_seed(0						)
            A__        =  self.model_class(**__UpperCAmelCase						)
            new_model.to(__UpperCAmelCase						)
            with self.assertRaises(__UpperCAmelCase						) as e:
                new_model.load_attn_procs(__UpperCAmelCase,use_safetensors=__UpperCAmelCase						)
            self.assertIn('Error no file named pytorch_lora_weights.safetensors',str(e.exception						)						)


    def 		snake_case__	( self					:			List[Any]						)->       Optional[int]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  8

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

        A__        =  create_lora_layers(__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase,cross_attention_kwargs={'scale': 0.0}						).sample

        model.set_attn_processor(AttnProcessor()						)

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

        assert (sample - new_sample).abs().max() < 1E-4
        assert (sample - old_sample).abs().max() < 3E-3


    @unittest.skipIf(
        torch_device != 'cuda' or not is_xformers_available(),reason='XFormers attention is only available with CUDA and `xformers` installed',)
    def 		snake_case__	( self					:			Any						)->       List[str]:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()

        A__        =  4

        torch.manual_seed(0						)
        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)
        A__        =  create_lora_layers(__UpperCAmelCase						)
        model.set_attn_processor(__UpperCAmelCase						)

        # default
        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						).sample

            model.enable_xformers_memory_efficient_attention()
            A__        =  model(**__UpperCAmelCase						).sample

            model.disable_xformers_memory_efficient_attention()
            A__        =  model(**__UpperCAmelCase						).sample

        assert (sample - on_sample).abs().max() < 1E-4
        assert (sample - off_sample).abs().max() < 1E-4


    def 		snake_case__	( self					:			Any						)->       Dict:





        '''simple docstring'''







        A__ ,		A__        =  self.prepare_init_args_and_inputs_for_common()
        A__        =  3_2

        A__        =  self.model_class(**__UpperCAmelCase						)
        model.to(__UpperCAmelCase						)
        model.eval()

        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)[0]

        model.enable_forward_chunking()
        with torch.no_grad():
            A__        =  model(**__UpperCAmelCase						)[0]

        self.assertEqual(output.shape,output_a.shape,'Shape doesn\'t match'						)
        assert np.abs(output.cpu() - output_a.cpu()						).max() < 1E-2


# (todo: sayakpaul) implement SLOW tests.



"""simple docstring"""

from ..utils import DummyObject, requires_backends

class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )


class __lowerCAmelCase						( metaclass=__SCREAMING_SNAKE_CASE     ):
     lowercase		  =		["vision"]





     def __init__(      self      ,	*__UpperCAmelCase      ,	**__UpperCAmelCase ):

      '''simple docstring'''




      requires_backends(self      ,	['vision'] )



