In [ ]:
class Field(object):
def add( self, lhs, rhs ):
return ( lhs.a+rhs.a, lhs.b+rhs.b )
def subtract( self, lhs, rhs ):
return ( lhs.a-rhs.a, lhs.b-rhs.b )
def multiply( self, lhs, rhs ):
return ( lhs.a+rhs.a, lhs.b+rhs.b )
field = Field()
class Number(object):
def __init__( self, field, *args )
self .field = field
self .elements = args
def plus( self, rhs ):
return
class FieldNumber(object):
def __init__( self, *args, number=None ):
if number != None:
self.repr = number
else:
self.repr = Number( field, *args )
def __add__( self, rhs ):
if isinstance( rhs, self.__class__ ):
return FieldNumber( self.repr .plus( rhs.repr ) )
elif isinstance( rhs, int ):
return FieldNumber( self.repr .plus( Number( field, rhs ) ) )
else:
raise TypeError("unsupported operand type(s) for +: '{}' and '{}'").format(self.__class__, type(other))
def __sub__( self, rhs ):
if isinstance( rhs, self.__class__ ):
return FieldNumber( self.repr .plus( rhs.repr ) )
elif isinstance( rhs, int ):
return FieldNumber( self.repr .minus( Number( field, rhs ) ) )
else:
raise TypeError("unsupported operand type(s) for +: '{}' and '{}'").format(self.__class__, type(other))
def __neg__( self ) :
return FieldNumber( self.repr .negate() )
def __mul__( self, rhs ) :
if isinstance( rhs, self.__class__ ):
return FieldNumber( self.repr .times( rhs.repr ) )
elif isinstance( rhs, int ):
return FieldNumber( self.repr .times( Number( field, rhs ) ) )
else:
raise TypeError("unsupported operand type(s) for +: '{}' and '{}'").format(self.__class__, type(other))
def __float__( self ) :
return self.repr .value()