def price_scale_free(m, c=None, gamma=1, nodes=0, weighted=True, directed=True, seed_graph=None, multigraph=False, name="PriceSF", shape=None, positions=None, population=None, from_graph=None, **kwargs): """ @todo: make the algorithm. Generate a Price graph model (Barabasi-Albert if undirected). Parameters ---------- m : int The number of edges each new node will make. c : double Constant added to the probability of a vertex receiving an edge. gamma : double Preferential attachment power. nodes : int, optional (default: None) The number of nodes in the graph. weighted : bool, optional (default: True) @todo Whether the graph edges have weights. directed : bool, optional (default: True) Whether the graph is directed or not. multigraph : bool, optional (default: False) Whether the graph can contain multiple edges between two nodes. name : string, optional (default: "ER") Name of the created graph. shape : :class:`~nngt.core.Shape`, optional (default: None) Shape of the neurons' environment positions : :class:`numpy.ndarray`, optional (default: None) A 2D or 3D array containing the positions of the neurons in space. population : :class:`~nngt.NeuralPop`, optional (default: None) Population of neurons defining their biological properties (to create a :class:`~nngt.Network`). from_graph : :class:`~nngt.Graph` or subclass, optional (default: None) Initial graph whose nodes are to be connected. Returns ------- graph_price : :class:`~nngt.Graph` or subclass. Notes ----- `nodes` is required unless `from_graph` or `population` is provided. """ nodes = ( ( population.size if population is not None else nodes ) if from_graph is None else from_graph.node_nb() ) #~ c = c if c is not None else 0 if directed else 1 graph_obj_price = GraphObject.to_graph_object( price_network(nodes,m,c,gamma,directed,seed_graph)) if from_graph is not None: from_graph.graph = graph_obj_price graph_price = (Graph(name=name, libgraph=graph_obj_price, **kwargs) if from_graph is None else from_graph) if issubclass(graph_price.__class__, Network): Connections.delays(graph_price, ia_edges) elif population is not None: Network.make_network(graph_price, population) if shape is not None: make_spatial(graph_price, shape, positions) return graph_price