""" B-ASIC Core Operations Module. TODO: More info. """ from b_asic.operation import OperationId, Operation, BasicOperation from numbers import Number from typing import final class Input(Operation): """ Input operation. TODO: More info. """ # TODO: Implement. pass class Constant(BasicOperation): """ Constant value operation. TODO: More info. """ def __init__(self, identifier: OperationId, value: Number): """ Construct a Constant. """ super().__init__(identifier) self._output_ports = [OutputPort()] # TODO: Generate appropriate ID for ports. self._parameters["value"] = value @final def evaluate(self, inputs: list) -> list: return [self.param("value")] class Addition(BasicOperation): """ Binary addition operation. TODO: More info. """ def __init__(self, identifier: OperationId): """ Construct an Addition. """ super().__init__(identifier) self._input_ports = [InputPort(), InputPort()] # TODO: Generate appropriate ID for ports. self._output_ports = [OutputPort()] # TODO: Generate appropriate ID for ports. @final def evaluate(self, inputs: list) -> list: return [inputs[0] + inputs[1]] class ConstantMultiplication(BasicOperation): """ Unary constant multiplication operation. TODO: More info. """ def __init__(self, identifier: OperationId, coefficient: Number): """ Construct a ConstantMultiplication. """ super().__init__(identifier) self._input_ports = [InputPort()] # TODO: Generate appropriate ID for ports. self._output_ports = [OutputPort()] # TODO: Generate appropriate ID for ports. self._parameters["coefficient"] = coefficient @final def evaluate(self, inputs: list) -> list: return [inputs[0] * self.param("coefficient")] # TODO: More operations.