def test_delayed_choice(self): inpil = """ length a = 5 length b = 15 length c = 15 length d = 15 length e = 15 length z = 15 RC1 = d( e( z ) ) b*( a* + ) c( + ) d @i 1e-8 M RC1b = d e( z ) d*( b*( a* + ) c( + ) ) @i 1e-8 M R0 = a b c @i 1e-7 M R21 = b c( + ) d @i 0 M R22 = d( e( z ) ) b*( a*( + ) ) c @i 0 M R31 = b c @i 0 M RC32b = d e( z ) d*( b*( a*( + ) ) c( + ) ) @i 0 M RC32 = d( e( z ) ) b*( a*( + ) ) c( + ) d @i 0 M TC1 = a( b c + b( c( + ) d + d( e( z ) ) ) ) @i 0 M TC2 = a( b c + b( c( + ) d( + d e( z ) ) ) ) @i 0 M TC3 = a( b( c + b c( + ) d( + d e( z ) ) ) ) @i 0 M """ enum, out = enumerate_pil(inpil, is_file=False, condensed=True) xml = write_sbml(enum, condensed=True) rr = RoadRunner() rr.load(xml) ExecutableModel = rr.model RC32 = 'RC32' if 'RC32' in rr.model.getFloatingSpeciesIds( ) else 'RC32b' RC1 = 'RC1' if 'RC1' in rr.model.getFloatingSpeciesIds() else 'RC1b' # Compartment assert ExecutableModel.getCompartmentVolumes() == 1. assert ExecutableModel.getNumCompartments() == 1 assert ExecutableModel.getCompartmentIds() == ['TestTube'] # Species speciesIDs = ['R0', RC32, 'R22', 'R31', 'R21', RC1] ini_spIDs = sorted('init({})'.format(x) for x in speciesIDs) concIDs = [ '[R0]', '[' + RC32 + ']', '[R22]', '[R31]', '[R21]', '[' + RC1 + ']' ] ini_coIDs = sorted('init({})'.format(x) for x in concIDs) assert ExecutableModel.getNumFloatingSpecies() == len(speciesIDs) assert sorted( ExecutableModel.getFloatingSpeciesIds()) == sorted(speciesIDs) assert sorted( ExecutableModel.getFloatingSpeciesInitAmountIds()) == sorted( ini_spIDs) assert sorted(ExecutableModel.getFloatingSpeciesInitConcentrationIds() ) == sorted(ini_coIDs) #print(sorted(ini_coIDs)) #print(ExecutableModel.getFloatingSpeciesInitAmounts()) #print(ExecutableModel.getFloatingSpeciesInitConcentrations()) # Reactions rxnIDs = [ 'R0_' + RC1 + '__' + RC32 + '_R31', 'R0_' + RC1 + '__R22_R21' ] assert ExecutableModel.getNumReactions() == len(rxnIDs) assert sorted(ExecutableModel.getReactionIds()) == sorted(rxnIDs) assert rr.model[RC32] == 0 assert rr.model[RC1] == 2e-8 # simulate deterministic rr.model['init([R0])'] = 1e-8 assert rr.model['init(R0)'] == 1e-8 Vol = 1.66e-15 rr.model.setCompartmentVolumes([Vol]) rr.model['init([R0])'] = 1e-8 * Vol rr.model[f'init({RC1})'] = 2e-8 * Vol rr.integrator.absolute_tolerance = 1e-12 * Vol rr.integrator.relative_tolerance = 1e-12 * Vol rr.integrator.initial_time_step = 0.00001 result = rr.simulate(0, 500, steps=100) #print(result) #rr.plot() # look at it if you like! # NOTE: something is off with the units with stochastic simulations, weird... #print(rr.model.getCompartmentVolumes()) #print(rr.model.getFloatingSpeciesInitConcentrations()) #print(rr.model.getFloatingSpeciesInitAmounts()) #print(rr.model.getFloatingSpeciesConcentrations()) #print(rr.model.getFloatingSpeciesAmounts()) rr.reset()