MatchedSynapse.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import copy
  2. from kalliope.core.NeuronParameterLoader import NeuronParameterLoader
  3. class MatchedSynapse(object):
  4. """
  5. This class represent a synapse that has matched an order send by an User.
  6. """
  7. def __init__(self, matched_synapse=None, matched_order=None, user_order=None, overriding_parameter=None):
  8. """
  9. :param matched_synapse: The synapse that has matched in the brain.
  10. :param matched_order: The order from the synapse that have matched.
  11. :param user_order: The order said by the user.
  12. :param overriding_parameter: If set, those parameters will over
  13. """
  14. # create a copy of the synapse. the received synapse come from the brain.
  15. self.synapse = matched_synapse
  16. # create a fifo list that contains all neurons to process.
  17. # Create a copy to be sure when we remove a neuron from this list it will not be removed from the synapse's
  18. # neuron list
  19. self.neuron_fifo_list = copy.deepcopy(self.synapse.neurons)
  20. self.matched_order = matched_order
  21. self.parameters = dict()
  22. if matched_order is not None:
  23. self.parameters = NeuronParameterLoader.get_parameters(synapse_order=self.matched_order,
  24. user_order=user_order)
  25. if overriding_parameter is not None:
  26. # merge dict of parameters with overriding
  27. self.parameters.update(overriding_parameter)
  28. # list of Neuron Module
  29. self.neuron_module_list = list()
  30. def __str__(self):
  31. return str(self.serialize())
  32. def serialize(self):
  33. """
  34. This method allows to serialize in a proper way this object
  35. :return: A dict of name and parameters
  36. :rtype: Dict
  37. """
  38. return {
  39. 'synapse_name': self.synapse.name,
  40. 'matched_order': self.matched_order,
  41. 'neuron_module_list': [e.serialize() for e in self.neuron_module_list]
  42. }
  43. def __eq__(self, other):
  44. """
  45. This is used to compare 2 objects
  46. :param other:
  47. :return:
  48. """
  49. return self.__dict__ == other.__dict__