





"""simple docstring"""




from typing import Any

import numpy as np





def   lowerCamelCase__       (       UpperCamelCase__     :    np.ndarray  )     ->	Tuple:



					'''simple docstring'''




					return np.array_equal(__a    ,      matrix.conjugate().T  )





def   lowerCamelCase__       (       UpperCamelCase__     :    np.ndarray    ,      UpperCamelCase__     :    np.ndarray  )     ->	Tuple:



					'''simple docstring'''




					_snake_case													=			v.conjugate().T
					_snake_case													=			v_star.dot(__a  )
					assert isinstance(__a    ,      np.ndarray  )
					return (v_star_dot.dot(__a  )) / (v_star.dot(__a  ))





def   lowerCamelCase__       (       )     ->	List[str]:



					'''simple docstring'''




					_snake_case													=			np.array([[2, 2 + 1J, 4], [2 - 1J, 3, 1J], [4, -1J, 1]]  )
					_snake_case													=			np.array([[1], [2], [3]]  )
					assert is_hermitian(__a  ), F'''{a} is not hermitian.'''
					print(rayleigh_quotient(__a    ,      __a  )  )

					_snake_case													=			np.array([[1, 2, 4], [2, 3, -1], [4, -1, 1]]  )
					assert is_hermitian(__a  ), F'''{a} is not hermitian.'''
					assert rayleigh_quotient(__a    ,      __a  ) == float(3  )


if __name__ == "__main__":
					import doctest

					doctest.testmod()
					tests()










def   lowerCamelCase__       (       UpperCamelCase__     :    list[list[int]]    ,      UpperCamelCase__     :    int    ,      UpperCamelCase__     :    int    ,      UpperCamelCase__     :    list[int]  )     ->	bool:



					'''simple docstring'''




					if graph[path[curr_ind - 1]][next_ver] == 0:
										return False

					# 2. Validate that next vertex is not already in path
					return not any(vertex == next_ver for vertex in path  )





def   lowerCamelCase__       (       UpperCamelCase__     :    list[list[int]]    ,      UpperCamelCase__     :    list[int]    ,      UpperCamelCase__     :    int  )     ->	bool:



					'''simple docstring'''




					if curr_ind == len(UpperCamelCase__  ):
										# return whether path exists between current and starting vertices
										return graph[path[curr_ind - 1]][path[0]] == 1

					# Recursive Step
					for next_ver in range(0    ,      len(UpperCamelCase__  )  ):
										if valid_connection(UpperCamelCase__    ,      UpperCamelCase__    ,      UpperCamelCase__    ,      UpperCamelCase__  ):
															# Insert current vertex  into path as next transition
															_snake_case													=			next_ver
															# Validate created path
															if util_hamilton_cycle(UpperCamelCase__    ,      UpperCamelCase__    ,      curr_ind + 1  ):
																				return True
															# Backtrack
															_snake_case													=			-1
					return False





def   lowerCamelCase__       (       UpperCamelCase__     :    list[list[int]]    ,      UpperCamelCase__     :    int = 0  )     ->	list[int]:



					'''simple docstring'''




					_snake_case													=			[-1] * (len(UpperCamelCase__  ) + 1)
					# initialize start and end of path with starting index
					_snake_case													=			_snake_case													=			start_index
					# evaluate and if we find answer return path either return empty array
					return path if util_hamilton_cycle(UpperCamelCase__    ,      UpperCamelCase__    ,      1  ) else []



