def main (args):
  """Usage: create_sedml output-filename
  """
  if (len(args) != 2):
    print(main.__doc__)
    sys.exit(1);

  # create the document
  doc = libsedml.SedDocument();
  doc.setLevel(1);
  doc.setVersion(1);

  # create a first model referencing an sbml file
  model = doc.createModel();
  model.setId("model1");
  model.setSource("file.xml");
  model.setLanguage("urn:sedml:sbml");

  # create a second model modifying a variable of that other sbml file
  model = doc.createModel();
  model.setId("model2");
  model.setSource("model1");
  model.setLanguage("urn:sedml:sbml");

  # change a paramerter 'k' to 0.1
  change = model.createChangeAttribute();
  change.setTarget("/sbml:sbml/sbml:model/sbml:listOfParameters/sbml:parameter[@id='k']/@value");
  change.setNewValue("0.1");

  # remove species 's1'
  remove = model.createRemoveXML();
  remove.setTarget("/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S1']");

  # now for something tricky we want to update the initialConcentration of 'S2' to be
  # half what it was in the original model
  compute = model.createComputeChange();
  compute.setTarget("/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&quot;S2&quot;]/@initialConcentration");
  variable = compute.createVariable();
  variable.setId("S2");
  variable.setModelReference("model1");
  variable.setTarget("/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S2']");
  compute.setMath(libsedml.parseFormula("S2 / 2"));  

  # create simulation
  tc = doc.createUniformTimeCourse();
  tc.setId("sim1");
  tc.setInitialTime(0.0);
  tc.setOutputStartTime(0.0);
  tc.setOutputEndTime(10.0);
  tc.setNumberOfPoints(1000);
  # need to set the correct KISAO Term
  alg = tc.createAlgorithm();
  alg.setKisaoID("KISAO:0000019");

  # create a task that uses the simulation and the model above
  task = doc.createTask();
  task.setId("task1");
  task.setModelReference("model1");
  task.setSimulationReference("sim1");

  # add a DataGenerator to hold the output for time
  dg = doc.createDataGenerator();
  dg.setId("time");
  dg.setName("time");
  var = dg.createVariable();
  var.setId("v0");
  var.setName("time");
  var.setTaskReference("task1");
  var.setSymbol("urn:sedml:symbol:time");
  dg.setMath(libsedml.parseFormula("v0"));

  # and one for S1
  dg = doc.createDataGenerator();
  dg.setId("S1");
  dg.setName("S1");
  var = dg.createVariable();
  var.setId("v1");
  var.setName("S1");
  var.setTaskReference("task1");
  var.setTarget("/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S1']");
  dg.setMath(libsedml.parseFormula("v1"));

  # add a report
  report = doc.createReport();
  report.setId("r1");
  report.setName("report 1");
  set = report.createDataSet();
  set.setId("ds1");
  set.setLabel("time");
  set.setDataReference("time");
  set = report.createDataSet();
  set.setId("ds2");
  set.setLabel("S1");
  set.setDataReference("S1");

  # add a 2d plot
  plot = doc.createPlot2D();
  plot.setId("p1");
  plot.setName("S1 Timecourse");
  curve = plot.createCurve();
  curve.setId("c1");
  curve.setName("S1");
  curve.setLogX(False);
  curve.setLogY(False);
  curve.setXDataReference("time");
  curve.setYDataReference("S1");

  # add a 3D Plot
  plot2 = doc.createPlot3D();
  plot2.setId("p2");
  plot2.setName("dunno");
  surf = plot2.createSurface();
  surf.setId("surf1");
  surf.setName("S1");
  surf.setLogX(False);
  surf.setLogY(False);
  surf.setLogZ(False);
  surf.setXDataReference("time");
  surf.setYDataReference("S1");
  surf.setZDataReference("S1");

  # write the document
  libsedml.writeSedML(doc, args[1]);
def main ( args ) : if ( len ( args ) != 2 ) : print ( main . __doc__ ) sys . exit ( 1 ) ; doc = libsedml . SedDocument ( ) ; doc . setLevel ( 1 ) ; doc . setVersion ( 1 ) ; model = doc . createModel ( ) ; model . setId ( "model1" ) ; model . setSource ( "file.xml" ) ; model . setLanguage ( "urn:sedml:sbml" ) ; model = doc . createModel ( ) ; model . setId ( "model2" ) ; model . setSource ( "model1" ) ; model . setLanguage ( "urn:sedml:sbml" ) ; change = model . createChangeAttribute ( ) ; change . setTarget ( "/sbml:sbml/sbml:model/sbml:listOfParameters/sbml:parameter[@id='k']/@value" ) ; change . setNewValue ( "0.1" ) ; remove = model . createRemoveXML ( ) ; remove . setTarget ( "/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S1']" ) ; compute = model . createComputeChange ( ) ; compute . setTarget ( "/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&quot;S2&quot;]/@initialConcentration" ) ; variable = compute . createVariable ( ) ; variable . setId ( "S2" ) ; variable . setModelReference ( "model1" ) ; variable . setTarget ( "/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S2']" ) ; compute . setMath ( libsedml . parseFormula ( "S2 / 2" ) ) ; tc = doc . createUniformTimeCourse ( ) ; tc . setId ( "sim1" ) ; tc . setInitialTime ( 0.0 ) ; tc . setOutputStartTime ( 0.0 ) ; tc . setOutputEndTime ( 10.0 ) ; tc . setNumberOfPoints ( 1000 ) ; alg = tc . createAlgorithm ( ) ; alg . setKisaoID ( "KISAO:0000019" ) ; task = doc . createTask ( ) ; task . setId ( "task1" ) ; task . setModelReference ( "model1" ) ; task . setSimulationReference ( "sim1" ) ; dg = doc . createDataGenerator ( ) ; dg . setId ( "time" ) ; dg . setName ( "time" ) ; var = dg . createVariable ( ) ; var . setId ( "v0" ) ; var . setName ( "time" ) ; var . setTaskReference ( "task1" ) ; var . setSymbol ( "urn:sedml:symbol:time" ) ; dg . setMath ( libsedml . parseFormula ( "v0" ) ) ; dg = doc . createDataGenerator ( ) ; dg . setId ( "S1" ) ; dg . setName ( "S1" ) ; var = dg . createVariable ( ) ; var . setId ( "v1" ) ; var . setName ( "S1" ) ; var . setTaskReference ( "task1" ) ; var . setTarget ( "/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S1']" ) ; dg . setMath ( libsedml . parseFormula ( "v1" ) ) ; report = doc . createReport ( ) ; report . setId ( "r1" ) ; report . setName ( "report 1" ) ; set = report . createDataSet ( ) ; set . setId ( "ds1" ) ; set . setLabel ( "time" ) ; set . setDataReference ( "time" ) ; set = report . createDataSet ( ) ; set . setId ( "ds2" ) ; set . setLabel ( "S1" ) ; set . setDataReference ( "S1" ) ; plot = doc . createPlot2D ( ) ; plot . setId ( "p1" ) ; plot . setName ( "S1 Timecourse" ) ; curve = plot . createCurve ( ) ; curve . setId ( "c1" ) ; curve . setName ( "S1" ) ; curve . setLogX ( False ) ; curve . setLogY ( False ) ; curve . setXDataReference ( "time" ) ; curve . setYDataReference ( "S1" ) ; plot2 = doc . createPlot3D ( ) ; plot2 . setId ( "p2" ) ; plot2 . setName ( "dunno" ) ; surf = plot2 . createSurface ( ) ; surf . setId ( "surf1" ) ; surf . setName ( "S1" ) ; surf . setLogX ( False ) ; surf . setLogY ( False ) ; surf . setLogZ ( False ) ; surf . setXDataReference ( "time" ) ; surf . setYDataReference ( "S1" ) ; surf . setZDataReference ( "S1" ) ; libsedml . writeSedML ( doc , args [ 1 ] ) ;
Usage: create_sedml output-filename