def main(): parser = argparse.ArgumentParser(description="Generates `.chem` using Linear algorithm.") parser.add_argument("-o", "--outfile", action="store", type=argparse.FileType('w'), help="write to OUTFILE in .chem format (if ommited, use stdout)", metavar="OUTFILE") parser.add_argument("-a", "--natoms", action="store", type=int, help="number of atoms", default=2) parser.add_argument("-l", "--length", action="store", type=int, help="maximum number of atoms per molecule", default=5) parser.add_argument("-f", "--pform", action="store", type=float, help="probability of bonding", default=0.25) parser.add_argument("-b", "--pbreak", action="store", type=float, help="probability of breaking", default=0.1) parser.add_argument("-u", "--undirected", action="store_false", dest="directed", help="undirected molecules") parser.add_argument("-d", "--directed", action="store_true", help="directed molecules", default=True) parser.add_argument("-t", "--rates", action="store", type=int, help="possible reaction rates", default=[1.0]) parser.add_argument("-s", "--seed", action="store", type=int, help="pseudo-random seed", default=None) args = parser.parse_args() rates = [float(x) for x in args.rates] #strip defaults if len(rates) > 1: rates = rates[1:] rng = random.Random(args.seed) #import cProfile #cProfile.run(""" net = Linear(args.natoms, args.length, args.pform, args.pbreak, args.directed, rates, rng=rng) #""".strip()) chemstr = """#Linear reaction network # natoms = {0} # length = {1} # pform = {2} # pbreak = {3} # direct = {4} # rates = {5} # seed = {6} """.format(args.natoms, args.length, args.pform, args.pbreak, args.directed, rates, args.seed) chemstr += str(net) chemstr += "\n" if args.outfile is None: #print to standard out sys.stdout.write(chemstr) else: #write to provided filename args.outfile.write(chemstr)
def test_undirected(self): net = Linear(2, 3, 0.2, 0.2, False) net = Linear(2, 3, 0.2, 0.2, False, rng=self.rng)
def test_directed(self): net = Linear(2, 3, 0.2, 0.2, True) net = Linear(2, 3, 0.2, 0.2, True, rng=self.rng)
def test_pform_tuple(self): net = Linear(2, (3, 5), (0.2, 0.5), 0.2) net = Linear(2, (3, 5), (0.2, 0.5), 0.2, rng=self.rng)
def test_pbreak_tuple(self): net = Linear(2, (3, 5), 0.2, (0.2, 0.5)) net = Linear(2, (3, 5), 0.2, (0.2, 0.5), rng=self.rng)
def test_maxlengt_dict(self): net = Linear(2, {3: 2, 5: 2.1}, 0.2, 0.2) net = Linear(2, {3: 2, 5: 2.1}, 0.2, 0.2, rng=self.rng)
def test_maxlengt_tuple(self): net = Linear(2, (3, 5), 0.2, 0.2) net = Linear(2, (3, 5), 0.2, 0.2, rng=self.rng)
def test_natoms_dict(self): net = Linear({2: 2, 3: 2.1}, 3, 0.2, 0.2) net = Linear({2: 2, 3: 2.1}, 3, 0.2, 0.2, rng=self.rng)
def test_natoms_tuple(self): net = Linear((2, 3), 3, 0.2, 0.2) net = Linear((2, 3), 3, 0.2, 0.2, rng=self.rng)
def test_natoms_int(self): net = Linear(2, 3, 0.2, 0.2) net = Linear(2, 3, 0.2, 0.2, rng=self.rng)