From f35d8e0aee395254c9cdcf22339fae5910aad5de Mon Sep 17 00:00:00 2001 From: samkitshah1262 Date: Fri, 17 Jan 2025 00:35:31 +0530 Subject: [PATCH 1/2] utility function list params in ComponentType --- pyneuroml/utils/info.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pyneuroml/utils/info.py b/pyneuroml/utils/info.py index 0619735a..e1b25271 100644 --- a/pyneuroml/utils/info.py +++ b/pyneuroml/utils/info.py @@ -306,3 +306,29 @@ def cell_info(cell: Cell) -> str: ) return info + + +def list_params(nml2_doc: NeuroMLDocument) -> str: + """List all parameters in ComponentType definitions. + + :param nml2_doc: NeuroMLDocument object + :type nml2_doc: NeuroMLDocument + :returns: Formatted string listing parameters + """ + info = f"Parameters in NeuroML 2 document: {nml2_doc.id}\n" + + for component in nml2_doc.ComponentType: + info += f"\nComponentType: {component.name}\n" + + members = inspect.getmembers(component) + params = [m[1] for m in members if m[0] == "parameters"] + + if params: + for param in params[0]: + param_name = param.name if hasattr(param, "name") else "UnnamedParam" + param_value = param.value if hasattr(param, "value") else "NoValue" + info += f" - {param_name}: {param_value}\n" + else: + info += " No parameters found.\n" + + return info From d70234f022378565015358f7cde317a2547be909 Mon Sep 17 00:00:00 2001 From: samkitshah1262 Date: Fri, 24 Jan 2025 20:06:06 +0530 Subject: [PATCH 2/2] added unit test --- tests/utils/test_utils.py | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py index ecb255d5..e8a0cbea 100644 --- a/tests/utils/test_utils.py +++ b/tests/utils/test_utils.py @@ -11,6 +11,7 @@ import math import os import pathlib as pl +from unittest.mock import MagicMock import neuroml @@ -22,6 +23,7 @@ translate_cell_to_coords, ) from pyneuroml.utils.components import add_new_component +from pyneuroml.utils.info import list_params from .. import BaseTestCase @@ -293,3 +295,49 @@ def test_adding_new_components(self): self.assertIsNotNone(new_comp) self.assertIsFile(new_comp_file) os.unlink(new_comp_file) + + def setUp(self): + """Set up a mock NeuroMLDocument with dummy ComponentType instances.""" + self.nml_doc = neuroml.NeuroMLDocument(id="test_doc") + + # Mock ComponentType objects with 'name' and 'parameters' attributes + self.mock_component_1 = MagicMock() + self.mock_component_1.name = "ComponentA" + self.mock_component_1.parameters = [ + MagicMock(name="param1", value="10"), + MagicMock(name="param2", value="20"), + ] + + self.mock_component_2 = MagicMock() + self.mock_component_2.name = "ComponentB" + self.mock_component_2.parameters = [ + MagicMock(name="paramX", value="100"), + ] + + # Component with no parameters + self.mock_component_3 = MagicMock() + self.mock_component_3.name = "ComponentC" + self.mock_component_3.parameters = [] + + # Add mocked components to NeuroMLDocument + self.nml_doc.ComponentType = [ + self.mock_component_1, + self.mock_component_2, + self.mock_component_3, + ] + + def test_list_params_output(self): + """Test if list_params correctly extracts and formats parameters.""" + expected_output = ( + "Parameters in NeuroML 2 document: test_doc\n" + "\nComponentType: ComponentA\n" + " - param1: 10\n" + " - param2: 20\n" + "\nComponentType: ComponentB\n" + " - paramX: 100\n" + "\nComponentType: ComponentC\n" + " No parameters found.\n" + ) + + output = list_params(self.nml_doc) + self.assertEqual(output.strip(), expected_output.strip())