chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
from warnings import warn
|
||||
|
||||
import requests
|
||||
|
||||
from easygraph.convert import dict_to_hypergraph
|
||||
from easygraph.utils.exception import EasyGraphError
|
||||
|
||||
|
||||
__all__ = [
|
||||
"load_dynamic_hypergraph_dataset",
|
||||
]
|
||||
|
||||
dataset_index_url = "https://gitlab.com/easy-graph/easygraph-data/-/raw/main/dataset_index.json?inline=false"
|
||||
|
||||
|
||||
def request_json_from_url(url):
|
||||
try:
|
||||
r = requests.get(url)
|
||||
except requests.ConnectionError:
|
||||
raise EasyGraphError("Connection Error!")
|
||||
|
||||
if r.ok:
|
||||
return r.json()
|
||||
else:
|
||||
raise EasyGraphError(f"Error: HTTP response {r.status_code}")
|
||||
|
||||
|
||||
def _request_from_eg_data(dataset=None, cache=True):
|
||||
"""Request a dataset from eg-data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
dataset : str, optional
|
||||
Dataset name. Valid options are the top-level tags of the
|
||||
index.json file in the xgi-data repository. If None, prints
|
||||
the list of available datasets.
|
||||
cache : bool, optional
|
||||
Whether or not to cache the output
|
||||
|
||||
Returns
|
||||
-------
|
||||
Data
|
||||
The requested data loaded from a json file.
|
||||
|
||||
Raises
|
||||
------
|
||||
EasyGraphError
|
||||
If the HTTP request is not successful or the dataset does not exist.
|
||||
|
||||
|
||||
"""
|
||||
|
||||
index_data = request_json_from_url(dataset_index_url)
|
||||
|
||||
key = dataset.lower()
|
||||
if key not in index_data:
|
||||
print("Valid dataset names:")
|
||||
print(*index_data, sep="\n")
|
||||
raise EasyGraphError("Must choose a valid dataset name!")
|
||||
|
||||
return request_json_from_url(index_data[key]["url"])
|
||||
|
||||
|
||||
def load_dynamic_hypergraph_dataset(
|
||||
dataset=None,
|
||||
local_read=False,
|
||||
path="",
|
||||
max_order=None,
|
||||
):
|
||||
index_datasets = request_json_from_url(dataset_index_url)
|
||||
if dataset is None:
|
||||
print("Please refer to available list")
|
||||
|
||||
print(*index_datasets, sep="\n")
|
||||
return
|
||||
|
||||
if local_read:
|
||||
cfp = os.path.join(path, dataset + ".json")
|
||||
if os.path.exists(cfp):
|
||||
data = json.load(open(cfp, "r"))
|
||||
return dict_to_hypergraph(data, max_order=max_order)
|
||||
else:
|
||||
warn(
|
||||
f"No local copy was found at {cfp}. The data is requested "
|
||||
"from the xgi-data repository instead. To download a local "
|
||||
"copy, use `download_xgi_data`."
|
||||
)
|
||||
data = _request_from_eg_data(dataset)
|
||||
return dict_to_hypergraph(
|
||||
data, max_order=max_order, is_dynamic=index_datasets[dataset]["is_dynamic"]
|
||||
)
|
||||
Reference in New Issue
Block a user