Skip to content
Snippets Groups Projects
__init__.py 2.22 KiB
Newer Older
Tiago Peixoto's avatar
Tiago Peixoto committed
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2024 Tiago de Paula Peixoto <tiago@skewed.de>
Tiago Peixoto's avatar
Tiago Peixoto committed
#
# 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.
Tiago Peixoto's avatar
Tiago Peixoto committed
#
# 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.
Tiago Peixoto's avatar
Tiago Peixoto committed
#
# 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/>.
Tiago Peixoto's avatar
Tiago Peixoto committed

from .. import *

title = "U.S. roads (CA, PA, TX)"
description = """Road networks from three US states (CA, PA, TX), in which edges are stretches of road and vertices are intersections of roads.[^icon]
[^icon]: Description obtained from the [ICON](https://icon.colorado.edu) project."""
Tiago Peixoto's avatar
Tiago Peixoto committed
tags = ['Transportation', 'Roads', 'Unweighted']
url = 'http://snap.stanford.edu/data/roadNet-CA.html'
citation = [('J. Leskovec, K. Lang, A. Dasgupta, M. Mahoney. "Community Structure in Large Networks: Natural Cluster Sizes and the Absence of Large Well-Defined Clusters." Internet Mathematics 6(1), 29-123 (2009). arxiv:0810.1355', 'http://arxiv.org/abs/0810.1355')]
icon_hash = '56a85c8e26855e083a2f78bd'
ustream_license = None
upstream_prefix = 'https://snap.stanford.edu/data'
files = [(f'roadNet-{s}.txt.gz', f'{s}', 'snap') for s in ["CA", "PA", "TX"]]

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 = parse_graph(fs, fmt, directed=False)
        yield alt, g