void iterate(igraph_t *graph, double th) { igraph_integer_t x, y, z = -1.0, xy; xy = rand() % (int) igraph_ecount(graph); igraph_edge(graph, xy, &x, &y); //flip increasing orientation with pr 1/2 if(rand() % 2) { igraph_integer_t buffer = y; y = x; x = buffer; } igraph_vector_t degrees; igraph_vector_init(°rees, 1); all_degrees(graph, °rees); double d_mean = get_d_mean(graph); double random = 1.0 * rand() / RAND_MAX; int w; double total = 0.0; double denom = get_denom(graph, °rees, th, x, y); for(w = 0; w < igraph_vector_size(°rees); w++) { if(w != (int) x && w != (int) y) { total += f(VECTOR(degrees)[w], d_mean, th) / denom; if(random < total) { z = (igraph_integer_t) w; break; } } } igraph_vector_destroy(°rees); if(z > -.5) { igraph_es_t es; igraph_es_1(&es, xy); igraph_delete_edges(graph, es); igraph_es_destroy(&es); igraph_add_edge(graph, x, z); } }
/** * \ingroup python_interface_edgeseq * \brief Initialize a new edge sequence object for a given graph * \return the initialized PyObject */ int igraphmodule_EdgeSeq_init(igraphmodule_EdgeSeqObject *self, PyObject *args, PyObject *kwds) { static char *kwlist[] = { "graph", "edges", NULL }; PyObject *g, *esobj=Py_None; igraph_es_t es; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|O", kwlist, &igraphmodule_GraphType, &g, &esobj)) return -1; if (esobj == Py_None) { /* If es is None, we are selecting all the edges */ igraph_es_all(&es, IGRAPH_EDGEORDER_ID); } else if (PyInt_Check(esobj)) { /* We selected a single edge */ long int idx = PyInt_AsLong(esobj); if (idx < 0 || idx >= igraph_ecount(&((igraphmodule_GraphObject*)g)->g)) { PyErr_SetString(PyExc_ValueError, "edge index out of range"); return -1; } igraph_es_1(&es, (igraph_integer_t)idx); } else { /* We selected multiple edges */ igraph_vector_t v; igraph_integer_t n = igraph_ecount(&((igraphmodule_GraphObject*)g)->g); if (igraphmodule_PyObject_to_vector_t(esobj, &v, 1)) return -1; if (!igraph_vector_isininterval(&v, 0, n-1)) { igraph_vector_destroy(&v); PyErr_SetString(PyExc_ValueError, "edge index out of range"); return -1; } if (igraph_es_vector_copy(&es, &v)) { igraphmodule_handle_igraph_error(); igraph_vector_destroy(&v); return -1; } igraph_vector_destroy(&v); } self->es = es; Py_INCREF(g); self->gref = (igraphmodule_GraphObject*)g; return 0; }