GithubHelp home page GithubHelp logo

reticula-network / reticula Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 1.0 711 KB

The general purpose library for analysing static, temporal and hypergraph networks.

Home Page: https://reticula.network/

License: MIT License

C++ 99.12% CMake 0.82% Shell 0.06%
dag event-graphs temporal-networks complex-networks hypergraphs

reticula's People

Contributors

arashbm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

reticula's Issues

Add joint-degree sequence functions

Add simple joint-degree sequence functions, returning the degree-pairs of both ends. Maybe use those in *_degree_assortativity functions.

Maybe define a generic attribute_pairs function similar to definition of attribute_assortativity and go from there?

random functions should use generic pseudo-random generators

Currently some functions use integer seeds, while some others use a mix of std::mt19937 and std::mt19937_64. The code should allow the use of a generic pseudo-random generator or at least use one uniformly, which is bad for reproducibility and backwards compatibility reasons.

Define graph isomorphism methods

currently the test only checks number of nodes and edges. It should check that the two graphs are isomorphic, but the hypothetical dag::is_isomorphic function doesn't exist yet.

Maybe worth checking out automorphism algorithms at the same time.

random graph generators should have inputs with the same type as output

Currently BA or ER network generators are declared like undirected_network<VertT> ba_random_graph(size_t n, size_t m, std::mt19937_64& generator); and undirected_network<VertT> gnp_random_graph(size_t n, double p, std::mt19937_64& generator);. Why not use VertT instead of size_t for number of nodes n (and also number of new links m for BA)?

Directed/undirected expected degree hypergraphs: "illegal" edges?

Take the following example:

d = ret.random_directed_expected_degree_sequence_hypergraph[ret.int64]([(2, 2)]*200000, [(5,5)]*80000, random_state=state)

It produces an edge with zero vertices, and many edges with only in- or out-verts. Similarly, the undirected variant creates one zero-degree edge and many one-degree edges. What should we do about them?

Other libraries leave them be, although some produce many zero-degree edges that are distinguished by an edge id.

Sum equality check for expected degree hypergraphs and directed graphs are too strict

Say you need to have floating-point weights for one of your weight sequences. Getting the edge and vertex weight sequence sums to exactly add up is quite impossible. The same story should be true for random expected directed dyadic graph with in- and out-weight sequences.

The total weight equality check should at minimum be less strict and maybe even just a warning. A large discrepancy is usually a sign of user error, but small differences are negligible.

Hardcoded cutoff vs `adjacency_prob.cutoff_dt()`

Some functions, e.g. _deterministic_out_component() in src/temporal_component_sizes.tpp use cutoff_dt() member of the adjacency_prob, while others, e.g. implicit_event_graph<EdgeT, AdjacencyProbT>::predecessors_vert() uses a hardcoded value of 1e-20. The first function is used in in_component() and the second one in in_components(). What's the deal here?

Edge degree sequence

add edge_*_degree and edge_*_degree_sequence functions for parity with vertex degree function.

Performance: which graph should `dag::graph_union` copy?

dag::graph_union(g1, g2) copies one graph and merges the other one into the copy before returning it. Currently the one with the larger number of vertices is selected. Investigate if selecting based on number of edges or some other criteria might be better.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.