From 477b41995b32959c59f711097f74050909ec213c Mon Sep 17 00:00:00 2001
From: pgleeson
Date: Thu, 14 Sep 2023 18:21:03 +0100
Subject: [PATCH 1/3] Update to v0.5.7
---
docs/NeuroMLlite_specification.json | 2 +-
docs/NeuroMLlite_specification.yaml | 2 +-
docs/README.md | 2 +-
examples/Example10_Lorenz.json | 2 +-
examples/Example11_Synapses.json | 2 +-
examples/Example11_Synapses.net.nml | 2 +-
examples/Example12_MultiComp.json | 2 +-
examples/Example1_TestNetwork.json | 2 +-
examples/Example2_TestNetwork.json | 2 +-
examples/Example2_TestNetwork.net.nml | 2 +-
examples/Example3_Network.json | 2 +-
examples/Example3_Network.net.nml | 2 +-
examples/Example4_PyNN.json | 2 +-
examples/Example4_PyNN.net.nml | 2 +-
examples/Example4_PyNN.yaml | 2 +-
examples/Example6_PyNN.json | 2 +-
examples/Example6_PyNN.net.nml | 2 +-
examples/Example6_PyNN_noinputs.json | 2 +-
examples/Example6_PyNN_noinputs.net.nml | 2 +-
examples/Example7_Brunel2000.json | 2 +-
examples/Example7_Brunel2000.net.nml | 2 +-
examples/Example8_Extension.json | 2 +-
examples/Example9_HindmarshRose.json | 2 +-
examples/SimExample10.json | 2 +-
examples/SimExample11.json | 2 +-
examples/SimExample12_MultiComp.json | 2 +-
examples/SimExample3.json | 2 +-
examples/SimExample4.json | 2 +-
examples/SimExample4.yaml | 2 +-
examples/SimExample6_PyNN.json | 2 +-
examples/SimExample7.json | 2 +-
examples/SimExample8.json | 2 +-
examples/SimExample9.json | 2 +-
examples/arbor/ArborExample.json | 2 +-
examples/arbor/ArborExample.yaml | 2 +-
examples/arbor/SimArborExample.json | 2 +-
examples/arbor/SimArborExample.yaml | 2 +-
examples/spikeratetest/SimSpikers.json | 2 +-
examples/spikeratetest/Spikers.json | 2 +-
neuromllite/__init__.py | 2 +-
40 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/docs/NeuroMLlite_specification.json b/docs/NeuroMLlite_specification.json
index 97e83be..48f192e 100644
--- a/docs/NeuroMLlite_specification.json
+++ b/docs/NeuroMLlite_specification.json
@@ -1,5 +1,5 @@
{
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"specification": {
"Network": {
"definition": "A Network containing multiple Population's, connected by Projection's and receiving Input's",
diff --git a/docs/NeuroMLlite_specification.yaml b/docs/NeuroMLlite_specification.yaml
index b06e069..c05d843 100644
--- a/docs/NeuroMLlite_specification.yaml
+++ b/docs/NeuroMLlite_specification.yaml
@@ -1,4 +1,4 @@
-version: NeuroMLlite v0.5.6
+version: NeuroMLlite v0.5.7
specification:
Network:
definition: A Network containing multiple Population's, connected by Projection's
diff --git a/docs/README.md b/docs/README.md
index 21c7b9d..1833050 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,4 +1,4 @@
-# Specification of NeuroMLlite v0.5.6
+# Specification of NeuroMLlite v0.5.7
**Note: the NeuroMLlite specification is still in development! Subject to change...**
## Network
diff --git a/examples/Example10_Lorenz.json b/examples/Example10_Lorenz.json
index cf08693..5380a74 100644
--- a/examples/Example10_Lorenz.json
+++ b/examples/Example10_Lorenz.json
@@ -1,6 +1,6 @@
{
"Example10_Lorenz": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 10: Lorenz",
"parameters": {
"N": 1,
diff --git a/examples/Example11_Synapses.json b/examples/Example11_Synapses.json
index 38a13b2..e8a3ace 100644
--- a/examples/Example11_Synapses.json
+++ b/examples/Example11_Synapses.json
@@ -1,6 +1,6 @@
{
"Example11_Synapses": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 11: synaptic properties",
"parameters": {
"input_amp": 0.23,
diff --git a/examples/Example11_Synapses.net.nml b/examples/Example11_Synapses.net.nml
index f0ba49c..34f2db2 100644
--- a/examples/Example11_Synapses.net.nml
+++ b/examples/Example11_Synapses.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example11_Synapses
Generation seed: 1234
NeuroMLlite parameters:
diff --git a/examples/Example12_MultiComp.json b/examples/Example12_MultiComp.json
index d3e8b64..899d352 100644
--- a/examples/Example12_MultiComp.json
+++ b/examples/Example12_MultiComp.json
@@ -1,6 +1,6 @@
{
"Example12_MultiComp": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 12: Multicompartmental cells...",
"parameters": {
"N": 20,
diff --git a/examples/Example1_TestNetwork.json b/examples/Example1_TestNetwork.json
index 42b2e44..76a405a 100644
--- a/examples/Example1_TestNetwork.json
+++ b/examples/Example1_TestNetwork.json
@@ -1,6 +1,6 @@
{
"TestNetwork": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "A simple network with 2 populations & projection between them. No info yet on what the cells are so network can't be simulated.",
"populations": {
"pop0": {
diff --git a/examples/Example2_TestNetwork.json b/examples/Example2_TestNetwork.json
index 1621a12..42e386d 100644
--- a/examples/Example2_TestNetwork.json
+++ b/examples/Example2_TestNetwork.json
@@ -1,6 +1,6 @@
{
"Example2_TestNetwork": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "A simple network with 2 populations & projection between them. Cells are specified to be NeuroML 2 HH cell models & pre population is given a spiking input.",
"cells": {
"hhcell": {
diff --git a/examples/Example2_TestNetwork.net.nml b/examples/Example2_TestNetwork.net.nml
index 24ba6e2..e1de4e8 100644
--- a/examples/Example2_TestNetwork.net.nml
+++ b/examples/Example2_TestNetwork.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example2_TestNetwork
Generation seed: 1234
diff --git a/examples/Example3_Network.json b/examples/Example3_Network.json
index a40d1c2..a323ac5 100644
--- a/examples/Example3_Network.json
+++ b/examples/Example3_Network.json
@@ -1,6 +1,6 @@
{
"Example3_Network": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 3: simple network with 2 populations of NeuroML2 cells, a projection between them and spiking input.",
"cells": {
"hhcell": {
diff --git a/examples/Example3_Network.net.nml b/examples/Example3_Network.net.nml
index 72236a8..8993003 100644
--- a/examples/Example3_Network.net.nml
+++ b/examples/Example3_Network.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example3_Network
Generation seed: 1234
diff --git a/examples/Example4_PyNN.json b/examples/Example4_PyNN.json
index 2c09034..69ae655 100644
--- a/examples/Example4_PyNN.json
+++ b/examples/Example4_PyNN.json
@@ -1,6 +1,6 @@
{
"Example4_PyNN": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 4: a network with PyNN cells & inputs",
"parameters": {
"input_amp": 0.99
diff --git a/examples/Example4_PyNN.net.nml b/examples/Example4_PyNN.net.nml
index 434c3c1..20d156f 100644
--- a/examples/Example4_PyNN.net.nml
+++ b/examples/Example4_PyNN.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example4_PyNN
Generation seed: 1234
NeuroMLlite parameters:
diff --git a/examples/Example4_PyNN.yaml b/examples/Example4_PyNN.yaml
index 200020e..b9895fb 100644
--- a/examples/Example4_PyNN.yaml
+++ b/examples/Example4_PyNN.yaml
@@ -1,5 +1,5 @@
Example4_PyNN:
- version: NeuroMLlite v0.5.6
+ version: NeuroMLlite v0.5.7
notes: 'Example 4: a network with PyNN cells & inputs'
parameters:
input_amp: 0.99
diff --git a/examples/Example6_PyNN.json b/examples/Example6_PyNN.json
index 69a2c69..90719f4 100644
--- a/examples/Example6_PyNN.json
+++ b/examples/Example6_PyNN.json
@@ -1,6 +1,6 @@
{
"Example6_PyNN": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Another network for PyNN - work in progress...",
"parameters": {
"N_scaling": 0.005,
diff --git a/examples/Example6_PyNN.net.nml b/examples/Example6_PyNN.net.nml
index 1baf9de..4fe9d45 100644
--- a/examples/Example6_PyNN.net.nml
+++ b/examples/Example6_PyNN.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example6_PyNN
Generation seed: 1234
NeuroMLlite parameters:
diff --git a/examples/Example6_PyNN_noinputs.json b/examples/Example6_PyNN_noinputs.json
index b1d1739..a141bf4 100644
--- a/examples/Example6_PyNN_noinputs.json
+++ b/examples/Example6_PyNN_noinputs.json
@@ -1,6 +1,6 @@
{
"Example6_PyNN_noinputs": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Another network for PyNN - work in progress...",
"parameters": {
"N_scaling": 0.005,
diff --git a/examples/Example6_PyNN_noinputs.net.nml b/examples/Example6_PyNN_noinputs.net.nml
index 1532ac5..acc00d0 100644
--- a/examples/Example6_PyNN_noinputs.net.nml
+++ b/examples/Example6_PyNN_noinputs.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example6_PyNN_noinputs
Generation seed: 1234
NeuroMLlite parameters:
diff --git a/examples/Example7_Brunel2000.json b/examples/Example7_Brunel2000.json
index e4c6507..1876d95 100644
--- a/examples/Example7_Brunel2000.json
+++ b/examples/Example7_Brunel2000.json
@@ -1,6 +1,6 @@
{
"Example7_Brunel2000": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 7: based on network of Brunel 2000",
"parameters": {
"g": 4,
diff --git a/examples/Example7_Brunel2000.net.nml b/examples/Example7_Brunel2000.net.nml
index 5a0fe13..767a913 100644
--- a/examples/Example7_Brunel2000.net.nml
+++ b/examples/Example7_Brunel2000.net.nml
@@ -1,5 +1,5 @@
- Generated by NeuroMLlite v0.5.6
+ Generated by NeuroMLlite v0.5.7
Generated network: Example7_Brunel2000
Generation seed: 1234
NeuroMLlite parameters:
diff --git a/examples/Example8_Extension.json b/examples/Example8_Extension.json
index a8a8802..ca00411 100644
--- a/examples/Example8_Extension.json
+++ b/examples/Example8_Extension.json
@@ -1,6 +1,6 @@
{
"Example8_Extension": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 8: general testing...",
"parameters": {
"N": 10,
diff --git a/examples/Example9_HindmarshRose.json b/examples/Example9_HindmarshRose.json
index 981d927..7792ec6 100644
--- a/examples/Example9_HindmarshRose.json
+++ b/examples/Example9_HindmarshRose.json
@@ -1,6 +1,6 @@
{
"Example9_HindmarshRose": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example 9: HindmarshRose",
"parameters": {
"N": 1,
diff --git a/examples/SimExample10.json b/examples/SimExample10.json
index 9db7fb2..3326ea9 100644
--- a/examples/SimExample10.json
+++ b/examples/SimExample10.json
@@ -1,6 +1,6 @@
{
"SimExample10": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example10_Lorenz.json",
"duration": 10000.0,
"dt": 1.0,
diff --git a/examples/SimExample11.json b/examples/SimExample11.json
index 9e0e83d..e816096 100644
--- a/examples/SimExample11.json
+++ b/examples/SimExample11.json
@@ -1,6 +1,6 @@
{
"SimExample11": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example11_Synapses.json",
"duration": 1000.0,
"dt": 0.01,
diff --git a/examples/SimExample12_MultiComp.json b/examples/SimExample12_MultiComp.json
index b3d3027..7833778 100644
--- a/examples/SimExample12_MultiComp.json
+++ b/examples/SimExample12_MultiComp.json
@@ -1,6 +1,6 @@
{
"SimExample12_MultiComp": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example12_MultiComp.json",
"duration": 1000.0,
"dt": 0.025,
diff --git a/examples/SimExample3.json b/examples/SimExample3.json
index 014f679..30e11d9 100644
--- a/examples/SimExample3.json
+++ b/examples/SimExample3.json
@@ -1,6 +1,6 @@
{
"SimExample3": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example3_Network.json",
"duration": 1000.0,
"dt": 0.025,
diff --git a/examples/SimExample4.json b/examples/SimExample4.json
index b6c3b77..309083d 100644
--- a/examples/SimExample4.json
+++ b/examples/SimExample4.json
@@ -1,6 +1,6 @@
{
"SimExample4": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example4_PyNN.json",
"duration": 1000.0,
"dt": 0.01,
diff --git a/examples/SimExample4.yaml b/examples/SimExample4.yaml
index cafde8c..875fcf9 100644
--- a/examples/SimExample4.yaml
+++ b/examples/SimExample4.yaml
@@ -1,5 +1,5 @@
SimExample4:
- version: NeuroMLlite v0.5.6
+ version: NeuroMLlite v0.5.7
network: Example4_PyNN.yaml
duration: 1000.0
dt: 0.01
diff --git a/examples/SimExample6_PyNN.json b/examples/SimExample6_PyNN.json
index dde062c..a0686d6 100644
--- a/examples/SimExample6_PyNN.json
+++ b/examples/SimExample6_PyNN.json
@@ -1,6 +1,6 @@
{
"SimExample6_PyNN": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example6_PyNN.json",
"duration": 100.0,
"dt": 0.025,
diff --git a/examples/SimExample7.json b/examples/SimExample7.json
index 7b64fb2..b827ae4 100644
--- a/examples/SimExample7.json
+++ b/examples/SimExample7.json
@@ -1,6 +1,6 @@
{
"SimExample7": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example7_Brunel2000.json",
"duration": 1000.0,
"dt": 0.025,
diff --git a/examples/SimExample8.json b/examples/SimExample8.json
index ee18df1..e7924ab 100644
--- a/examples/SimExample8.json
+++ b/examples/SimExample8.json
@@ -1,6 +1,6 @@
{
"SimExample8": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example8_Extension.json",
"duration": 1000.0,
"dt": 0.025,
diff --git a/examples/SimExample9.json b/examples/SimExample9.json
index 76b663f..31eefa7 100644
--- a/examples/SimExample9.json
+++ b/examples/SimExample9.json
@@ -1,6 +1,6 @@
{
"SimExample9": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Example9_HindmarshRose.json",
"duration": 1000000.0,
"dt": 25.0,
diff --git a/examples/arbor/ArborExample.json b/examples/arbor/ArborExample.json
index bd5482a..3b7acec 100644
--- a/examples/arbor/ArborExample.json
+++ b/examples/arbor/ArborExample.json
@@ -1,6 +1,6 @@
{
"ArborExample": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example for testing Arbor",
"parameters": {
"v_init": -50,
diff --git a/examples/arbor/ArborExample.yaml b/examples/arbor/ArborExample.yaml
index 8eec8be..f3d8586 100644
--- a/examples/arbor/ArborExample.yaml
+++ b/examples/arbor/ArborExample.yaml
@@ -1,5 +1,5 @@
ArborExample:
- version: NeuroMLlite v0.5.6
+ version: NeuroMLlite v0.5.7
notes: Example for testing Arbor
parameters:
v_init: -50
diff --git a/examples/arbor/SimArborExample.json b/examples/arbor/SimArborExample.json
index ed7049a..ca27e3b 100644
--- a/examples/arbor/SimArborExample.json
+++ b/examples/arbor/SimArborExample.json
@@ -1,6 +1,6 @@
{
"SimArborExample": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "ArborExample.json",
"duration": 100.0,
"dt": 0.01,
diff --git a/examples/arbor/SimArborExample.yaml b/examples/arbor/SimArborExample.yaml
index 499e559..6951a5b 100644
--- a/examples/arbor/SimArborExample.yaml
+++ b/examples/arbor/SimArborExample.yaml
@@ -1,5 +1,5 @@
SimArborExample:
- version: NeuroMLlite v0.5.6
+ version: NeuroMLlite v0.5.7
network: ArborExample.yaml
duration: 100.0
dt: 0.01
diff --git a/examples/spikeratetest/SimSpikers.json b/examples/spikeratetest/SimSpikers.json
index 330a9ad..65b72b0 100644
--- a/examples/spikeratetest/SimSpikers.json
+++ b/examples/spikeratetest/SimSpikers.json
@@ -1,6 +1,6 @@
{
"SimSpikers": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"network": "Spikers.json",
"duration": 10000.0,
"dt": 0.025,
diff --git a/examples/spikeratetest/Spikers.json b/examples/spikeratetest/Spikers.json
index 4f6f83e..9ce401e 100644
--- a/examples/spikeratetest/Spikers.json
+++ b/examples/spikeratetest/Spikers.json
@@ -1,6 +1,6 @@
{
"Spikers": {
- "version": "NeuroMLlite v0.5.6",
+ "version": "NeuroMLlite v0.5.7",
"notes": "Example with spiking entities..",
"parameters": {
"N": 10,
diff --git a/neuromllite/__init__.py b/neuromllite/__init__.py
index 8e6cb7f..ca81abc 100644
--- a/neuromllite/__init__.py
+++ b/neuromllite/__init__.py
@@ -1,6 +1,6 @@
import collections
-__version__ = "0.5.6"
+__version__ = "0.5.7"
# import pyNN
# import nest
From c87a2a4fd4f4279566764d7124deb6ded9286ea9 Mon Sep 17 00:00:00 2001
From: pgleeson
Date: Thu, 14 Sep 2023 18:21:20 +0100
Subject: [PATCH 2/3] Test validity of more nml files
---
examples/test_files/.test.validate.omt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/test_files/.test.validate.omt b/examples/test_files/.test.validate.omt
index 3f0f9e9..14ba677 100644
--- a/examples/test_files/.test.validate.omt
+++ b/examples/test_files/.test.validate.omt
@@ -1,5 +1,5 @@
# Script for running automated tests on OSB using Travis-CI, see https://github.com/OpenSourceBrain/osb-model-validation
# This test will validate all of the NeuroML 2 files in the current directory using: jnml -validate *.nml
-target: "*.nml"
+target: "../Example2_TestNetwork.net.nml ../Example3_Network.net.nml ../Example4_PyNN.net.nml ../Example6_PyNN.net.nml ../Example7_Brunel2000.net.nml ../Example12_MultiComp.net.nml *.nml"
engine: jNeuroML_validate
From d192a5a18109f858d6dc79834429534bc1a6bc63 Mon Sep 17 00:00:00 2001
From: pgleeson
Date: Thu, 14 Sep 2023 18:50:40 +0100
Subject: [PATCH 3/3] Updates to MDF handler
---
neuromllite/MDFHandler.py | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/neuromllite/MDFHandler.py b/neuromllite/MDFHandler.py
index e30d3d7..b6bb48e 100644
--- a/neuromllite/MDFHandler.py
+++ b/neuromllite/MDFHandler.py
@@ -253,9 +253,13 @@ def _comp_to_mdf_node(self, nmllite_comp, lems_comp_id, size=1, properties=None)
print_v(
"All LEMS Components in known LEMS model: %s"
- % list(model.components.keys())
+ % sorted(list(model.components.keys()))
)
- print_v("This comp: %s" % lems_comp)
+ print_v(
+ "All LEMS ComponentTypes in known LEMS model: %s"
+ % sorted(list(model.component_types.keys()))
+ )
+ print_v("This LEMS comp: %s" % lems_comp)
comp_type_name = lems_comp.type
lems_comp_type = model.component_types.get(comp_type_name)
print_v("lems_comp_type: %s" % lems_comp_type)
@@ -405,6 +409,7 @@ def _comp_to_mdf_node(self, nmllite_comp, lems_comp_id, size=1, properties=None)
# node["parameters"][sv.name]["value"] = [0]*size
node["output_ports"][sv.name] = {"value": sv.name}
+ print_v("Adding %s as an output port"%sv.name)
if sv.exposure:
node["output_ports"][sv.exposure] = {"value": sv.name}
@@ -515,21 +520,25 @@ def _replace_in_condition_test(self, test):
def _get_all_elements_in_lems(cls, component_type, model, child_type):
ee = []
if child_type == "exposure":
- for e in component_type.exposures:
- ee.append(e)
+ if hasattr(component_type, "exposures"):
+ for e in component_type.exposures:
+ ee.append(e)
elif child_type == "constant":
- for c in component_type.constants:
- ee.append(c)
+ if hasattr(component_type, "constants"):
+ for c in component_type.constants:
+ ee.append(c)
elif child_type == "event_port":
- for e in component_type.event_ports:
- ee.append(e)
+ if hasattr(component_type, "event_ports"):
+ for e in component_type.event_ports:
+ ee.append(e)
elif child_type == "properties":
- for p in component_type.properties:
- ee.append(p)
+ if hasattr(component_type, "properties"):
+ for p in component_type.properties:
+ ee.append(p)
else:
raise Exception("Cannot get child of type: %s in LEMS model" % child_type)
- if component_type.extends:
+ if hasattr(component_type, "extends") and component_type.extends:
ect = model.component_types[component_type.extends]
ee.extend(cls._get_all_elements_in_lems(ect, model, child_type))