Source code for abce.goods

from .inventory import Inventory


[docs]class Goods: """ Each agent can access his goods. self['good_name'] shows the quantity of goods of a certain type an agent owns. Goods can be a string or any other python object. """ def __init__(self, id, agent_parameters, simulation_parameters, group, trade_logging, database, check_unchecked_msgs, expiring, perishable, resource_endowment, start_round=None): self._inventory = Inventory((group, id)) self._resources = []
[docs] def possession(self, good): """ returns how much of good an agent possesses. Returns: A number. possession does not return a dictionary for self.log(...), you can use self.possessions([...]) (plural) with self.log. Example:: if self['money'] < 1: self.financial_crisis = True if not(is_positive(self['money']): self.bancrupcy = True """ print("depreciated use self[good] or self.not_reserved[good]") return self._inventory[good]
[docs] def possessions(self): """ returns all possessions """ return self._inventory.possessions()
[docs] def create(self, good, quantity): """ creates quantity of the good out of nothing Use create with care, as long as you use it only for labor and natural resources your model is macro-economically complete. Args: 'good': is the name of the good quantity: number """ self._inventory.create(good, quantity)
[docs] def create_timestructured(self, good, quantity): """ creates quantity of the time structured good out of nothing. For example:: self.creat_timestructured('capital', [10,20,30]) Creates capital. 10 units are 2 years old 20 units are 1 year old and 30 units are new. It can alse be used with a quantity instead of an array. In this case the amount is equally split on the years.:: self.create_timestructured('capital', 60) In this case 20 units are 2 years old 20 units are 1 year old and 20 units are new. Args: 'good': is the name of the good quantity: an arry or number """ self._inventory.create_timestructured(good, quantity)
def _declare_expiring(self, good, duration): """ creates a good that has a limited duration """ self._inventory._declare_expiring(good, duration)
[docs] def not_reserved(self, good): """ Returns the amount of goods that are not reserved for a trade Args: good """ return self._inventory.not_reserved(good)
[docs] def destroy(self, good, quantity=None): """ destroys quantity of the good. If quantity is omitted destroys all Args:: 'good': is the name of the good quantity (optional): number Raises:: NotEnoughGoods: when goods are insufficient """ self._inventory.destroy(good, quantity)
def _register_resource(self, resource, units, product): self._resources.append((resource, units, product)) def _register_perish(self, good): self._inventory._perishable.append(good) def __getitem__(self, good): return self._inventory.haves[good]