


"""simple docstring"""






from __future__ import annotations


def __lowercase     (      lowerCamelCase_  :      Any						,					lowerCamelCase_  :      Dict						,					lowerCamelCase_  :      List[Any]						,					):
				if (electron_conc, hole_conc, intrinsic_conc).count(0  ) != 1:
								raise ValueError("You cannot supply more or less than 2 values"  )
				elif electron_conc < 0:
								raise ValueError("Electron concentration cannot be negative in a semiconductor"  )
				elif hole_conc < 0:
								raise ValueError("Hole concentration cannot be negative in a semiconductor"  )
				elif intrinsic_conc < 0:
								raise ValueError(
								    "Intrinsic concentration cannot be negative in a semiconductor"  )
				elif electron_conc == 0:
								return (
								    "electron_conc",
								    intrinsic_conc**2 / hole_conc,
								)
				elif hole_conc == 0:
								return (
								    "hole_conc",
								    intrinsic_conc**2 / electron_conc,
								)
				elif intrinsic_conc == 0:
								return (
								    "intrinsic_conc",
								    (electron_conc * hole_conc) ** 0.5,
								)
				else:
								return (-1, -1)


if __name__ == "__main__":
	import doctest

	doctest.testmod()








"""simple docstring"""






import numpy as np
import torch
from imwatermark import WatermarkEncoder


# Copied from https://github.com/Stability-AI/generative-models/blob/613af104c6b85184091d42d374fef420eddb356d/scripts/demo/streamlit_helpers.py#L66
_lowerCamelCase     =  0b1011_0011_1110_1100_1001_0000_0111_1011_1011_0001_1001_1110
# bin(x)[2:] gives bits of x as str, use int to convert them to 0/1
_lowerCamelCase     =  [int(bit) for bit in bin(WATERMARK_MESSAGE)[2:]]


class 			lowerCamelCase_		:





				"""simple docstring"""







				def __init__(						self     ):
								SCREAMING_SNAKE_CASE__     							=				WATERMARK_BITS
								SCREAMING_SNAKE_CASE__     							=				WatermarkEncoder()

								self.encoder.set_watermark("bits"       ,		self.watermark     )






				def   lowerCAmelCase__		(						self       ,		UpperCAmelCase__     ):
								# can't encode images that are smaller than 256
								if images.shape[-1] < 256:
												return images

								SCREAMING_SNAKE_CASE__     							=				(255 * (images / 2 + 0.5)).cpu().permute(0       ,		2       ,		3       ,		1     ).float().numpy()

								SCREAMING_SNAKE_CASE__     							=				[self.encoder.encode(UpperCAmelCase__       ,		"dwtDct"     ) for image in images]

								SCREAMING_SNAKE_CASE__     							=				torch.from_numpy(np.array(UpperCAmelCase__     )     ).permute(0       ,		3       ,		1       ,		2     )

								SCREAMING_SNAKE_CASE__     							=				torch.clamp(2 * (images / 255 - 0.5)       ,		min=-1.0       ,		max=1.0     )
								return images
