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)