# Path: esc/commands.py
# BINOP = 'binop'
# UNOP = 'unop'
# MAIN_DOC = """
#     The main menu. All other esc functions and menus are eventually accessible
#     from this menu.
# """
# class EscCommand:
# class EscMenu(EscCommand):
# class EscOperation(EscCommand):
# class EscBuiltin(EscCommand):
#     def __init__(self, key, description):
#     def help_title(self):
#     def signature_info(self):
#     def execute(self, access_key, ss, registry):
#     def register_child(self, child):
#     def simulated_result(self, ss, registry):  # pylint: disable=no-self-use, unused-argument
#     def test(self):
#     def __init__(self, key, description, doc, mode_display=None):
#     def __repr__(self):
#     def signature_info(self):
#     def is_main_menu(self):
#     def anonymous_children(self):
#     def named_children(self):
#     def child(self, access_key):
#     def execute(self, access_key, ss, registry):
#     def test(self):
#     def __init__(self, key, func, pop, push, description, menu, retain=False,
#                  log_as=None, simulate=True):
#     def __repr__(self):
#     def __doc__(self):
#     def signature_info(self):
#     def _describe_operation(self, args, retvals, registry):
#     def _insufficient_items_on_stack(self, pops_requested=None):
#     def _retrieve_arguments(self, ss):
#     def _simulated_description(self, args, log, results):
#     def _store_results(self, ss, args, return_values, registry):
#     def execute(self, access_key, ss, registry):  # pylint: disable=useless-return
#     def simulated_result(self, ss, registry):
#     def test(self):
#     def __init__(self):
#     def execute(self, access_key, ss, registry):  # pylint: disable=useless-return
#     def simulated_result(self, ss, registry):
#     def test(self):
#     def signature_info(self):
# def Menu(key, description, parent, doc, mode_display=None):  # pylint: disable=invalid-name
# def Constant(value, key, description, menu):  # pylint: disable=invalid-name
#     def func():
# def Operation(key, menu, push, description=None, retain=False, log_as=None, simulate=True):  # pylint: disable=invalid-name
#     def function_decorator(func):
#         def _bind_stack_parm(stack_item, parm):
#         def wrapper(stack, registry):
#         def ensure(before, after=None, raises=None, close=False):
# def Mode(name, default_value, allowable_values=None):  # pylint: disable=invalid-name
# def ModeChange(key, description, menu, mode_name, to_value):  # pylint: disable=invalid-name


from decimal import Decimal, InvalidOperation
from esc.commands import Menu, Operation, main_menu
import math



log_doc = """Calculate the values of natural or base-10 logarithms."""
log_menu = Menu('l', 'log menu', parent=main_menu, doc=log_doc)


@Operation('l', menu=log_menu, push=1, description='log x', log_as="log {0} = {1}")
def log(bos):
    "Take the base-10 logarithm of bos."
    return bos.log10()

log.ensure(before=[5, 1], after=[5, 0])
log.ensure(before=[10], after=[1])
log.ensure(before=[100], after=[2])
log.ensure(before=[0], after=[Decimal("-Infinity")])
log.ensure(before=[-10], raises=InvalidOperation)


@Operation('1', menu=log_menu, push=1, description='10^x', log_as="10^{0} = {1}")
def tentothex(bos):
    "Take 10 to the power of bos."
    return 10**bos

tentothex.ensure(before=[1], after=[10])
tentothex.ensure(before=[2], after=[100])
tentothex.ensure(before=[0], after=[1])
tentothex.ensure(before=[-2], after=[Decimal(1)/100])



# Path: esc/commands.py
# BINOP = 'binop'
# UNOP = 'unop'
# MAIN_DOC = """
#     The main menu. All other esc functions and menus are eventually accessible
#     from this menu.
# """
# class EscCommand:
# class EscMenu(EscCommand):
# class EscOperation(EscCommand):
# class EscBuiltin(EscCommand):
#     def __init__(self, key, description):
#     def help_title(self):
#     def signature_info(self):
#     def execute(self, access_key, ss, registry):
#     def register_child(self, child):
#     def simulated_result(self, ss, registry):  # pylint: disable=no-self-use, unused-argument
#     def test(self):
#     def __init__(self, key, description, doc, mode_display=None):
#     def __repr__(self):
#     def signature_info(self):
#     def is_main_menu(self):
#     def anonymous_children(self):
#     def named_children(self):
#     def child(self, access_key):
#     def execute(self, access_key, ss, registry):
#     def test(self):
#     def __init__(self, key, func, pop, push, description, menu, retain=False,
#                  log_as=None, simulate=True):
#     def __repr__(self):
#     def __doc__(self):
#     def signature_info(self):
#     def _describe_operation(self, args, retvals, registry):
#     def _insufficient_items_on_stack(self, pops_requested=None):
#     def _retrieve_arguments(self, ss):
#     def _simulated_description(self, args, log, results):
#     def _store_results(self, ss, args, return_values, registry):
#     def execute(self, access_key, ss, registry):  # pylint: disable=useless-return
#     def simulated_result(self, ss, registry):
#     def test(self):
#     def __init__(self):
#     def execute(self, access_key, ss, registry):  # pylint: disable=useless-return
#     def simulated_result(self, ss, registry):
#     def test(self):
#     def signature_info(self):
# def Menu(key, description, parent, doc, mode_display=None):  # pylint: disable=invalid-name
# def Constant(value, key, description, menu):  # pylint: disable=invalid-name
#     def func():
# def Operation(key, menu, push, description=None, retain=False, log_as=None, simulate=True):  # pylint: disable=invalid-name
#     def function_decorator(func):
#         def _bind_stack_parm(stack_item, parm):
#         def wrapper(stack, registry):
#         def ensure(before, after=None, raises=None, close=False):
# def Mode(name, default_value, allowable_values=None):  # pylint: disable=invalid-name
# def ModeChange(key, description, menu, mode_name, to_value):  # pylint: disable=invalid-name


# Path: esc-plugins/log.py
from decimal import Decimal, InvalidOperation
from esc.commands import Menu, Operation, main_menu
import math




log_doc = """Calculate the values of natural or base-10 logarithms."""
log_menu = Menu('l', 'log menu', parent=main_menu, doc=log_doc)


@Operation('l', menu=log_menu, push=1, description='log x', log_as="log {0} = {1}")
def log(bos):
    "Take the base-10 logarithm of bos."
    return bos.log10()

log.ensure(before=[5, 1], after=[5, 0])
log.ensure(before=[10], after=[1])
log.ensure(before=[100], after=[2])
log.ensure(before=[0], after=[Decimal("-Infinity")])
log.ensure(before=[-10], raises=InvalidOperation)


@Operation('1', menu=log_menu, push=1, description='10^x', log_as="10^{0} = {1}")
def tentothex(bos):
    "Take 10 to the power of bos."
    return 10**bos

tentothex.ensure(before=[1], after=[10])
tentothex.ensure(before=[2], after=[100])
tentothex.ensure(before=[0], after=[1])
tentothex.ensure(before=[-2], after=[Decimal(1)/100])



@Operation('n', menu=log_menu, push=1, description='ln x', log_as="ln {0} = {1}")