

"""simple docstring"""




A_							:			List[Any]											= '''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'''

def 	A       (     snake_case__    ):




			'''simple docstring'''


			if not isinstance(UpperCAmelCase__		,				UpperCAmelCase__    ):
						SCREAMING_SNAKE_CASE__								=      f"""a bytes-like object is required, not '{data.__class__.__name__}'"""
						raise TypeError(UpperCAmelCase__    )

			SCREAMING_SNAKE_CASE__								=      """""".join(bin(UpperCAmelCase__    )[2:].zfill(8    ) for byte in data    )

			SCREAMING_SNAKE_CASE__								=      len(UpperCAmelCase__    ) % 6 != 0

			if padding_needed:
						# The padding that will be added later
						SCREAMING_SNAKE_CASE__								=      B"""=""" * ((6 - len(UpperCAmelCase__    ) % 6) // 2)

						# Append binary_stream with arbitrary binary digits (0's by default) to make its
						# length a multiple of 6.
						binary_stream += "0" * (6 - len(UpperCAmelCase__    ) % 6)
			else:
						SCREAMING_SNAKE_CASE__								=      B""""""

			# Encode every 6 binary digits to their corresponding Base64 character
			return (
			    "".join(
			        B64_CHARSET[int(binary_stream[index : index + 6]		,				2    )]
			        for index in range(0		,				len(UpperCAmelCase__    )		,				6    )    ).encode()
			    + padding
			)

def 	A       (     snake_case__    ):




			'''simple docstring'''


			if not isinstance(UpperCAmelCase__		,				UpperCAmelCase__    ) and not isinstance(UpperCAmelCase__		,				UpperCAmelCase__    ):
						SCREAMING_SNAKE_CASE__								=      (
						    """argument should be a bytes-like object or ASCII string, """
						    f"""not '{encoded_data.__class__.__name__}'"""
						)
						raise TypeError(UpperCAmelCase__    )

			# In case encoded_data is a bytes-like object, make sure it contains only
			# ASCII characters so we convert it to a string object
			if isinstance(UpperCAmelCase__		,				UpperCAmelCase__    ):
						try:
									SCREAMING_SNAKE_CASE__								=      encoded_data.decode("""utf-8"""    )
						except UnicodeDecodeError:
									raise ValueError("""base64 encoded data should only contain ASCII characters"""    )

			SCREAMING_SNAKE_CASE__								=      encoded_data.count("""="""    )

			# Check if the encoded string contains non base64 characters
			if padding:
						assert all(
						    char in B64_CHARSET for char in encoded_data[:-padding]    ), "Invalid base64 character(s) found."
			else:
						assert all(
						    char in B64_CHARSET for char in encoded_data    ), "Invalid base64 character(s) found."

			# Check the padding
			assert len(UpperCAmelCase__    ) % 4 == 0 and padding < 3, "Incorrect padding"

			if padding:
						# Remove padding if there is one
						SCREAMING_SNAKE_CASE__								=      encoded_data[:-padding]

						SCREAMING_SNAKE_CASE__								=      """""".join(
						    bin(B64_CHARSET.index(UpperCAmelCase__    )    )[2:].zfill(6    ) for char in encoded_data    )[: -padding * 2]
			else:
						SCREAMING_SNAKE_CASE__								=      """""".join(
						    bin(B64_CHARSET.index(UpperCAmelCase__    )    )[2:].zfill(6    ) for char in encoded_data    )

			SCREAMING_SNAKE_CASE__								=      [
			    int(binary_stream[index : index + 8]		,				2    )
			    for index in range(0		,				len(UpperCAmelCase__    )		,				8    )
			]

			return bytes(UpperCAmelCase__    )


if __name__ == "__main__":
						import doctest

						doctest.testmod()





"""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


