BrainLoader.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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.Neuron import Neuron
  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_brain(self):
  19. """
  20. return a brain object from YAML settings
  21. :return: Brain object
  22. :rtype: Brain
  23. """
  24. # get the brain with dict
  25. dict_brain = self.get_config()
  26. # create a new brain
  27. brain = Brain()
  28. # create list of Synapse
  29. synapses = list()
  30. for synapes_dict in dict_brain:
  31. # print synapes_dict
  32. if ConfigurationChecker().check_synape_dict(synapes_dict):
  33. # print "synapes_dict ok"
  34. name = synapes_dict["name"]
  35. neurons = self._get_neurons(synapes_dict["neurons"])
  36. signals = self._get_signals(synapes_dict["signals"])
  37. new_synapse = Synapse(name=name, neurons=neurons, signals=signals)
  38. synapses.append(new_synapse)
  39. brain.synapes = synapses
  40. # check that no synapse have the same name than another
  41. if ConfigurationChecker().check_synapes(synapses):
  42. return brain
  43. return None
  44. def _get_neurons(self, neurons_dict):
  45. """
  46. Get a list of Neuron object from a neuron dict
  47. :param neurons_dict:
  48. :return:
  49. """
  50. neurons = list()
  51. for neuron_dict in neurons_dict:
  52. # print neuron_dict
  53. if ConfigurationChecker().check_neuron_dict(neuron_dict):
  54. # print "Neurons dict ok"
  55. for neuron_name in neuron_dict:
  56. name = neuron_name
  57. parameters = neuron_dict[name]
  58. # print parameters
  59. new_neuron = Neuron(name=name, parameters=parameters)
  60. neurons.append(new_neuron)
  61. return neurons
  62. def _get_signals(self, signals_dict):
  63. # print signals_dict
  64. signals = list()
  65. for signal_dict in signals_dict:
  66. if ConfigurationChecker().check_signal_dict(signal_dict):
  67. # print "Signals dict ok"
  68. event_or_order = self._get_event_or_order_from_dict(signal_dict)
  69. signals.append(event_or_order)
  70. return signals
  71. @staticmethod
  72. def _get_event_or_order_from_dict(signal_or_event_dict):
  73. if 'event' in signal_or_event_dict:
  74. # print "is event"
  75. event = signal_or_event_dict["event"]
  76. if ConfigurationChecker.check_event_dict(event):
  77. return Event(period=event["period"])
  78. if 'order' in signal_or_event_dict:
  79. order = signal_or_event_dict["order"]
  80. if ConfigurationChecker.check_order_dict(order):
  81. return Order(sentence=order)