__init__.py 3.64 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 Tiago de Paula Peixoto <tiago@skewed.de>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.

from .. import *

title = "Software dependencies (2010)"
description = """""Several networks of software dependencies. Nodes represent libraries and a directed edge denotes a library dependency on another.""[^icon]
[^icon]: Description obtained from the [ICON](https://icon.colorado.edu) project."""
tags = ['Technological', 'Software', 'Unweighted']
url = 'http://wwwlovre.appspot.com/support.jsp'
citation = [('Šubelj & Bajec (2012). Software systems through complex networks science, Proc. of SoftwareMining 12, p. 9','http://dx.doi.org/10.1145/2384416.2384418'),
            ('Šubelj & Bajec (2011). Community structure of complex software systems, Physica A 390(16), 2968','http://dx.doi.org/10.1016/j.physa.2011.03.036'),
            ('Šubelj et al. (2013). Group extraction for real-world networks, Proc. of NetSci 13, p. 152.','http://netsci2013.net/wordpress/wp-content/uploads/2013/05/booklet_NetSci_2013_forWeb_2.pdf'),
            ('Šubelj & Bajec (2012). Software systems through complex networks science, Proc. of SoftwareMining 12, p. 9','http://dx.doi.org/10.1145/2384416.2384418'),
            ('Šubelj & Bajec (2012). Clustering assortativity, communities and functional modules in real-world networks, pp. 21.','http://arxiv.org/abs/1202.3188'),
            ('Šubelj et al. (2014). Node mixing and group structure of complex software networks, Advs. Complex Syst. 17(7), 1450022.', 'http://dx.doi.org/10.1142/S0219525914500222')]
icon_hash = ['589b6485a411221d0e7c67d4', '58a4c628a411221d0e7c67e8', '58a4c586a411221d0e7c67e7']
ustream_license = None
upstream_prefix = 'http://wwwlovre.appspot.com/resources/research/networks'

nets = ['other/jdk', 'ssa/jung-j', 'ssc/javax', 'ssc/java', 'cmhs/slucene',
        'ssa/weka', 'ssa/jung-c', 'ncs/guava', 'ssc/org', 'ssc/colt',
        'ssc/jung', 'sgs/sjung', 'ssc/flamingo', 'cmhs/scolt', 'ssc/jmail',
        'sgs/sjbullet', 'ssc/junit']

files = [(net, net.split("/")[1], None) for net in nets]

def fetch_upstream(force=False):
    return fetch_upstream_files(__name__.split(".")[-1], upstream_prefix, files,
                                force)

@cache_network()
@coerce_props()
@annotate()
def parse(alts=None):
    global files
    name = __name__.split(".")[-1]
    for fnames, alt, fmt in files:
        if alts is not None and alt not in alts:
            continue
        if isinstance(fnames, str):
            fnames = [fnames]
        with ExitStack() as stack:
            fs = [stack.enter_context(open_upstream_file(name, fn, "r")) for fn in fnames]
            g = Graph(directed=True)

            for line in fs[0]:
                if "#" in line:
                    continue
                vals = line.split()
                if len(vals) == 1 and int(vals[0]) >= g.num_vertices():
                    g.add_vertex(int(vals[0]) - g.num_vertices() + 1)
                if len(vals) > 1:
                    g.add_edge(int(vals[0]), int(vals[1]))
        yield alt, g