def 				UpperCAmelCase						(    lowercase							,			lowercase							,			lowercase							,			lowercase							,			lowercase							,			):







				"""simple docstring"""



				__lowercase 			=							[redshift, radiation_density, matter_density, dark_energy]
				if any(p < 0 for p in parameters							):
								raise ValueError('''All input parameters must be positive'''							)

				if any(p > 1 for p in parameters[1:4]							):
								raise ValueError('''Relative densities cannot be greater than one'''							)
				else:
								__lowercase 			=							1 - (matter_density + radiation_density + dark_energy)

								__lowercase 			=							(
								    radiation_density * (redshift + 1) ** 4
								    + matter_density * (redshift + 1) ** 3
								    + curvature * (redshift + 1) ** 2
								    + dark_energy
								)

								__lowercase 			=							hubble_constant * e_a ** (1 / 2)
								return hubble


if __name__ == "__main__":
		import doctest

		# run doctest
		doctest.testmod()

		# demo LCDM approximation
		__a  :     Optional[int]       =  0.3

		print(
		    hubble_parameter(
		        hubble_constant=68.3,
		        radiation_density=1e-4,
		        matter_density=matter_density,
		        dark_energy=1 - matter_density,
		        redshift=0,
		    )
		)
import warnings
from functools import wraps
from typing import Callable





def 				UpperCAmelCase						(    lowercase							):







				"""simple docstring"""



				@wraps(lowercase							)
				def _inner_fn(*lowercase							,			**lowercase							):
								warnings.warn(
								    (F"'{fn.__name__}' is experimental and might be subject to breaking changes in the future.")							,			lowercase							,			)
								return fn(*lowercase							,			**lowercase							)

				return _inner_fn