
"""simple docstring"""


def     _lowerCamelCase(__UpperCamelCase    , __UpperCamelCase = 1000       )				-> str:
	if (not isinstance(__UpperCamelCase    , __UpperCamelCase       )) or (digit_position <= 0):
		raise ValueError("""Digit position must be a positive integer"""       )
	elif (not isinstance(__UpperCamelCase    , __UpperCamelCase       )) or (precision < 0):
		raise ValueError("""Precision must be a nonnegative integer"""       )

	# compute an approximation of (16 ** (n - 1)) * pi whose fractional part is mostly
	# accurate
	_lowerCAmelCase								=(
	    4 * _subsum(__UpperCamelCase    , 1    , __UpperCamelCase       )
	    - 2 * _subsum(__UpperCamelCase    , 4    , __UpperCamelCase       )
	    - _subsum(__UpperCamelCase    , 5    , __UpperCamelCase       )
	    - _subsum(__UpperCamelCase    , 6    , __UpperCamelCase       )
	)

	# return the first hex digit of the fractional part of the result
	return hex(int((sum_result % 1) * 16       )       )[2:]



def     _lowerCamelCase(__UpperCamelCase    , __UpperCamelCase    , __UpperCamelCase       )				-> float:
	_lowerCAmelCase								=0.0
	for sum_index in range(digit_pos_to_extract + precision       ):
		_lowerCAmelCase								=8 * sum_index + denominator_addend
		if sum_index < digit_pos_to_extract:
			# if the exponential term is an integer and we mod it by the denominator
			# before dividing, only the integer part of the sum will change;
			# the fractional part will not
			_lowerCAmelCase								=pow(
			    16    , digit_pos_to_extract - 1 - sum_index    , __UpperCamelCase       )
		else:
			_lowerCAmelCase								=pow(16    , digit_pos_to_extract - 1 - sum_index       )
		total += exponential_term / denominator
	return total


if __name__ == "__main__":
			import doctest

			doctest.testmod()






class 		__magic_name__ :






     def __init__(							self     )->			int:
         UpperCamelCase_          =		[0]
         UpperCamelCase_          =		0






     def      UpperCAmelCase_							(							self						,		_lowercase     )->			None:
         UpperCamelCase_          =		self.__heap[i]
         while i // 2 > 0:
             if self.__heap[i] > self.__heap[i // 2]:
                 UpperCamelCase_          =		self.__heap[i // 2]
                 UpperCamelCase_          =		temporary
             i //= 2






     def      UpperCAmelCase_							(							self						,		_lowercase     )->			None:
         self.__heap.append(_lowercase     )
         self.__size += 1
         self.__swap_up(self.__size     )






     def      UpperCAmelCase_							(							self						,		_lowercase     )->			None:
         while self.__size >= 2 * i:
             if 2 * i + 1 > self.__size:
                 UpperCamelCase_          =		2 * i
             else:
                 if self.__heap[2 * i] > self.__heap[2 * i + 1]:
                     UpperCamelCase_          =		2 * i
                 else:
                     UpperCamelCase_          =		2 * i + 1
             UpperCamelCase_          =		self.__heap[i]
             if self.__heap[i] < self.__heap[bigger_child]:
                 UpperCamelCase_          =		self.__heap[bigger_child]
                 UpperCamelCase_          =		temporary
             UpperCamelCase_          =		bigger_child






     def      UpperCAmelCase_							(							self     )->			int:
         UpperCamelCase_          =		self.__heap[1]
         UpperCamelCase_          =		self.__heap[self.__size]
         self.__size -= 1
         self.__heap.pop()
         self.__swap_down(1     )
         return max_value






     @property
     def      UpperCAmelCase_							(							self     )->			List[Any]:
         return self.__heap[1:]






     def __len__(							self     )->			List[str]:
         return self.__size


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 # create an instance of BinaryHeap
 SCREAMING_SNAKE_CASE						:Optional[int]      =			BinaryHeap()
 binary_heap.insert(6)
 binary_heap.insert(10)
 binary_heap.insert(15)
 binary_heap.insert(12)
 # pop root(max-values because it is max heap)
 print(binary_heap.pop())  # 15
 print(binary_heap.pop())  # 12
 # get the list and size after operations
 print(binary_heap.get_list)
 print(len(binary_heap))
