示例#1
0
 def test_ode_propensity(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=10)
     species2 = Species('B', initial_value=10)
     model.add_species([species1, species2])
     r1 = Reaction(name='r1', reactants={'A': 1}, products={}, rate=rate)
     r2 = Reaction(name='r2',
                   reactants={'A': 2},
                   products={'B': 1},
                   rate=rate)
     r3 = Reaction(name='r3',
                   reactants={
                       'A': 1,
                       'B': 1
                   },
                   products={},
                   rate=rate)
     r4 = Reaction(name='r4',
                   reactants={'A': 1},
                   products={},
                   propensity_function='t')
     model.add_reaction([r1, r2, r3, r4])
     self.assertEqual(model.listOfReactions['r1'].ode_propensity_function,
                      'rate*A')
     self.assertEqual(model.listOfReactions['r2'].ode_propensity_function,
                      'rate*A*A')
     self.assertEqual(model.listOfReactions['r3'].ode_propensity_function,
                      'rate*A*B')
     self.assertEqual(model.listOfReactions['r4'].ode_propensity_function,
                      't')
示例#2
0
 def test_duplicate_parameter_names(self):
     model = Model()
     param1 = Parameter('A', expression=0)
     param2 = Parameter('A', expression=0)
     model.add_parameter(param1)
     with self.assertRaises(ModelError):
         model.add_parameter(param2)
示例#3
0
 def test_species_parameter_name_substrings(self):
     model = Model()
     rate = Parameter(name='rate', expression=1)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=100)
     species2 = Species('AA', initial_value=0)
     model.add_species([species1, species2])
     reaction1 = Reaction(name="reaction1",
                          reactants={species1: 1},
                          products={species2: 1},
                          rate=rate)
     model.add_reaction(reaction1)
     number_points = 11
     model.timespan(np.linspace(0, 1, number_points))
     from gillespy2.solvers.numpy.ssa_solver import NumPySSASolver
     results = model.run(number_of_trajectories=1,
                         solver=NumPySSASolver,
                         seed=1)
     self.assertTrue(len(results['time']) == number_points)
     self.assertTrue(len(results[species1.name]) == number_points)
     self.assertTrue(len(results[species2.name]) == number_points)
     self.assertGreater(results[species1.name][0],
                        results[species1.name][-1])
     self.assertLess(results[species2.name][0], results[species2.name][-1])
     self.assertEqual(
         np.sum(results[species1.name]) + np.sum(results[species2.name]),
         number_points * species1.initial_value)
示例#4
0
        def create_simple_hybrid_model(parameter_values=None):
            model = Model(name="Simple_Hybrid_Model")

            # Species
            A = Species(name='A', initial_value=0)
            B = Species(name='B', initial_value=0)
            model.add_species([A, B])

            # Parameters
            k1 = Parameter(name='k1', expression=1)
            k2 = Parameter(name='k2', expression=10)
            model.add_parameter([k1, k2])

            # Rate Rule
            rate_rule = RateRule(name='Brate', variable='B', formula="cos(t)")
            model.add_rate_rule(rate_rule)

            # Reactions
            r1 = Reaction(name='r1',
                          reactants={A: 1},
                          products={},
                          propensity_function="k1*B")
            r2 = Reaction(name='r2', reactants={}, products={B: 1}, rate=k2)
            model.add_reaction([r1, r2])

            model.timespan(numpy.linspace(0, 1, 11))
            return model
示例#5
0
 def test_model_equality(self):
     model1 = Model()
     model2 = Model()
     param1 = Parameter('A', expression=0)
     model1.add_parameter(param1)
     model2.add_parameter(param1)
     assert model1 == model2
示例#6
0
 def test_model_inequality(self):
     model1 = Model()
     model2 = Model()
     param1 = Parameter('A', expression=0)
     param2 = Parameter('B', expression=1)
     model1.add_parameter(param1)
     model2.add_parameter(param2)
     assert model1 != model2
示例#7
0
 def test_add_nonspecies_nonreaction_nonparameter(self):
     model = Model()
     species = 'nonspecies'
     with self.assertRaises(ModelError):
         model.add_species(species)
     reaction = 'nonreaction'
     with self.assertRaises(ModelError):
         model.add_reaction(reaction)
     parameter = 'nonparameter'
     with self.assertRaises(ParameterError):
         model.add_parameter(parameter)
示例#8
0
 def test_reaction_valid_reactant(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=0)
     species2 = Species('B', initial_value=0)
     model.add_species([species1, species2])
     reaction1 = Reaction(name="reaction1",
                          reactants={'A': 1},
                          products={species2: 1},
                          rate=rate)
     model.add_reaction(reaction1)
     assert "reaction1" in model.listOfReactions
示例#9
0
 def test_reaction_invalid_product(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=0)
     species2 = Species('B', initial_value=0)
     model.add_species([species1, species2])
     reaction1 = Reaction(name="reaction1",
                          reactants={species1: 1},
                          products={'species2': 1},
                          rate=rate)
     with self.assertRaises(ModelError):
         model.add_reaction(reaction1)
示例#10
0
 def test_no_reaction_name(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=0)
     species2 = Species('B', initial_value=0)
     model.add_species([species1, species2])
     # add two reactions that has no name
     reaction1 = Reaction(reactants={species1: 1},
                          products={species2: 1},
                          rate=rate)
     reaction2 = Reaction(reactants={species2: 1},
                          products={species1: 1},
                          rate=rate)
     model.add_reaction([reaction1, reaction2])
示例#11
0
 def test_add_reaction_dict(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species('A', initial_value=0)
     species2 = Species('B', initial_value=0)
     model.add_species([species1, species2])
     reactions = {
         name: Reaction(name=name,
                        reactants={species1: 1},
                        products={species2: 1},
                        rate=rate)
         for name in ["reaction1", "reaction2"]
     }
     with self.assertRaises(ModelError):
         model.add_reaction(reactions)
示例#12
0
 def test_run_nonsolver(self):
     model = Model()
     rate = Parameter(name='rate', expression=0.5)
     model.add_parameter(rate)
     species1 = Species(name='A', initial_value=0)
     species2 = Species(name='B', initial_value=0)
     model.add_species(species1)
     model.add_species(species2)
     reaction = Reaction(name='reaction1',
                         reactants={species1: 1},
                         products={species2: 1},
                         rate=rate)
     with self.assertRaises(SimulationError):
         results = model.run(number_of_trajectories=1,
                             solver='non_solver',
                             seed=1)
示例#13
0
def create_oregonator(parameter_values=None):
    # Superclass initialization
    model = Model(name="Oregonator")

    # Species
    F = Species(name="F", initial_value=2)
    A = Species(name="A", initial_value=250)
    B = Species(name="B", initial_value=500)
    C = Species(name="C", initial_value=1000)
    P = Species(name="P", initial_value=0)
    model.add_species([F, A, B, C, P])

    # Parameters (rates)
    k1 = Parameter(name="k1", expression=2.0)
    k2 = Parameter(name="k2", expression=0.1)
    k3 = Parameter(name="k3", expression=104)
    k4 = Parameter(name="k4", expression=4e-7)
    k5 = Parameter(name="k5", expression=26.0)
    model.add_parameter([k1, k2, k3, k4, k5])

    # Reactions
    reaction1 = Reaction(name="reaction1",
                         reactants={
                             B: 1,
                             F: 1
                         },
                         products={
                             A: 1,
                             F: 1
                         },
                         rate=k1)
    reaction2 = Reaction(name="reaction2",
                         reactants={
                             A: 1,
                             B: 1
                         },
                         products={P: 1},
                         rate=k2)
    reaction3 = Reaction(name="reaction3",
                         reactants={
                             A: 1,
                             F: 1
                         },
                         products={
                             A: 2,
                             C: 1,
                             F: 1
                         },
                         rate=k3)
    reaction4 = Reaction(name="reaction4",
                         reactants={A: 2},
                         products={P: 1},
                         rate=k4)
    reaction5 = Reaction(name="reaction5",
                         reactants={
                             C: 1,
                             F: 1
                         },
                         products={
                             B: 1,
                             F: 1
                         },
                         rate=k5)
    model.add_reaction([reaction1, reaction2, reaction3, reaction4, reaction5])
    if sys.argv[1] != 'ODESolver':
        model.timespan(np.linspace(0, 5, 501))
    else:
        model.timespan(np.linspace(0, 5, 500001))
    return model
示例#14
0
 def test_problem_with_name(self):
     model = Model()
     numeric1 = Parameter(name='123', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(numeric1)
     special1 = Parameter(name='parameter.', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special1)
     special2 = Parameter(name='parameter[', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special2)
     special3 = Parameter(name='parameter]', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special3)
     special4 = Parameter(name='parameter+', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special4)
     special5 = Parameter(name='parameter-', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special5)
     special6 = Parameter(name='parameter*', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special6)
     special7 = Parameter(name='parameter/', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special7)
     special8 = Parameter(name='parameter^', expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(special8)
     reserved1 = Parameter(name="vol", expression=0.5)
     with self.assertRaises(ModelError):
         model.add_parameter(reserved1)