Source code for abce.contracts.contracts
from copy import copy
[docs]class Contracts(set):
def __init__(self, par=set()):
super(Contracts, self).__init__(par)
[docs] def add(self, entry):
assert entry not in self
super().add(entry)
[docs] def remove(self, entry):
super().remove(entry)
[docs] def possessions(self):
return copy(self)
[docs] def possession(self, typ):
ret = set()
for contract in self:
if isinstance(contract, typ):
ret.add(contract)
return ret
[docs] def calculate_netvalue(self, parameters, value_functions):
return sum(value_functions[entry.__class__](entry, parameters)
for entry in self)
[docs] def calculate_assetvalue(self, parameters, value_functions):
return sum(max(value_functions[entry.__class__](entry, parameters), 0)
for entry in self)
[docs] def calculate_liablityvalue(self, parameters, value_functions):
return sum(min(value_functions[entry.__class__](entry, parameters), 0)
for entry in self)
[docs] def calculate_valued_assets(self, parameters, value_functions):
ret = {str(entry): value_functions[entry.__class__](entry, parameters)
for entry in self
if value_functions[entry.__class__](entry, parameters) >= 0}
return ret
[docs] def calculate_valued_liablities(self, parameters, value_functions):
ret = {str(entry): value_functions[entry.__class__](entry, parameters)
for entry in self
if value_functions[entry.__class__](entry, parameters) < 0}
return ret
# contracts
def _advance_round(self, round):
du = set(filter(lambda c: c.terminated, self))
self.difference_update(du)