Skip to content

Commit

Permalink
Merge pull request #11 from murrayrm/fix_parameter_type
Browse files Browse the repository at this point in the history
fix parameter type error (issue #10)
  • Loading branch information
murrayrm committed Aug 31, 2018
2 parents 39dbde9 + 9660845 commit 42d89a3
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
11 changes: 11 additions & 0 deletions tests/parameters_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,16 @@ def test_override_parameters(self):
bcd2 = txtl.ConstitutiveRBS('BCD2',
parameters = {Ribosome_Binding_F:10})

def test_parameter_values(self):
lacI = txtl.ProteinCDS('LacI', dimer=True,
parameters={'Dimerization_F' : 1})
self.assertIsInstance(lacI.parameters['Dimerization_F'],
txtl.Parameter)

name, length = txtl.parse_DNA_string("tetR(1200)")
tetR = txtl.load_model("CDS", name, length)
self.assertIsInstance(tetR.parameters['Dimerization_F'],
txtl.Parameter)

if __name__ == "__main__":
unittest.main()
20 changes: 16 additions & 4 deletions txtl/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,14 @@ def get_parameters(config_file, custom, default={}, **keywords):
warn("get_parameters: couldn't find file %s" % config_file)

# Override any parameters given as a parameter dictionary
if custom != None: parameters.update(custom)
if custom != None:
for key, value in custom.items():
parameters[key] = _to_parameter(key, value)

# Finally, check to see if any of the keywords are parameter names
for key, value in keywords.items():
if key in parameters.keys():
parameters[key] = value
parameters[key] = _to_parameter(key, value)

# All done!
return parameters
Expand All @@ -184,7 +186,7 @@ def update_missing(existing_dict, default_dict):
"""
for key, value in default_dict.items():
if key not in existing_dict.keys():
existing_dict[key] = value
existing_dict[key] = _to_parameter(key, value)

# Update any existing parameter values in a parameter dictionary
def update_existing(existing_dict, custom_dict):
Expand All @@ -199,7 +201,7 @@ def update_existing(existing_dict, custom_dict):
"""
for key, value in custom_dict.items():
if key in existing_dict.keys():
existing_dict[key] = value
existing_dict[key] = _to_parameter(key, value)

def eval_parameter(component, name, assignments={}):
parameters = component.parameters
Expand All @@ -215,3 +217,13 @@ def eval_parameter(component, name, assignments={}):
# Evaluate the expression
return float(eval(param.value, assignments))

# Convert a value input to a parameter object
def _to_parameter(key, value):
if isinstance(value, Parameter):
return value
elif isinstance(value, (float, int)):
return Parameter(key, 'Numeric', value)
elif isinstance(value, str):
return Parameter(key, 'Global', value)
else:
TypeError('Unknown parameter type')

0 comments on commit 42d89a3

Please sign in to comment.