Ejemplo n.º 1
0
    def test_set_parameters_file(self):
        parameter_file = os.path.join(self.output_test_dir,
                                      self.parameter_filename)

        shutil.copy(os.path.join(self.test_data_dir, self.parameter_filename),
                    parameter_file)

        parameter_change = {
            "soma gbar_nat": 10,
            "basal gbar_ih": 10,
            "iseg vshift2_nat": 10
        }

        parameter_list = [["soma gbar_nat", 284.546493, None],
                          ["basal gbar_ih", 15.709707, None],
                          ["iseg vshift2_nat", -9.802976, None]]

        self.parameters = Parameters(parameter_list)

        self.parameters.set_parameters_file(parameter_file, parameter_change)

        compare_file = os.path.join(self.test_data_dir,
                                    "example_hoc_control_parameters.hoc")

        result = subprocess.call(["diff", parameter_file, compare_file])
        self.assertEqual(result, 0)
Ejemplo n.º 2
0
    def test_getitem(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)

        self.assertIsInstance(self.parameters["gbar_Na"], Parameter)
Ejemplo n.º 3
0
    def test_get_error(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)

        with self.assertRaises(AttributeError):
            self.parameters.get("not_a_parameter")
Ejemplo n.º 4
0
    def test_ordered(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        uncertain_parameters = parameters.get_from_uncertain("name")
        self.assertEqual(uncertain_parameters, ["gbar_Na", "gbar_K", "gbar_L"])

        uncertain_parameters = parameters.get("name")
        self.assertEqual(uncertain_parameters, ["gbar_Na", "gbar_K", "gbar_L"])

        parameter_list = [["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        uncertain_parameters = parameters.get_from_uncertain("name")
        self.assertEqual(uncertain_parameters, ["gbar_K", "gbar_Na", "gbar_L"])

        uncertain_parameters = parameters.get("name")
        self.assertEqual(uncertain_parameters, ["gbar_K", "gbar_Na", "gbar_L"])

        uncertain_parameters = parameters.get("value")
        self.assertEqual(uncertain_parameters, [36, 120, 0.3])
Ejemplo n.º 5
0
    def test_get_from_uncertain_distribution(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get_from_uncertain("distribution")

        self.assertEqual(len(result), 2)
        self.assertIsInstance(result[0], cp.Dist)
        self.assertIsInstance(result[1], cp.Dist)
Ejemplo n.º 6
0
    def test_get_from_uncertain_name(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get_from_uncertain()

        self.assertIn("gbar_Na", result)
        self.assertIn("gbar_K", result)
        self.assertNotIn("gbar_L", result)
Ejemplo n.º 7
0
    def test_get_value_list(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]
        self.parameters = Parameters(parameter_list)

        result = self.parameters.get("value", ["gbar_Na", "gbar_K"])

        self.assertIn(120, result)
        self.assertIn(36, result)
Ejemplo n.º 8
0
    def test_get_distribution(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get("distribution")

        self.assertEqual(len(result), 3)
        self.assertIsInstance(result[0], cp.Dist)
        self.assertIsInstance(result[1], cp.Dist)
        self.assertIsInstance(result[2], cp.Dist)
Ejemplo n.º 9
0
    def test_get_name(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_l", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)

        result = self.parameters.get()

        self.assertIn("gbar_Na", result)
        self.assertIn("gbar_K", result)
        self.assertIn("gbar_l", result)
Ejemplo n.º 10
0
    def test_set_distribution(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)

        def distribution_function(x):
            return cp.Uniform(x - 10, x + 10)

        self.parameters.set_distribution("gbar_Na", distribution_function)

        self.assertIsInstance(self.parameters["gbar_Na"].distribution,
                              cp.Distribution)
Ejemplo n.º 11
0
    def test_setitem(self):

        parameter = Parameter("gbar_Na", 120, cp.Uniform(110, 130))
        parameters = Parameters()

        parameters["gbar_Na"] = parameter

        self.assertTrue("gbar_Na" in parameters.parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
Ejemplo n.º 12
0
    def test_reset_parameter_file(self):
        parameter_file = os.path.join(self.output_test_dir, self.parameter_filename)

        shutil.copy(os.path.join(self.test_data_dir, self.parameter_filename),
                    parameter_file)

        parameter_list = [["soma gbar_nat", 10, None],
                         ["basal gbar_ih", 10, None],
                         ["iseg vshift2_nat", 10, None]]

        self.parameters = Parameters(parameter_list)

        self.parameters.reset_parameter_file(parameter_file)

        compare_file = os.path.join(self.test_data_dir, "example_hoc_control_parameters.hoc")

        result = subprocess.call(["diff", parameter_file, compare_file])
        self.assertEqual(result, 0)
Ejemplo n.º 13
0
    def test_delitem(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        del parameters["gbar_Na"]

        self.assertEqual(len(parameters.parameters), 2)
Ejemplo n.º 14
0
    def test_str(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, cp.Uniform(0.1, 0.5)]]

        parameters = Parameters(parameter_list)

        result = str(parameters)

        self.assertEqual(result,
                         "gbar_Na: 120\ngbar_K: 36\ngbar_L: 0.3 - Uncertain")
Ejemplo n.º 15
0
    def test_init_object_dist(self):
        parameter_list = [Parameter("gbar_Na", 120, cp.Uniform(110, 130)),
                          Parameter("gbar_K", 36),
                          Parameter("gbar_L", 10.3)]

        parameters = Parameters(parameter_list, distribution=cp.Uniform(110, 130))

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)
        self.assertIsInstance(parameters.distribution, cp.Dist)
Ejemplo n.º 16
0
    def test_iter(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                         ["gbar_K", 36, cp.Normal(36, 1)],
                         ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        result = [parameter for parameter in parameters]

        self.assertEqual(len(result), 3)

        self.assertIsInstance(result[0], Parameter)
        self.assertIsInstance(result[1], Parameter)
        self.assertIsInstance(result[2], Parameter)
Ejemplo n.º 17
0
    def test_init_list_none(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].distribution, None)
        self.assertEqual(parameters["gbar_K"].distribution, None)
        self.assertEqual(parameters["gbar_L"].distribution, None)
Ejemplo n.º 18
0
    def test_init_list_only_values(self):
        parameter_list = [["gbar_Na", 120], ["gbar_K", 36], ["gbar_L", 0.3]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].value, 120)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsNone(parameters["gbar_Na"].distribution)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)
Ejemplo n.º 19
0
    def test_set_parameters(self):
        base = ParameterBase()

        parameter_list = [["a", 1, None], ["b", 2, None]]

        base.parameters = parameter_list

        self.assertIsInstance(base.parameters, Parameters)
        self.assertEqual(base.parameters["a"].value, 1)
        self.assertEqual(base.parameters["b"].value, 2)

        parameter_list = [["a", 1, None], ["b", 2, None]]

        base.parameters = Parameters(parameter_list)

        self.assertIsInstance(base.parameters, Parameters)
        self.assertEqual(base.parameters["a"].value, 1)
        self.assertEqual(base.parameters["b"].value, 2)
Ejemplo n.º 20
0
    def setUp(self):
        self.output_test_dir = ".tests/"

        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)
        os.makedirs(self.output_test_dir)

        self.features = TestingFeatures(features_to_run=[
            "feature0d", "feature1d", "feature2d", "feature_invalid",
            "feature_adaptive"
        ])

        self.parameter_list = [["a", 1, None], ["b", 2, None]]

        self.parameters = Parameters(self.parameter_list)

        self.runmodel = RunModel(model=TestingModel1d(),
                                 parameters=self.parameters,
                                 features=self.features)
Ejemplo n.º 21
0
    def test_init_list_chaospy(self):
        parameter_list = [["gbar_Na", 120, cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].value, 120)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsInstance(parameters["gbar_Na"].distribution, cp.Dist)
        self.assertIsInstance(parameters["gbar_K"].distribution, cp.Dist)
        self.assertIsInstance(parameters["gbar_L"].distribution, cp.Dist)
Ejemplo n.º 22
0
    def test_init_list_mixed(self):
        parameter_list = [["gbar_Na", cp.Uniform(110, 130)], ["gbar_K", 36],
                          ["gbar_L", 0.3]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsInstance(parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)
Ejemplo n.º 23
0
    def test_init_list_only_chaospy(self):
        parameter_list = [["gbar_Na", cp.Uniform(110, 130)],
                          ["gbar_K", cp.Normal(36, 1)],
                          ["gbar_l", cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)


        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_l"], Parameter)

        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertIsNone(parameters["gbar_K"].value)
        self.assertIsNone(parameters["gbar_l"].value)

        self.assertIsInstance(parameters["gbar_Na"].distribution, cp.Dist)
        self.assertIsInstance(parameters["gbar_K"].distribution, cp.Dist)
        self.assertIsInstance(parameters["gbar_l"].distribution, cp.Dist)
Ejemplo n.º 24
0
    def test_init_dict(self):
        parameters = {"gbar_Na": cp.Uniform(110, 130),
                      "gbar_K": 36,
                      "gbar_L": 0.3}

        parameters = Parameters(parameters)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)


        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)


        self.assertIsInstance(parameters["gbar_Na"].distribution, cp.Dist)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)
Ejemplo n.º 25
0
    def test_init_no_list(self):
        parameter_list = 1

        with self.assertRaises(TypeError):
            Parameters(parameter_list)
Ejemplo n.º 26
0
    def test_init_list_to_long(self):
        parameter_list = [["gbar_Na", 120, None, 1]]

        with self.assertRaises(TypeError):
            Parameters(parameter_list)
Ejemplo n.º 27
0
class TestParameters(unittest.TestCase):
    def setUp(self):
        self.parameter_filename = "example_hoc.hoc"

        self.folder = os.path.dirname(os.path.realpath(__file__))

        self.test_data_dir = os.path.join(self.folder, "data")
        self.data_file = "example_hoc.hoc"
        self.output_test_dir = ".tests/"

        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)
        os.makedirs(self.output_test_dir)

    def tearDown(self):
        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)

    def test_init_list_none(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].distribution, None)
        self.assertEqual(parameters["gbar_K"].distribution, None)
        self.assertEqual(parameters["gbar_L"].distribution, None)

    def test_init_list_chaospy(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].value, 120)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsInstance(parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsInstance(parameters["gbar_K"].distribution,
                              cp.Distribution)
        self.assertIsInstance(parameters["gbar_L"].distribution,
                              cp.Distribution)

    def test_init_object(self):
        parameter_list = [
            Parameter("gbar_Na", 120, cp.Uniform(110, 130)),
            Parameter("gbar_K", 36),
            Parameter("gbar_L", 10.3)
        ]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)
        self.assertIsNone(parameters.distribution)

    def test_init_object_dist(self):
        parameter_list = [
            Parameter("gbar_Na", 120, cp.Uniform(110, 130)),
            Parameter("gbar_K", 36),
            Parameter("gbar_L", 10.3)
        ]

        parameters = Parameters(parameter_list,
                                distribution=cp.Uniform(110, 130))

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)
        self.assertIsInstance(parameters.distribution, cp.Distribution)

    def test_init_list_only_chaospy(self):
        parameter_list = [["gbar_Na", cp.Uniform(110, 130)],
                          ["gbar_K", cp.Normal(36, 1)],
                          ["gbar_L", cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertIsNone(parameters["gbar_K"].value)
        self.assertIsNone(parameters["gbar_L"].value)

        self.assertIsInstance(parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsInstance(parameters["gbar_K"].distribution,
                              cp.Distribution)
        self.assertIsInstance(parameters["gbar_L"].distribution,
                              cp.Distribution)

    def test_init_list_only_values(self):
        parameter_list = [["gbar_Na", 120], ["gbar_K", 36], ["gbar_L", 0.3]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertEqual(parameters["gbar_Na"].value, 120)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsNone(parameters["gbar_Na"].distribution)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)

    def test_init_list_mixed(self):
        parameter_list = [["gbar_Na", cp.Uniform(110, 130)], ["gbar_K", 36],
                          ["gbar_L", 0.3]]

        parameters = Parameters(parameter_list)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsInstance(parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)

    def test_init_dict(self):
        parameters = {
            "gbar_Na": cp.Uniform(110, 130),
            "gbar_K": 36,
            "gbar_L": 0.3
        }

        parameters = Parameters(parameters)

        self.assertIsInstance(parameters, Parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)
        self.assertIsInstance(parameters["gbar_K"], Parameter)
        self.assertIsInstance(parameters["gbar_L"], Parameter)

        self.assertIsNone(parameters["gbar_Na"].value)
        self.assertEqual(parameters["gbar_K"].value, 36)
        self.assertEqual(parameters["gbar_L"].value, 0.3)

        self.assertIsInstance(parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsNone(parameters["gbar_K"].distribution)
        self.assertIsNone(parameters["gbar_L"].distribution)

    def test_ordered(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        uncertain_parameters = parameters.get_from_uncertain("name")
        self.assertEqual(uncertain_parameters, ["gbar_Na", "gbar_K", "gbar_L"])

        uncertain_parameters = parameters.get("name")
        self.assertEqual(uncertain_parameters, ["gbar_Na", "gbar_K", "gbar_L"])

        parameter_list = [["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        uncertain_parameters = parameters.get_from_uncertain("name")
        self.assertEqual(uncertain_parameters, ["gbar_K", "gbar_Na", "gbar_L"])

        uncertain_parameters = parameters.get("name")
        self.assertEqual(uncertain_parameters, ["gbar_K", "gbar_Na", "gbar_L"])

        uncertain_parameters = parameters.get("value")
        self.assertEqual(uncertain_parameters, [36, 120, 0.3])

    def test_init_list_to_long(self):
        parameter_list = [["gbar_Na", 120, None, 1]]

        with self.assertRaises(TypeError):
            Parameters(parameter_list)

    def test_init_no_list(self):
        parameter_list = 1

        with self.assertRaises(TypeError):
            Parameters(parameter_list)

    def test_getitem(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)

        self.assertIsInstance(self.parameters["gbar_Na"], Parameter)

    def test_iter(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        result = [parameter for parameter in parameters]

        self.assertEqual(len(result), 3)

        self.assertIsInstance(result[0], Parameter)
        self.assertIsInstance(result[1], Parameter)
        self.assertIsInstance(result[2], Parameter)

    def test_delitem(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        parameters = Parameters(parameter_list)

        del parameters["gbar_Na"]

        self.assertEqual(len(parameters.parameters), 2)

    def test_setitem(self):

        parameter = Parameter("gbar_Na", 120, cp.Uniform(110, 130))
        parameters = Parameters()

        parameters["gbar_Na"] = parameter

        self.assertTrue("gbar_Na" in parameters.parameters)
        self.assertIsInstance(parameters["gbar_Na"], Parameter)

    def test_set_distribution(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)

        def distribution_function(x):
            return cp.Uniform(x - 10, x + 10)

        self.parameters.set_distribution("gbar_Na", distribution_function)

        self.assertIsInstance(self.parameters["gbar_Na"].distribution,
                              cp.Distribution)

    def set_all_distributions(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)

        def distribution_function(x):
            return cp.Uniform(x - 10, x + 10)

        self.parameters.set_all_distributions(distribution_function)

        self.assertIsInstance(self.parameters["gbar_Na"].distribution,
                              cp.Distribution)
        self.assertIsInstance(self.parameters["gbar_K"].distribution,
                              cp.Distribution)
        self.assertIsInstance(self.parameters["gbar_L"].distribution,
                              cp.Distribution)

    def test_get_from_uncertain_name(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get_from_uncertain()

        self.assertIn("gbar_Na", result)
        self.assertIn("gbar_K", result)
        self.assertNotIn("gbar_L", result)

    def test_get_from_uncertain_value(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get_from_uncertain("value")

        self.assertIn(120, result)
        self.assertIn(36, result)
        self.assertNotIn(0.3, result)

    def test_get_from_uncertain_distribution(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, None]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get_from_uncertain("distribution")

        self.assertEqual(len(result), 2)
        self.assertIsInstance(result[0], cp.Distribution)
        self.assertIsInstance(result[1], cp.Distribution)

    def test_get_name(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)

        result = self.parameters.get()

        self.assertIn("gbar_Na", result)
        self.assertIn("gbar_K", result)
        self.assertIn("gbar_L", result)

    def test_get_value(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]
        self.parameters = Parameters(parameter_list)

        result = self.parameters.get("value")

        self.assertIn(120, result)
        self.assertIn(36, result)
        self.assertIn(0.3, result)

    def test_get_value_list(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]
        self.parameters = Parameters(parameter_list)

        result = self.parameters.get("value", ["gbar_Na", "gbar_K"])

        self.assertIn(120, result)
        self.assertIn(36, result)

    def test_get_error(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)

        with self.assertRaises(AttributeError):
            self.parameters.get("not_a_parameter")

    def test_get_distribution(self):
        parameter_list = [["gbar_Na", 120,
                           cp.Uniform(110, 130)],
                          ["gbar_K", 36, cp.Normal(36, 1)],
                          ["gbar_L", 0.3, cp.Chi(1, 1, 0.3)]]

        self.parameters = Parameters(parameter_list)
        result = self.parameters.get("distribution")

        self.assertEqual(len(result), 3)
        self.assertIsInstance(result[0], cp.Distribution)
        self.assertIsInstance(result[1], cp.Distribution)
        self.assertIsInstance(result[2], cp.Distribution)

    def test_set_parameters_file(self):
        parameter_file = os.path.join(self.output_test_dir,
                                      self.parameter_filename)

        shutil.copy(os.path.join(self.test_data_dir, self.parameter_filename),
                    parameter_file)

        parameter_change = {
            "soma gbar_nat": 10,
            "basal gbar_ih": 10,
            "iseg vshift2_nat": 10
        }

        parameter_list = [["soma gbar_nat", 284.546493, None],
                          ["basal gbar_ih", 15.709707, None],
                          ["iseg vshift2_nat", -9.802976, None]]

        self.parameters = Parameters(parameter_list)

        self.parameters.set_parameters_file(parameter_file, parameter_change)

        compare_file = os.path.join(self.test_data_dir,
                                    "example_hoc_control_parameters.hoc")

        result = subprocess.call(["diff", parameter_file, compare_file])
        self.assertEqual(result, 0)

    def test_reset_parameter_file(self):
        parameter_file = os.path.join(self.output_test_dir,
                                      self.parameter_filename)

        shutil.copy(os.path.join(self.test_data_dir, self.parameter_filename),
                    parameter_file)

        parameter_list = [["soma gbar_nat", 10, None],
                          ["basal gbar_ih", 10, None],
                          ["iseg vshift2_nat", 10, None]]

        self.parameters = Parameters(parameter_list)

        self.parameters.reset_parameter_file(parameter_file)

        compare_file = os.path.join(self.test_data_dir,
                                    "example_hoc_control_parameters.hoc")

        result = subprocess.call(["diff", parameter_file, compare_file])
        self.assertEqual(result, 0)

    def test_str(self):
        parameter_list = [["gbar_Na", 120, None], ["gbar_K", 36, None],
                          ["gbar_L", 0.3, cp.Uniform(0.1, 0.5)]]

        parameters = Parameters(parameter_list)

        result = str(parameters)

        self.assertEqual(result,
                         "gbar_Na: 120\ngbar_K: 36\ngbar_L: 0.3 - Uncertain")