MoleculesManager.py 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from intelligine.core.exceptions import BestMoleculeHere, NoMolecule
  2. from intelligine.cst import MOLECULES_INFOS
  3. from intelligine.simulation.molecule.MoleculeFlavour import MoleculeFlavour
  4. from intelligine.simulation.molecule.Molecule import Molecule
  5. class MoleculesManager():
  6. def __init__(self, context):
  7. self._context = context
  8. def get_flavour(self, position):
  9. point_molecules = self._context.metas.value.get(MOLECULES_INFOS,
  10. position,
  11. allow_empty=True,
  12. empty_value={})
  13. return MoleculeFlavour.new_from_raw_data(point_molecules)
  14. def set_flavour(self, position, flavour):
  15. self._context.metas.value.set(MOLECULES_INFOS, position, flavour.get_raw_data())
  16. def get_molecule(self, position, category, type, allow_empty=False):
  17. flavour = self.get_flavour(position)
  18. try:
  19. return flavour.get_molecule(category, type)
  20. except NoMolecule:
  21. if allow_empty:
  22. return Molecule()
  23. raise
  24. def increment_with_molecule(self, position, apposed_molecule, cycle_age):
  25. flavour = self.get_flavour(position)
  26. try:
  27. position_molecule = flavour.get_molecule(apposed_molecule.get_category(), apposed_molecule.get_type())
  28. except NoMolecule:
  29. position_molecule = Molecule(apposed_molecule.get_category(),
  30. apposed_molecule.get_type(),
  31. distance=apposed_molecule.get_distance(),
  32. cycle_age=cycle_age)
  33. position_molecule.increment_intensity(apposed_molecule.get_intensity())
  34. if apposed_molecule.get_distance() < position_molecule.get_distance():
  35. position_molecule.set_distance(apposed_molecule.get_distance())
  36. flavour.set_molecule(position_molecule)
  37. self.set_flavour(position, flavour)
  38. if apposed_molecule.get_distance() > position_molecule.get_distance():
  39. raise BestMoleculeHere(position_molecule.get_distance())