def eval_decmodel(s): d = eval(s) v = d["lagrange_version"] if v != VERSION: print >> sys.stderr, "***Version mismatch: %s (expecting %s)***" \ % (v, VERSION) print >> sys.stderr, "Things may not work as expected" for x in ("area_labels", "taxon_range_data", "newick_trees"): assert x in d, "required for analysis, but missing: %s" % x labels = d["area_labels"] nareas = len(labels) data = d["taxon_range_data"] maxareas = d.get("max_range_size") or len(labels) dists = d["ranges"] excluded = d["excluded_ranges"] dm = d["area_dispersal"] periods = d["dispersal_durations"] model = DECModel(nareas, labels, periods=periods, dists=dists) model.Dmask[:] = dm trees = d["newick_trees"] newicktree = trees[0]["newick"] nodelabels = trees[0]["included"] root_age = trees[0]["root_age"] or None tree = Tree(newicktree, periods=periods, root_age=root_age) tree.set_default_model(model) tree.set_tip_conditionals(data) base_rates = d["base_rates"] if base_rates == "__estimate__": pass else: base_rates = (d["base_rates"]["dispersal"], d["base_rates"]["extinction"]) return model, tree, data, nodelabels, base_rates