
from __future__ import annotations

from enum import Enum, unique
from typing import TypeVar

# Create a generic variable that can be 'Enum', or any subclass.
_UpperCAmelCase    			=					TypeVar("T", bound="Enum")

@unique
class 		__magic_name__				( lowercase_					):


  """simple docstring"""





  _UpperCamelCase						 = 80
  _UpperCamelCase						 = 70
  _UpperCamelCase						 = 60
  _UpperCamelCase						 = 50
  _UpperCamelCase						 = 40
  _UpperCamelCase						 = 30
  _UpperCamelCase						 = 20
  _UpperCamelCase						 = 10







@unique
class 		__magic_name__				( lowercase_					):


  """simple docstring"""





  _UpperCamelCase						 = 24
  _UpperCamelCase						 = 21
  _UpperCamelCase						 = 18
  _UpperCamelCase						 = 15
  _UpperCamelCase						 = 12
  _UpperCamelCase						 = 9
  _UpperCamelCase						 = 6
  _UpperCamelCase						 = 3
  _UpperCamelCase						 = 2
  _UpperCamelCase						 = 1
  _UpperCamelCase						 = -1
  _UpperCamelCase						 = -2
  _UpperCamelCase						 = -3
  _UpperCamelCase						 = -6
  _UpperCamelCase						 = -9
  _UpperCamelCase						 = -12
  _UpperCamelCase						 = -15
  _UpperCamelCase						 = -18
  _UpperCamelCase						 = -21
  _UpperCamelCase						 = -24


  @classmethod
  def     _UpperCAmelCase  (					cls		):
    return {unit.name: unit.value for unit in cls if unit.value > 0}


  @classmethod
  def     _UpperCAmelCase  (					cls		):
    return {unit.name: unit.value for unit in cls if unit.value < 0}







def 		_lowerCamelCase       (   _a  ):
  """simple docstring"""




  _lowerCamelCase      =						SIUnit.get_positive() if value > 0 else SIUnit.get_negative()
  for name_prefix, value_prefix in prefixes.items():
    _lowerCamelCase      =						value / (1_0**value_prefix)
    if numerical_part > 1:
      return F'''{numerical_part!s} {name_prefix}'''
  return str(_a  )


def 		_lowerCamelCase       (   _a  ):
  """simple docstring"""




  for prefix in BinaryUnit:
    _lowerCamelCase      =						value / (2**prefix.value)
    if numerical_part > 1:
      return F'''{numerical_part!s} {prefix.name}'''
  return str(_a  )


if __name__ == "__main__":
  import doctest

  doctest.testmod()






class 		__magic_name__				:


  """simple docstring"""





  class 		__magic_name__				:


    """simple docstring"""





    _UpperCamelCase						 = "_prev", "_data", "_next"


    def __init__(					self	,		a__	,		a__	,		a__		):
      _lowerCamelCase      =						link_p
      _lowerCamelCase      =						element
      _lowerCamelCase      =						link_n


    def     _UpperCAmelCase  (					self		):
      return (
          f''' Prev -> {self._prev is not None}, Next -> {self._next is not None}'''
      )







  def __init__(					self		):
    _lowerCamelCase      =						self._Node(a__	,		a__	,		a__		)
    _lowerCamelCase      =						self._Node(a__	,		a__	,		a__		)
    _lowerCamelCase      =						self._trailer
    _lowerCamelCase      =						self._header
    _lowerCamelCase      =						0


  def __len__(					self		):
    return self._size


  def     _UpperCAmelCase  (					self		):
    return self.__len__() == 0


  def     _UpperCAmelCase  (					self	,		a__	,		a__	,		a__		):
    # Create new_node by setting it's prev.link -> header
    # setting it's next.link -> trailer
    _lowerCamelCase      =						self._Node(a__	,		a__	,		a__		)
    _lowerCamelCase      =						new_node
    _lowerCamelCase      =						new_node
    self._size += 1
    return self


  def     _UpperCAmelCase  (					self	,		a__		):
    _lowerCamelCase      =						node._prev
    _lowerCamelCase      =						node._next

    _lowerCamelCase      =						successor
    _lowerCamelCase      =						predecessor
    self._size -= 1
    _lowerCamelCase      =						node._data
    _lowerCamelCase      =						_lowerCamelCase      =						_lowerCamelCase      =						None
    del node
    return temp







class 		__magic_name__				( _DoublyLinkedBase					):


  """simple docstring"""





  def     _UpperCAmelCase  (					self		):
    if self.is_empty():
      raise Exception('''List is empty'''		)
    return self._header._next._data


  def     _UpperCAmelCase  (					self		):
    if self.is_empty():
      raise Exception('''List is empty'''		)
    return self._trailer._prev._data


  def     _UpperCAmelCase  (					self	,		a__		):
    return self._insert(self._header	,		a__	,		self._header._next		)


  def     _UpperCAmelCase  (					self	,		a__		):
    return self._insert(self._trailer._prev	,		a__	,		self._trailer		)


  def     _UpperCAmelCase  (					self		):
    if self.is_empty():
      raise IndexError('''remove_first from empty list'''		)
    return self._delete(self._header._next		)


  def     _UpperCAmelCase  (					self		):
    if self.is_empty():
      raise IndexError('''remove_first from empty list'''		)
    return self._delete(self._trailer._prev		)




