BrainLoader.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from YAMLLoader import YAMLLoader
  2. from core.ConfigurationManager.ConfigurationChecker import ConfigurationChecker
  3. from core.Models.Brain import Brain
  4. from core.Models.Event import Event
  5. from core.Models.Neurone import Neurone
  6. from core.Models.Order import Order
  7. from core.Models.Synapse import Synapse
  8. FILE_NAME = "brain.yml"
  9. class BrainLoader(YAMLLoader):
  10. def __init__(self, filename=None):
  11. self.fileName = filename
  12. if filename is None:
  13. self.fileName = FILE_NAME
  14. self.filePath = "../../" + self.fileName
  15. YAMLLoader.__init__(self, self.filePath)
  16. def get_config(self):
  17. return YAMLLoader.get_config(self)
  18. def get_events(self):
  19. events_in_brain = list()
  20. for el in self.get_config():
  21. whens = el["when"]
  22. for when in whens:
  23. # if key event exist in when of the task
  24. if 'event' in when:
  25. events_in_brain.append(when['event'])
  26. return events_in_brain
  27. def get_brain(self):
  28. """
  29. return a brain object from YAML settings
  30. :return: Brain object
  31. :rtype: Brain
  32. """
  33. # get the brain with dict
  34. dict_brain = self.get_config()
  35. # create a new brain
  36. brain = Brain()
  37. # create list of Synapse
  38. synapses = list()
  39. for synapes_dict in dict_brain:
  40. # print synapes_dict
  41. if ConfigurationChecker().check_synape_dict(synapes_dict):
  42. # print "synapes_dict ok"
  43. name = synapes_dict["name"]
  44. neurons = self._get_neurons(synapes_dict["neurons"])
  45. signals = self._get_signals(synapes_dict["signals"])
  46. new_synapse = Synapse(name=name, neurons=neurons, signals=signals)
  47. synapses.append(new_synapse)
  48. brain.synapes = synapses
  49. return brain
  50. def _get_neurons(self, neurons_dict):
  51. """
  52. Get a list of Neuron object from a neuron dict
  53. :param neurons_dict:
  54. :return:
  55. """
  56. neurons = list()
  57. for neuron_dict in neurons_dict:
  58. # print neuron_dict
  59. if ConfigurationChecker().check_neuron_dict(neuron_dict):
  60. # print "Neurons dict ok"
  61. for neuron_name in neuron_dict:
  62. name = neuron_name
  63. parameters = neuron_dict[name]
  64. # print parameters
  65. new_neuron = Neurone(name=name, parameters=parameters)
  66. neurons.append(new_neuron)
  67. return neurons
  68. def _get_signals(self, signals_dict):
  69. # print signals_dict
  70. signals = list()
  71. for signal_dict in signals_dict:
  72. if ConfigurationChecker().check_signal_dict(signal_dict):
  73. # print "Signals dict ok"
  74. event_or_order = self._get_event_or_order_from_dict(signal_dict)
  75. signals.append(event_or_order)
  76. return signals
  77. @staticmethod
  78. def _get_event_or_order_from_dict(signal_or_event_dict):
  79. if 'event' in signal_or_event_dict:
  80. # print "is event"
  81. event = signal_or_event_dict["event"]
  82. if ConfigurationChecker.check_event_dict(event):
  83. return Event(identifier=event["id"], period=event["period"])
  84. if 'order' in signal_or_event_dict:
  85. order = signal_or_event_dict["order"]
  86. if ConfigurationChecker.check_order_dict(order):
  87. return Order(sentence=order)