logo Netzschleuder network catalog, repository, and centrifuge

History of dom

The changes to the source code of this entry in the repository, newest first, each with the differences it made to the entry's files. They are also listed on GitLab.

[entries] Add the date when each entry was added, and remove icon_hash by Tiago de Paula Peixoto beff7c9
The dates are those of the commits that first added the entries' files
(2020-08-11 for the entries of the initial commit); renamed entries keep
the date of their first name.

Changed: none
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 6490d77..c361abd 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -39,10 +39,7 @@ citation = [('Strauss Eli D., DeCasien Alex R., Galindo Gabriela, Hobson Elizabe
             ('D. F. Lott, "Dominance relations and breeding rate in mature male American bison." Zeitschrift für Tierpsychologie 49(4), 418-432 (1979)', 'https://doi.org/10.1111/j.1439-0310.1979.tb00302.x'),
             ('M. W. Schein and M. H. Fohrman. "Social dominance relationships in a herd of dairy cattle." The British J. of Animal Behaviour 3(2), 45-55 (1955)', 'https://doi.org/10.1016/s0950-5601(55)80012-3'),
             ('J. A. R. A. M. van Hooff, J. A. B. Wensing, "Dominance and its behavioral measures in a captive wolf pack." In H. Frank (ed.), Man and Wolf: Advances, Issues, and Problems in Captive Wolf Research, 219-252, Dr W. Junk Publishers (1987)', 'https://scholar.google.com/scholar?q=van+Hooff+Wensing+%22Dominance+and+its+behavioral+measures+in+a+captive+wolf+pack%22')]
-icon_hash = ['58499ef08cf714f319c48f8e',
-             '57348f7e461efe0c7a67831c',
-             '57349e9c461efe0c7a678329',
-             '586eab03a411221d0e7c5bd9']
+date_added = '2022-02-08'
 upstream_prefix = 'https://github.com/DomArchive/DomArchive/raw/master/data'
 
 names = [
[entries] Remove unneeded code from the entries by Tiago de Paula Peixoto 2c69f19
Unneeded "global files" statements, unused imports and variables,
f-strings without placeholders, duplicate keys in foodweb_little_rock
(keeping the order and the values used), and the second definition of
get_lines() in twitter_higgs. Nothing changes in the networks or
descriptions.

Changed: none
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 04062e6..6490d77 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -505,7 +505,6 @@ def fetch_upstream(force=False):
 @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:
[entries] Merge duplicate entries and add cross-references between related ones by Tiago de Paula Peixoto 9bc6033
- Removed duplicates, merged into the entries holding the same data:
  dblp_coauthor_snap (soc_net_comms), cattle and bison (dom; bison's
  breeding data move there, as do the wolves' age and sex),
  football_tsevans (football, with both conference assignments),
  eu_procurements_alt (eu_procurements), foursquare_friendships
  (foursquare_global).
- software_dependencies: colt and scolt are one network; ambassador: the
  duplicate 2001 network is dropped and the three same-edge networks
  combined; dom: the dataset count corrected (436).
- macaque_neural: Young's 71-area network added (young71; the 47-area one
  is now cocomac47), both from archived copies.
- collins_yeast, celegans_interactomes: from archived copies of the dead
  CCSB site (byte-identical files).
- Cross-references between entries holding versions of the same data
  (food webs, Wikipedia, Slashdot, physicians, SNAP/Mislove, CCSB).
- ICON ids of duplicate records added; macaque_neural's corrected.
- prosper, dbpedia_all: string properties given in edge-index order (needs
  graph-tool with the fixed vals ordering).
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 0b890e5..04062e6 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -24,12 +24,25 @@ import shutil
 import numpy as np
 
 title = "Animal dominance archive (2022)"
-description = """Animal dominance interaction data published over a century of research. The archive contains 434 agonistic interaction datasets, totaling over 241,000 interactions. Each dataset is a separate network, named after its source study (with the study's metadata, such as the species and study site, as graph properties). Nodes are individual animals of the observed group, identified by the names or codes used in the source study (vertex property `name`), and a directed edge (i,j) corresponds to an agonistic interaction between i (winner) and j (loser). For datasets given as interaction matrices, all individuals of the matrix are included (even those without any interaction), there is one edge per pair, and the `weight` edge property counts the number of such interactions (or is 1 for binary data); for datasets given as lists of interactions, each interaction is a separate edge, with its position in the sequence of interactions (`sequence`) and, when available, its date or time as given in the source (`time`, whose meaning is given by the graph property `edgelist_time_meaning`)."""
+description = """Animal dominance interaction data published over a century of research. The archive contains 436 agonistic interaction datasets (418 interaction matrices and 18 sequences of interactions) from 190 studies of 367 groups of 135 species, totaling about 243,000 interactions. (The README of the DomArchive repository gives an outdated count of 434 datasets and over 241,000 interactions; the data file and the accompanying paper have 436 datasets.) Each dataset is a separate network, named after its source study (with the study's metadata, such as the species and study site, as graph properties). Nodes are individual animals of the observed group, identified by the names or codes used in the source study (vertex property `name`), and a directed edge (i,j) corresponds to an agonistic interaction between i (winner) and j (loser). For datasets given as interaction matrices, all individuals of the matrix are included (even those without any interaction), there is one edge per pair, and the `weight` edge property counts the number of such interactions (or is 1 for binary data); for datasets given as lists of interactions, each interaction is a separate edge, with its position in the sequence of interactions (`sequence`) and, when available, its date or time as given in the source (`time`, whose meaning is given by the graph property `edgelist_time_meaning`).
+
+Some of the datasets were also distributed by L. C. Freeman on his network data page at the University of California, Irvine (no longer online), in UCINET format:
+
+- `Lott_1979`: dominance encounters among 26 mature male American bison on the National Bison Range in Moiese, Montana, observed by D. F. Lott for 12 hours per day from 25 July to 14 August 1972 (fighting, nod-threats, broadside threats, head-on threats, rush threats and supplanting). Freeman's version has the same matrix, with the animals numbered 1 to 26 instead of `a01` to `a26`, and in addition the breeding success of each bull, which is included here as the vertex property `breeding` (the number of breeding successes, available only for this network; it is obtained from Freeman's page via the Internet Archive).
+- `ScheinFohrman_1955`: contests (most of which were mere threats) among 28 cows of a herd of dairy cattle at the Iberia Livestock Experiment Station in Jeanerette, Louisiana, observed by M. W. Schein and M. H. Fohrman. Freeman's version has the same matrix, with the names without the `X` prefix.
+- `VanHooffWensing_1987`: "low posture" displays among the 16 members of a captive wolf pack in a large wooded enclosure in Arnhem (the Netherlands), observed in 1978 by J. A. R. A. M. van Hooff and J. A. B. Wensing. Freeman's version (file `wolf.dat`) is transposed (the row wolf is the one that displays low posture, i.e. the loser) and has only 148 of the 161 nonzero entries of the matrix (4,458 of the 10,405 displays). Freeman's page also gives the age and sex of each wolf (with the same names as here), which are included as the vertex properties `age` (the age in years) and `male` (true for males), available only for this network and obtained from Freeman's page via the Internet Archive."""
 tags = ['Social', 'Animal', 'Weighted']
-url = 'https://github.com/DomArchive/DomArchive'
+url = ['https://github.com/DomArchive/DomArchive',
+       'https://web.archive.org/web/20210115130726/http://moreno.ss.uci.edu/data.html']
 citation = [('Strauss Eli D., DeCasien Alex R., Galindo Gabriela, Hobson Elizabeth A., Shizuka Daizaburo and Curley James P., "DomArchive: a century of published dominance data", Phil. Trans. R. Soc. B377: 20200436 (2022)',
-             'https://doi.org/10.1098/rstb.2020.0436')]
-icon_hash = '58499ef08cf714f319c48f8e'
+             'https://doi.org/10.1098/rstb.2020.0436'),
+            ('D. F. Lott, "Dominance relations and breeding rate in mature male American bison." Zeitschrift für Tierpsychologie 49(4), 418-432 (1979)', 'https://doi.org/10.1111/j.1439-0310.1979.tb00302.x'),
+            ('M. W. Schein and M. H. Fohrman. "Social dominance relationships in a herd of dairy cattle." The British J. of Animal Behaviour 3(2), 45-55 (1955)', 'https://doi.org/10.1016/s0950-5601(55)80012-3'),
+            ('J. A. R. A. M. van Hooff, J. A. B. Wensing, "Dominance and its behavioral measures in a captive wolf pack." In H. Frank (ed.), Man and Wolf: Advances, Issues, and Problems in Captive Wolf Research, 219-252, Dr W. Junk Publishers (1987)', 'https://scholar.google.com/scholar?q=van+Hooff+Wensing+%22Dominance+and+its+behavioral+measures+in+a+captive+wolf+pack%22')]
+icon_hash = ['58499ef08cf714f319c48f8e',
+             '57348f7e461efe0c7a67831c',
+             '57349e9c461efe0c7a678329',
+             '586eab03a411221d0e7c5bd9']
 upstream_prefix = 'https://github.com/DomArchive/DomArchive/raw/master/data'
 
 names = [
@@ -474,9 +487,19 @@ names = [
 
 files = [('dom.data.RData', name, None) for name in names]
 
+# Breeding success of the bison of Lott_1979, and age and sex of the wolves of
+# VanHooffWensing_1987, from L. C. Freeman's page
+breeding_prefix = 'https://web.archive.org/web/20210115130726id_/http://moreno.ss.uci.edu'
+breeding_files = [('bison_breeding.dat', 'Lott_1979', None),
+                  ('wolf_att.dat', 'VanHooffWensing_1987', None)]
+
 def fetch_upstream(force=False):
-    return fetch_upstream_files(__name__.split(".")[-1], upstream_prefix, files,
-                                force)
+    name = __name__.split(".")[-1]
+    fetch_upstream_files(name, upstream_prefix, files, force)
+    # The Wayback Machine refuses connections or fails when rate-limited, so
+    # retry with increasing pauses (files already fetched are skipped)
+    return retry_download(fetch_upstream_files, name, breeding_prefix,
+                          breeding_files, force)
 
 @cache_network()
 @coerce_props()
@@ -547,6 +570,27 @@ def parse(alts=None):
                             g.add_edge_list(np.array([idx[0], idx[1], ws]).T,
                                             eprops=[g.ep.weight])
 
+                        if alt == "Lott_1979":
+                            # Freeman's numbers 1..26 are DomArchive's a01..a26
+                            with open_upstream_file(name, "bison_breeding.dat",
+                                                    "rb") as f:
+                                db = read_dl(f, pad=False)
+                            br = {"a%02d" % int(n): int(b) for n, b in
+                                  zip(db["rows"], db["data"][0][:, 0])}
+                            assert sorted(br) == sorted(g.vp.name)
+                            g.vp.breeding = g.new_vp("int",
+                                                     vals=[br[n] for n in g.vp.name])
+                        elif alt == "VanHooffWensing_1987":
+                            # Freeman's wolves have the same names
+                            with open_upstream_file(name, "wolf_att.dat",
+                                                    "rb") as f:
+                                da = read_dl(f, pad=False)
+                            att = {n: (int(a), int(m)) for n, (a, m) in
+                                   zip(da["rows"], da["data"][0])}
+                            assert sorted(att) == sorted(g.vp.name)
+                            g.vp.age = g.new_vp("int", vals=[att[n][0] for n in g.vp.name])
+                            g.vp.male = g.new_vp("bool", vals=[att[n][1] == 1 for n in g.vp.name])
+
                         for i, val in enumerate(x[1]):
                             if i == 0:
                                 continue
[entries] Fix parse bugs and improve descriptions and metadata by Tiago de Paula Peixoto 6bb6851
- parse fixes from the review of the descriptions, e.g. us_patents
  (directed), celegans_2019 (synapse direction), ecoli_transcription and
  yeast_transcription (regulator to target), bitcoin (direction, phantom
  node), ego_social (Google+ features and circles), scotus_majority,
  arxiv_authors and social_location (as in SNAP), caida_as, dnc, dom,
  mist, reuters and bibsonomy (names on the right nodes), uci_zoo
- every description now states explicitly what the nodes and edges
  represent; corrected titles, years, tags, citations and licences
- the "Hypergraph" tag is removed; very large entries are marked
  `huge = True` (see --skip-huge)
- ICON ids of partial duplicates added (hiv_transmission, congress_bills,
  openflights, dutch_school)
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index cf6a391..0b890e5 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -24,7 +24,7 @@ import shutil
 import numpy as np
 
 title = "Animal dominance archive (2022)"
-description = """Animal dominance interaction data published over a century of research. The archive contains 434 agonistic interaction datasets, totaling over 241,000 interactions. A directed edge (i,j) corresponds to an antagonist interaction between i (winner) and j (loser). If a 'weight' edge property map exists, it counts the number of such interactions."""
+description = """Animal dominance interaction data published over a century of research. The archive contains 434 agonistic interaction datasets, totaling over 241,000 interactions. Each dataset is a separate network, named after its source study (with the study's metadata, such as the species and study site, as graph properties). Nodes are individual animals of the observed group, identified by the names or codes used in the source study (vertex property `name`), and a directed edge (i,j) corresponds to an agonistic interaction between i (winner) and j (loser). For datasets given as interaction matrices, all individuals of the matrix are included (even those without any interaction), there is one edge per pair, and the `weight` edge property counts the number of such interactions (or is 1 for binary data); for datasets given as lists of interactions, each interaction is a separate edge, with its position in the sequence of interactions (`sequence`) and, when available, its date or time as given in the source (`time`, whose meaning is given by the graph property `edgelist_time_meaning`)."""
 tags = ['Social', 'Animal', 'Weighted']
 url = 'https://github.com/DomArchive/DomArchive'
 citation = [('Strauss Eli D., DeCasien Alex R., Galindo Gabriela, Hobson Elizabeth A., Shizuka Daizaburo and Curley James P., "DomArchive: a century of published dominance data", Phil. Trans. R. Soc. B377: 20200436 (2022)',
@@ -513,27 +513,33 @@ def parse(alts=None):
                         edge_list = str(np.array(x[1][13])[0]) == "Edgelist"
                         a = np.array(x[0])
                         if edge_list:
-                            g.ep.time = g.new_ep("double")
+                            # columns: sequence, winner, loser[, time]
+                            a = np.array(x[0], dtype=object)
+                            g.ep.sequence = g.new_ep("int")
+                            eprops = [g.ep.sequence]
                             if len(a) > 3:
-                                g.ep.date = g.new_ep("string")
+                                g.ep.time = g.new_ep("string")
+                                eprops.append(g.ep.time)
+                            def fmt(v):
+                                if isinstance(v, float) and v.is_integer():
+                                    v = int(v)
+                                return str(v)
                             def edges():
                                 for vals in a.T:
-                                    if len(a) > 3:
-                                        yield vals[1], vals[2], vals[0], vals[3]
-                                    else:
-                                        yield vals[1], vals[2], vals[0]
-                            try:
-                                g.add_edge_list(edges(),
-                                                eprops=[g.ep.time, g.ep.date] if len(a) > 3
-                                                else [g.ep.time])
-                            except ValueError:
-                                g.vp.name = g.add_edge_list(edges(),
-                                                            hashed=True,
-                                                            eprops=[g.ep.time, g.ep.date] if len(a) > 3
-                                                            else [g.ep.time])
+                                    yield ([fmt(vals[1]), fmt(vals[2]),
+                                            int(float(vals[0]))] +
+                                           [fmt(v) for v in vals[3:4]])
+                            g.vp.name = g.add_edge_list(edges(), hashed=True,
+                                                        eprops=eprops)
                         else:
+                            # rows are winners, columns are losers
+                            names = list(robjects.r["rownames"](x[0]))
+                            assert names == list(robjects.r["colnames"](x[0]))
+                            g.add_vertex(len(names))
+                            g.vp.name = g.new_vp("string", vals=names)
                             g.ep.weight = g.new_ep("int")
 
+                            a = np.array(x[0])
                             a[np.isnan(a)] = 0
                             a[a < 0] = 0
                             idx = a.nonzero()
[entries] Fix parse bugs and improve the metadata of existing entries by Tiago de Paula Peixoto c996a0e
From a review of the dataset descriptions against the upstream sources
and papers, and from user reports:

- parse fixes (wrong edge direction or directedness, shifted or
  misnamed properties, merged node identities, duplicated or missing
  edges and nodes, wrong types), e.g. arxiv_citation (the HepTh dates
  were a copy of the HepPh ones; now from the KDD Cup 2003 data),
  eu_procurements, foursquare_global, hiv_transmission, genetic_multiplex,
  gnutella (adds the 05 snapshot), roadnet, macaque_neural, python_dependency
- descriptions rewritten from the upstream sources, documenting every
  property
- corrected titles, citations and DOIs, licences (ustream_license typo,
  the data's own terms), tags and ICON ids
- url lists for entries with several sources or dataset pages
- SocioPatterns entries moved to the site's new data location, with the
  daily networks of sp_infectious and sp_primary_school
- the Michael Fire entries marked as orphans (served from the mirror)
- redundant type forcings removed after the graph-tool coercion fixes
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 188b608..cf6a391 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -29,7 +29,7 @@ tags = ['Social', 'Animal', 'Weighted']
 url = 'https://github.com/DomArchive/DomArchive'
 citation = [('Strauss Eli D., DeCasien Alex R., Galindo Gabriela, Hobson Elizabeth A., Shizuka Daizaburo and Curley James P., "DomArchive: a century of published dominance data", Phil. Trans. R. Soc. B377: 20200436 (2022)',
              'https://doi.org/10.1098/rstb.2020.0436')]
-icon_hash = None
+icon_hash = '58499ef08cf714f319c48f8e'
 upstream_prefix = 'https://github.com/DomArchive/DomArchive/raw/master/data'
 
 names = [
Update copyright information by Tiago de Paula Peixoto 73a4f0d
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 29dddb3..188b608 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -1,7 +1,7 @@
 #! /usr/bin/env python
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2020-2024 Tiago de Paula Peixoto <tiago@skewed.de>
+# Copyright (C) 2020-2026 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
Update copyright information by Tiago de Paula Peixoto 3d288ea
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index 0d90860..29dddb3 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -1,7 +1,7 @@
 #! /usr/bin/env python
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2020-2023 Tiago de Paula Peixoto <tiago@skewed.de>
+# Copyright (C) 2020-2024 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
Update copyright information by Tiago de Paula Peixoto 8d005ae
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
index a1a6d60..0d90860 100644
--- a/entries/dom/__init__.py
+++ b/entries/dom/__init__.py
@@ -1,7 +1,7 @@
 #! /usr/bin/env python
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2021 Tiago de Paula Peixoto <tiago@skewed.de>
+# Copyright (C) 2020-2023 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
Add entry 'dom' by Tiago de Paula Peixoto 31c9b83
diff --git a/entries/dom/__init__.py b/entries/dom/__init__.py
new file mode 100644
index 0000000..a1a6d60
--- /dev/null
+++ b/entries/dom/__init__.py
@@ -0,0 +1,551 @@
+#! /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 *
+
+import rpy2.robjects as robjects
+import tempfile
+import shutil
+import numpy as np
+
+title = "Animal dominance archive (2022)"
+description = """Animal dominance interaction data published over a century of research. The archive contains 434 agonistic interaction datasets, totaling over 241,000 interactions. A directed edge (i,j) corresponds to an antagonist interaction between i (winner) and j (loser). If a 'weight' edge property map exists, it counts the number of such interactions."""
+tags = ['Social', 'Animal', 'Weighted']
+url = 'https://github.com/DomArchive/DomArchive'
+citation = [('Strauss Eli D., DeCasien Alex R., Galindo Gabriela, Hobson Elizabeth A., Shizuka Daizaburo and Curley James P., "DomArchive: a century of published dominance data", Phil. Trans. R. Soc. B377: 20200436 (2022)',
+             'https://doi.org/10.1098/rstb.2020.0436')]
+icon_hash = None
+upstream_prefix = 'https://github.com/DomArchive/DomArchive/raw/master/data'
+
+names = [
+    'Adcock_2015a',
+    'Adcock_2015b',
+    'Alados_1992a',
+    'Alados_1992b',
+    'Alados_1992c',
+    'Alados_1992d',
+    'Alados_1992e',
+    'Allee_1954',
+    'Anderson_2016a',
+    'Anderson_2016d',
+    'Appleby_1983',
+    'Archie_2006a',
+    'Archie_2006b',
+    'Archie_2006c',
+    'Archie_2006d',
+    'Archie_2006e',
+    'Archie_2006f',
+    'Archie_2006g',
+    'Archie_2006h',
+    'Archie_2006i',
+    'Arlet_2015f',
+    'Barette_1986',
+    'Bennett_1939',
+    'BergstromFedigan_2010b',
+    'BergstromFedigan_2010c',
+    'Berman_2004a',
+    'Berman_2004b',
+    'Berman_2004c',
+    'Blatrix_2004b',
+    'Blatrix_2004c',
+    'Blatrix_2004d',
+    'Blatrix_2004e',
+    'Bonanni_2007a',
+    'Bonanni_2007b',
+    'Bonanni_2007c',
+    'Bonanni_2017a',
+    'Bonanni_2017b',
+    'Bonanni_2017c',
+    'Bonanni_2017d',
+    'Bromley_1991',
+    'Cafazzo_2010a',
+    'Cafazzo_2010b',
+    'Cheney_1977',
+    'Cheney_1977b',
+    'CluttonBrock_1976',
+    'Collias_1950a',
+    'Collias_1950b',
+    'Collias_1950c',
+    'Collias_1951a',
+    'Collias_1951b',
+    'Collias_1951c',
+    'Correa_2013a',
+    'Correa_2013d',
+    'Cote_2000',
+    'Cote_2000b',
+    'Cote_2000c',
+    'Cote_2000d',
+    'Cui_2014',
+    'David_2003a',
+    'David_2003b',
+    'DeLaFuente_2019',
+    'DeLaO_2019a',
+    'DeLaO_2019b',
+    'DeLaO_2019c',
+    'DeLaO_2019d',
+    'deVries_2006',
+    'deWaal_1977a',
+    'deWaal_1977b',
+    'deWaal_1985',
+    'Diniz_2019',
+    'Douglis_1948a',
+    'Douglis_1948b',
+    'Dubosq2013a',
+    'Dubosq2013b',
+    'Dubosq2013c',
+    'Dubosq2013d',
+    'Dubosq2013e',
+    'Dubosq2013f',
+    'Ellard_1989',
+    'Essler_2016a',
+    'Essler_2016c',
+    'Essler_2016d',
+    'Fairbanks_1994a',
+    'Fairbanks_1994b',
+    'Fairbanks_1994c',
+    'Fairbanks_1994d',
+    'Fairbanks_1994e',
+    'Farentinos_1972a',
+    'Farentinos_1972b',
+    'Farentinos_1972c',
+    'Farentinos_1972d',
+    'Farentinos_1972e',
+    'Farentinos_1972f',
+    'Foerster_2016a',
+    'Foerster_2016b',
+    'Fournier_1995',
+    'Fournier_1995b',
+    'Frank_1986a',
+    'Frank_1986b',
+    'Franz_2015a',
+    'Franz_2015b',
+    'Franz_2015c',
+    'Franz_2015d',
+    'Franz_2015e',
+    'Funkhouser_2018a',
+    'Funkhouser_2018b',
+    'Harcourt_1979',
+    'Harcourt_1989',
+    'Hartzler_1970',
+    'Hass_1991',
+    'Hass_1991b',
+    'Hass_1991c',
+    'Hausfater_1975a',
+    'Hausfater_1975b',
+    'Hausfater_1975c',
+    'Hausfater_1982a',
+    'Hausfater_1982b',
+    'Hayaki_1989a',
+    'Hayaki_1989b',
+    'Heitor_2006',
+    'HeitorVicente_2010',
+    'Hewitt_2009a',
+    'Hewitt_2009b',
+    'Hewitt_2009c',
+    'Hewitt_2009d',
+    'Hirotani_1994',
+    'Hirsch_2007a',
+    'Hirsch_2007b',
+    'Hirsch_2007c',
+    'Hirsch_2007d',
+    'Hobson_2015a',
+    'Hobson_2015b',
+    'Holekamp_1991',
+    'Holekamp_1993a',
+    'Holekamp_1993b',
+    'Isbell_1998a',
+    'Isbell_1998b',
+    'Ito_1993a',
+    'Ito_1993b',
+    'Ito_1993c',
+    'Izar_2006',
+    'IzawaWatanabe_2011',
+    'Jenks_1995a',
+    'Jenks_1995b',
+    'Johnson_2017',
+    'Jones_1980a',
+    'Jones_1980b',
+    'Kaufmann_1974',
+    'Kikkawa_1980',
+    'Koenig_2004',
+    'Kohda_1991',
+    'Kolodziejczyk_2005',
+    'Korstjens_2002',
+    'Koutnik_1981',
+    'Koutnik_1981b',
+    'Kurvers_2009',
+    'Lahti_1994a',
+    'Lahti_1994b',
+    'Langbein_2004a',
+    'Langbein_2004b',
+    'Langbein_2004c',
+    'Langbein_2004d',
+    'Langley_2018',
+    'Lee_1979a',
+    'Lee_1979b',
+    'Lee_2017a',
+    'Lee_2017b',
+    'Lee_2017c',
+    'Lee_2017d',
+    'Lee_2017e',
+    'Lee_2017f',
+    'Lee_2018a',
+    'Lee_2018b',
+    'Lee_2018c',
+    'Lee_2018d',
+    'Lee_2018e',
+    'Lee_2019a',
+    'Lee_2019b',
+    'Lee_2019c',
+    'Lee_2019d',
+    'Lee_2019e',
+    'Lott_1979',
+    'Lott_1987',
+    'Lu_2008a',
+    'Lu_2008b',
+    'Malherbe_2007',
+    'Marler_1955',
+    'Masure_1934',
+    'Masure_1934a',
+    'Masure_1934b',
+    'Mather_1985',
+    'Matsuda_2012',
+    'McCune_2019a',
+    'McCune_2019c',
+    'McCune_2019d',
+    'McCune_2019e',
+    'McCune_2019f',
+    'McDougall_2010',
+    'McMahan_1984',
+    'Miller_2010a',
+    'Miller_2010b',
+    'Miller_2010c',
+    'Moller_1987a',
+    'Moller_1987b',
+    'Moller_1987c',
+    'Monnin_1999',
+    'Moore_1978a',
+    'Moore_1978b',
+    'Murray_2007',
+    'Mwamende_2009a',
+    'Mwamende_2009b',
+    'Myrberg_1972',
+    'Myrberg_1974',
+    'Nakano_1994',
+    'Nakano_1995',
+    'Natoli_1991',
+    'Nelissen_1985a',
+    'Nelissen_1985b',
+    'NewtonFisher_2004a',
+    'NewtonFisher_2004b',
+    'Norscia_2015a',
+    'Norscia_2015b',
+    'Norscia_2015c',
+    'Norscia_2015d',
+    'Norscia_2015e',
+    'Norscia_2015f',
+    'Norscia_2015g',
+    'Norscia_2015h',
+    'Norscia_2015i',
+    'Norscia_2015j',
+    'Ortius_1995',
+    'Oshea_1976',
+    'Owens_1996',
+    'Painter_2018',
+    'Paoli_2006',
+    'Pardi_1948a',
+    'Pardi_1948b',
+    'Parsons_1980a',
+    'Parsons_1980b',
+    'Patterson_1977',
+    'Payne_2003',
+    'Poisbleau_2005a',
+    'Poisbleau_2005b',
+    'Poisbleau_2005c',
+    'Poisbleau_2006a',
+    'Poisbleau_2006b',
+    'Post_1992',
+    'Prieto_1978',
+    'Reason_1988',
+    'Richter_2009',
+    'RizaldiWatanabe_2010a',
+    'RizaldiWatanabe_2010b',
+    'Robbins_2008',
+    'Roell_1978',
+    'Rossler_2017',
+    'Rovero_1999a',
+    'Rovero_1999b',
+    'Russell_1970a',
+    'Russell_1970b',
+    'Rutberg_1986a',
+    'Rutberg_1986b',
+    'Samuels_1987',
+    'Samuels_1987b',
+    'Sandel_2017a',
+    'Sandel_2017b',
+    'SatohOhkawara_2008a',
+    'SatohOhkawara_2008b',
+    'SatohOhkawara_2008c',
+    'ScheinFohrman_1955',
+    'SchjelderupEbbe_1922a',
+    'SchjelderupEbbe_1922b',
+    'ScottLockhard_1999a',
+    'ScottLockhard_1999b',
+    'Seibert_2001',
+    'Setchell_2005a',
+    'Setchell_2005b',
+    'SetiaVanSchaik_2007',
+    'Seyfarth_1976a',
+    'Seyfarth_1976b',
+    'Seyfarth_1976c',
+    'Seyfarth_1976d',
+    'Seyfarth_1976e',
+    'Seyfarth_1976f',
+    'Sharpe_2013a',
+    'Sharpe_2013b',
+    'Sharpe_2013c',
+    'Sharpe_2013d',
+    'Shimoji_2014a',
+    'Shimoji_2014b',
+    'Shimoji_2014c',
+    'Shoemaker_1939',
+    'Silk_2019a',
+    'Slotow_1993',
+    'Smith_1976',
+    'Smith_2011a',
+    'Solberg_1997a',
+    'Solberg_1997b',
+    'Solberg_1997c',
+    'SomersNel_1998a',
+    'SomersNel_1998b',
+    'SomersNel_1998c',
+    'Stamps_1978',
+    'Sterck_1997',
+    'Strauss_2019a',
+    'Strauss_2019b',
+    'Strauss_2019c',
+    'Strauss_2019d',
+    'StrayerCummins_1980',
+    'StrayerCummins_1980b',
+    'StrayerCummins_1980c',
+    'StrayerCummins_1980d',
+    'Struhsaker_1967a',
+    'Struhsaker_1967b',
+    'Sullivan_1982',
+    'Surbeck_2011',
+    'SurbeckHohmann_2013b',
+    'Tamm_1977',
+    'Tamura_1988',
+    'Tarvin_1997',
+    'Thompson_1960a',
+    'Thompson_1960b',
+    'Thompson_1960c',
+    'Thompson_1960d',
+    'Thompson_1960e',
+    'Thompson_1993a',
+    'Thompson_1993b',
+    'Tilson_1984',
+    'Tong_2020a',
+    'Tong_2020b',
+    'Tong_2020c',
+    'Tong_2020d',
+    'Tong_2020e',
+    'Tong_2020f',
+    'Tong_2020g',
+    'Tong_2020h',
+    'Tong_2020i',
+    'Tong_2020j',
+    'Torr_1996a',
+    'Torr_1996b',
+    'Torr_1996c',
+    'Trebouet_2019a',
+    'Trebouet_2019b',
+    'Trebouet_2019c',
+    'Trebouet_2019d',
+    'Trunzer_1999',
+    'Utt_2008a',
+    'ValLaillet_2008a',
+    'ValLaillet_2008b',
+    'ValLaillet_2008c',
+    'ValLaillet_2008d',
+    'ValLaillet_2008e',
+    'ValLaillet_2008f',
+    'VanDessel_2018a',
+    'VanDessel_2018b',
+    'VanDierendonck_1995',
+    'VanHooffWensing_1987',
+    'Varley_1966',
+    'Varley_1966b',
+    'Vervaecke_2000',
+    'Vervaecke_2010a',
+    'Vervaecke_2010b',
+    'Vervaecke_2010c',
+    'Vervaecke_2010d',
+    'Vilette_2020',
+    'Waterhouse_1976a',
+    'Waterhouse_1976b',
+    'Waterhouse_1976c',
+    'Watson_1970a',
+    'Watson_1970b',
+    'Watt_1986a',
+    'Watt_1986b',
+    'Watt_1986c',
+    'Watt_1986d',
+    'Watt_1986e',
+    'Watt_1986f',
+    'Watts_1985',
+    'Watts_1994a',
+    'Watts_1994b',
+    'Watts_1994c',
+    'Wells_1979',
+    'WestEberhard_1986',
+    'White_2007a',
+    'White_2007b',
+    'White_2007c',
+    'Wikberg_2013a',
+    'Wikberg_2013b',
+    'Wikberg_2013c',
+    'Wikberg_2013d',
+    'Wikberg_2013e',
+    'Wikberg_2013f',
+    'Williams_1972',
+    'Williamson_2016a',
+    'Williamson_2016b',
+    'Williamson_2016c',
+    'Williamson_2016d',
+    'Williamson_2016e',
+    'Williamson_2016f',
+    'Williamson_2016g',
+    'Williamson_2016h',
+    'Williamson_2016i',
+    'Williamson_2016j',
+    'Williamson_2016k',
+    'Williamson_2017a',
+    'Williamson_2017b',
+    'Williamson_2017c',
+    'Williamson_2017d',
+    'Williamson_2017e',
+    'Williamson_2017f',
+    'Williamson_2017g',
+    'Williamson_2017h',
+    'Williamson_2017i',
+    'Williamson_2017j',
+    'Williamson_2017k',
+    'Williamson_2017l',
+    'Williamson_2017m',
+    'Williamson_2017n',
+    'Williamson_2017o',
+    'Williamson_2019a',
+    'Williamson_2019b',
+    'Williamson_2019c',
+    'Williamson_2019d',
+    'Williamson_2019e',
+    'Williamson_2019f',
+    'Williamson_2019g',
+    'Williamson_2019h',
+    'Wittemeyer_2007',
+    'Wittig_2003',
+    'Yasukawa_1983a',
+    'Yasukawa_1983b',
+    'Yasukawa_1983c',
+    'Yasukawa_1983d',
+    'Yasukawa_1983e',
+    'Yasukawa_1983f',
+    'Yasukawa_1983g',
+    'Yasukawa_1983h',
+    'Zine_2000'
+]
+
+
+files = [('dom.data.RData', name, None) for name in names]
+
+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, "rb")) for fn in fnames]
+
+            g = Graph()
+
+            cols = ["order", "species",
+                    "common_name", "study_site", "captivity", "sex", "age",
+                    "measure", "data_location", "countbinary", "repeat_group",
+                    "groupid", "matrix_edgelist", "edgelist_time_meaning",
+                    "note", "full_citation"]
+
+            for c in cols:
+                g.gp[c] = g.new_gp("string")
+
+            with tempfile.NamedTemporaryFile() as temp:
+                shutil.copyfileobj(fs[0], temp)
+                temp.flush()
+                robjects.r["load"](temp.name)
+
+                for x in robjects.r["dom.data"]:
+                    if str(np.array(x[1][0])[0]) == alt:
+                        edge_list = str(np.array(x[1][13])[0]) == "Edgelist"
+                        a = np.array(x[0])
+                        if edge_list:
+                            g.ep.time = g.new_ep("double")
+                            if len(a) > 3:
+                                g.ep.date = g.new_ep("string")
+                            def edges():
+                                for vals in a.T:
+                                    if len(a) > 3:
+                                        yield vals[1], vals[2], vals[0], vals[3]
+                                    else:
+                                        yield vals[1], vals[2], vals[0]
+                            try:
+                                g.add_edge_list(edges(),
+                                                eprops=[g.ep.time, g.ep.date] if len(a) > 3
+                                                else [g.ep.time])
+                            except ValueError:
+                                g.vp.name = g.add_edge_list(edges(),
+                                                            hashed=True,
+                                                            eprops=[g.ep.time, g.ep.date] if len(a) > 3
+                                                            else [g.ep.time])
+                        else:
+                            g.ep.weight = g.new_ep("int")
+
+                            a[np.isnan(a)] = 0
+                            a[a < 0] = 0
+                            idx = a.nonzero()
+                            ws = a[idx]
+                            g.add_edge_list(np.array([idx[0], idx[1], ws]).T,
+                                            eprops=[g.ep.weight])
+
+                        for i, val in enumerate(x[1]):
+                            if i == 0:
+                                continue
+                            if i > len(cols):
+                                break
+                            g.gp[cols[i-1]] = str(np.array(val)[0])
+
+        yield alt, g