

import warnings

from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding







class   __lowercase      (lowerCAmelCase_ ):
 _UpperCamelCase			  =  ["""image_processor""", """tokenizer"""]
 _UpperCamelCase			  =  """ViTImageProcessor"""
 _UpperCamelCase			  =  ("""CLIPTokenizer""", """CLIPTokenizerFast""")
 def __init__(							self      ,							A_=None      ,							A_=None      ,							**A_					)					->Dict:



       '''simple docstring'''





       __lowerCAmelCase					:						Optional[int]					=					None
       if "feature_extractor" in kwargs:
             warnings.warn(
                 '''The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`'''
                 ''' instead.'''      ,							snake_case_      ,							)
             __lowerCAmelCase					:						Dict					=					kwargs.pop('''feature_extractor'''					)

       __lowerCAmelCase					:						List[Any]					=					image_processor if image_processor is not None else feature_extractor
       if image_processor is None:
             raise ValueError('''You need to specify an `image_processor`.'''					)
       if tokenizer is None:
             raise ValueError('''You need to specify a `tokenizer`.'''					)

       super().__init__(snake_case_      ,							snake_case_					)
 def __call__(							self      ,							A_=None      ,							A_=None      ,							A_=None      ,							A_=None      ,							**A_					)					->str:



       '''simple docstring'''





       if text is None and visual_prompt is None and images is None:
             raise ValueError('''You have to specify either text, visual prompt or images.'''					)

       if text is not None and visual_prompt is not None:
             raise ValueError('''You have to specify exactly one type of prompt. Either text or visual prompt.'''					)

       if text is not None:
             __lowerCAmelCase					:						List[str]					=					self.tokenizer(snake_case_      ,							return_tensors=snake_case_      ,							**snake_case_					)

       if visual_prompt is not None:
             __lowerCAmelCase					:						str					=					self.image_processor(snake_case_      ,							return_tensors=snake_case_      ,							**snake_case_					)

       if images is not None:
             __lowerCAmelCase					:						List[str]					=					self.image_processor(snake_case_      ,							return_tensors=snake_case_      ,							**snake_case_					)

       if visual_prompt is not None and images is not None:
             __lowerCAmelCase					:						Optional[Any]					=					{
                 '''pixel_values''': image_features.pixel_values,
                 '''conditional_pixel_values''': prompt_features.pixel_values,
             }
             return encoding
       elif text is not None and images is not None:
             __lowerCAmelCase					:						Optional[int]					=					image_features.pixel_values
             return encoding
       elif text is not None:
             return encoding
       elif visual_prompt is not None:
             __lowerCAmelCase					:						Optional[int]					=					{
                 '''conditional_pixel_values''': prompt_features.pixel_values,
             }
             return encoding
       else:
             return BatchEncoding(data=dict(**snake_case_					)      ,							tensor_type=snake_case_					)
 def 	UpperCamelCase__  (							self      ,							*A_      ,							**A_					)					->Any:



       '''simple docstring'''





       return self.tokenizer.batch_decode(*snake_case_      ,							**snake_case_					)
 def 	UpperCamelCase__  (							self      ,							*A_      ,							**A_					)					->Tuple:



       '''simple docstring'''





       return self.tokenizer.decode(*snake_case_      ,							**snake_case_					)
 @property
 def 	UpperCamelCase__  (							self					)					->Tuple:



       '''simple docstring'''





       warnings.warn(
           '''`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead.'''      ,							snake_case_      ,							)
       return self.image_processor_class





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



       '''simple docstring'''





       warnings.warn(
           '''`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead.'''      ,							snake_case_      ,							)
       return self.image_processor









'''simple docstring'''




from ..utils import (
    OptionalDependencyNotAvailable,
    is_flax_available,
    is_scipy_available,
    is_torch_available,
    is_torchsde_available,
)


try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  from ..utils.dummy_pt_objects import *  # noqa F403
else:
  from .scheduling_consistency_models import CMStochasticIterativeScheduler
  from .scheduling_ddim import DDIMScheduler
  from .scheduling_ddim_inverse import DDIMInverseScheduler
  from .scheduling_ddim_parallel import DDIMParallelScheduler
  from .scheduling_ddpm import DDPMScheduler
  from .scheduling_ddpm_parallel import DDPMParallelScheduler
  from .scheduling_deis_multistep import DEISMultistepScheduler
  from .scheduling_dpmsolver_multistep import DPMSolverMultistepScheduler
  from .scheduling_dpmsolver_multistep_inverse import DPMSolverMultistepInverseScheduler
  from .scheduling_dpmsolver_singlestep import DPMSolverSinglestepScheduler
  from .scheduling_euler_ancestral_discrete import EulerAncestralDiscreteScheduler
  from .scheduling_euler_discrete import EulerDiscreteScheduler
  from .scheduling_heun_discrete import HeunDiscreteScheduler
  from .scheduling_ipndm import IPNDMScheduler
  from .scheduling_k_dpm_2_ancestral_discrete import KDPMaAncestralDiscreteScheduler
  from .scheduling_k_dpm_2_discrete import KDPMaDiscreteScheduler
  from .scheduling_karras_ve import KarrasVeScheduler
  from .scheduling_pndm import PNDMScheduler
  from .scheduling_repaint import RePaintScheduler
  from .scheduling_sde_ve import ScoreSdeVeScheduler
  from .scheduling_sde_vp import ScoreSdeVpScheduler
  from .scheduling_unclip import UnCLIPScheduler
  from .scheduling_unipc_multistep import UniPCMultistepScheduler
  from .scheduling_utils import KarrasDiffusionSchedulers, SchedulerMixin
  from .scheduling_vq_diffusion import VQDiffusionScheduler

try:
  if not is_flax_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  from ..utils.dummy_flax_objects import *  # noqa F403
else:
  from .scheduling_ddim_flax import FlaxDDIMScheduler
  from .scheduling_ddpm_flax import FlaxDDPMScheduler
  from .scheduling_dpmsolver_multistep_flax import FlaxDPMSolverMultistepScheduler
  from .scheduling_karras_ve_flax import FlaxKarrasVeScheduler
  from .scheduling_lms_discrete_flax import FlaxLMSDiscreteScheduler
  from .scheduling_pndm_flax import FlaxPNDMScheduler
  from .scheduling_sde_ve_flax import FlaxScoreSdeVeScheduler
  from .scheduling_utils_flax import (
      FlaxKarrasDiffusionSchedulers,
      FlaxSchedulerMixin,
      FlaxSchedulerOutput,
      broadcast_to_shape_from_left,
  )


try:
  if not (is_torch_available() and is_scipy_available()):
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  from ..utils.dummy_torch_and_scipy_objects import *  # noqa F403
else:
  from .scheduling_lms_discrete import LMSDiscreteScheduler

try:
  if not (is_torch_available() and is_torchsde_available()):
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  from ..utils.dummy_torch_and_torchsde_objects import *  # noqa F403
else:
  from .scheduling_dpmsolver_sde import DPMSolverSDEScheduler




