Spaces:
Running
Running
''' | |
ARTHIMETIC OPERATORS | |
This file contains Python classes that define the arithmetic operators for program synthesis. | |
''' | |
''' | |
CLASS DEFINITIONS | |
''' | |
class IntegerVariable: | |
''' | |
Class to represent an integer variable. Note that position is the position of the variable in the input. | |
For example, if the input is [4, 5, 6] and the variable is the third element (i.e., 6), then position = 2. | |
''' | |
def __init__(self, position): | |
self.value = None # value of the variable, initially None | |
self.position = position # position of the variable in the arguments to program | |
self.type = int # type of the variable | |
def assign(self, value): | |
self.value = value | |
def evaluate(self): | |
return self.value | |
def str(self): | |
return f"x{self.position}" | |
class IntegerConstant: | |
''' | |
Class to represent an integer constant. | |
''' | |
def __init__(self, value): | |
self.value = value # value of the constant | |
self.type = int # type of the constant | |
def evaluate(self): | |
return self.value | |
def str(self): | |
return str(self.value) | |
class Add: | |
''' | |
Operator to add two numerical values. | |
''' | |
def __init__(self): | |
self.arity = 2 # number of arguments | |
self.arg_types = [int, int] # argument types | |
self.return_type = int # return type | |
self.weight = 1 # weight | |
def evaluate(self, x, y): | |
return x + y | |
def str(self, x, y): | |
return f"({x} + {y})" | |
class Subtract: | |
''' | |
Operator to subtract two numerical values. | |
''' | |
def __init__(self): | |
self.arity = 2 # number of arguments | |
self.arg_types = [int, int] # argument types | |
self.return_type = int # return type | |
self.weight = 1 # weight | |
def evaluate(self, x, y): | |
return x - y | |
def str(self, x, y): | |
return f"({x} - {y})" | |
class Multiply: | |
''' | |
Operator to multiply two numerical values. | |
''' | |
def __init__(self): | |
self.arity = 2 # number of arguments | |
self.arg_types = [int, int] # argument types | |
self.return_type = int # return type | |
self.weight = 1 # weight | |
def evaluate(self, x, y): | |
return x * y | |
def str(self, x, y): | |
return f"({x} * {y})" | |
class Divide: | |
''' | |
Operator to divide two numerical values. | |
''' | |
def __init__(self): | |
self.arity = 2 # number of arguments | |
self.arg_types = [int, int] # argument types | |
self.return_type = int # return type | |
self.weight = 1 # weight | |
def evaluate(self, x, y): | |
try: # check for division by zero error | |
return x / y | |
except ZeroDivisionError: | |
return None | |
def str(self, x, y): | |
return f"({x} / {y})" | |
''' | |
GLOBAL CONSTANTS | |
''' | |
# define operators | |
arithmetic_operators = [Add(), Subtract(), Multiply(), Divide()] |